| 注意:访问本站需要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 |