📄 2272解码.txt
字号:
#include "pic.h"
//=======================================
unsigned char time0,time1;
unsigned char testbyte;
unsigned char byteD[]={0,0,0};
unsigned char byteB[]={0,0,0};
void ReadEE(void);
void WriteEE(void);
void Delay2p5ms(void);
void Delay1s(void);
void GetCode(void);
#define _asm{"nop"} NOP()
#define TIME0 25 //
#define TIME1 100 //
#define TIME2 110 //
#define TIME3 200 //
//=======================================
main()
{
TRISB = 0b00000001;
TRISA = 0b00000100;
OPTION = 0b1100001;
PORTA = 0;
PORTB = 0;
TMR0 = 0;
ReadEE() ;
while(1)
{
if(RB0 == 0) ; //SW1按下 ?
{
Delay2p5ms() ; //是,去抖
Delay2p5ms() ;
if(RB0 == 0) ; //再次检测
{
NOP() ;
NOP() ;
while(RB0 == 0) ; //等待SW1抬起
testbyte |= 0b01000001; //学习模式标志
RB5 = 1; //LED 指示进入学习模式
}
}
if(RA2 == 0) //低电平?
{
Delay2p5ms() ; //延时2.5ms
if(RA2 == 0) //再次确认低电平
GetCode() ;
}
}
}
//===========================================
void GetCode(void)
{
unsigned char i,j;
for(i = 0 ; i < 3 ; i++) //准备接收3帧数据
{
while(RA2 == 0); / /确认低电平,则等待变为高电平
TMR0 = 0;
for(j = 8 ; j > 0 ; j--)
{
while(RA2 == 1) ; //等待变为低电平
time0 = TMR0;
TMR0 = 0;
while(RA2 == 0) ; //等待变为高电平
time1 = TMR0;
TMR0 = 0;
if(time0 >= time1)
{
if((time0 >= TIME2)&&(time0 < TIME3)
&&(time1 >= TIME0)&&(time1 < TIME1))
{
byteB[i] = (byteB[i] << 1)|0b00000001 ;
}
}
else
{
if((time1 >= TIME2)&&(time1 < TIME3)
&&(time0 >= TIME0)&&(time0 <TIME1))
{
byteB[i] = (byteB[i] << 1)&0b11111110;
}
}
}
}
if((testbyte & 0b01000001) == 0b01000001)
{
testbyte = 0; //清学习模式标志
WriteEE() ; //将收到的编码写进EEPROM
RB5 = 0 ; //指示完成学习
}
else
{
if((byteB[0] == byteD[0])&&(byteB[1] == byteD[1])
&&(byteB[2] == byteD[2]))
{
RB7 = 1 ; //收到正确编码,LED亮1S
Delay1s();
RB7 = 0 ;
}
}
}
//===========================================
void ReadEE(void) //读EEPROM
{
unsigned char i ;
for(i = 0 ; i < 3 ; i++)
{
EEADR = i ;
RD = 1 ;
NOP()
NOP()
byteD[i] = EEDATA ;
}
}
//===========================================
void WriteEE(void) //写EEPROM
{
unsigned char i ;
while(!WR) ;
for(i = 0 ; i < 3 ; i++)
{
EEADR = i;
EEDATA = byteB[i] ;
WREN= 1 ;
EECON2 = 0x55 ;
EECON2 = 0xAA;
WR= 1;
WREN = 0;
while(!WR);
}
}
//===========================================
void Delay2p5ms(void)
{
unsigned char i ;
for(i = 228 ; i > 0 ; i--)
NOP() ;
}
void Delay1s(void)
{
unsigned int i ;
for(i = 365 ; i > 0 ; i--)
{
Delay2p5ms() ;
Delay2p5ms() ;
Delay2p5ms() ;
}
}
//END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -