?? rf2272.c
字號:
/*頭碼時間4.7ms,每個碼1.3ms,碼長17ms,單片機晶振為12M時,一個周期為1us
每個碼均長為1300/4=325us ,time>325 and time <650時,bit =1
time >100(干擾)and time <325時, bit=0;
*/
#include <my_89x51.h>
#define uint unsigned int
#define ulong unsigned long
#define uchar unsigned char
sbit RemPin = P3^3 ;
sbit LEDR =P1^3;
sbit LEDG =P1^4;
uchar receive[3];//二位地址碼+一位數據碼
//------------------------------------- sub functon ----------------------------------------------
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void d1ms (uint ljh_in) /*1mS延時函數*/
{
uint data ljh_i;
uchar data ljh_j;
for(ljh_i=0;ljh_i<ljh_in;ljh_i++){
for(ljh_j=0;ljh_j<108;ljh_j++){
_nop_(); _nop_();
_nop_(); _nop_();
_nop_(); _nop_();
}
}
}
//<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
void ledg()
{
d1ms(100);
LEDG=1;
d1ms(100);
LEDG=!LEDG;
d1ms(100);
LEDG=!LEDG;
d1ms(100);
LEDG=0;
}
//<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<
void ledr()
{
d1ms(50);
LEDR=1;
d1ms(50);
LEDR=0;
d1ms(50);
LEDR=1;
d1ms(50);
LEDR=1;
d1ms(50);
LEDR=0;
}
//對接收的數據進行分析處理
void RW_E2ROM()
{
uchar i,j,temp,num,temp1;
i2c_read(0xb0, 1, &num);
j = 0xb1;
for(i=0;i<num;i++)
{
i2c_read(j, 1, &temp);
j++;
}
;
temp1 = temp + 0x30;
i2c_write(0x2d, 1, &temp1);
}
//無線中斷接收int
void RemIn(void) interrupt 2 using 1
{
unsigned char i,j;
unsigned int temp;
EA=0;
TH0 = TL0 = 0;
while (!RemPin); //等待高電平
TR0=1;
while (RemPin) //等待低電平
{if (TF0==1) goto RemExit;} //超時就退出;
TR0=0;
temp=TH0;
temp=(temp<<8)+TL0;
// if (temp>6000 || temp<4000) //判斷同步碼的寬度
if (temp>3000 || temp<2000) //判斷同步碼的寬度 6M晶振
{
temp=TH0;
goto RemExit;
}
//同步碼檢測成功
for (i=0; i<3; i++) {//解 3*8=24 位碼
for (j=0; j<8; j++)
{
while (!RemPin); //等待高電平
TH0=0;
TL0=0;
TR0=1;
while (RemPin) //等待低電平
{if (TF0==1) goto RemExit; }//超時就退出
TR0=0;
temp=TH0;
temp=((temp<<8)+TL0);
// if (temp>400 && temp<600)
if (temp>200 && temp<300)//6m晶振
{
receive[i]=receive[i]<<1;
receive[i]=receive[i]+1; //保存 1
}
// else if (temp>100 && temp<234)
else if (temp>50 && temp<117)//6M晶振
{
receive[i]=receive[i]<<1; //保存0
}
else goto RemExit;
}
}
temp=0;//在這里設置一個斷點,運行到這里后看看receive里的三個字節數據就是解碼的結果
while ((receive[0] == 0xea)&&(receive[1] == 0xaa))
ledg();
RemExit:
{
TR0=0;
EA=1;
RemPin=1;
TF0=0;
return;
}
}
main()
{
P1 =0xff;
P3 =0xff;
RemPin=1;
IT1=1; //設定INT1的觸發方式為脈沖負邊沿觸發
EX1=1; //打開INT1中斷請求
TMOD=0x01;
EA=1;
ledr();
while (1)
{ledr();
RW_E2ROM();
}
//RemPin=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -