引言
紅外通信技術是一種點對點的數據傳輸協議,是傳統設備之間連接線纜的替代技術,是目前國際上普通采用的一種近程無線傳輸技術,常用于智能小區控制系統和電話教學交互式遠程控制系統中,但是目前的家電(如空調、錄像機、VCD機等)有各種不同的品牌和型號,其紅外遙控編碼及發送格式不盡相同。為了能夠用一臺通用控制器對多種不同型號的家電進行控制,本文利用功能強大的單片機和編程軟件VB設計了一種基于計算機串口的通用型智能紅外邏輯分析儀,它可對各種電器的紅外遙控器所發射的控制信號進行識別、存貯和再現。還可通過紅外硬件接口識別出紅外信號并送入單片機處理,然后利用VB開發的虛擬軟件在電腦屏幕上實時顯示采集到的紅外信號波形,便于設計人員對各種調制方式的紅外信號進行“可視化”的分析與研究。
1、硬件設計
1.1 串行通信的基本原理
串行端口本質上是計算機的CPU和外部串行設備間的編碼轉換器。當數據從CPU經過串行端口發送出去時,字節數據被轉換為串行的俠。而在接收數據時,串行的位則被轉換為字節數據。在Windows環境下,串行端口是Windows系統資源的一部分。如果要使用串口進行通信,應用程序必須在使用前向操作系統提出使用串口資源的申請(創建并打開串口),然后進行相應的串口參數配置,雙方的串口才可進行通信,通信完畢后,還必須釋放系統資源(關閉串口)。串口通信程序的流程如圖1所示。
1.2 89C51的串行口
89C51內有一個全雙工的串行口,它有4種工作方式:方式0,串行接口為移位寄存器I/O方式;方式1,串行接口被控制為8位的異步通信接口,實際上,此時傳送一幀住處應為10位,其中1位為起始位,8位為數據位,1位為停止位,在該方式中,波特率可變;方式2和方式3被定義為9位的異步通信接口,此時傳送一幀信息為11位,其中1位起始位,8位數據位,1位可編程數據位,1位停止位,工作方式的選擇由芯片內的特殊功能寄存器SCON(串行口控制寄存器)來設備。
1.3 接口電路
為了能使單片機與PC進行通信,必須使其遵循相同的通信協議。由于89C51的串行口輸入/輸出為TTL邏輯電平,高電平為3.8V左右,低電平為0.3V左右,因而這種以TTL電平傳送數據的方式的抗干擾性較差。而計算機內部的RS-232C串行口用12V和-12V電平方式,這種方式中,信號0和信號1的電平差別增大,從而增強了抗干擾性。但是,為了解決這種電平不一致的矛盾,必須采用一個RS-232C電平轉換器,文中采用的MAX232自身帶有電源電壓變換器,可把+5V電壓變換成RS-232輸出電平所需的10V電壓,因而采用這種方式進行串行通信具有較好的性能和低廉的價格。如果通信距離較遠,還可以通過增加MAX485轉換器來連接MAX232以滿足要求。其硬件接口電路原理如圖2所示。
2、軟件設計
2.1 紅外遙控編碼及傳送格式
紅外通信的基本原理是在發送端將基帶二進制信號調制為一系列的脈沖串信號,然后通過紅外發射管發射紅外信號。常用的有通過脈沖寬度來實現信號調制的脈寬調制(PWM)和通過脈沖串之間的時間間隔來實現信號調制的脈沖調制(PPM)兩種方式。本系統采用的是脈時調制方法。在調制脈沖寬度編碼方式下,“0”是由時間間隔為T的一串38.5kHz載波脈沖后加時間間隔壁為T0的無載波脈沖的空閑狀態來表示;而“1”是由時間間隔壁為T的一串38.5kHz載波脈沖后加時間間隔為T1的無載波脈沖的空閑狀態來表示,其中T1大于T0。
為了提高抗干擾能力和通訊可靠性,多數紅外遙控發射器在發送二進制編碼前要插入各種引導碼,以便接收器識別。為了區分不同類型的遙控器,還需要發送地址碼和校驗碼,另外不同遙控器所發送的碼長也不相同。一般的傳送格式如圖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;
sbit 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=buffer1;
}
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)來實現簡單地串行通信。
責任編輯:gt
-
單片機
+關注
關注
6044文章
44631瀏覽量
639052 -
控制器
+關注
關注
112文章
16473瀏覽量
179662 -
計算機
+關注
關注
19文章
7550瀏覽量
88748
發布評論請先 登錄
相關推薦
巧用邏輯分析儀 助力單片機開發
如何做一個簡易邏輯分析儀邏輯分析儀
請問邏輯分析儀學習單片機用處大嗎?
基于MSP430單片機的近紅外水分分析儀設計
kingst虛擬邏輯分析儀使用詳解
基于單片機的簡易邏輯分析儀設計
![基于<b class='flag-5'>單片機</b>的簡易<b class='flag-5'>邏輯</b><b class='flag-5'>分析儀</b>設計](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論