這是一個(gè)用軟件來解碼pt2262信號的c51程序,經(jīng)過測試是可以使用的,要注意接受模塊要遠(yuǎn)離單片機(jī)的晶振 不然干擾太嚴(yán)重?zé)o法解碼的 或者距離很近./*-----------------------------------------------------------------; Copyright (C) 2006 WangChanghong INTEGRATED PRODUCTS, INC.; All rights reserved.; MCU:AT89s52 ,晶體頻率:12MHz: 作者:汪長洪: 時(shí)間:2006年08月01日; 地點(diǎn):威海;----------------------------315M無線遙控解碼程序-----------------*/ #include AT89X52.H>#define uchar unsigned char#define uint unsigned int/*---------------------------------變量列表-------------------------*/uchar ReadCode[3],GetCode;/*---------------------------------函數(shù)列表-----------------------*/void delay_200(void); //200us精確延時(shí)void delay_250(void); //250us精確延時(shí)void delay_131(void); //131ms精確延時(shí)void init(void); //初始化子程序void INT0_intrupt(); //中斷處理子程序(解碼程序)/*-----------------------------主程序入口---------------------*/main(){ init(); while(1){ P2=~GetCode|0xf0;}}/*---------------------------------初始化子程序----------------*/void init(void){EA=1; //打開CPU總中斷請求EX0=1; //打開INT0中斷請求 IT0=1; //設(shè)定INT0的觸發(fā)方式為脈沖負(fù)邊沿觸發(fā) }/*-------------------------------200us精確延時(shí)-------------------*/void delay_200(void) {uchar i,j;for(i=0x05;i>0;i--)for(j=0x12;j>0;j--);}/*-------------------------------250us精確延時(shí)----------------*/void delay_250(void) {uchar i,j;for(i=0x05;i>0;i--)for(j=0x17;j>0;j--);}/*-------------------------------131ms精確延時(shí)---------------*/void delay_131(void) {uchar i,j;for(i=0xfe;i>0;i--)for(j=0xfe;j>0;j--);}/*-------------------------外部中斷0子程序(解碼程序)-------------*/void INT0_intrupt(void) interrupt 0 using 1{uchar i,j;bit BitState_2; EX0=0; ////////////////////找起始位////////////////////////for(i=0;i50;i++);if(P3_2==1) goto kk;while(P3_2==0);for(i=0;i50;i++);if(P3_2==0) goto kk; delay_200();if(P3_2==1) goto kk;for(i=15;i>0;i--) //重復(fù)20次,檢測在3750微秒內(nèi)出現(xiàn)高電平就退出解碼程序{ delay_200(); if(P3_2==1) goto kk;} while(P3_2==0);//////////////////////接收數(shù)據(jù)/////////////////////////for(j=0;j3;j++) {for(i=0;i8;i++){ delay_250();BitState_2=P3_2; ReadCode[j]=ReadCode[j]1;ReadCode[j]=ReadCode[j]|BitState_2; if(P3_2==1) while(P3_2==1);while(P3_2==0);}}////////////////////校驗(yàn)及運(yùn)算數(shù)據(jù)///////////////////////////for(i=0;i3;i++){if((~(ReadCode[i]|0x55))((ReadCode[i]0x55)1)!=0x00)goto kk; //校驗(yàn)} GetCode=0x00;for(i=0;i8;i++){GetCode |=((ReadCode[2]>>i)(ReadCode[2]>>(i+1))0x01i); //運(yùn)算}//////////////////////////////////////////////delay_131();delay_131();delay_131();delay_131(); kk: EX0=1;}
評論