⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2272解码.txt

📁 PIC单片机C语言程序设计实例精粹
💻 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 + -