下面哪种定时器能实现50.25的计时?
回答
共1条回复-
4 . 程序框图 T0 中断服务程序框图 主程序框图 图16.2 5 . 汇编源程序 TCOUNT2SEQU 30H TCNT02SEQU 31H IDEQU 32H ORG00H LJMPSTART ORG0BH LJMPINT_T0 START: MOVTCOUNT2S,#00H MOVTCNT02S,#00H MOVID,#00H MOVTMOD,#01H MOVTH0,#(65536-50000) / 256 MOVTL0,#(65536-50000) MOD 256 SETBTR0 SETBET0 SETBEA SJMP$ INT_T0: MOV TH0,#(65536-50000) / 256 MOVTL0,#(65536-50000) MOD 256 INCTCOUNT2S MOVA,TCOUNT2S CJNEA,#40,NEXT MOVTCOUNT2S,#00H INCID MOVA,ID CJNEA,#04H,NEXT MOVID,#00H NEXT: INC TCNT02S MOVA,TCNT02S MOVTCNT02S,#00H MOVA,ID CJNEA,#00H,SID1 CPLP1.0 SJMPDONE SID1: CJNE A,#01H,SID2 CPLP1.1 SJMPDONE SID2: CJNE A,#02H,SID3 CPLP1.2 SJMPDONE SID3: CJNE A,#03H,SID4 CPLP1.3 SID4: SJMP DONE DONE: RETI END 6 . C语言源程序 #include<AT89X51.H> unsignedchar tcount2s; unsignedchar tcount02s; unsignedchar ID; /****************************************************************************/ /****************************************************************************/ voidmain(void) { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; while(1); } /****************************************************************************/ /****************************************************************************/ void t0(void) interrupt 1 using 0 { tcount2s++; if(tcount2s==40) { tcount2s=0; ID++; if(ID==4) { ID=0;} } tcount02s++; if(tcount02s==4) { tcount02s=0; switch(ID) { case 0:P1_0=~P1_0;break; case 1:P1_1=~P1_1;break; case 2:P1_2=~P1_2;break; case 3:P1_3=~P1_3;break; } } }

