微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 帮我分析一下程序,谢谢!

帮我分析一下程序,谢谢!

时间:10-02 整理:3721RD 点击:
才开始学汇编语言,不是很懂。大神们帮我分析一下这个程序,能配合流程图讲解最好。谢谢大佬们了。

  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,$               
  233.                         ret       
  234. INT02:            mov p2,#0ffh
  235.                     mov p1,#10100001B               
  236.                     jnb p3.7,$       
  237.                         ret
  238.                        
  239. ;*****************************************


  240.                         END

复制代码


这是一个带数码管显示的交通灯程序,可以结合现实交通灯的运行情况来理解,有定时器,外部中断,红绿灯显示。
以东南西北四个方向来代表四个方向的灯光控制,可以分成功能块来理解程序,这个程序也是分成了功能块来编写的。

可以帮我画一个流程图吗,有流程图更好理解一些。

画流程图也很废精力的,其实你可以试试自己画,这样也更容易理解程序流程

好的,我在研究研究  谢谢了

好的,我在研究研究  谢谢了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top