软件设计
2.1 红外遥控编码及传送格式
红外通信的基本原理是在发送端将基带二进制信号调制为一系列的脉冲串信号,然后通过红外发射管发射红外信号。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉冲调制(PPM)两种方式。本系统采用的是脉时调制方法。在调制脉冲宽度编码方式下,“0”是由时间间隔为T的一串38.5kHz载波脉冲后加时间间隔壁为T0的无载波脉冲的空闲状态来表示;而“1”是由时间间隔壁为T的一串38.5kHz载波脉冲后加时间间隔为T1的无载波脉冲的空闲状态来表示,其中T1大于T0。
图2
为了提高抗干扰能力和通讯可靠性,多数红外遥控发射器在发送二进制编码前要插入各种引导码,以便接收器识别。为了区分不同类型的遥控器,还需要发送地址码和校验码,另外不同遥控器所发送的码长也不相同。一般的传送格式如图3所示。
2.2 单片机的软件编程
单片机(下位机)部分的编程主要是完成单片机和计算机之间的串行通讯。该软件主要由串口初始化子函数、单片机内部定时器T0中断子函数、红外信号发送子函数等3大模块组成。其具体程序如下:
#include》at89x52.h)
#define byte unsigned char
#define WAR_0 P1_1 //定义接收引脚
#define LED_RECEIVE P1_0 //定义指示灯引脚
//晶振 22.1184MHz
//波特率=((xtal/12/t1_over_rate)/32)*2^pcon
byte bdata buffer=0;
***it way0=buffer^0;
byte i=0;
bit start=0;
void send char(unsigned char word)//串口发送子函数
{
TI=0;
SBUF=word;
While(TI==0);
TI=0;
}
void t0_service(viod) interrupt 1 using 1//T0中断子函数
{
way0=WAY_0;
I++;
If(I=8)
{
TI=0;
SBUF=buffer;
I=0;
}
buffer=buffer《《1;
}
void main(void) //主函数
{
SCON=0x40; //设置串口模式
TMOD=0x22; //设置定时器模式
TH1=0xff; //定时器加载初值
TH1=0xff;
PCON=0x80; //57600bps *2 22.1184M
115200bps
TR1=1; //开定时器
TH0=0xdb; //定时器0加载初值
TL0=0xfd;
EA=1;
WAY_0=1;
ET0=1; //以上是串行初始化
While(1) //主循环
{
if(! WAY_0)
{
TR0=1; //开定时器T0中断
LED_RECEIVE=0;//LED指示灯点亮
}
}
}
2.3 上位机软件设计
上位机(计算机)软件的作用是实时采集由计算机串口接收的信号(即单片机发送的信号),同时通过VB软件编程来实现被采集红外信号的实时显示,以便于分析。
一般的IBM PC兼容型微机均提供有1至2个25针或9针的RS-232C标准串行口,简称COM1和COM2。在某些应用中,还可通过插装通信卡来获得额外的RS-232C标准串行口。利用这些串行口,微机便可以与其他数字设备(包括计算机)进行一般的数据通信。
利用Visual Basic提供的MSComm控件可以简单便携地通过应用程序实现串行通信,也可以创建功能完备、具有事件驱动功能的高级通信工具。与DOS环境下用汇编或C语言等编制的串行通信程序及Windows环境下用Visual C编制的串行通信程序相比,在使用Visual Basic的MSComm控件实现串行通信时,程序员只需关心MSComm控件对Windows通信驱动程序的API函数的接口即可,换句话说,只需要设置和监视MSComm控件的属性和事件即可。
利用VB实现串行通信主要有两种方法:一是调用Windows API通信函数;二是使用VB的通信控件(MSComm)。本文采用第二种方法,即利用通信控件再加一个定时器控件(Timer)来实现简单地串行通信。
软件设计
2.1 红外遥控编码及传送格式
红外通信的基本原理是在发送端将基带二进制信号调制为一系列的脉冲串信号,然后通过红外发射管发射红外信号。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉冲调制(PPM)两种方式。本系统采用的是脉时调制方法。在调制脉冲宽度编码方式下,“0”是由时间间隔为T的一串38.5kHz载波脉冲后加时间间隔壁为T0的无载波脉冲的空闲状态来表示;而“1”是由时间间隔壁为T的一串38.5kHz载波脉冲后加时间间隔为T1的无载波脉冲的空闲状态来表示,其中T1大于T0。
图2
为了提高抗干扰能力和通讯可靠性,多数红外遥控发射器在发送二进制编码前要插入各种引导码,以便接收器识别。为了区分不同类型的遥控器,还需要发送地址码和校验码,另外不同遥控器所发送的码长也不相同。一般的传送格式如图3所示。
2.2 单片机的软件编程
单片机(下位机)部分的编程主要是完成单片机和计算机之间的串行通讯。该软件主要由串口初始化子函数、单片机内部定时器T0中断子函数、红外信号发送子函数等3大模块组成。其具体程序如下:
#include》at89x52.h)
#define byte unsigned char
#define WAR_0 P1_1 //定义接收引脚
#define LED_RECEIVE P1_0 //定义指示灯引脚
//晶振 22.1184MHz
//波特率=((xtal/12/t1_over_rate)/32)*2^pcon
byte bdata buffer=0;
***it way0=buffer^0;
byte i=0;
bit start=0;
void send char(unsigned char word)//串口发送子函数
{
TI=0;
SBUF=word;
While(TI==0);
TI=0;
}
void t0_service(viod) interrupt 1 using 1//T0中断子函数
{
way0=WAY_0;
I++;
If(I=8)
{
TI=0;
SBUF=buffer;
I=0;
}
buffer=buffer《《1;
}
void main(void) //主函数
{
SCON=0x40; //设置串口模式
TMOD=0x22; //设置定时器模式
TH1=0xff; //定时器加载初值
TH1=0xff;
PCON=0x80; //57600bps *2 22.1184M
115200bps
TR1=1; //开定时器
TH0=0xdb; //定时器0加载初值
TL0=0xfd;
EA=1;
WAY_0=1;
ET0=1; //以上是串行初始化
While(1) //主循环
{
if(! WAY_0)
{
TR0=1; //开定时器T0中断
LED_RECEIVE=0;//LED指示灯点亮
}
}
}
2.3 上位机软件设计
上位机(计算机)软件的作用是实时采集由计算机串口接收的信号(即单片机发送的信号),同时通过VB软件编程来实现被采集红外信号的实时显示,以便于分析。
一般的IBM PC兼容型微机均提供有1至2个25针或9针的RS-232C标准串行口,简称COM1和COM2。在某些应用中,还可通过插装通信卡来获得额外的RS-232C标准串行口。利用这些串行口,微机便可以与其他数字设备(包括计算机)进行一般的数据通信。
利用Visual Basic提供的MSComm控件可以简单便携地通过应用程序实现串行通信,也可以创建功能完备、具有事件驱动功能的高级通信工具。与DOS环境下用汇编或C语言等编制的串行通信程序及Windows环境下用Visual C编制的串行通信程序相比,在使用Visual Basic的MSComm控件实现串行通信时,程序员只需关心MSComm控件对Windows通信驱动程序的API函数的接口即可,换句话说,只需要设置和监视MSComm控件的属性和事件即可。
利用VB实现串行通信主要有两种方法:一是调用Windows API通信函数;二是使用VB的通信控件(MSComm)。本文采用第二种方法,即利用通信控件再加一个定时器控件(Timer)来实现简单地串行通信。
举报