📄 pt2221.c
字号:
/**********************************************************************************************
name: PT2221 红外解码 C 程序
device: 红外一体化接收头 + 89S51
Copyright (c) 2007-2008 张兴电子设计工作室技术开发部
author: 张兴
web: http://mcu.5d6d.com
date: 2007.8.4--0:00
description: 用c做延时的32路红外遥控解码程序,程序中提供了两种实现延时的方法:
1. 加入 intrins.h 头文件后,用for循环和_nop_ 联合组成的精确延时;
2. 用 while(--i); 实现的精确延时
红外一体化接收头接P3.2 (INT0)
P37作工作指示用,解码成功后P36闪烁一次,同时,若解码值为01的话,会取反P35
edition:V1.0
***********************************************************************************************/
#include<PT2221.h>
//************************主程序***********************************
void main (void)
{
uint di;
InitCom(); //初始化串口
EA=1;
EX0=1; // 设定接受INT0的中断
IT0=1;
ComOutChar(1); //向串口发送 1 ,表示串口正常工作
do
{
P37=~P37; //工作指示灯,这个LED闪烁表示主程序在运行
for(di=0;di<1000;di++)
{
delay1000us();
}
}while(1);
}
//*******************外部中断0 红外解码程序****************************************
static void decode(void) interrupt 0 using 2
{
unsigned char IRCode[4]={0,0,0,0};
unsigned char count0,count1,count2;
unsigned char m;
EX0 = 0; //外部中断0关闭
for(count0=0;count0<10;count0++) //起始码前9ms的低电平
{
delay882us();
if(P32) goto exit; //9ms没完就出来高电平则为干扰信号,跳出中断(退出解码)
}
if(!P32) //低电平没完
{
delay4740us(); //9ms没结束再延时4740us,加上前面的8820us,已跳过起始码的13.5ms
for(count1=0;count1<4;count1++) //开始读数据,4个字节,32位
{
for(count2=0;count2<8;count2++) //每个字节8位
{
while(!P32); //等待高电平到来
delay882us();
if(P32) //延时882us后,若P32还是高电平,则为 位1
{
IRCode[count1]=IRCode[count1]>>1;
IRCode[count1]=IRCode[count1]|0x80;
delay1000us(); //延时1000us,结束高电平
}
else //延时882us后,若P32为低电平,则为 位0
{
IRCode[count1]=IRCode[count1]>>1;
IRCode[count1]=IRCode[count1]|0x00;
}
}
} //到这里已读完所有32位数据
if ((IRCode[0]==0x00)&&(IRCode[1]==0xff)) //判断用户码和用户反码是否正确
{
if (IRCode[2]==~IRCode[3]) //数据校验
{
//ComOutChar(IRCode[0]);
//ComOutChar(IRCode[1]);
ComOutChar(IRCode[2]); //串口发送数据码
//ComOutChar(IRCode[3]);
P36=0; //解码成功后led闪烁一次
for(m=0;m<100;m++)
{
delay1000us();
}
P36=1;
if(IRCode[2]==0x01)
{
P35=~P35; //这里可加入控制命令,比如这里的当解码为01时取反P35
for(m=0;m<100;m++)
{
delay1000us();
}
}
}
}
}
exit:
EX0 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -