本帖最后由 优享家 于 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)是否还有其他问题没有被我考虑到
注:搭建的硬件电路暂时只有一个红外发送二极管
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
建议Q4Q5换作8550,与R4交换位置。
一周热门 更多>