導航:首頁 > 操作系統 > 單片機程序注釋

單片機程序注釋

發布時間:2022-12-27 06:02:33

『壹』 單片機程序注釋

ORG 0000H //定義程序開始地址
AJMP MAIN //跳轉到MAIN標志處執行
ORG 30H // 定義MAIN起始地址為0030H
MAIN: MOV SP, #60H //把立即數0x60植入SP
MOV DPTR, #4100H //送立即數4100H到DPTR
MOV A, #0fH //送立即數0fH到A寄存器
MOVX @DPTR, A //將A中的值送到以DPTR中的內容表示的外部地址中,即外部地址4100H中

MOV 70H,#01H
MOV 71H,#02H
MOV 72H,#03H
MOV 73H,#04H
MOV 74H,#05H
MOV 75H,#06H
MOV 76H,#07H
MOV 77H,#08H //以上均是把後面的立即數送到相對應的地址中

LOOP:ACALL DISPLAY //調用子函數,即DISPLAY標志處的程序段
AJMP LOOP //跳轉到LOOP處執行,與上面那條構成循環調用DISPLAY

DISPLAY:
MOV R0,#70H //送立即數到R0寄存器
MOV R3,#0feH //送立即數到R3寄存器

LD0: MOV DPTR, #H //送立即數到DPTR寄存器
MOV A, #0FFH //送立即數0FFH到A寄存器
MOVX @DPTR, A //將A中的數0FFH送到以DPTR中的內容所表示的外部地址,即外部H地址處。

MOV A,@R0 // 將以R0中的內容所表示的地址中的內容送到A中,即地址(70H)中的數01H送到A中
MOV DPTR,#DISTAB //把DISTAB標志所處的地址送到DPTR中
MOVC A,@A+DPTR //查表。@A+DPTR即是取得(A+DPTR)地址中的內容。然後通過MOV指令送到A中。這條指令結合上面兩條,及後面的那個INC R0 指令共同構成遍歷DISTAB所表示的表。達到查表。
MOV DPTR,#4101H
MOVX @DPTR,A //與上面一句結合,達到把A中的內容送到外部地址4101H中。

MOV DPTR,#H //送立即數H到DPTR
MOV A,R3 // 把R3中的內容送到A中
MOVX @DPTR,A //把A中內容送到外部地址H中

ACALL DELAY //調用延時子函數DELAY,即跳到DELAY處執行
INC R0 //R0中的內容自增1
JNB ACC.7,LD1 //如果ACC.7這一位不為1,則跳到LD1標志處執行。
RL A //A中內容左移一位
MOV R3,A //送A中的內容到R3中
AJMP LD0 //跳到LD0標志處
LD1: RET //子函數返回指令

DISTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //定義一個表,相當於C語言中的數組。DB的意思是規定表中每個數佔一個位元組。

DELAY: //延時子函數
MOV R7,#02h //送立即數02H到R7中
DELAY1: MOV R6,#0FFH//送立即數0FFH到R6中
DELAY2: DJNZ R6,DELAY2 //R6中的數減1後如不為跳轉到DELAY2處,本例中即繼續執行這句,直到R6中內容為0.
DJNZ R7,DELAY1 //R7中的內容減一,不為零則跳轉到DELAY1處
RET//延時子函數返回
END //程序結束

語言表達不好,解釋的難免有點不周到,希望能夠幫助LZ。
LZ加油!

『貳』 注釋一下 單片機程序

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //8個數碼管的位選擇信號表
uchar code display[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //1-8的共陰字碼表
sbit wei=P3^7; //P3.7用於控制哪位顯示
sbit rest=P2^7; //P2.7用於復位
void delay(uint z) //延時函數,入口參數Z.具體延時於晶振頻率有關
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
main() //主函數
{
uchar i,temp;
P0=0xff; //P0口全部拉高,置1
delay(10); //延時delay(10)MS
wei=1; //P3.7置1
while(1) //循環掃描P1口按鍵狀態
{
temp=0xfe; //temp存掃描碼
for(i=0;i<8;i++) //循環8次,即掃描8個按鍵
{
if(P1==temp) //如果P1口讀入的狀態等於當前掃描碼
{
delay(10); //延時去抖
if(P1==temp) //再讀P1口比較
{
while(1) //確定按鍵有效,進入循環體
{
if(rest==0) //如果P2.7==0
{
delay(10); //延時去抖
if(rest==0) //確定P2.7腳按鍵按下
{
P0=0xff; //P0口拉高
P3=0; //P3口送0 ,即熄滅所有LED數碼管
while(rest==0); //如果P2.7的按鍵一直按下,則等待
break; //如果P2.7按鍵彈開,則跳出循環體,重新掃描按鍵
}
}
else //如果P2.7==1,即復位鍵沒有按下
{
P0=table[i]; //P0口送出P1口按鍵對應位的位控號
P3=display[i]; //P3口送對應的段碼值,形成顯示
}
}
}
}
temp=(temp<<1)|0x01; //temp左環移,掃描下一按鍵
}
}
}
該程序實現的功能大概是:將P1口按鍵的狀態顯示到對應位的LED管上,比如按下第2個鍵,會在第2個數碼管上顯示2同時按下多個鍵也一樣,按下哪幾個就對應顯示哪幾個鍵的值.按下復位按鍵後,所有數碼管
熄滅.
希望我猜得對,忽忽

『叄』 51單片機C語言程序注釋標注(寫全)

#include<reg51.h>//調用頭文件reg51.h
voidmain()//主函數
{
unsignedchar//無符號字元型
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//定義一個數組LED數碼管解碼用的碼表
while(1)//主循環
{
P2=P2|0x07;//P2口與0x07按位進行或運算
while(P2&0x07==0x07);//如果P2扣低三位為111則原地等待
switch(P2&0x07)//獲取P2低三位值並且據此執行響應的操作
{
0x06:P0=tab[0x0D];break;//P2低三位為06H,數碼管顯示「d」
0x05:P0=tab[0x0E];break;//P2低三位為05H,數碼管顯示「E」
0x03:P0=tab[0x0F];break;//P2低三位為03H,數碼管顯示「F」
}
}
}

『肆』 單片機程序注釋

前面的錯了 是這個
ORG 00H
START: ;程序開始
NOP
MOV R3,#3 ;給r3賦值
LOP2: ;網路標號
MOV R4,#8
MOV R2,#0
LOP1:
MOV P1,#0FFH;p1口置位
MOV DPTR,#TABA;把表格地址給dptr
MOV A,R2;給表格的偏移量
MOVC A,@A+DPTR;取表格
MOV P3,A;取出的數值給p3口
INC R2;表格偏移加1
LCALL DELAY;調用延時
DJNZ R4,LOP1;自減循環1
DJNZ R3,LOP2;自減循環2

MOV R3,#3;給r3重裝值
LOP4:
MOV R4,#8
MOV R2,#7
LOP3:
MOV P1,#0FFH
MOV DPTR,#TABA
MOV A,R2
MOVC A,@A+DPTR
MOV P3,A
DEC R2;r2自減1
LCALL DELAY
DJNZ R4,LOP3
DJNZ R3,LOP4

MOV R3,#3
LOP6: MOV R4,#8
MOV R2,#0
LOP5: MOV P3,#00H
MOV DPTR,#TABB
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
INC R2
LCALL DELAY
DJNZ R4,LOP5
DJNZ R3,LOP6

MOV R3,#3
LOP8:
MOV R4,#8
MOV R2,#7
LOP7:
MOV P3,#00H
MOV DPTR,#TABB
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
DEC R2
LCALL DELAY
DJNZ R4,LOP7
DJNZ R3,LOP8
LJMP START
;延時程序
DELAY: MOV R5,#10
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
;表格
TABA: DB 00H,11H,6AH,4CH,7FH,4CH,0AH,01H
TABB: DB 01H,02H,04H,08H,10H,20H,40H,80H
END
沒標的都和前面的一樣

『伍』 單片機程序語言注釋,每一行的注釋都要

org 00h ;程序從00h開始執行
ljmp start ;跳到start
org 30h ;rom從30h開始
start: mov sp,#60h ;堆棧設置
mov p0,#0ffh ;拉高P0口
jnb p1.0,paoma ;P1.0所接按鍵是否有按下,有按下跳paoma
jnb p1.1,zyc ;P1.1所接按鍵是否有按下,有按下跳zyc
jnb p1.2,zbc ;P1.2所接按鍵是否有按下,有按下跳zbc
jnb p1.3,gdjo ;P1.3所接按鍵是否有按下,有按下跳gdjo
sjmp start ;循環掃描按鍵
paoma: mov p0,#0feh ;1鍵跑馬子程序
restart:mov r7,#7 ;燈的個數
loop: mov a,p0 ;將P0中的#0feh ,
rl a ;不帶進位左移一次
lcall delay ;延時一段時間,用於看到流水的效果
mov p0,a ;再送回P0口顯示
jb p1.0,start ;按鍵抬起就返回START
djnz r7,loop ;八個燈是否亮完
sjmp restart ;按鍵沒有抬起則一直在流水燈模式
ret ;退出
zyc: mov p0,#0feh ;2鍵左右循環
mov a,p0 ;P0送入累加器ACC
restart1:
mov r5,#7 ;燈的個數,下一句同理
mov r4,#7
loop3:
mov a,p0 ;P0的值送入A
jb p1.1,start ;按鍵抬起就返回start,重新掃描按鍵
rl a ;左移一次
lcall delay ;延時一段時間,用於看到流水的效果
mov p0,a ;再送回P0口顯示
djnz r5,loop3 ;是否左流水完成,是則向下執行
loop4:
rr a ;右移一次
lcall delay ;延時一段時間,用於看到流水的效果
mov p0,a ;再送回P0口顯示
djnz r4,loop4 ;是否右流水完成,是則向下執行
sjmp restart1 ;按鍵沒抬起就一直循環
ret ;退出,
zbc: mov p0,#0c3h ;3鍵中間與頭尾交替點亮
loop5: mov a,p0 ;取P0的值送入A
jb p1.2,start ;按鍵是否抬起,抬起就返回START
swap a ;a裡面的內容的高四位與低四位交換
lcall delay ;延時用於看到交替點亮的過程
mov p0,a ;送回P0口顯示
sjmp loop5 ;按鍵沒有抬起則一直循環
ret
gdjo: mov p0,#0f0h ;4鍵高低奇偶交替
mov a,p0 ;相同語句意思同理,見上
swap a ;同理
lcall delay ;同理
mov p0,a ;同理
mov p0,#55h ;間隔點亮
loop6: mov a,p0 ;同理
jb p1.3,start ;同理
rl a ;以下同理
lcall delay
mov p0,a
sjmp loop6
ret
delay: ;延時
mov r6,#200
loop2: mov r7,#250
loop1: nop
nop
djnz r7,loop1
djnz r6,loop2
ret
end

『陸』 單片機程序求注釋

單片機程序求注釋#include <reg52.h> //調用單片機頭文件
#define uchar unsigned char //無符號字元型 宏定義 變數范圍0~255
#define uint unsigned int //無符號整型 宏定義 變數范圍0~65535
#include <intrins.h>// 有了他下面這些關鍵字隨便用
/*_crol_ 字元循環左移
_cror_ 字元循環右移
_irol_ 整數循環左移
_iror_ 整數循環右移
_lrol_ 長整數循環左移
_lror_ 長整數循環右移
_nop_ 空操作8051 NOP 指令

0 1 2 3 4 5 6 7 8 9
uchar code smg_[]={0x28,0xe1,0x32,0xa2,0x54,0xa1,0x21,0xea,0x20,0xa0,
a b c d e f g //數組有code存在ROM沒code保存在內存
0x60,0x25,0x39,0x26,0x31,0x71,0xff}; //數碼管段選定義
uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};//數碼管位選定義
uchar dis_smg[8] = {0};
uchar smg_i = 4; //顯示數碼管的個位數
sbit beep = P2^3; //蜂鳴器IO口定義

bit flag_lj_en; //按鍵連加使能
bit flag_lj_3_en; //按鍵連3次連加後使能 加的數就越大了
uchar key_time,key_value; //用做連加的中間變數
bit key_500ms ;

bit flag_300ms ;
uchar menu_1; //菜單設計的變數
uint t_high = 20; //上限報警值

sbit hx711_dout=P2^7;
sbit hx711_sck=P2^6; //hx711模塊埠選擇

long weight;

unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;

uint temp,qi_weight;
bit chaozhong_flag;
bit leiji_flag;
uchar flag_200ms ;

#define GapValue 437.0

uint temp,qi_weight;
bit chaozhong_flag;
bit leiji_flag;

/***********************1ms延時函數*****************************/
void delay_1ms(uint q)//無符號整形參數q
{
uint i,j; //定義無符號整形變數i和j
for(i=0;i<q;i++) //變數i從0加到q
for(j=0;j<120;j++); //變數j從0加到120
}

/***********************數碼顯示函數*****************************/
void display()
{
static uchar i; //申請無符號字元變數i
i++;
if(i >= smg_i)//如果大於等於smg i向下執行
i = 0; 變數i清0
P1 = 0xff; //消隱 單片機p1口發送11111111
P3 = smg_we[i]; //位選 數組i送入單片機P3口
P1 = dis_smg[i]; //段選 數組i的內容送到p1口
}

/*************定時器0初始化程序***************/
void t

『柒』 單片機幾段程序 注釋

1: dly1 equ 41h //讓dly1是41h的別名,相當於c語言中得#typedef dly1 41h
2: dly2 equ 42h //同上
3: dly3 equ 43h //

4: org 0000h //把程序的起始地址放在0000h的地址上 ,你也可以把它放在別的位置上
5: mov p2,#0ffh //給P2口賦予ffh
6: mov dptr,#sm //把標號sm所在的地址,即17行的地址賦給指針dptr

//從7行道16行是個2成嵌套循環。這是個死循環,一般都是這樣的。

7: loop:mov r0,#11 //loop是這行代碼所在行的別名。給ro寄存器賦值11
8 clr a //把a寄存器清零,即a=0
9: lop: push acc //lop是這行的別名。把a壓入堆棧,就是要保護a的值,acc其實就是a
10: lcall delay //調用delay這個別名所在的行,即18行
11: movc a,@a+dptr //注意是movc.把dptr加a這個地址上得數賦給a,
12: mov p2,a //把a的值賦給p2口
13: pop acc //從堆棧彈出a,也就是恢復a的值
14: inc a //a=a+1,自增1
15: djnz r0,lop //這是個判斷轉移句子。如果ro不等於0,則跳轉到lop(即9行),同時ro=ro-1
16: sjmp loop //無條件跳轉,直接跳轉到loop(即7行)

17: sm: db 9Fh,25h,0Dh,99h,49h,41h,1Fh,01h,19h,71h,03h;

//從18行道24行,是個延時函數,通過三成循環實現

18: delay:mov dly1,#30 //把30放到41h的地址上。(dly1 equ 41h )
19: dlop2:mov dly2,#100 //同理
20: dlop3:mov dly3,#100 //
21: djnz dly3,$ //如果41h不等於0,則什麼都不執行,然後41h=41h-1
22: djnz dly2,dlop3 //如果42h不等於0,則跳轉到dlop3這行,也即是20行
23: djnz dly1,dlop2 //同上。
24: ret //返回調用delay這個函數的的下一行,也即是11行

26:end //結束

// 現在一般都不用匯編寫單片機的代碼了,一般都是用c語言,用keii開發平台,這個也就是考試用的吧
//所學未深,若有出錯之處,敬請賜教

[email protected]

『捌』 急求這個單片機程序的注釋

• #define uint unsigned int //定義無符號整型變數
• #define uchar unsigned char //定義無符號字元型變數
• bit flag=0,ftser=1,frser=1; //定義位
• void delay(uint z) //延時子程序(Z來控制延時時間)具體時間要看外面的晶振
• {
• uint x,y; //定義變數
• for(x=0;x<z;x++) //for循環
• for(y=0;y<248;y++);
• }
• void serial() interrupt 4 using 2 //串口中斷子程序 入口4
{
if(RI==1) //串口接收中斷標志位 RI=1發生中斷
{
RI=0; //手動清除中斷標志
frser=0; //接收標志位置0
}
else
{
TI=0; //串口發送中斷標志位 T1=1發生中斷
ftser=0; //發送標志位置0
}
}
void main(void) //主程序
{
uchar i=0,j=0,temp=0xff;
TMOD=0X20; //串口中斷初始化 設置為8位自動重裝定時器
TH1=0XFd; //高8位時間常數
TL1=0XFd; //低8位時間常數
SCON=0X50; //串列口工作方式2 允許接收
PCON=0X00; //波特率不倍增
ES=1; //串列中斷使能
EA=1; // 打開中斷使能
TR1=1; //打開定時器

while(1)
{
while(frser==1); //判斷接收是否完成
frser=1; //接收標志位置1
i=SBUF; //串口數據變數 i

P0=255-i; //將數據轉反碼後由P0口輸出
delay(200); //調用延時
SBUF=i; //串口發送數據(和接收的一樣)
ftser=1; //發送標志位置1
while(ftser==1); //等待串口發送完成
}

裡面可以加一些數據判斷的,這個小程序玩起來沒什麼意思,不是很直觀!
總體看也就是利用串口助手發一個數據,然後由單片機回傳一個相同的數據並在p0口輸出其反碼

『玖』 單片機中有哪兩種注釋,符號是什麼

為單片機編程時,用匯編語言寫程序時,用分號 ; 表示注釋符號。
用C語言寫程序時,有兩種注釋符號,//為本行注釋符
/*
注釋內容
*/
為一段多行注釋符。

『拾』 單片機串口程序注釋

ORG 0000H
LJMP START
ORG 0100H
START: MOV TMOD,#01H ;置T0為工作方式1
MOV TH0,#3CH ;置T0定時初值50ms
MOV TL0,#0B0H
CLR TF0
SETB TR0 ;啟動T0
CLR A

閱讀全文

與單片機程序注釋相關的資料

熱點內容
鋁膜構造柱要設置加密區嗎 瀏覽:342
考駕照怎麼找伺服器 瀏覽:882
阿里雲伺服器如何更換地區 瀏覽:970
手機app調音器怎麼調古箏 瀏覽:501
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:17
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:274
冒險島什麼伺服器好玩 瀏覽:541
如何在伺服器上做性能測試 瀏覽:793
命令序列錯 瀏覽:259
javaif的條件表達式 瀏覽:576
手機app上傳的照片怎麼找 瀏覽:531
雲伺服器面臨哪些威脅 瀏覽:748
c語言各種編譯特點 瀏覽:177
路由器多種加密方法 瀏覽:604
程序員阻止電腦自動彈出定位 瀏覽:169