通過串口發(fā)送紅外遙控器的解碼值到PC
*************************************************************************
* @file main.c
* @author xr
* @date 2014年3月31日22:30:08
* @version V1.2.3
* @brief 串口通信+紅外通信 通過串口發(fā)送紅外遙控器的解碼值到PC
* @note單片機STC89C52RC MCU晶振11.0592MHZ
*************************************************************************
*/
#include
void ConfigUart();
void UartSend(unsigned char dat);
void delayms(unsigned int xms);
extern bit irflag;
extern unsigned char ircode[4];
extern void ConfigInfrared();
void main()
{
ConfigUart();
ConfigInfrared();
while (1)
{
if (irflag) //接收到紅外數(shù)據(jù)
{
irflag = 0;
UartSend(ircode[0]); //發(fā)送用戶碼
delayms(100);//延時100ms
UartSend(ircode[2]); //發(fā)送鍵碼
}
}
}
/**
* @brief 延時xms
* @param xms
* @retval 無
*/
void delayms(unsigned int xms)
{
unsigned int x, y;
for (x = 0; x < xms; x++)
for (y = 0; y < 110; y++);
}
/**
* @brief 配置串口通信
* @param 無
* @retval 無
*/
void ConfigUart()
{
TMOD &= 0x0F;//清零T1控制位
TMOD |= 0x20;//T1方式2,八位自動重裝模式
TH1 = 0xFD; //波特率 = 256-1/2^SMOD*T1溢出率 X=256-11059200/12/32/波特率
TL1 = TH1;//波特率9600bps
TR1 = 1;
ET1 = 0;//只用T1的計數(shù)
SCON |= 0x50;//串口方式1 SM0 SM1 SM2 REN TB8 RB8 TI RI 0101 0000
/*
SM0 = 0;
SM1 = 1;//方式1 SM2多機通信位
REN = 1;//允許接收數(shù)據(jù)
TI = 0;//發(fā)送完成中斷標(biāo)志
RI = 0;//接收完成中斷標(biāo)志
*/
ES = 1;//開串口中斷
EA = 1;//開總中斷
}
/**
* @brief 串口發(fā)送一個字節(jié)數(shù)據(jù)到PC
* @param 待發(fā)送數(shù)據(jù)
* @retval 無
*/
void UartSend(unsigned char dat)
{
SBUF = dat;
//while (!TI);//等待發(fā)送完成,在中斷模式下不需要等待,否則進不了中斷
}
/**
* @brief 串口中斷
* @param 無
* @retval 無
*/
void Uart_ISP() interrupt 4 //串口中斷標(biāo)號是4
{
if (TI) //等待發(fā)送完成
{ //發(fā)送完成
TI = 0;//清零
}
}
/**
**************************************************************
* @file infrared.c
* @author xr
* @date 2014年3月31日20:51:23
* @version V1.2.3
* @brief 紅外通信--紅外遙控器NEC協(xié)議解碼
* @note單片機STC89C52RC MCU晶振11.0592MHZ
**************************************************************
*/
評論