51同时使用串口与定时器

AjunlintianxiaA 2011-02-10 09:52:24
不知有没有高手用51同时使用串口和定时器,串口设置波特率用占用一个计数器,定时器占用一个计数器,为什么我同时使用时定时器就完全不受控制了(不管THO TLO装什么数频率都不变),感觉这个应用应该很基础啊,在网上搜了半天也没有答案,求高手指教。。。
...全文
925 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzys8000 2011-08-21
  • 打赏
  • 举报
回复
把你的keyscan()函数 改成 串口中断函数即可
Great_Bug 2011-02-21
  • 打赏
  • 举报
回复 1
有没有串口中断服务程序?
你允许了串口中断,如果没有提供相应的ISR,是要出问题的。
AjunlintianxiaA 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 great_bug 的回复:]

串口使用不会影响定时器0的,你的程序可能有问题。
[/Quote]
void Chuankou()
{
ES=1;
SM0=0;
SM1=1;
REN=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}


//定时器初始化

void Timer0_Init()
{
TMOD |= 0x01;
TH0=0xff;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
}


// 定时器中断函数

void Timer0_Int() interrupt 1
{
TH0=0xff;
TL0=0xb0;

if(m1<jd1)
pwm1=1;
else
pwm1=0;

if(m2<jd2)
pwm2=1;
else
pwm2=0;

count++;
count%=200;
m1=count;
m2=count;
}



void keyscan()
{
while(!RI); //RI=1时表示一帧数据接收完毕,并已经装入接收SBUF中,要求CPU取走数据。
P2=SBUF;
RI=0;

}




void main()
{

Chuankou();
Timer0_Init();


while(1)
{
keyscan();
}

}

有没有高手能指教错误。。。
xmxqiyan 2011-02-11
  • 打赏
  • 举报
回复
定时器1用来控制串口,定时器0用来作为普通定时器用,这样同时用定时器用串口没有问题
如果想只用定时器1来同时作定时器和控制串口比较麻烦
lbing7 2011-02-11
  • 打赏
  • 举报
回复
被占用的定时器是不能再被使用的

用定时器直接作为通信的时钟源,这个也是51不太给力的一个地方

现在很多其它的MCU都可以引用多种时钟源作为通信用,而不占用独立的定时器

DISINHUI 2011-02-11
  • 打赏
  • 举报
回复
如果精度可以接受,建议用软串口,自己写代码。
DISINHUI 2011-02-11
  • 打赏
  • 举报
回复
禁止串口,才能按照普通Timer使用。
Great_Bug 2011-02-11
  • 打赏
  • 举报
回复
串口使用不会影响定时器0的,你的程序可能有问题。
AjunlintianxiaA 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xmxqiyan 的回复:]

定时器1用来控制串口,定时器0用来作为普通定时器用,这样同时用定时器用串口没有问题
如果想只用定时器1来同时作定时器和控制串口比较麻烦
[/Quote]
我就是这样用的啊。。。可只能设置TMOD=0x20时串口才能用,但定时器0不受控制,而TMOD=0x21串口就不能用,定时器0正常。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧