這是一個簡單的紅外解碼程序,是針對9ms起始碼和4.5ms結(jié)束碼的紅外信號。晶振用的是11.0592M的。
#i nclude <at89x52.h> #i nclude <stdio.h> sfr p0=0x80; sfr p3=0xb0; sbit p32=p3^2; unsigned char dm,i,j,k; unsigned char data a[4];//定義4個數(shù)組,用來存儲代碼 void ds0_9ms(void) { unsigned char j,k; for(j=18;j>0;j--) for(k=20;k>0;k--) ; } void ds1ms(void) { unsigned char i,j; for(i=2;i>0;i--) for(j=230;j>0;j--) ; } void ds4_5ms(void) { unsigned char i,j; for(i=10;i>0;i--) for(j=225;j>0;j--) ; } void ds2s(void) { unsigned char i,j,k; for(i=200;i>0;i--) for(j=200;j>0;j--) for(k=10;k>0;k--) ; } void main() { IT0=1; EX0=1; EA=1; dm=0; ds2s(); p0=0; while(1); } void t0(void) interrupt 0 using 2//外部中斷0的函數(shù) { EA=0; for(k=0;k<10;k++) { ds0_9ms(); if (p32==1) {k=10;break;} else if(k==9) { while(p32==0); ds4_5ms(); for(i=0;i<4;i++) { for(j=1;j<=8;j++) { while(p32==0); ds0_9ms(); if(p32==1) {ds1ms(); dm=dm|0x80; if(j<8) dm=dm>>1; } else if(j<8)dm=dm>>1; } a[i]=dm; dm=0; } for(i=0;i<4;i++) { p0=a[i]; ds2s(); } } } p0=0; EA=1; }
|
|