标题:
能不能帮我分析一下这个单片机汇编程序,谢谢
[打印本页]
作者:
Elvis
时间:
2017-6-28 22:06
标题:
能不能帮我分析一下这个单片机汇编程序,谢谢
才开始学汇编语言,不是很懂。大神们帮我分析一下这个程序,能配合流程图讲解最好。谢谢大佬们了。
COUNT EQU 30H ;T0中断计数
SNLEDDATA EQU 31H ;存储南北数码管显示的数据
SNCOLORFLAG EQU 32H ;=1时南北绿灯亮,=2时南北黄灯亮,=3时南北红灯亮
SNLEDDATAINIT EQU 33H ;存储南北各颜色灯的初始时间
EWLEDDATA EQU 34H ;存储东西数码管显示的数据
EWCOLORFLAG EQU 35H ;=1时东西红灯亮,=2时东西绿灯亮,=3时东西黄灯亮
EWLEDDATAINIT EQU 36H ;存储东西各颜色灯的初始时间
org 0000h
lJMP MAIN
org 0003h
lJMP INT00
org 000Bh
lJMP T00
org 0100h
;主函数***************************************
MAIN: MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#0eCH
MOV TL0,#078H
MOV COUNT,#00H
SETB TR0 ;开定时器0
SETB ET0 ;允许定时器0中断
SETB EX0 ;允许外部0中断
SETB EA ;开总中断
MOV SNLEDDATAINIT,#15
MOV EWLEDDATAINIT,#18
MOV SNLEDDATA,SNLEDDATAINIT
MOV EWLEDDATA,EWLEDDATAINIT
MOV P2,#0feH
MOV SNCOLORFLAG,#01
MOV EWCOLORFLAG,#01
;初始化结束***********************************
START:
MOV A,COUNT
CJNE A,#200,NOT1S ;没到1秒跳转
MOV COUNT,#00 ;1秒时间到
DEC SNLEDDATA
MOV A,SNLEDDATA
JNZ checkewleddata
MOV SNLEDDATA,SNLEDDATAINIT
INC SNCOLORFLAG
MOV A,SNCOLORFLAG
CJNE A,#04,checkewleddata
MOV SNCOLORFLAG,#01
checkewleddata:
DEC EWLEDDATA
MOV A,EWLEDDATA
JNZ NOT1S
MOV EWLEDDATA,EWLEDDATAINIT
INC EWCOLORFLAG
MOV A,EWCOLORFLAG
CJNE A,#04,NOT1S
MOV EWCOLORFLAG,#01
NOT1S:
LCALL snCOLORCHECK
LCALL ewCOLORCHECK
LCALL DISPLAY
SJMP START
;****************************************
;南北红绿黄灯控制**************************
snCOLORCHECK:
PUSH ACC
PUSH B
PUSH PSW
sngreen:
MOV A,SNCOLORFLAG
CJNE A,#01,snYELLOW
MOV SNLEDDATAINIT,#03 ;设置南北黄灯闪烁时间
CLR P1.2
CLR P1.1
SETB P1.0 ;南北绿灯亮
SETB P1.7
CLR P1.6
JMP snCOLORCHECKOUT
snYELLOW:
MOV A,SNCOLORFLAG
CJNE A,#02,snred
MOV SNLEDDATAINIT,#18 ;设置南北红灯亮时间
MOV A,COUNT
MOV B,#50
DIV AB
MOV A,B
CJNE A,#00H,snNOTFLASH
CPL P1.1 ;南北黄灯闪烁
CLR P1.0
CLR P1.2
snNOTFLASH:
JMP snCOLORCHECKOUT
snred:
MOV SNLEDDATAINIT,#15 ;设置南北绿灯亮时间
CLR P1.0
CLR P1.1
SETB P1.2 ;南北红灯亮
SETB P1.6
CLR P1.7
snCOLORCHECKOUT:
POP PSW
POP B
POP ACC
RET
;******************************************************
;东西红绿黄灯控制**************************************
ewCOLORCHECK:
PUSH ACC
PUSH B
PUSH PSW
ewred:
MOV A,ewCOLORFLAG
CJNE A,#01,ewyellow
MOV ewLEDDATAINIT,#15 ;设置东西绿灯亮时间
CLR P1.3
CLR P1.4
SETB P1.5 ;东西红灯亮
JMP ewCOLORCHECKOUT
ewyellow:
MOV A,ewCOLORFLAG
CJNE A,#03,ewgreen
MOV ewLEDDATAINIT,#18 ;设置东西红灯亮时间
MOV A,COUNT
MOV B,#50
DIV AB
MOV A,B
CJNE A,#00H,ewNOTFLASH
CPL P1.4 ;东西黄灯闪烁
CLR P1.3
CLR P1.5
ewNOTFLASH:
JMP ewCOLORCHECKOUT
ewgreen:
MOV ewLEDDATAINIT,#03 ;设置东西黄灯闪烁时间
CLR P1.4
CLR P1.5
SETB P1.3 ;东西绿灯亮
ewCOLORCHECKOUT:
POP PSW
POP B
POP ACC
RET
;************************************************************
;数码管显示**************************************************
DISPLAY:
PUSH ACC
PUSH PSW
PUSH B
MOV A,SNLEDDATA
MOV B,#10
DIV AB
MOV R0,B
MOV R1,A
MOV A,EWLEDDATA
MOV B,#10
DIV AB
MOV R2,B
MOV R3,A
MOV DPTR,#TABLE
MOV A,P2
DISPSNH:
CJNE A,#0feH,DISPSNL
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
JMP DISPOUT
DISPSNL:
CJNE A,#0fdH,DISPEWH
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
JMP DISPOUT
DISPEWH:
CJNE A,#0fbH,DISPEWL
MOV A,R3
MOVC A,@A+DPTR
MOV P0,A
JMP DISPOUT
DISPEWL:
CJNE A,#0f7H,DISPOUT
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A
DISPOUT:
POP B
POP PSW
POP ACC
RET
;*****************************************
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
; 0 1 2 3 4 5 6 7 8 9
;T0中断函数*******************************
T00: PUSH ACC
PUSH PSW
MOV TH0,#0ecH
MOV TL0,#078H
MOV A,P2
RL A
CJNE A,#11101111B,NOT5
MOV A,#0feH ;p2.0=0,南北数码管十位亮,p2.1=0,南北数码管个位亮
NOT5: MOV P2,A ;p2.2=0,东西数码管十位亮,p2.3=0,东西数码管个位亮
INC COUNT
POP PSW
POP ACC
RETI
;外部中断0***********************************
INT00: push acc
push psw
mov a,p0
push acc
mov a,p1
push acc
mov a,p2
push acc
INT10: jnb p3.6,INT11
jnb p3.7,INT12
SJMP INT13
INT11: LCALL INT01
SJMP INT13
INT12: LCALL INT02
INT13: mov p1,#0C0h
mov p2,#0ffh
jnb p3.2,INT10
pop acc
mov p2,a
pop acc
mov p1,a
pop acc
mov p0,a
pop psw
pop acc
reti
INT01: mov p2,#0ffh
mov p1,#01001100B
jnb p3.6,[ DISCUZ_CODE_1 ]nbsp;
ret
INT02: mov p2,#0ffh
mov p1,#10100001B
jnb p3.7,[ DISCUZ_CODE_1 ]nbsp;
ret
;*****************************************
END
复制代码
作者:
dfmc110
时间:
2017-6-29 08:42
慢慢看书逐条标注吧
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1