请各位高手帮忙看看了,弄了很久都没弄明白为什么计时一开始准的,一个闹钟时间到后调用音乐子程序,然后回来计时就边快了。。(计时用T1,音乐子程序用T0,在T1中断服务程序里调用了音乐子程序)<br /><br />ORG 0000H<br />AJMP MAIN<br />ORG 000BH<br />LJMP INTT0<br />ORG 001BH<br />LJMP INTT1<br />ORG 0100H<br />MAIN:<br />MOV 30H,#00H<br />MOV 31H,#00H<br />MOV 32H,#00H<br />MOV 33H,#14H<br />SETB PT0<br />CLR PT1<br /><br />MOV TMOD,#10H<br />MOV TL1,#00H<br />MOV TH1,#4CH<br />SETB ET1<br />SETB TR1<br />SETB EA<br />AJMP $<br /><br />INTT1:<br />MOV SP,#60H<br />PUSH PSW<br />PUSH ACC<br />MOV TH1,#4CH ;晶振11.0592M,50ms定时<br />MOV TL1,#00H<br />DJNZ 33H,RETURN <br />MOV 33H,#14H ;20次计满为1s<br />INC 32H<br />MOV A,32H<br />CJNE A,#60,RETURN ;判断秒钟到60s<br />MOV 32H,#00H ;到60s清零<br />MOV A,31H<br />ADD A,#1<br />DA A<br />MOV 31H,A<br /><br />TABTIME: ;一分钟扫一次定时表,比较计时到否 <br />PUSH PSW<br />PUSH ACC<br />COMPARE:<br />MOV 20H,#00H<br />COMP1:MOV A,20H<br />MOV DPTR,#TABLE<br />MOVC A,@A+DPTR<br />CJNE A,30H,COMP2<br />INC 20H<br />MOV A,20H<br />MOVC A,@A+DPTR<br />CJNE A,31H,COMP3<br />LCALL MUSIC<br />AJMP COMP3<br />COMP2:INC 20H<br />COMP3:INC 20H<br />COMP4:MOV A,20H<br />CJNE A,#06H,COMP1<br />RETURN1:<br />POP ACC<br />POP PSW<br /><br /><br />CJNE A,#60H,RETURN<br />MOV 31H,#00H<br />MOV A,30H<br />ADD A,#1<br />DA A<br />MOV 30H,A<br />CJNE A,#24H,RETURN<br />MOV 30H,#00H<br />RETURN:<br />POP ACC<br />POP PSW<br />RETI<br /><br />MUSIC: ;音乐子程序,用T0中断<br />PUSH PSW<br />PUSH ACC<br />PUSH DPL<br />PUSH DPH<br /><br />MAIN1:<br />MOV TMOD,#01H<br />SETB ET0<br />SETB EA<br />SETB TR0<br />START0:<br />SETB P1.0<br />MOV 40H,#00H<br />NEXT:<br />MOV A,40H<br />MOV DPTR,#TABLEM<br />MOVC A,@A+DPTR<br />MOV R0,A<br />JZ ENDD<br />ANL A,#0FH<br />MOV R7,A<br />MOV A,R0<br />SWAP A<br />ANL A,#0FH<br />JNZ SING<br />CLR TR0<br />LJMP D1<br />SING:<br />DEC A<br />MOV 52H,A<br />RL A<br />MOV DPTR,#TABLEF<br />MOVC A,@A+DPTR<br />MOV TH0,A<br />MOV 51H,A<br />MOV A,52H<br />RL A<br />INC A<br />MOVC A,@A+DPTR<br />MOV TL0,A<br />MOV 50H,A<br />SETB TR0<br />D1:<br />LCALL DELAY<br />INC 40H<br />LJMP NEXT<br />ENDD:<br />CLR TR0<br />LJMP EXIT <br /><br />INTT0:<br />PUSH PSW<br />PUSH ACC<br />MOV TL0,50H<br />MOV TH0,51H<br />CPL P1.0<br />POP ACC<br />POP PSW<br />RETI<br /><br />DELAY:MOV R1,#100<br />DELAY1:MOV R2,#30 <br />DELAY2:MOV R3,#29<br />DELAY3:DJNZ R3,DELAY3 <br />DJNZ R2,DELAY2<br />DJNZ R1,DELAY1<br />DJNZ R7,DELAY<br />RET<br /><br />EXIT:<br />POP DPH<br />POP DPL<br />POP ACC<br />POP PSW<br />RET<br /><br />TABLE:DW 0002H,0003H,0015H<br />TABLEM:<br />DB 44H,54H,64H,44H<br />DB 44H,54H,64H,44H<br />DB 64H,74H,88H<br />DB 64H,74H,88H<br />DB 82H,92H,82H,72H,64H,44H<br />DB 82H,92H,82H,72H,64H,44H<br />DB 44H,84H,48H<br />DB 44H,14H,48H<br />DB 00H<br />TABLEF:<br />DW 64260,64400,64524,64580,64684,64777,64820,64898<br />DW 64968,65030,65058,65110,65157,65178,65217<br /><br />END |