?? zhongduan.asm
字號:
;通信0502 落紅
;實驗六 中斷實驗(在交通控制的基礎(chǔ)上)(主程序和中斷服務(wù)程序的延時程序獨立)
;2007.08.12
C_addr equ 0000h
C_1 equ C_addr+0031h
C_2 equ C_addr+0032h
C_3 equ C_addr+0032h
org C_addr
ajmp main
org C_addr+0003h ;外部中斷0入口地址
ljmp inser
org C_addr+0060h
main: mov sp,C_addr+0040h ;設(shè)置堆棧指針初始值
setb ea ;CPU開中斷
setb ex0 ;開外部中斷0
setb it0 ;設(shè)置觸發(fā)方式為邊沿觸發(fā)
mov dptr,#1b03h ;寫控制字1000 0000B,方式0,輸出
mov a,#80h
movx @dptr,a
start: lcall red ;初始狀態(tài)1234紅燈全亮,調(diào)用0.5秒延時子程序延時2秒
mov r0,#4
del_0: lcall delay
djnz r0,del_0
light_13: ;13路口通行
mov r0,#0
acall light
light_24: ;24路口通行
inc r0
acall light
ajmp light_13 ; 上兩種狀態(tài)循環(huán)
light: ;紅綠黃燈亮滅控制
light_green: lcall output ; 綠燈亮,調(diào)用0.5秒子程序,延時5S
mov r1,#10
del_green: lcall delay
djnz r1,del_green
light_yellow: mov C_3,r0
mov r1,#8 ; 黃燈閃爍8次,每次亮0.2s,滅0.2s
yellow_again: mov r0,C_3 ;暫存r0的值
inc r0
lcall output;黃燈亮
lcall delay1 ;兩次調(diào)用0.1秒延時程序
inc r0
lcall output ;黃燈滅
lcall delay1
djnz r1,yellow_again
light_red: ;1234紅燈全亮,調(diào)用0.5秒延時子程序,延時0.5秒
lcall red
lcall delay
ret ;一次循環(huán)結(jié)束,
red: mov dptr,#1b01h ;1234紅燈全亮
mov a,#90h
movx @dptr,a
mov dptr,#1b02h
mov a,#24h
movx @dptr,a
ret
output: mov a,r0 ;輸出函數(shù)子程序
mov dptr,#b_tab
movc a,@a+dptr
mov C_1,a ;保存B口輸出變量
mov dptr,#1b01h ;指向B口
movx @dptr,a
mov a,r0
mov dptr,#C_tab
movc a,@a+dptr
mov C_2,a ;保存C口輸出變量
mov dptr,#1b02h ;指向C口
movx @dptr,a
ret
delay: mov r5,#5 ;0.5秒延時子程序
d_00: mov r6,#200
d_01: mov r7,#126
d_02: djnz r7,d_02
djnz r6,d_01
djnz r5,d_00
ret
delay1:mov r5,#2 ;0.2秒延時子程序
d_10: mov r6,#200
d_11: mov r7,#126
d_12: djnz r7,d_12
djnz r6,d_11
djnz r5,d_10
ret
inser: push a ;相關(guān)數(shù)據(jù)壓棧
push psw
push dph
push dpl
lcall red ;1234紅燈全亮
mov r4,#12
d_20: lcall delay ;延時6秒
djnz r4,d_20
mov a,C_1 ;恢復(fù)原顯示狀態(tài)
mov dptr,#1b01h
movx @dptr,a
mov a,C_2
mov dptr,#1b02h
movx @dptr,a
pop dpl
pop dph
pop psw
pop a
setb ex0 ; 外部中斷允標(biāo)志位置位
reti
b_tab: db 0c0h,0a0h,80h,90h,10h,10h,10h,90h
c_tab: db 30h,28h,20h,24h,86h,45h,04h,24h
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -