单片机程序注释 - 爱问答

(爱问答)

单片机程序注释

ORG 0000H
SJMP MAIN1
MAIN1:  MOV R7,#50
MOV 60H,#51
MOV 61H,#51
MOV R1,#0
MAIN:   MOV R0,#16
 
MOV R2,#0
MOV R3,#9
MOV R4,#0
 
CLR C
LOOP1:  MOV A,R1
MOV DPTR,#DIGIT
MOvc A,@A+DPTR
MOV P3,A
INC R1
 
MOV A,R1
MOV DPTR,#DIGIT
MOvc A,@A+DPTR
MOV P2,A
INC R1
 
JC LOOP3
MOV DPTR,#TAB
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A
MOV P1,#0FFH
INC R2
 
DJNZ R3,LOOP2
SETB C
 
LOOP3:
MOV DPTR,#TAB
MOV A,R4
MOVC A,@A+DPTR
MOV P1,A
MOV P0,#0FFH
INC R4
 
LOOP2:
 
LCALL DELAY312
DJNZ R0,LOOP1
MOV R1,#0
DJNZ R7,MAIN
MOV R7,#1
MOV R1,#32
DJNZ 60H,MAIN
MOV 60H,#1
MOV R1,#64
DJNZ 61H,MAIN
SJMP MAIN1
 
TAB:    DB  7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH,7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
DIGIT:  DB  004H,010H,008H,010H,008H,010H,010H,010H,010H,010H,020H,010H,040H,0A0H,080H,040H
    DB  000H,000H,000H,000H,0FFH,0FEH,004H,000H,004H,000H,004H,000H,007H,0F0H,004H,010H
        DB  001H,000H,07FH,0FCH,003H,080H,005H,040H,009H,020H,031H,018H,0C1H,006H,001H,000H
        DB  008H,020H,008H,020H,0FFH,0FEH,008H,020H,000H,000H,07FH,0FEH,040H,002H,081H,004H
        DB  0FFH,0FEH,001H,000H,001H,000H,07FH,0FCH,002H,080H,004H,040H,018H,030H,0E0H,00EH
        DB  008H,020H,004H,040H,07FH,0FCH,001H,000H,001H,000H,03FH,0F8H,001H,000H,001H,000H
DELAY312:   
    MOV R6,#02H
DL0:
    MOV R5,#0F8H
    DJNZ R5,$
    DJNZ R6,DL0
    NOP
    RET
END

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:ACALLDISPLAY //调用子函数,即DISPLAY标志处的程序段 AJMPLOOP //跳转到LOOP处执行,与上面那条构成循环调用DISPLAY DISPLAY:         MOVR0,#70H //送立即数到R0寄存器             MOV      R3,#0feH   //送立即数到R3寄存器   LD0:  MOV      DPTR,      #4102H //送立即数到DPTR寄存器         MOV      A,         #0FFH //送立即数0FFH到A寄存器       MOVX     @DPTR,     A    //将A中的数0FFH送到以DPTR中的内容所表示的外部地址,即外部4102H地址处。       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,#4102H     //送立即数4102H到DPTR           MOV        A,R3 // 把R3中的内容送到A中       MOVX       @DPTR,A //把A中内容送到外部地址4102H中       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://延时子函数 MOVR7,#02h//送立即数02H到R7中 DELAY1:MOVR6,#0FFH//送立即数0FFH到R6中 DELAY2:DJNZR6,DELAY2 //R6中的数减1后如不为跳转到DELAY2处,本例中即继续执行这句,直到R6中内容为0. DJNZR7,DELAY1 //R7中的内容减一,不为零则跳转到DELAY1处 RET//延时子函数返回 END //程序结束 语言表达不好,解释的难免有点不周到,希望能够帮助LZ。 LZ加油!

下一篇:JSP中文件名的表示方法有哪几种

上一篇:将A表某列数值中代码替换成B表中对应代码的中文

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?