⑴ 單片機c語言中switch語句的用法
count=0; 是清零,去掉換成三顆LED上電清零復位沒看明白```
⑵ 單片機中IF語句的使用
1、if...else
語句
除了要在括弧里條件滿足時執行相應的語句外,在不滿足該條件的時候,也要執行一些另外的語句,這時候就用到了
if...else
語句,它的基本語法形式是:
if
(條件表達式){
語句
1;
}else{
語句
2;
}
2、if...esle
語句
if...esle
語句是一個二選一的語句,或者執行
if
分支後的語句,或者執行
else
分支後的語句。還有一種多選一的用法就是
if...else
if
語句。他的基本語法格式是:
if
(條件表達式
1){語句
1;}
else
if
(條件表達式
2)
{語句
2;}
else
if
(條件表達式
3)
{語句
3;}
...
...
else{語句
n;}
他的執行過程是:依次判斷條件表達式的值,當出現某個值為「真」時,則執行相對應的語句,然後跳出整個
if
的語句塊,執行「語句
n」後面的程序;如果所有的表達式都為「假」,則執行
else
分支的「語句
n」後,再執行「語句
n」後邊的程序。
if
語句在
c
語言編程中使用頻率很高,用法也不復雜,所以必須要熟練掌握。
⑶ 單片機判斷語句有哪些
條件判斷語句:if語句、switch語句、condition ? exp1 : exp2(問號表達式)
循環語句:for語句、while語句、do...while
跳轉語句:continue、break、goto
開關語句:switch語句
⑷ 單片機語句if((P2IN&BIT5) < 1) 是什麼意思
推測是msp430單片機C語言程序,這個句子的意思就是P2IN與BIT5邏輯與運算,這兩個變數的定義查看頭文件就可以了。網頁鏈接
⑸ 單片機語句分析詳解。
#include <reg52.h> //頭文件包含
#define SYSCLK 12000000 //宏定義:用SYSCLK代表12000000這個數字
#define c_tmr1 -(SYSCLK/12.0)/1000*50//宏定義:用//c_tmr1
//-(SYSCLK/12.0)/1000*50
//這個語句
#define TIMES_50MS 10 //宏定義:用TIMES_50MS代表10
float data FREQ; //變數聲明:浮點型變數FREQ
unsigned char data TMR0_COUNTER;// 變數聲明:無符號字元型變數TMR0_COUNTER
unsigned char data TMR1_COUNTER;// 變數聲明: 無符號字元型變數TMR1_COUNTER
bit START_EN; //位變數聲明:
unsigned int data tmr1; //變數聲明: 無符號整形變數tmr1
void start(void); //函數聲明
void main(void) // 主函數體
{
TMOD|=0x15;//設置TMOD寄存器為:16位定時器模式+16位計數器模式
ET0=1;//打開計數器0
ET1=1;//打開定時器1
tmr1=c_tmr1;//給tmr1賦初值
START_EN=1;/ 位變數=1(應該是用作標志位置1)
while(1)//大循環
{
if(START_EN) //如果標志位為1
{
START_EN=0;//先清除標志位
start();//然後運行這個函數程序
}
}
}
void start(void)//函數體
{
TMR0_COUNTER=0;//變數賦初值
TMR1_COUNTER=TIMES_50MS;// 變數賦初值=10
TH0=0; //計算器0的高8位清零
TL0=0; //計算器0的低8位清零
TH1=tmr1>>8; //定時器1的高8位賦值(宏定義計算好麻煩)
TR1=tmr1; //定時器1的低8位賦值(應該是TL1= tmr1)
TR0=1; //打開定時器0
TR1=1; //打開計數器1
TF0=0; //TF0是由硬體自動設置沒有必要可以去掉
TF1=0; //TF1是由硬體自動設置沒有必要可以去掉
EA=1; 打開總中斷開關
}
void tmr0_ISR(void)interrupt 1//計數器0中斷服務函數(16位計數器)
{
TMR0_COUNTER++;// TMR0_COUNTER變數自動++(0~255)
}
void tmr1_ISR(void)interrupt 3//定時器1中斷服務函數(16位定時器)
{
unsigned int data i;
if(--TMR1_COUNTER==0)//如果變數自減==0(本來賦值為10)
{
TR0=0;//關計數器0
TR1=0;//關定時器1
EA=0;//關總中斷(我一般不用這句)
FREQ=(TMR0_COUNTER*65536+TH0+256+TL0)*20;
//計算FREQ(搞不懂這裡面計算他干什麼)
FREQ=FREQ/TIMES_50MS;
//計算FREQ(搞不懂這裡面計算他干什麼)
START_EN=1;//標志位置1
}
Else//否則
{
TR1=0; //關定時器1
i=tmr1+TL1+16;//以下3句設置定時器1初值
TL1=i;
TH1=i>>8;
TR1=1;//開定時器1
}
}
結語:這個程序其實很簡單,卻寫的如此復雜,並不是作者水平高,而是不願意正在的教人家而已,強烈比賽他!!!
⑹ 單片機C語言,問題一:while(語句){語句}與while(語句);語句 是什麼區別,程序是
首先問題一:while(語句){語句}中小括弧中的語句是判斷真假,如果為真,則執行大括弧中的語句,如果為假,則不執行下面的語句。while(語句);中的語句也是一個判斷,當小括弧中的語句表達式值不為0時,就一直判斷,直到裡面的表達式值為0時結束判斷,去執行下一步的程序;
對於問題二:
while(!k1);
語句1;
while(!k2);
語句2;
對於這個程序段,只要是沒有把它放在一個循環裡面,也就是說讓這個程序順序執行一次就不再去執行這個段,就能實現你想要的功能。因為這幾個語句是順序執行的,所以在執行語句2之前,必須得經過語句1,語句2是不能在語句1之前執行的。同時也實現你需要的K1、K2不為0則檢測,為0則不再檢測,繼續執行下面語句的要求。使用的是你詢問的問題一中第二種循環方式。
⑺ XRL單片機匯編語句啥意思
為解決某些特定的問題代碼中必須嵌入匯編語言以代替C語言完成的單片機的編程,匯編語言對於程序調試是不可或缺的。它包括:算術操作類指令,布爾變數操作類指令,邏輯操作數指令,控制轉移類指令。
邏輯異或指令,即相對應的二進制位不同該位異或後的結果是1,相同則為0。
XRL A,#data;累加器A中的容容和立即數執行邏輯異或操作。結果存放在累加器A中,如A中的內容為10010101B,data為10110110B,則運算的結果為00100011。
(7)語句單片機擴展閱讀:
對於程序調試匯編語言更是不可或缺。
直接使用匯編指令編寫單片機程序,對硬體的控制更加直接,可以直接操作物理地址,寄存器,埠等;其它更高級的語言(如:C語言)對硬體的控制是依賴於類庫來實現的。並且,對於一些對程序大小和運行速度有非常嚴苛要求的項目而言,都必須使用匯編指令。
C語言只是為了方便編寫,與機器打交道的其實都是2進製得代碼,匯編語言就是這些代碼好記憶的名稱和規則,只是比C語言難理解些。
⑻ 單片機如何寫絕對值語句
單片機如何寫絕對值語如下說明。
C語言abs()函數用於求整數的絕對值。fabs()函數用於求雙精度浮點數的絕對值。abs() 數調用添加頭文件math.h或者stdlib.h,fabs()函數調用添加頭文件math.h。
1,#include<stdio.h>。
2,#include<math.h>。
3,int main()。
4,{ int a = -3, b。
5,float c=-5.2, d,e。 //為變數賦初值。
6,b = abs(a)。 //求a的絕對值。
7,d = abs(c)。 //求b的絕對值。
8,e=fabs(c-a)。
9,printf("%d %d ", c, d)。
10,return 0}。
當前的單片機種類很多,但是51是最基礎的,因此單片機的學習最好也是從51開始,不僅容易上手,而且相當實用。然而51單片機畢竟過於基礎,後來的很多單片機在功能上都有很大的擴展,因此按照我們實驗室多數人的路線接下來大多數人會學習AVR單片機, AVR單片機在功能上較51有很大提升,集成了AD,快速PWM等很多實用的功能,而且和很多大型的單片機在功能上有很多類似之處,因此如果以後還想掌握其他單片機AVR無疑是一個很好的跳板。現在因收購的原因可以學微芯的單片機。
學習單片機最終要的是當然是練,我所說的學習跟課堂上的單片機學習不同,我以前也看過一些單片機教材,有些教材講的是單片機的工作原理和內部結構,這些東西對於我們暫時並不需要,等以後開課的時候在學習好了。現在要學習的是暫時拋開內部結構原理不談,如何能用單片機寫一些簡單的小程序,是從實用性的角度出發,先實踐後理論的學習方法,最主要是培養興趣。
⑼ 單片機的while(1)語句
你第二種理解大致是對的,第一種因試情況而定
我所理解的單片機中的while(1)大致用途:
while(1);
意義:這是一個死循環,代碼不再向下執行。
用途:
1. 一般在調試代碼時,為了檢測一部分代碼是否OK,防止後面的代碼干擾執行結果,會在觀測點加上while(1);
2. 有些代碼檢測到運行錯誤時,會拋出錯誤(列印、設置錯誤碼),然後進入while(1);
3. 機器需要復位時,停止喂看門狗,進入while(1); 迫使看門狗超時,產生硬體復位
while( 1 ) { 代碼 }
意義:這里將會重復執行{}中的代碼
用途:
1. 單片機在不使用操作系統時,主程序一般都使用這種架構
2. 操作系統中的進程,執行任務時,有些也會使用這種架構
3. {}中的代碼不停地檢測某個條件,當條件符合時,跳出該循環,繼續向下執行
⑽ 單片機中程序每條語句的意思
ORG
000H
;設置程序存儲區初始地址的偽指令
LJMP
MAIN
;跳到main語句,繞過中斷入口
ORG
1000H
;設置程序存儲區初始地址的偽指令
MAIN:
MOV
SP,#60H
;堆棧入口地址
MOV
81H,#50H
;把立即數50H送到數據區81H地址
MOV
R0,#20H
;把立即數20H送到R0
MOV
@R0,#45H
;寄存器間接定址,把45H送到R0存的數據對應的地址
;就是20H這個地址
INC
R0
;R0加一
MOV
@R0,#74H
;寄存器間接定址,把74H送到R0存的數據對應的地址
;就是21H這個地址
MOV
R1,#30H
;把30H送到R1
MOV
@R1,#67H
;寄存器間接定址,把67H送到R1存的數據對應的地址
;就是30H這個地址
INC
R1
;R1加一
MOV
@R1,#28H
;寄存器間接定址,把28H送到R1存的數據對應的地址
;就是31H這個地址
CLR
C
;清除符號位
MOV
R2,#02
;把2送到R2
L2:ACALL
L1
;調子函數L1
DEC
R0
;R0減一
DEC
R1
;R1減一
DJNZ
R2,L2
;如果R2減到0,就執行下一句,否則跳到L2
CLR
A
;累加器清零
MOV
ACC.0,C
;把符號位移到累加器的第零位
NOP
;延時一個周期
MOV
@R0,A
;寄存器間接定址,把A里的數據傳送到R0對應的地址
L3:
SJMP
L3
;死循環
L1:
MOV
A,@R0
;寄存器間接定址,把R0對應的地址
;里的數據傳送到
A
ADDC
A,@R1
;把R1里存放的地址里的數據和A相加,再加進位位。
DA
A
;十進制調整指令
MOV
@R0,A
;寄存器間接定址,把A里的數據傳送到R0對應的地址
RET
;
子程序返回
END
;結束