搜索
bottom↓
回复: 15

51单片机串口转红外接收数据异常

[复制链接]

出0入0汤圆

发表于 2014-7-20 21:41:11 | 显示全部楼层 |阅读模式
本帖最后由 优享家 于 2014-7-20 21:47 编辑

芯片采用的是STC15
1、串口转红外发射程序:管脚为P3.1

//波特率为1200bps 22.184MHz 用于红外
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设定定时器1为16位自动重装方式
        TL1 = 0x00;                //设定定时初值
        TH1 = 0xEE;                //设定定时初值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1

//串口发送数据
void SendChar(uchar n)
{
                ES = 0;         //发送时关中断
                CR = 1;         // 38K调制中断       
                       SBUF = ~n;        //采用的NPN型,此处要取反操作
                while (!TI);//发送数据
                TI=0;
                while(P36 == 0);
                CR = 0;         // 38K调制中断
                ES = 1;

}

//38K调制  管脚为P3.6
#define        T38KHZ                                                (uint)(FOSC/(4 * 38000) + 0.5)  //四舍五入
void IR_Modulate_Init(void)
{
        CMOD = 0x02;       //设置PCA时钟源为SYSclk / 2
        CCON = 0;                        //初始化PCA寄存器,PCA寄存器停止、清除CF标记、清除模块中断标志
        CL = 0;                                //复位PCA寄存器
        CH = 0;                                //复位PCA寄存器
        IR_Modulate_Value = T38KHZ;       
        CCAP1L =  IR_Modulate_Value;          //低8位
        CCAP1H =  IR_Modulate_Value >> 8; //高8位
        IR_Modulate_Value += T38KHZ;
        IP=0X80;                //设置为最高优先级
        AUXR1 = 0x10;        //        CCP调整为管脚P3.6,发送38K脉冲
        CCAPM1 = 0X4D;  //
        CR = 0;                               
}

void  PCA_isr() interrupt 7 using 2
{
        CCF1 = 0;
        CCAP1L =  IR_Modulate_Value;          //低8位
        CCAP1H =  IR_Modulate_Value >> 8; //高8位
        IR_Modulate_Value += T38KHZ;
//                SendChar('0');       
}

//串口调制发送的数据:
                SendStr("12345");
                Delay(60000);
                SendChar('1');
2、用红外发送,接收头接收,接收头接收数据用串口转TTL工具直接接收至电脑,采集到如下数据
发送的数据为ASCII 12345  1,但是接收的数据存在多种 且看起来没有规律
发送  31 32 33 34 35 31
         1   2  3   4   5   1
接收(波特率一致)
        21 19 86 63 F3 CC
        31 19 06 1A CD CC
        21 19 86 63 F3 CC
        0C 19 46 63 C3 CC
        21 19 46 63 E3 21
        21 19 86 63 E3 63
        8C C6 46 63 F3 CC
        21 19 46 63 F3 8C
        63 19 46 C3 F3 0C
转成二进制
发送  00110001001100100011001100110100001101010011  0001
接收  00100001000110011000011001100011111100111100  1100
        00110001000110010000011000011010110011011100  1100
        00100001000110011000011001100011111100111100  1100
        00001100000110010100011001100011110000111100  1100
        00100001000110010100011001100011111000110010  0001
        00100001000110011000011001100011111000110110  0011
        10001100110001100100011001100011111100111100  1100
        00100001000110010100011001100011111100111000  1100
        01100011000110010100011011000011111100110000  1100


3、已经排查的问题:
1)、38K调制波形,用示波器测量P3.6调制管脚的波形为26.2us波形是正确的
2)、单片机的串口信息直接用串口转TTL工具接电脑,接收的串口信息是正确的
3)、已经可以正常收发,那硬件电路应该是没有问题的

4、问题是:
1)为何会出现一样的发送信息,为何波特率一致情况下会存在多种接收
2)接收头是否有特殊的频率,我更改了下频率比如38k改为38.4K效果类似
3)是否还有其他问题没有被我考虑到


注:搭建的硬件电路暂时只有一个红外发送二极管

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-7-21 08:37:11 | 显示全部楼层
串口直接红外发送,错码肯定很高~

出0入0汤圆

发表于 2014-7-21 09:07:32 | 显示全部楼层
串口的码,不合适用来做红外的码

出0入0汤圆

 楼主| 发表于 2014-7-21 10:27:16 | 显示全部楼层
孤独飞行 发表于 2014-7-21 08:37
串口直接红外发送,错码肯定很高~

为什么不行呢?在软件上有无一些可以优化的地方
链接是现有的方案
http://item.taobao.com/item.htm? ... =l51n4g92222#detail

出0入0汤圆

 楼主| 发表于 2014-7-21 10:44:37 | 显示全部楼层
zxd08 发表于 2014-7-21 09:07
串口的码,不合适用来做红外的码

为什么不行呢?在软件上有无一些可以优化的地方
链接是现有的方案
http://item.taobao.com/item.htm? ... =l51n4g92222#detail

出0入0汤圆

发表于 2014-7-21 11:03:24 | 显示全部楼层
楼主的发射电路是高电平有效,但是TXD在空闲时为高电平,所以不对。
建议Q4Q5换作8550,与R4交换位置。

出0入0汤圆

发表于 2014-7-21 11:17:00 | 显示全部楼层
给你上个NEC的红外编码做参考

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-7-21 15:30:00 | 显示全部楼层
本帖最后由 优享家 于 2014-7-21 15:33 编辑
lcw_swust 发表于 2014-7-21 11:03
楼主的发射电路是高电平有效,但是TXD在空闲时为高电平,所以不对。
建议Q4Q5换作8550,与R4交换位置。 ...


void SendChar(uchar n)
{
                ES = 0;         //发送时关中断
                CR = 1;         // 38K调制中断        
                       SBUF = ~n;        //采用的NPN型,此处要取反操作
                while (!TI);//发送数据
                TI=0;
                while(P36 == 0);
                CR = 0;         // 38K调制中断
                ES = 1;

}

这个已经取反而且发送完成后也关了调制

出0入0汤圆

 楼主| 发表于 2014-7-21 15:31:29 | 显示全部楼层
孤独飞行 发表于 2014-7-21 11:17
给你上个NEC的红外编码做参考

也就是说用串口通信本身来说存在很多不稳定情况,所以NEC采用时间间隔来区分

出0入0汤圆

 楼主| 发表于 2014-7-21 15:46:34 | 显示全部楼层
孤独飞行 发表于 2014-7-21 11:17
给你上个NEC的红外编码做参考

但这样就不能使用串口来发送数据,串口的bps是定的,无法调整,不然接收和发送就不一致了

出0入0汤圆

发表于 2014-7-21 16:10:32 | 显示全部楼层
优享家 发表于 2014-7-21 15:30
void SendChar(uchar n)
{
                ES = 0;         //发送时关中断

这里取反没用,串口启始位为0,停止位是1,不受SBUF控制。

出0入0汤圆

 楼主| 发表于 2014-7-21 16:35:19 | 显示全部楼层
lcw_swust 发表于 2014-7-21 16:10
这里取反没用,串口启始位为0,停止位是1,不受SBUF控制。

但是我关掉了P36  38K调制
                while(P36 == 0);
                CR = 0;         // 38K调制中断

出0入0汤圆

发表于 2014-7-21 16:59:04 | 显示全部楼层
优享家 发表于 2014-7-21 16:35
但是我关掉了P36  38K调制
                while(P36 == 0);
                CR = 0;         // 38K调 ...


在关调制前,1位起始位+8位数据位+0.5位停止位已经发出去了。
由于起始位是低电平,红外LED不发光,接收端为高电平,接收端不认为这是起始位,
可能后面的数据成了起始位,所以无法保证数据的正确性.

出0入0汤圆

 楼主| 发表于 2014-7-21 21:24:33 | 显示全部楼层
lcw_swust 发表于 2014-7-21 16:59
在关调制前,1位起始位+8位数据位+0.5位停止位已经发出去了。
由于起始位是低电平,红外LED不发光,接收端 ...

非常感谢,按你说的确实解决了问题

出0入0汤圆

发表于 2014-7-22 09:37:46 | 显示全部楼层
优享家 发表于 2014-7-21 10:44
为什么不行呢?在软件上有无一些可以优化的地方
链接是现有的方案
http://item.taobao.com/item.htm?spm= ...

可能是有中转的,把串口码转成红外码发出去,再把红外码转成串口码

出0入0汤圆

 楼主| 发表于 2014-7-22 20:25:38 | 显示全部楼层
zxd08 发表于 2014-7-22 09:37
可能是有中转的,把串口码转成红外码发出去,再把红外码转成串口码

已经解决,见楼上,谢谢各位
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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