红外遥控子程序.doc
文本预览下载声明
/**********************************************************
功能:
msp430g2553利用普通的红外接收一体装置
硬件连接图:
红外接收连接图
1838T ..............P1.7//输入并且利用P1.7外部中断一定带上拉电阻
用法: 1.先配置P1.7外部中断!!!!!!!!!!!!!!!!!!!!!!!!!
P1OUT |= Hongwai_1838T; //Hongwai_1838T上拉电阻
P1REN |= Hongwai_1838T; //使能Hongwai_1838T的上拉电阻
P1IE |= Hongwai_1838T; //Hongwai_1838T中断使能
P1IES |= Hongwai_1838T; //Hongwai_1838T边沿触发中断方式设置
P1IFG = ~Hongwai_1838T; //Hongwai_1838T断标志位清除
2.在while(1)里调用Hongwai_1838T_choose();即:用红外键盘上的按键执行任务
Hongwai_1838T_choose();
3.开总中断
_EINT(); //开总中断
4.在P1中断服务程序里调用Hongwai_1838T_dsp();
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
Hongwai_1838T_dsp();
P1IFG =0;
}
**********************************************************/
#define Hongwai_1838T BIT3 //红外输入
volatile uchar addr[4]={0}; //编码放在addr[2]数组里
void Hongwai_1838T_dsp(void)
{
uchar i,j,k=0;
if((P1IN Hongwai_1838T)==0)
{
for(i = 0;i 14;i++)
{
Delay_us(400);
if(P1IN Hongwai_1838T) //9MS内有高电平,则判断为干扰,退出处理程序
{
return;
}
}
while(!(P1IN Hongwai_1838T)); //等待9ms低电平过去
for(i = 0;i 4;i++)
{
for(j = 0;j 8;j++)
{
while(P1IN Hongwai_1838T); //等待4.5ms 高电平过去
while(!(P1IN Hongwai_1838T));//等待变高电平
while(P1IN Hongwai_1838T) //计算高电平时间
{
Delay_us(100);
k++;
if(k = 30) //高电平时间过长,则退出处理程序
{
return;
}
}
addr[i]=addr[i] 1; //接受一位数据
if(k=8)
{
addr[i]=add
显示全部