;以下是一套數字秒表程序,分辨率0.01S ;利用TIM1產生中斷,沒次中斷時間為0.01/8S ;P0口為六個數碼管的A、B、C ~F輸入 ;P2.0~p2.5作位選 ;;;問題??為什么結果顯示一直是000000???? ;為什么中斷后79H到7EH的值改變了而中斷返回后有是0? ;請各位賜教 org 0000h ajmp main org 001bh ajmp zhong org 003fh main: mov sp,60h mov 30h,#08h mov r7,#06h mov r0,#79h loop1: mov @r0,#00h inc r0 djnz r7,loop1 mov tmod,#10h mov th1,#0ch mov tl1,#0dch setb ea setb et1 setb tr1 xian: acall disp ajmp xian
zhong: push psw push acc dec 30h mov a,30h jnz re ;判斷是否滿八次中斷 mov 30h,#08h inc 79h ;滿八次中斷,+0.01S mov a,79h cjne a,#0ah,re ;斷是否滿0.1S mov 79h,#00h inc 7ah ;加0.1S mov a,7ah cjne a,#0ah,re mov 7ah,#00h inc 7bh ;加1S mov a,7bh cjne a,#0ah,re mov 7bh,#00h inc 7ch ;加10S mov a,7ch cjne a,#06h,re mov 7ch,#00h ;到60S inc 7dh ;分上加1 mov a,7dh cjne a,#0ah,re mov 7dh,#00h inc 7eh mov a,7eh cjne a,#06h, re mov 79h,#00h ;到60分,全部顯示0 mov 7ah,#00h mov 7bh,#00h mov 7ch,#00h mov 7dh,#00h mov 7eh,#00h pop acc pop psw reti re: pop acc pop psw mov th1,#0ch mov tl1,#0dch setb tr1 reti
disp: mov r1,#79h mov r0,#0feh mov dptr,#table x: mov a,@r1 movc a,@a+dptr mov p0,a mov p2,r0 acall delay inc r1 mov a,r0 jb acc.5,tuichu rl a mov r0,a ajmp x tuichu: ret TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,71H delay:mov r6,#01h del1: mov r5,#0fh del2: djnz r5,del2 djnz r6,del1 ret end |