照磁动力论坛里的原理图,自制了一个红外线遥控逻辑分析器,感觉还蛮不错的,上传上来跟大家分享一下。玩遥控实验,这下可以很容易就可以进行解码了。
原文出处:http://www.cdle.net/bbs/dispbbs.asp?boardid=11&id=2796&page=1&star=1
此电路是用AT89C2051+MAX232制成。在这里,特别感谢软件、硬件的原作者。
我是用DXP 2004制的版,可能有的朋友没装,我把原理图、PCB版图转成了PDF文件。
整个工程文件
ourdev_496299.rar(文件大小:409K) (原文件名:红外线遥控逻辑分析器.rar)
图1
(原文件名:PA260022.jpg)
图2
(原文件名:PA260014.jpg)
图3
(原文件名:PA260016.jpg)
红外数据采集中
(原文件名:data_1.jpg)
脉宽测量
(原文件名:data_2.jpg)
-----------------------------------------------------------------------
用串口通信115200bps的那个 采集速度很快,如果条件允许建议用那个,
如果你不习惯反码,想让 波形 和 发射端电平 一致,可以在红外接收头加一个NPN三极管进行反相就OK。
/***********************************************************************************
主控: STC 1T@11.0592MHz
说明: 此程序也适合12T MCU
红外线编码分析器(57600bps型)说明:
①串口通信:57600bps。
②每40.148us采集一次电位。
③每采够8次发送一次数据。
④共采集19.8秒时长数据。
***********************************************************************************/
#define uchar unsigned char
#define uint unsigned int
#include <STC12C5410AD.H>
sbit IR = P2^0; //采样引脚
sbit LED = P2^2; //指示灯
bit b_n= 0;
uchar i,n,dat;
uint t = 0;
void JS_Init() //接收初始化
{
t = 0;
i = 0;
TR0 = 0;
TF0 = 0;
TL0=TH0 = (256-37);
LED = 0; //指示灯开
}
void main()
{ //57600bps@11.0592MHz
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xbf; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD = 0x22; //设定定时器0、1为8位自动重装方式
TL1 = 0xFF; //设定定时初值
TH1 = 0xFF; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
JS_Init();
EA = 1;
ET0 = 1;
while(1)
{
if(IR==0)
{
TR0 = 1; //启动定时器0,采样开始
LED = 1;
}
if(b_n)
{
b_n=0;
if(++t>2400)JS_Init(); //约24秒(10ms * 2400),即每次采集完,过4秒(24S-19.8S)后重新工作
}
}
}
void TT0() interrupt 1 using 1
{
if(IR)dat |= 0x01;
if(++i==8) //每采集8次发送一次
{
TI=0;
SBUF=dat;
i=0;
}
dat <<= 1;
if(++n==0)b_n=1; //约10ms置1一次
}
/***********************************************************************************
主控: STC 1T@11.0592MHz
说明:此程序只适合 1T STC
红外线编码分析器(115200bps型)说明:
①串口通信:115200bps。
②每20.074us采集一次电位。
③每采够8次发送一次数据。
④共采集12.6秒时长数据。
***********************************************************************************/
#define uchar unsigned char
#define uint unsigned int
#include <STC12C5410AD.H>
sbit IR = P2^0; //采样引脚
sbit LED = P2^2; //指示灯
bit b_n= 0;
uchar i,n,dat;
uint t = 0;
void JS_Init() //接收初始化
{
t = 0;
i = 0;
TR0 = 0;
TF0 = 0;
TL0=TH0 = (256-222);
LED = 0; //指示灯开
}
void main()
{ //115200bps@11.0592MHz
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0xC0; //定时器0、1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD = 0x22; //设定定时器0、1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
JS_Init();
EA = 1;
ET0 = 1;
while(1)
{
if(IR==0)
{
TR0 = 1; //启动定时器0,采样开始
LED = 1;
}
if(b_n)
{
b_n=0;
if(++t>3320)JS_Init(); //约16.6秒(5ms * 3320),即每次采集完,过4秒(16.6S-12.6S)后重新工作
}
}
}
void TT0() interrupt 1 using 1
{
if(IR)dat |= 0x01;
if(++i==8) //每采集8次发送一次
{
TI=0;
SBUF=dat;
i=0;
}
dat <<= 1;
if(++n==0)b_n=1; //约5ms置1一次
}
一周热门 更多>