OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3311|回复: 2

stm32与51红外通信问题

[复制链接]

6

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-11-9
在线时间
13 小时
发表于 2015-9-14 09:21:27 | 显示全部楼层 |阅读模式
5金钱
我想用51做一个红外发射器,发送信号给MIni stm32处理。现在遇到一点问题,想请教大家。
控制端:PNP+红外LED(低电平发送脉冲)51的引脚低=》红外LED脉冲=》Mini板接收端低
协议:引导码(9ms低+4.5ms高)+地址码(0x00)+地址反码(0xff)+控制码(0x98,模拟原有遥控器“2”的键值152)+控制反码(0x67)
问题:51发射的波形能满足要求,用示波器观察接收端也有脉冲变化,但是不能读出信号,想知道哪里还需要改正呢?
以下是51程序:
#include<STC12C5A60S2.H>   //头文件
#define uchar unsigned char 
#define uint unsigned int 
sbit IR_OUT=P3^1; 
void delay_ms(uint ms) 
{
uint i,j; 
for(i=0;i<120;i++) 
{  
for(j=0;j<ms;j++);


//T1 13us产生一次中断 用于产生38K载波 
//T0 方式1 16位 用于定时 
void Init_Timer(void) 

TMOD=0x21; //T0 mode 1 T1 mode 2
TH1=256-(1000*12/38.0/12)/2+0.5;
//特殊 
TL1=TH1;
ET1=1;
EA=1; 
} //发送引导码 发送方:9ms高电平 4.5ms低电平 
void Send_Start_Bit(void) //TR1的值=发送的电平 

//9ms 1 
TH0=(65536-17600)/256; 
TL0=(65536-17600)%256;
TR0=1; 
TR1=0; 
while(!TF0); 
TR1=0; 
TF0=0; 
TR0=0; 
IR_OUT=1;
 
//4.5ms 0 
TH0=(65536-9200)/256;
TL0=(65536-9200)%256; 
TR0=1; 
TR1=1; 
while(!TF0); 
TR1=0; 
TF0=0; 
TR0=0; 
IR_OUT=1; 

//发送0 
void Send_Bit_0(void) 

//0.565ms 1 
TH0=(65536-968)/256; 
TL0=(65536-968)%256; 
TR0=1; 
TR1=0; 
while(!TF0); 
TR1=0; 
TF0=0; 
TR0=0; 
IR_OUT=1; 
//0.565ms 0 
TH0=(65536-968)/256;
TL0=(65536-968)%256; 
TR0=1; 
TR1=1; 
while(!TF0); 
TR1=0; 
TF0=0; 
TR0=0; 
IR_OUT=1; 

//发送1 
void Send_Bit_1(void) 

//0.565ms 1 
TH0=(65536-968)/256;
TL0=(65536-968)%256; 
TR0=1; 
TR1=0; 
while(!TF0); 
TR1=0; 
TF0=0; 
TR0=0; 
IR_OUT=1; 
//1.685ms 0 
TH0=(65536-2904)/256; 
TL0=(65536-2904)%256; 
TR0=1; 
TR1=1; 
while(!TF0); 
TR1=0;
TF0=0; 
TR0=0; 
IR_OUT=1;
}
void Send_over(void)//发送一个结束码,因为最后一个位只有遇到下降沿才能读取(发射端的上升沿) 
{ //0.500ms 1 
//小于0.5ms 接收端很难识别到 
TH0=(65536-800)/256;
TL0=(65536-800)%256; 
TR0=1; 
TR1=0; 
while(!TF0); 
TR1=0; 
TF0=0; 
TR0=0; 
IR_OUT=1; 
//0.500ms 0 
TH0=(65536-800)/256;
TL0=(65536-800)%256; 
TR0=1; 
TR1=1; 
while(!TF0); 
TR1=0; 
TF0=0; 
TR0=0; 
IR_OUT=1;

//发送一字节 8位 
void Send_Char() 

unsigned char i,j1,j2,j3,j4; 
j1=0x00;
j2=0xff; 
j3=0x98; 
j4=0x67;
Send_Bit_0();//给9ms产生一个下降沿 
Send_Start_Bit();
//Send_Bit_0();//发射引导吗 
for(i=0;i<8;i++) 
{
if(j1&0x01) 
Send_Bit_1(); 
else 
Send_Bit_0(); 
j1>>=1;//先发射低位 

for(i=0;i<8;i++) 

if(j2&0x01) 
Send_Bit_1(); 
else  
Send_Bit_0(); 
j2>>=1;//先发射低位 

for(i=0;i<8;i++) 

if(j3&0x01)  
Send_Bit_1(); 
else 
Send_Bit_0(); 
j3>>=1;//先发射低位 

for(i=0;i<8;i++) 

if(j4&0x01) 
Send_Bit_1(); 
else  
Send_Bit_0(); 
j4>>=1;//先发射低位 

Send_over(); //结束符,给最后一位产生一个下降沿

void T1_ISR(void) interrupt 3 

IR_OUT=!IR_OUT; 

void main(void) 
{
Init_Timer(); 
while(1) 
{
Send_Char(); 
delay_ms(500); 

}
仿真波形:


stm32的程序是V3.5库函数的红外遥控器程序

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-9-14 23:06:08 | 显示全部楼层
回复

使用道具 举报

6

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2014-11-9
在线时间
13 小时
 楼主| 发表于 2015-9-15 08:48:47 | 显示全部楼层
回复【2楼】lycreturn:
---------------------------------
谢谢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 16:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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