找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手求助,前辈们帮忙解答一下

[复制链接]
跳转到指定楼层
楼主
ID:107879 发表于 2016-3-11 13:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正在做一个单片机接收蓝牙信号,控制LED灯开关,亮暗的设计。产生PWM波用的是定时器0,用串口中断接收蓝牙信号。这两个中断会不会冲突。
程序是这样的,我就只能写到这了,不知道哪还有问题。亮度分为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;                                 //否则保持之前状态
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:107120 发表于 2016-3-11 13:49 | 只看该作者

回帖奖励 +20

中断不会冲突,只会嵌套,串口中断是最高级的。
回复

使用道具 举报

板凳
ID:107879 发表于 2016-3-11 14:04 | 只看该作者
zhangfan3765 发表于 2016-3-11 13:49
中断不会冲突,只会嵌套,串口中断是最高级的。

我想单片机接收蓝牙信号,通过单片机产生PWM波,改变PWM波占空比,控制LED灯的亮度开关什么的,但程序跑起来没有
回复

使用道具 举报

地板
ID:107120 发表于 2016-3-11 14:33 | 只看该作者
freezrz 发表于 2016-3-11 14:04
我想单片机接收蓝牙信号,通过单片机产生PWM波,改变PWM波占空比,控制LED灯的亮度开关什么的,但程序跑 ...

我给你个建议,你先做个最简单的蓝牙串口测试程序,比如收到字符亮灯显示,好了在加上其他的。补充下,先检查看看硬件联接。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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