找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机串口控制定时器0定时时长有问题

[复制链接]
跳转到指定楼层
楼主
芯片STC11F32EX
定时器0作为定时用,通过串口下发定时数据到单片机,实现通过串口实时改变定时器0时长的功能。
发现发一次数据后,串口就不工作了,不能收发数据了。软件仿真调试发现SCON变为0x55。大神们帮忙看看啥原因?


代码片段:

void main()
{
        ENA=1;
        PUL=0;
        DIR=0;                   //初始化电机反转
        Init_Timer();   //初始化定时器
    Init_Uart();   
        while(1)
        {
                Key_Scan();
        }        
}
void Init_Timer()                                 //初始化定时器
{
        TMOD |= 0x01;
    AUXR |= 0x80;                //timer0工作在1T模式
        TH0=(65536-CYCLE)/256;                  //给time0装初值
        TL0=(65536-CYCLE)%256;
        TR0=1;
    IE |= 0x82;
}
void Init_Uart()
{
        EA = 1;        //打开总中断
        ES = 1; //打开串口中断
        SM0 = 0;        SM1 = 1;//串口工作方式1,8位UART波特率可变
        REN = 1;//串口允许接收
        TR1 = 1;//启动定时器1
        TMOD |= 0x20;//定时器1,工作模式2 8位自动重装
        TH1 = 0xfd;
        TL1 = 0xfd;//设置比特率9600
}

void Enter_Timer0() interrupt 1                                //进入定时器中断
{
        TH0=(65536-CYCLE)/256;
        TL0=(65536-CYCLE)%256;
        PUL=~PUL;
}

//串口中断函数
void UART() interrupt 4
{
        if(RI)//判断接收是否完成
        {
                num = SBUF;//读SBUF,读出串口接收到的数据
                RI = 0;//软件清零接收标志位        
                SBUF = num;//写SBUF,把要发送的数据送给发送缓存器
        if(num <= 3 & num >=0)
            CYCLE=SPEED_LIST[num];
        }
        if(TI)//判断是否发送完成
                TI = 0;//清零发送完成标志位        
}

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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