標(biāo)題:
能不能幫我分析一下這個(gè)單片機(jī)匯編程序,謝謝
[打印本頁]
作者:
Elvis
時(shí)間:
2017-6-28 22:06
標(biāo)題:
能不能幫我分析一下這個(gè)單片機(jī)匯編程序,謝謝
才開始學(xué)匯編語言,不是很懂。大神們幫我分析一下這個(gè)程序,能配合流程圖講解最好。謝謝大佬們了。
COUNT EQU 30H ;T0中斷計(jì)數(shù)
SNLEDDATA EQU 31H ;存儲(chǔ)南北數(shù)碼管顯示的數(shù)據(jù)
SNCOLORFLAG EQU 32H ;=1時(shí)南北綠燈亮,=2時(shí)南北黃燈亮,=3時(shí)南北紅燈亮
SNLEDDATAINIT EQU 33H ;存儲(chǔ)南北各顏色燈的初始時(shí)間
EWLEDDATA EQU 34H ;存儲(chǔ)東西數(shù)碼管顯示的數(shù)據(jù)
EWCOLORFLAG EQU 35H ;=1時(shí)東西紅燈亮,=2時(shí)東西綠燈亮,=3時(shí)東西黃燈亮
EWLEDDATAINIT EQU 36H ;存儲(chǔ)東西各顏色燈的初始時(shí)間
org 0000h
lJMP MAIN
org 0003h
lJMP INT00
org 000Bh
lJMP T00
org 0100h
;主函數(shù)***************************************
MAIN: MOV SP,#60H
MOV TMOD,#01H
MOV TH0,#0eCH
MOV TL0,#078H
MOV COUNT,#00H
SETB TR0 ;開定時(shí)器0
SETB ET0 ;允許定時(shí)器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
;初始化結(jié)束***********************************
START:
MOV A,COUNT
CJNE A,#200,NOT1S ;沒到1秒跳轉(zhuǎn)
MOV COUNT,#00 ;1秒時(shí)間到
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 ;設(shè)置南北黃燈閃爍時(shí)間
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 ;設(shè)置南北紅燈亮?xí)r間
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 ;設(shè)置南北綠燈亮?xí)r間
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 ;設(shè)置東西綠燈亮?xí)r間
CLR P1.3
CLR P1.4
SETB P1.5 ;東西紅燈亮
JMP ewCOLORCHECKOUT
ewyellow:
MOV A,ewCOLORFLAG
CJNE A,#03,ewgreen
MOV ewLEDDATAINIT,#18 ;設(shè)置東西紅燈亮?xí)r間
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 ;設(shè)置東西黃燈閃爍時(shí)間
CLR P1.4
CLR P1.5
SETB P1.3 ;東西綠燈亮
ewCOLORCHECKOUT:
POP PSW
POP B
POP ACC
RET
;************************************************************
;數(shù)碼管顯示**************************************************
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中斷函數(shù)*******************************
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,南北數(shù)碼管十位亮,p2.1=0,南北數(shù)碼管個(gè)位亮
NOT5: MOV P2,A ;p2.2=0,東西數(shù)碼管十位亮,p2.3=0,東西數(shù)碼管個(gè)位亮
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
復(fù)制代碼
作者:
dfmc110
時(shí)間:
2017-6-29 08:42
慢慢看書逐條標(biāo)注吧
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1