打印

求助,怎么让两个定时器产生方波一段时间后同步(附上ch...

[复制链接]
1378|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
mamihlapinatapa|  楼主 | 2018-1-12 22:32 | 只看该作者
#include <reg52.h>
#define uint unsigned int
#define uchar unsigend char
sbit led0=P2^1;
sbit led1=P2^2;
void delay(uint);

void time0()
{
        TMOD|=0x01;  //选择定时器0,工作方式1
        TH0=0xfc;         //赋初值,定时1ms
        TL0=0x18;
        ET0=1;                 //打开定时器0中断允许
        EA=1;                 //打开总中断
        TR0=1;                 //打开定时器0
}
void time1()
{
        TMOD|=0x10;          //选择定时器1,工作方式1
        TH1=0xfc;          //赋初值,定时1ms
        TL1=0x18;
        ET1=1;                  //打开定时器1中断允许
        EA=1;                  //打开总中断
        TR1=1;                  //打开定时器1
}
void  same()
{
        uint i,j;
        delay(500);
        if(i==200&&j==200)
        {
                i=0;
                j=0;
        }
}
void main()
{
        time0();
        time1();
        while(1)
        {
                same();
        }
}
void timer0()interrupt 1
{
        uint i;
        TH0=0xfc;
        TL0=0x18;
        i++;
        if(i==200)
        {
                i=0;
                led0=~led0;
        }
}
void timer1()interrupt 3
{
        uint j;
        TH1=0xfc;
        TL1=0x18;
        j++;
        if(j==500)                //未定
        {
                j=0;
                led1=~led1;
        }
}
void delay(uint a)
{
        uint b,c;
        for(b=a;b>0;b--)
                for(c=110;c>0;c--);
}

使用特权

评论回复
板凳
cjseng| | 2018-1-13 11:06 | 只看该作者
把TR1=1;放在TR0中断里启动,适当调整定时器初值,就可以同步了。

使用特权

评论回复
地板
xch| | 2018-1-13 11:55 | 只看该作者
你这中断函数本身就有问题,产生的时钟自己就抖动,怎么可能令其他timer同步?
TH1=XX
TL1=XX
这时定时中断后timer已经经过不少拍CPU时钟了。抖起来

另外,51cpu 硬件根本就没法让两TIMER同步走。省省精力吧

使用特权

评论回复
5
QuakeGod| | 2018-1-13 18:24 | 只看该作者
同频可以做到,同步就做不到,再说做到也没意义,你用终中断方式,中断程序肯定还是有先有后的。

使用特权

评论回复
6
wh6ic| | 2018-1-14 12:06 | 只看该作者
51这两个定时器的运行允许位 TRx 在同一个SFR里面,可以控制同步启动,定时器重装的补偿用汇编很好写,C做就麻烦的很,可以修改设计,计数值的低8bit设置为0
比如你的 0xFc18 改为 0xFC00,如果能保证中断的响应速度,只重装THx就可以了

使用特权

评论回复
7
wh6ic| | 2018-1-14 12:09 | 只看该作者
你在中断里搞软件延时干嘛?谁教你这样做的??去掉!

使用特权

评论回复
8
wh6ic| | 2018-1-14 12:16 | 只看该作者
硬件输出要同步,可以找找你用的芯片有没有PWM。
这两个定时器只有在8bit自动重装模式有硬件输出

使用特权

评论回复
9
wh6ic| | 2018-1-14 12:29 | 只看该作者
TMD,这个网站页面是个 猪 做的,Lao子现在想修改帖子都找不到位置。  至少有两年不能主动发贴子了, 一堆蠢猪!

使用特权

评论回复
10
619888476| | 2018-1-15 14:04 | 只看该作者
没法实现,换芯片

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝