ÓÃAT89S51µ¥Æ¬»úµÄ¶¨Ê±/¼ÆÊýÆ÷T0²úÉúÒ»ÃëµÄ¶¨Ê±Ê±¼ä£¬×÷ΪÃë¼ÆÊýʱ¼ä£¬µ±Ò»Ãë²úÉúʱ£¬Ãë¼ÆÊý¼Ó1£¬Ãë¼ÆÊýµ½60ʱ£¬×Ô¶¯´Ó0¿ªÊ¼¡£Ó²¼þµç·ÈçÏÂͼËùʾ 2£® µç·ÔÀíͼ
ͼ4.15.1
3£® ϵͳ°åÉÏÓ²¼þÁ¬Ïß
<1£® °Ñ¡°µ¥Æ¬»úϵͳ¡±ÇøÓòÖеÄP0.0/AD0£P0.7/AD7¶Ë¿ÚÓÃ8оÅÅÏßÁ¬½Óµ½¡°ËÄ·¾²Ì¬ÊýÂëÏÔʾ
Ä£¿é¡±ÇøÓòÖеÄÈÎÒ»¸öa£h¶Ë¿ÚÉÏ£»ÒªÇó£ºP0.0/AD0¶ÔÓ¦×Åa£¬P0.1/AD1¶ÔÓ¦×Åb£¬¡¡£¬
P0.7/AD7¶ÔÓ¦×Åh¡£ <2£® °Ñ¡°µ¥Æ¬»úϵͳ¡±ÇøÓòÖеÄP2.0/A8£P2.7/A15¶Ë¿ÚÓÃ8оÅÅÏßÁ¬½Óµ½¡°ËÄ·¾²Ì¬ÊýÂëÏÔʾģ
¿é¡±ÇøÓòÖеÄÈÎÒ»¸öa£h¶Ë¿ÚÉÏ£»ÒªÇó£ºP2.0/A8¶ÔÓ¦×Åa£¬P2.1/A9¶ÔÓ¦×Åb£¬¡¡£¬
P2.7/A15¶ÔÓ¦×Åh¡£ 4£® ³ÌÐòÉè¼ÆÄÚÈÝ
AT89S51µ¥Æ¬»úµÄÄÚ²¿16λ¶¨Ê±/¼ÆÊýÆ÷ÊÇÒ»¸ö¿É±à³Ì¶¨Ê±/¼ÆÊýÆ÷£¬Ëü¼È¿ÉÒÔ¹¤×÷ÔÚ13λ¶¨Ê±·½Ê½£¬Ò²¿ÉÒÔ¹¤×÷ÔÚ16λ¶¨Ê±·½Ê½ºÍ8λ¶¨Ê±·½Ê½¡£Ö»ÒªÍ¨¹ýÉèÖÃÌØÊ⹦ÄܼĴæÆ÷TMOD£¬¼´¿ÉÍê³É¡£¶¨Ê±/¼ÆÊýÆ÷ºÎʱ¹¤×÷Ò²ÊÇͨ¹ýÈí¼þÀ´É趨TCONÌØÊ⹦ÄܼĴæÆ÷À´Íê³ÉµÄ¡£ ÏÖÔÚÎÒÃÇÑ¡Ôñ16λ¶¨Ê±¹¤×÷·½Ê½£¬¶ÔÓÚT0À´Ëµ£¬×î´ó¶¨Ê±Ò²Ö»ÓÐ65536us£¬¼´65.536ms£¬ÎÞ·¨´ïµ½ÎÒÃÇËùÐèÒªµÄ1ÃëµÄ¶¨Ê±£¬Òò´Ë£¬ÎÒÃDZØÐëͨ¹ýÈí¼þÀ´´¦ÀíÕâ¸öÎÊÌ⣬¼ÙÉèÎÒÃÇÈ¡T0µÄ×î´ó¶¨Ê±Îª50ms£¬¼´Òª¶¨Ê±1ÃëÐèÒª¾¹ý20´ÎµÄ50msµÄ¶¨Ê±¡£¶ÔÓÚÕâ20´ÎÎÒÃǾͿÉÒÔ²ÉÓÃÈí¼þµÄ·½·¨À´Í³¼ÆÁË¡£ Òò´Ë£¬ÎÒÃÇÉ趨TMOD£½00000001B£¬¼´TMOD£½01H
ÏÂÃæÎÒÃÇÒª¸øT0¶¨Ê±/¼ÆÊýÆ÷µÄTH0£¬TL0×°ÈëÔ¤ÖóõÖµ£¬Í¨¹ýÏÂÃæµÄ¹«Ê½¿ÉÒÔ¼ÆËã³ö TH0£½<216£50000£© / 256 TL0£½<216£50000£© MOD 256
µ±T0ÔÚ¹¤×÷µÄʱºò£¬ÎÒÃÇÈçºÎµÃÖª50msµÄ¶¨Ê±Ê±¼äÒѵ½£¬Õâ»ØÎÒÃÇͨ¹ý¼ì²âTCONÌØÊ⹦ÄܼĴæÆ÷ÖеÄTF0±ê־룬Èç¹ûTF0£½1±íʾ¶¨Ê±Ê±¼äÒѵ½¡£ 5£® ³ÌÐò¿òͼ
ͼ4.15.2
6£® »ã±àÔ´³ÌÐò<²éѯ·¨£© SECOND EQU 30H TCOUNT EQU 31H ORG 00H
START: MOV SECOND,#00H MOV TCOUNT,#00H MOV TMOD,#01H
MOV TH0,#(65536-50000> / 256 MOV TL0,#(65536-50000> MOD 256 SETB TR0
DISP: 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
WAIT: JNB TF0,WAIT CLR TF0
MOV TH0,#(65536-50000> / 256 MOV TL0,#(65536-50000> MOD 256 INC TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT MOV TCOUNT,#00H INC SECOND MOV A,SECOND CJNE A,#60,NEX MOV SECOND,#00H NEX: LJMP DISP NEXT: LJMP WAIT
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END
7£® 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¡£ tcount=0¡£ second=0¡£
P0=dispcode[second/10]¡£ P2=dispcode[second]¡£ while(1> {
if(TF0==1> {
tcount++¡£ if(tcount==20> {
tcount=0¡£ second++¡£ if(second==60> {
second=0¡£ }
P0=dispcode[second/10]¡£ P2=dispcode[second]¡£ }
TF0=0¡£
TH0=(65536-50000>/256¡£ TL0=(65536-50000>%6¡£ } } }
1£® »ã±àÔ´³ÌÐò<ÖжϷ¨£© SECOND EQU 30H TCOUNT EQU 31H ORG 00H LJMP START ORG 0BH LJMP INT0X
START: MOV SECOND,#00H 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
MOV TCOUNT,#00H MOV TMOD,#01H
MOV TH0,#(65536-50000> / 256 MOV TL0,#(65536-50000> MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $ INT0X:
MOV TH0,#(65536-50000> / 256 MOV TL0,#(65536-50000> MOD 256 INC TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT MOV TCOUNT,#00H INC SECOND MOV A,SECOND