| 注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! • 打开购物车 • 查看留言 • 付款方式 • 联系我们 | 
![]()  | 
| 首页 | 电子入门 | 学单片机 | 免费资源 | 下载中心 | 商品列表 | 象棋在线 | 在线绘图 | 加盟五一 | 加入收藏 | 设为首页 | 
|   选择分类:当前分类——学单片机    相关联或者相类似的文章:    19.            “叮咚”门铃(618) 汉字的动态编码与显示方案(616) 初识PIC单片机 (610) 功能齐全的单片机音乐程序(608) 22. 电子琴(606) 基于 PCF8563 时钟芯片的万年历制作(605) 5. 广告灯(利用取表方式)(600) 用单片机制作测速仪 (598) 四个DS1820温度读取C源程序 (598) ★无线电遥控七路开关解码程序(595) 15. 定时计数器T0作定时应用技术(一)(591) 13. 动态数码显示技术(591) 步进电机、步进电机驱动器常见问题解答 (587) ★六位数显电子钟加24路输出(587) MCS-51单片机实用子程序库(96年版)(586) 8*8LED点阵显示实验(585) 用VB进行串口实时数据采集(585) 32. 电子密码锁设计 (583) 设计巧妙的数显抢答器 (582) [转载]绝对经典奉献!5.1音响遥控解码程序!(581) 首页 前页 后页 尾页  本站推荐:        |    15.            定时计数器T0作定时应用技术(一) 1. 实验任务  
用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秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取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 <AT89X51.H>  
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)%256;  
  TR0=1;  
  tcount=0;  
  second=0;  
  P0=dispcode[second/10];  
  P2=dispcode[second%10];  
  while(1)  
    {  
      if(TF0==1)  
        {  
          tcount++;  
          if(tcount==20)  
            {  
              tcount=0;  
              second++;  
              if(second==60)  
                {  
                  second=0;  
                }  
              P0=dispcode[second/10];  
              P2=dispcode[second%10];               
            }  
          TF0=0;  
          TH0=(65536-50000)/256;  
          TL0=(65536-50000)%256;  
        }  
    }  
}  
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  
                                     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 <AT89X51.H>  
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)%256;  
  TR0=1;  
  ET0=1;  
  EA=1;  
  tcount=0;  
  second=0;  
  P0=dispcode[second/10];  
  P2=dispcode[second%10];  
  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%10];               
    }  
  TH0=(65536-50000)/256;  
  TL0=(65536-50000)%256;  
}  1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。  2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉!  |   
| 
 本站协议 |
 版权信息 | 
 关于我们 | 
 本站地图 | 
 营业执照 | 
 发票说明 | 
 付款方式 | 
 联系方式
 深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102 E-mail:51dz$163.com($改为@);Tel:(0755)27947428 工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389  |