找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2618|回复: 5
打印 上一主题 下一主题
收起左侧

单片机定时器0和串口无法同时使用

[复制链接]
跳转到指定楼层
楼主
ID:452950 发表于 2020-3-12 12:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做一个51单片机设计需要同时用到定时器0和串口通信,串口通信要用到定时器1,所以在初始化时定时器0和定时器1赋值起了冲突,后初始化的有效,前者就不起作用了。请问有什么好的解决办法吗?
void TIM0init(void)//定时器0初始化
{
  TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
  TH0=0x00; //重载值
  TL0=0x00; //初始化值
  ET0=1;    //开中断
  TR0=1;   
}

void UART_Init()//串口初始化/定时器1初始化
{
        SCON= 0x50;               //串口方式1        //REN=1; 允许接收
        PCON=0x00;                //SMOD=0
        TMOD= 0x21;               //定时器1定时方式2
        TH1= 0xFD;                //11.0592MHz  波特率为9600bps
        TL1= 0xFD;                                                                                 
        TR1= 1;                   //启动定时器        
}

void EX0init(void)//中断初始化
{
IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1;   //使能外部中断
EA = 1;    //开总中断
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2020-3-12 14:16 | 只看该作者
TMOD |= 0x02;  TMOD |= 0x20;
回复

使用道具 举报

板凳
ID:94031 发表于 2020-3-12 14:18 | 只看该作者
定时器0初始化 TMOD=0x02;而串口初始化 TMOD= 0x21;  同一寄存器设了两个值,后来的改了前面设置,所以不正常。
回复

使用道具 举报

地板
ID:704545 发表于 2020-3-12 14:37 | 只看该作者
后一个初始化改写了前一个初始化的TMOD值,只有后面初始化的起作用。
回复

使用道具 举报

5#
ID:452950 发表于 2020-3-12 14:55 | 只看该作者
wulin 发表于 2020-3-12 14:16
TMOD |= 0x02;  TMOD |= 0x20;

有道理,多谢支援!
回复

使用道具 举报

6#
ID:687694 发表于 2020-3-12 19:59 | 只看该作者
仔细阅读手册中关于TMOD寄存器的配置位。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表