新手求助,前辈们

2019-03-24 17:43发布

正在做一个单片机接收蓝牙信号,控制LED灯开关,亮暗的设计。产生PWM波用的是定时器0,用串口中断接收蓝牙信号。这两个中断会不会冲突

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
utf
2019-03-24 23:10
ou513 发表于 2016-3-11 11:53
当然不会啦

程序是这样的,我就只能写到这了,不知道哪还有问题。亮度分为50级,蓝牙模块传输数据位8 位,停止位1 位,无校验位
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit PWM=P1^0;   //P10口输出PWM波
uchar tmp;
uint scale;
void init();
void init_USART();
uint TQ(uchar n);
void main()
{
        tmp=0x32;
        init();
        init_USART();
        PWM=1;
        while(1)
        {
                  scale=TQ(tmp);
        }
}
void init()
{
        TMOD=0X02;
        TH0=0xa4; //定时初值设置为100us
        TL0=0xa4;
        EA=1;
        ET0=1;
        TR0=1;
}
void init_USART() //串口初始化
{
        SCON=0x50; //设置串口通信数据位为8位
        TMOD=0x20; //设置定时器1
        TH1=0xFD;  //设置波特率为9600
        TL1=0xFD;
        TR1=1;
        EA=1;
        ES=1;
}
void timer0() interrupt 1        //定时器0产生PWM波,周期5ms
{
        static uint t;

        if(t==50)
        {
                t=0;
                PWM=1;
        }
        if(t==scale)
        {
                PWM=0;
        }
        t++;       
}
void USART() interrupt 4
{
        if(RI)
        {
                RI=0;
                ES=0;
                tmp=SBUF;
                ES=1;
        }
}
unsigned int TQ(uchar n)//将字符转换成数字
{
        uint date,shu;
        if(n==0x4F)                 //如果接收字符为'O',开灯
                return 50;
        else if(n==0x43)          //如果接收字符为'C',关灯
                return 0;
        else if(n>=0x00 && n<=0x32)                //如果接收的字符在指定的范围内
                {
                        date=n/10;
                        shu=n%10;
                        shu=date*10+shu;
                        return shu;
                }
        else return scale;                                 //否则保持之前状态
}

一周热门 更多>