PIC16F887红外解码程序
时间:08-24
来源:互联网
点击:
//----------------------------------------------------------------//PIC16F887 红外解码程序//指令周期1us,#include htc.h> // header file with compiler macros, for// example __CONFIG// the processor header file, with register // and bit definitions (pic16f887.h) is// automatically included#define uchar unsigned char#define uint unsigned int// __CONFIG sets the PIC16F887 Configuration Words. See bottom of the header// file pic16f887.h for fuse option constants.__CONFIG(INTCLK WDTDIS PWRTDIS
MCLRDIS UNPROTECT DUNPROTECT BORDIS IESODIS FCMDIS LVPDIS);__CONFIG(BORV40); // 2nd config word////// /////////////////////////////////////////////////uint shuju[3]={0}; //存放数据uint temp="0"; //临时变量uchar i,j; //数组及移位计数用uchar biaozhi="0"; //起始码标志位uchar flag="1"; //有键按下,打开定时器void init_io(void) //初始化函数{TRISC = 0xFF; //置CCP1口为输入态TRISD = 0x00; //置D口为输出态CCP1CON=0x04; //CCP1模块工作于捕捉方式CCP1IE=1; //开中断CCP1IF=0; //清捕捉标志位PEIE=1; //开外部中断T1CON=0; //配置定时器T1不分频,使用内部时钟,且先禁止T1ei(); // enable global interruptsTMR1H=0; //计数值清0TMR1L=0;PORTD=0; //输出清0}main(){init_io(); //初始化函数while(1); //等待CCP1模块中断产生}void interrupt interrupt_service(void) //中断{if (CCP1IE CCP1IF) //判断是否为CCP1模块中断,当在一个系统中时会用{if(flag==1) {TMR1H=0;TMR1L=0;TMR1ON=1; //开定时器flag=0;}else{TMR1ON=0; //先停定时器temp=TMR1L+TMR1H*256; //取数据并判断TMR1H=0; //清0计数值TMR1L=0;TMR1ON=1; //开定时器等待下一个脉冲到来if(temp>12600temp14600biaozhi==0) //起始码{biaozhi=1; //当检测到起始码时,下次直接进行入数据判断i=0;j=0;}else //数据判断区{if((temp 3200)(temp > 1200)) //时间在2.2ms左右的为数码0{shuju[i]=shuju[i]1;j++;}elseif((temp 5000)(temp > 3000)) //时间在4ms左右的为为数码1{shuju[i]=(shuju[i]1)+1;j++;}elsebiaozhi=0; //否则为终止码,清0起始码标志位,准备下一次按键的接收}if(j==16i2) //数组递加,当第一个数组接收满后,开始对下一个数组进行接收{i++;j=0;}else{if(j==16i==2) //当接收满后(共48位),对数据输出{if(shuju[0]==0xeb14) //为对应的某一按键值PORTD=0x10; //相应端口输出if(shuju[0]==0xee11) //另一键值PORTD=0xa0; //输出biaozhi=0; //接收完成,复位相应标志位flag=1;i=0;j=0;}}} TMR1IF = 0; // clear Timer0 interrupt flagCCP1IF=0; //每次必须对CCP1IF位软件清0}}
注:本程序使用的是TOYO空调的遥控器,起始码为13.6ms,0码为2.2ms,1码为4ms,停止码为9ms.共48位数据,单片机的指令周期为1us,这个程序还没有加校验.
- PIC16F887配置字(C语言)(11-18)
- 单片机数字计时器的系统设计与型式试验(10-15)
- 红外解码程序换种写法(12-02)
- 红外解码程序(用1602显示码值)(12-02)
- 51单片机红外解码库文件(11-30)
- 单片机红外解码查询法(HS9148)(11-30)