打印

奇怪的问题 !!!开定时器0

[复制链接]
1755|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
贺信|  楼主 | 2009-10-13 23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ET0=1;      //允许T0中断
TR0  = 1;      //开定时器0中断

这两句到底在编写程序时有啥区别和忌讳呢?
我现在跑个程序
当上面两句都写上其程序就发现乱码(串口发送,但定时器0与发送无关,我的波特率是定时器1设置)!!
只有上面两句随便选一句(注;只能一句)程序才正常发送数据!!!


真是不明白!!

相关帖子

沙发
awmc_m| | 2009-10-13 23:42 | 只看该作者
两个是不同的寄存器,不冲突。tr0是定时器0使能,et0是定时器0中断使能。
只有tr0=1定时器0才开始计时,et0=1时才会在计数完成后产生中断。
你遇到的问题应该还是和串口使用的定时器有关。

使用特权

评论回复
板凳
gooogleman| | 2009-10-14 08:22 | 只看该作者
楼上说的对。

使用特权

评论回复
地板
程序匠人| | 2009-10-14 08:38 | 只看该作者
是那个红外接收程序吗?你不是说串口部分已经搞定了?

使用特权

评论回复
5
ejack| | 2009-10-14 08:57 | 只看该作者
随便选一句,Timer0就是个摆设,当然不会影响你的程序。
从你的注释来看就该打PP,TR0跟“定时器0中断”混为一谈。
开T0中断、开TR0,导致定时器0开始工作,并在溢出后触发中断,跳转到Timer0中断向量地址C:0x000B。而你的程序在那里是什么就天晓得了……

使用特权

评论回复
6
贺信|  楼主 | 2009-10-14 09:46 | 只看该作者
是那个红外接收程序吗?你不是说串口部分已经搞定了?
程序匠人 发表于 2009-10-14 08:38


这个是我昨晚无意之中加ET0=1;,后用串口发送单一数据时就出错,不明白之中,但屏蔽了就没有乱码发送!!!     
void InitialTimer0()
{
TMOD = 0x01;  // 定时器0, 1工作模式1, 16位定时方式

TH1  = 0xfe;  //定时500uS
TL1  = 0x0c;
//TCON = 0x01;
EA   = 1;
//ET0=1;     
TR0  = 1;   //开定时器0中断
}

使用特权

评论回复
7
5880527| | 2009-10-14 10:49 | 只看该作者
TR0是让汽车发动机转动起来,ET0是离合器,输出动力

使用特权

评论回复
8
贺信|  楼主 | 2009-10-14 15:03 | 只看该作者
本帖最后由 贺信 于 2009-10-14 15:08 编辑

谢谢大家!这个定时器设置已明白

使用特权

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

本版积分规则

66

主题

305

帖子

0

粉丝