找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机串口和定时器冲突了?

[复制链接]
跳转到指定楼层
楼主
ID:370407 发表于 2020-3-7 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大侠们点拨一下 3Q

void Init_Timer0()        
{
TMOD=0x11;
TH0=(65536-1500)/256;
TL0=(65536-1500)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
PT0=1;
}
//---------------------------------------------
//串口初始化函
void UART_init(void)
{
         EA = 1;                                 
         ES = 1;                                    
         TMOD = 0x20;                           
         SCON = 0x50;                                
         TH1 = 0xF3;                                
         TL1 = 0xF3;                                                               
         PCON = 0x80;                                             
         TR1 = 1;                                   
         AUXR = 0x00;         
}

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

使用道具 举报

来自 2#
ID:213173 发表于 2020-3-7 19:33 | 只看该作者
void Init_Timer0(void)        //1500微秒@12.000MHz
{
        AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TL0 = 0x24;                        //设置定时初值
        TH0 = 0xFA;                        //设置定时初值
        TF0 = 0;                        //清除TF0标志
        TR0 = 1;                        //定时器0开始计时
        EA = 1;                                //开总中断
        ET0 = 1;                        //开T0中断
}

void UART_init(void)        //4800bps@12.000MHz
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xF3;                        //设定定时初值
        TH1 = 0xF3;                        //设定定时器重装值
        ET1 = 0;                        //禁止定时器1中断
        TR1 = 1;                        //启动定时器1
//        EA = 1;                                //开总中断
        ES = 1;                                //开串口中断
}
回复

使用道具 举报

板凳
ID:275826 发表于 2020-3-7 18:48 | 只看该作者
你要解决什么问题?
回复

使用道具 举报

地板
ID:342451 发表于 2020-3-7 19:27 | 只看该作者
你同时打开多个中断时  
TMOD |= 0x   
注意一定要加或,否则你配置另一个时候就把之前的改变了
回复

使用道具 举报

5#
ID:6520 发表于 2020-3-7 19:51 | 只看该作者
先来好好学习
回复

使用道具 举报

6#
ID:370407 发表于 2020-3-7 20:14 | 只看该作者
tyrl800 发表于 2020-3-7 18:48
你要解决什么问题?

我要用两个定时器  一个用串口  一个用占空比
回复

使用道具 举报

7#
ID:370407 发表于 2020-3-8 09:41 | 只看该作者
wulin 发表于 2020-3-7 19:33
void Init_Timer0(void)        //1500微秒@12.000MHz
{
        AUXR &= 0x7F;                //定时器时钟12T模式

感谢大侠点拨相助
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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