CJNE A,#60,NEX MOV SECOND,#00H NEX: MOV A,SECOND MOV B,#10 DIV AB
MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B
MOVC A,@A+DPTR MOV P2,A NEXT: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END
2£® CÓïÑÔÔ´³ÌÐò<ÖжϷ¨£© #include
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00}¡£ unsigned char second¡£ unsigned char tcount¡£
void main(void> {
TMOD=0x01¡£
TH0=(65536-50000>/256¡£ TL0=(65536-50000>%6¡£ TR0=1¡£
ET0=1¡£ µ±ET0λΪ1ÇÒEAλҲΪ1ʱ£¬¿ª·ÅINT1. (INT1ºÍINT0ΪÍⲿÖжÏ> EA=1¡£ tcount=0¡£ second=0¡£
P0=dispcode[second/10]¡£ P2=dispcode[second]¡£ while(1>¡£ }
void t0(void> interrupt 1 using 0 {
tcount++¡£ if(tcount==20> {
tcount=0¡£ second++¡£ if(second==60> {
second=0¡£ }
P0=dispcode[second/10]¡£ P2=dispcode[second]¡£ }
TH0=(65536-50000>/256¡£ TL0=(65536-50000>%6¡£ } 16£® ¶¨Ê±¼ÆÊýÆ÷T0×÷¶¨Ê±Ó¦Óü¼Êõ<¶þ£©
1£® ʵÑéÈÎÎñ
ÓÃAT89S51µÄ¶¨Ê±/¼ÆÊýÆ÷T0²úÉú2ÃëÖӵĶ¨Ê±£¬Ã¿µ±2Ã붨ʱµ½À´Ê±£¬¸ü»»Ö¸Ê¾µÆÉÁ˸£¬Ã¿¸öָʾÉÁ˸µÄƵÂÊΪ0.2Ã룬Ҳ¾ÍÊÇ˵£¬¿ªÊ¼L1ָʾµÆÒÔ0.2ÃëµÄËÙÂÊÉÁ˸£¬µ±2Ã붨ʱµ½À´Ö®ºó£¬L2¿ªÊ¼ÒÔ0.2ÃëµÄËÙÂÊÉÁ˸£¬Èç´ËÑ»·ÏÂÈ¥¡£0.2ÃëµÄÉÁ˸ËÙÂÊÒ²Óɶ¨Ê±/¼ÆÊýÆ÷T0À´Íê³É¡£ 2£® µç·ÔÀíͼ
ͼ4.16.1 3£® ϵͳ°åÓ²¼þÁ¬Ïß
<1£® °Ñ¡°µ¥Æ¬»úϵͳ¡±ÇøÓòÖеÄP1.0£P1.3Óõ¼ÏßÁ¬½Óµ½¡°°Ë··¢¹â¶þ¼«¹Üָʾģ¿é¡±ÇøÓòÖеÄ
L1£L4ÉÏ 4£® ³ÌÐòÉè¼ÆÄÚÈÝ
<1£® ÒòΪ²ÉÓÃÖжϷ½Ê½À´Íê³É£¬Òò´Ë£¬¶ÔÓÚÖжÏÔ´±ØÐëËüµÄÖжÏÈë¿ÚµØÖ·£¬¶ÔÓÚ¶¨Ê±/¼ÆÊýÆ÷
T0À´Ëµ£¬ÖжÏÈë¿ÚµØÖ·Îª000BH£¬Òò´ËÔÚÖжÏÈë¿ÚµØ·½¼ÓÈë³¤Ìø×ªÖ¸ÁîÀ´Ö´ÐÐÖжϷþÎñ
³ÌÐò¡£Êéд»ã±àÔ´³ÌÐò¸ñʽÈçÏÂËùʾ£º
ORG 00H LJMP START
ORG 0BH ¡£¶¨Ê±/¼ÆÊýÆ÷T0ÖжÏÈë¿ÚµØÖ·
LJMP INT_T0
START: NOP ¡£Ö÷³ÌÐò¿ªÊ¼
. .
INT_T0: PUSH ACC ¡£¶¨Ê±/¼ÆÊýÆ÷T0ÖжϷþÎñ³ÌÐò
PUSH PSW
. . POP PSW POP ACC
RETI ¡£ÖжϷþÎñ³ÌÐò·µ»Ø
END <2£® ¶¨Ê±2Ã룬²ÉÓÃ16λ¶¨Ê±50ms£¬¹²¶¨Ê±40´Î²Å¿É´ïµ½2Ã룬ÿ50ms²úÉúÒ»Öжϣ¬¶¨Ê±
µÄ40´ÎÊýÔÚÖжϷþÎñ³ÌÐòÖÐÍê³É£¬Í¬Ñù0.2ÃëµÄ¶¨Ê±£¬ÐèÒª4´Î²Å¿É´ïµ½0.2Ãë¡£¶ÔÓÚ
ÖжϳÌÐò£¬ÔÚÖ÷³ÌÐòÖÐÒª¶ÔÖжϿªÖжϡ£ <3£® ÒòΪÿ´Î2Ã붨ʱµ½Ê±£¬L1£L4Òª½»ÌæÉÁ˸¡£²ÉÓÃIDÀ´ºÅÀ´Ê¶±ð¡£µ±ID£½0ʱ£¬L1ÔÚÉÁ
˸£¬µ±ID£½1ʱ£¬L2ÔÚÉÁ˸£»µ±ID£½2ʱ£¬L3ÔÚÉÁ˸£»µ±ID£½3ʱ£¬L4ÔÚÉÁ˸ 5£® ³ÌÐò¿òͼ
T0ÖжϷþÎñ³ÌÐò¿òͼ
Ö÷³ÌÐò¿òͼ
ͼ4.16.2
6£® »ã±àÔ´³ÌÐò
6£® »ã±àÔ´³ÌÐò TCOUNT2S EQU 30H TCNT02S EQU 31H ID EQU 32H ORG 00H LJMP START ORG 0BH LJMP INT_T0
START: MOV TCOUNT2S,#00H MOV TCNT02S,#00H MOV ID,#00H MOV TMOD,#01H
MOV TH0,#(65536-50000> / 256 MOV TL0,#(65536-50000> MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $
INT_T0: MOV TH0,#(65536-50000> / 256 MOV TL0,#(65536-50000> MOD 256 INC TCOUNT2S MOV A,TCOUNT2S CJNE A,#40,NEXT MOV TCOUNT2S,#00H INC ID MOV A,ID