永发信息网

如何使AT89C52单片机的两个定时器同时工作

答案:2  悬赏:10  手机版
解决时间 2021-02-24 13:03
  • 提问者网友:抽煙菂渘情少年
  • 2021-02-23 21:42
如何使AT89C52单片机的两个定时器同时工作
最佳答案
  • 五星知识达人网友:轻熟杀无赦
  • 2021-02-23 21:54
统一设定TMOD寄存器,如TMOD=0x11,其余中断允许 启动 定时器初值都可以独立控制
如果两个都 用中断的话,注意让其中时间错开,或设定不同的优先级
如果两个定时器定时时间都 很短的话,很可能会冲突,但ms级定时一般没问题
全部回答
  • 1楼网友:不想翻身的咸鱼
  • 2021-02-23 23:00
#include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar temp,aa,bai,shi,ge; sbit dula=p2^6; sbit wela=p2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display(uchar bai,uchar shi,uchar ge); void delay(uint z); void init(); void main() { init();//初始化子程序 while(1) { if(aa==20) { aa=0; temp++; if(temp==100) { temp=0; } bai=temp/100; shi=temp%100/10; ge=temp%10; } display(bai,shi,ge); } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar bai,uchar shi,uchar ge) { dula=1; p0=table[bai]; dula=0; p0=0xff; wela=1; p0=0xfe; wela=0; delay(1); dula=1; p0=table[shi]; dula=0; p0=0xff; wela=1; p0=0xfd; wela=0; delay(1); dula=1; p0=table[ge]; dula=0; p0=0xff; wela=1; p0=0xfb; wela=0; delay(1); } void init() { wela=0; dula=0; temp=0; tmod=0x01; th0=(65536-50000)/256; tl0=(65536-50000)%256; ea=1; et0=1; tr0=1; } void timer0() interrupt 1 { th0=(65536-50000)/256; tl0=(65536-50000)%256; aa++; } #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit dula=p2^6; sbit wela=p2^7; sbit d1=p1^0; uchar num,num1;tt; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z); void main() { num=0; tt=0; tmod=0x11;//设置定时器0为工作方式1 th0=(65536-10000)/256; tl0=(65536-10000)%256; th1=(65536-20000)/256; tl1=(65536-20000)%256; // ea=1;//开总中断 et0=1;//开定时器0中断 et1=1; tr0=1;//启动定时器0 tr1=1; wela=1;//
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯