找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2026|回复: 1
打印 上一主题 下一主题
收起左侧

能不能帮我分析一下这个单片机汇编程序,谢谢

[复制链接]
跳转到指定楼层
楼主
ID:213119 发表于 2017-6-28 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
才开始学汇编语言,不是很懂。大神们帮我分析一下这个程序,能配合流程图讲解最好。谢谢大佬们了。
  1. COUNT                                        EQU 30H                        ;T0中断计数
  2. SNLEDDATA                        EQU 31H                        ;存储南北数码管显示的数据
  3. SNCOLORFLAG                        EQU 32H                ;=1时南北绿灯亮,=2时南北黄灯亮,=3时南北红灯亮
  4. SNLEDDATAINIT        EQU 33H                        ;存储南北各颜色灯的初始时间
  5. EWLEDDATA                        EQU 34H                        ;存储东西数码管显示的数据
  6. EWCOLORFLAG                        EQU 35H                ;=1时东西红灯亮,=2时东西绿灯亮,=3时东西黄灯亮
  7. EWLEDDATAINIT        EQU 36H                        ;存储东西各颜色灯的初始时间
  8.                         org 0000h
  9.                         lJMP MAIN
  10.                         org 0003h
  11.                         lJMP INT00
  12.                         org 000Bh
  13.                         lJMP T00
  14.                         org 0100h
  15. ;主函数***************************************                                
  16. MAIN:            MOV SP,#60H
  17.                         MOV TMOD,#01H
  18.                         MOV TH0,#0eCH
  19.                         MOV TL0,#078H
  20.                         MOV COUNT,#00H        
  21.                         SETB TR0                                                                                    ;开定时器0
  22.                         SETB ET0                                                                                        ;允许定时器0中断
  23.                         SETB EX0                                                                                        ;允许外部0中断                                                                                    
  24.                         SETB EA                                                                                                ;开总中断
  25.                         MOV SNLEDDATAINIT,#15
  26.                         MOV EWLEDDATAINIT,#18
  27.                         MOV SNLEDDATA,SNLEDDATAINIT
  28.                         MOV EWLEDDATA,EWLEDDATAINIT        
  29.                         MOV P2,#0feH                        
  30.                         MOV SNCOLORFLAG,#01        
  31.                         MOV EWCOLORFLAG,#01                                                                                                      
  32. ;初始化结束***********************************
  33. START:               
  34.                         MOV A,COUNT
  35.                         CJNE A,#200,NOT1S        ;没到1秒跳转
  36.                         MOV COUNT,#00                        ;1秒时间到                        
  37.                         DEC SNLEDDATA
  38.                         MOV A,SNLEDDATA
  39.                         JNZ        checkewleddata
  40.                         MOV SNLEDDATA,SNLEDDATAINIT
  41.                         INC SNCOLORFLAG
  42.                         MOV A,SNCOLORFLAG
  43.                         CJNE A,#04,checkewleddata
  44.                         MOV SNCOLORFLAG,#01
  45. checkewleddata:
  46.                         DEC EWLEDDATA                                                
  47.                         MOV A,EWLEDDATA
  48.                         JNZ        NOT1S
  49.                         MOV EWLEDDATA,EWLEDDATAINIT
  50.                         INC EWCOLORFLAG
  51.                         MOV A,EWCOLORFLAG
  52.                         CJNE A,#04,NOT1S
  53.                         MOV EWCOLORFLAG,#01                        
  54. NOT1S:                        
  55.                         LCALL snCOLORCHECK
  56.                         LCALL ewCOLORCHECK
  57.                         LCALL DISPLAY        
  58.                         SJMP START
  59. ;****************************************
  60. ;南北红绿黄灯控制**************************
  61. snCOLORCHECK:
  62.                         PUSH ACC
  63.                         PUSH B
  64.                         PUSH PSW                        
  65. sngreen:
  66.                         MOV A,SNCOLORFLAG
  67.                         CJNE A,#01,snYELLOW
  68.                         MOV SNLEDDATAINIT,#03                                        ;设置南北黄灯闪烁时间
  69.                         CLR P1.2
  70.                         CLR P1.1
  71.                         SETB P1.0                                        ;南北绿灯亮                                                                                
  72.                         SETB P1.7
  73.                         CLR  P1.6
  74.                         JMP snCOLORCHECKOUT
  75. snYELLOW:
  76.                         MOV A,SNCOLORFLAG
  77.                         CJNE A,#02,snred
  78.                         MOV SNLEDDATAINIT,#18                                        ;设置南北红灯亮时间
  79.                         MOV A,COUNT
  80.                         MOV B,#50
  81.                         DIV AB
  82.                         MOV A,B
  83.                         CJNE A,#00H,snNOTFLASH
  84.                         CPL P1.1                                                                ;南北黄灯闪烁        
  85.                         CLR P1.0
  86.                         CLR P1.2
  87.                                 
  88. snNOTFLASH:
  89.                         JMP snCOLORCHECKOUT
  90. snred:
  91.                         MOV SNLEDDATAINIT,#15                                                ;设置南北绿灯亮时间
  92.                         CLR P1.0
  93.                         CLR P1.1
  94.                         SETB P1.2                                            ;南北红灯亮                                                                                       
  95.                         SETB P1.6
  96.                         CLR  P1.7
  97. snCOLORCHECKOUT:
  98.                         POP PSW
  99.                         POP B
  100.                         POP ACC
  101.                         RET
  102. ;******************************************************
  103. ;东西红绿黄灯控制**************************************                        
  104. ewCOLORCHECK:
  105.                         PUSH ACC
  106.                         PUSH B
  107.                         PUSH PSW
  108. ewred:
  109.                         MOV A,ewCOLORFLAG
  110.                         CJNE A,#01,ewyellow
  111.                         MOV ewLEDDATAINIT,#15                                        ;设置东西绿灯亮时间
  112.                         CLR P1.3
  113.                         CLR P1.4
  114.                         SETB P1.5                                                                                        ;东西红灯亮
  115.                         JMP ewCOLORCHECKOUT
  116. ewyellow:
  117.                         MOV A,ewCOLORFLAG
  118.                         CJNE A,#03,ewgreen
  119.                         MOV ewLEDDATAINIT,#18                                        ;设置东西红灯亮时间
  120.                         MOV A,COUNT
  121.                         MOV B,#50
  122.                         DIV AB
  123.                         MOV A,B
  124.                         CJNE A,#00H,ewNOTFLASH
  125.                         CPL P1.4                                                                                        ;东西黄灯闪烁
  126.                         CLR P1.3
  127.                         CLR P1.5

  128. ewNOTFLASH:
  129.                         JMP ewCOLORCHECKOUT
  130. ewgreen:
  131.                         MOV ewLEDDATAINIT,#03                                                ;设置东西黄灯闪烁时间
  132.                         CLR P1.4
  133.                         CLR P1.5
  134.                         SETB P1.3                                                                                        ;东西绿灯亮
  135. ewCOLORCHECKOUT:
  136.                         POP PSW
  137.                         POP B
  138.                         POP ACC
  139.                         RET
  140. ;************************************************************
  141. ;数码管显示**************************************************
  142. DISPLAY:
  143.                         PUSH ACC
  144.                         PUSH PSW
  145.                         PUSH B
  146.                         MOV A,SNLEDDATA
  147.                         MOV B,#10
  148.                         DIV AB
  149.                         MOV R0,B
  150.                         MOV R1,A
  151.                         MOV A,EWLEDDATA
  152.                         MOV B,#10
  153.                         DIV AB
  154.                         MOV R2,B
  155.                         MOV R3,A
  156.                         MOV DPTR,#TABLE
  157.                         MOV A,P2
  158. DISPSNH:
  159.                         CJNE A,#0feH,DISPSNL
  160.                         MOV A,R1
  161.                         MOVC A,@A+DPTR
  162.                         MOV P0,A
  163.                         JMP DISPOUT        
  164. DISPSNL:
  165.                         CJNE A,#0fdH,DISPEWH
  166.                         MOV A,R0
  167.                         MOVC A,@A+DPTR
  168.                         MOV P0,A
  169.                         JMP DISPOUT                        
  170. DISPEWH:
  171.                         CJNE A,#0fbH,DISPEWL
  172.                         MOV A,R3
  173.                         MOVC A,@A+DPTR
  174.                         MOV P0,A
  175.                         JMP DISPOUT
  176. DISPEWL:
  177.                         CJNE A,#0f7H,DISPOUT
  178.                         MOV A,R2
  179.                         MOVC A,@A+DPTR
  180.                         MOV P0,A
  181. DISPOUT:                                                
  182.                         POP B
  183.                         POP PSW
  184.                         POP ACC
  185.                         RET               
  186. ;*****************************************                        
  187. TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
  188.           ;   0   1   2   3   4   5   6   7   8   9
  189. ;T0中断函数*******************************                                
  190. T00:        PUSH ACC
  191.                         PUSH PSW
  192.                         MOV TH0,#0ecH                  
  193.                         MOV TL0,#078H                                       
  194.                         MOV A,P2
  195.                         RL A
  196.                         CJNE A,#11101111B,NOT5                                                
  197.                         MOV A,#0feH                                                                        ;p2.0=0,南北数码管十位亮,p2.1=0,南北数码管个位亮
  198. NOT5:           MOV P2,A                                                                        ;p2.2=0,东西数码管十位亮,p2.3=0,东西数码管个位亮
  199.                         INC COUNT        
  200.                         POP PSW
  201.                         POP ACC
  202.                         RETI

  203. ;外部中断0***********************************
  204. INT00:           push acc
  205.                         push psw
  206.                         mov a,p0
  207.                         push acc
  208.                     mov a,p1
  209.                         push acc
  210.                         mov a,p2
  211.                         push acc
  212. INT10:                jnb  p3.6,INT11
  213.                         jnb  p3.7,INT12
  214.                         SJMP  INT13
  215. INT11:                LCALL  INT01
  216.                         SJMP  INT13
  217. INT12:                LCALL  INT02               
  218. INT13:                mov p1,#0C0h
  219.                         mov p2,#0ffh
  220.                         jnb p3.2,INT10
  221.                         pop acc
  222.                         mov p2,a
  223.                         pop acc
  224.                         mov p1,a
  225.                         pop acc
  226.                         mov p0,a
  227.                         pop psw
  228.                         pop acc
  229.                         reti
  230. INT01:            mov p2,#0ffh
  231.                         mov p1,#01001100B
  232.                         jnb p3.6,[        DISCUZ_CODE_1        ]nbsp;               
  233.                         ret        
  234. INT02:            mov p2,#0ffh
  235.                     mov p1,#10100001B               
  236.                     jnb p3.7,[        DISCUZ_CODE_1        ]nbsp;      
  237.                         ret
  238.                         
  239. ;*****************************************


  240.                         END
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:215675 发表于 2017-6-29 08:42 | 只看该作者
慢慢看书逐条标注吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表