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

📄 ds2438.c

📁 自己写的测试程序,调试已通过,可以直接使用, 而且有的还有详细的注释.红外采集器软件
💻 C
字号:
#include<w78e58b.h>
#include <intrins.h>

sbit dq=P1^2;
sbit dq_find=P1^0;

void ds2438_write(unsigned char dst);
void ds2438_reset(void);
bit ds2438_wait(void);
/************* delay time  ******************************/  
void ds2438_delay(char t)
{
 for(;t>0;t--)
  {}
 }

/************** wait *****************************/
bit ds2438_wait(void)
 {
 unsigned char i;
  bit x;
  x=0;  
  for(i=0;i<100;i++)
  {
   if(~dq)
     { 
      if(dq)
	    {x=1;return x;}
	   }	}  
    return x;	     
	  
	  }  

/**************  reset ds2438  ************************/
void ds2438_reset(void)       // reset ds2438
 {
 dq_find=0;
 dq=0;
 ds2438_delay(50);
 dq=1;
 dq_find=1;
 }
/***************  wait responsion ***********************/

/***************  read a bit data ******************************/
bit ds2438_readbit(void)
 { 
  bit x;
  dq=0;
                                _nop_();
                                _nop_();
                               _nop_();
                                _nop_();
  dq=1;
  x=dq;
return(x);
 }
/**************** read a byte data *****************************/
 unsigned char ds2438_readbyte(void)
 {
   unsigned char i,dat,x;
   dat=0x00;
  for(i=0;i<8;i++)
  { 
    x=ds2438_readbit();                                             
    dat=(x<<7)|(dat>>1);              
    }
   return(dat);
 }
/*******************  write a byte data *******************************/
void ds2438_write(unsigned char dat)
 {
   unsigned char i,x;
   for(i=0;i<8;i++)
    {
     x=dat&1;
     dat>>=1;
     if(x==1)
      {  
       dq=0;
       ds2438_delay(0);
                                           _nop_();
                                         _nop_();
                                         _nop_();
                                         _nop_();
                                          _nop_();
                                         _nop_();
       dq=1;
     }
   else {
          dq=0;
          ds2438_delay(5);
          dq=1;
          }
     }
  }
/************  starting ds2438  ********************/
void ds2438_start(void)
{   EA=0;
     ds2438_reset();
     ds2438_wait();
     ds2438_write(0xcc);             
     ds2438_write(0x44); 

      ds2438_reset();
     ds2438_wait();
     ds2438_write(0xcc);             
     ds2438_write(0xb4);  
       ds2438_reset();
  ds2438_wait();
  ds2438_write(0xcc);
  ds2438_write(0xb8);
   ds2438_write(0x00);
     
                            
   EA=1;                            
  }


   
/*   bit ds2438_readbit_find(void)
 { 
  bit x;
  dq_find=0;
  ds2438_delay(1);                     
  dq_find=1;
  x=dq_find;
return(x);
 }  
      
   /**************** read a byte data *****************************
 unsigned char ds2438_readbyte_find(void)
 {
   unsigned char i,dat,x;
   dat=0x00;
  for(i=0;i<8;i++)
  { 
    x=ds2438_readbit_find();                 
    ds2438_delay(1);
    dat=(x<<7)|(dat>>1);
    }
   return(dat);
 }


/************** wait *****************************
bit ds2438_wait_find(void)
 {
 unsigned char i;
  bit x;
 x=0;  
  for(i=0;i<100;i++)
  {
   if(~dq_find)
     { 
	  ds2438_delay(0);
      if(dq_find)
	    {x=1;return x;}
	   }	}  
    return x;         
   
	  
	  }

/*******************  dq_find ***************************
void ds2438_write_find(unsigned char dat)
 {  
   unsigned char i,x;
   for(i=0;i<8;i++)
    {
     x=dat&1;
     dat>>=1;
     if(x==1)
      {  
       dq_find=0;
        ds2438_delay(0);
       dq_find=1;
     }
   else {
          dq_find=0;
          ds2438_delay(5);
          dq_find=1;
          }
     }
  }
/***********  read number   ********************************
void ds2438_number(unsigned char xxxxx[8])
{
 unsigned char *p;
 unsigned char i; 
  
  p=xxxxx;
  EA=0;
  ds2438_reset();
  ds2438_wait_find();              
  ds2438_write_find(0x33);
  for(i=0;i<8;i++)
  {
    *p=ds2438_readbyte_find();
     p++;
     
	 }
   EA=1;
 }         */


void ds2438_read_integrated_page(unsigned char x,unsigned char d[8],unsigned char dat[8])
{
 unsigned char *p;
 unsigned char i; 
  
  p=d;
  EA=0;  
 
  ds2438_reset();
  ds2438_wait();                     
   ds2438_write(0x55);
   for(i=0;i<8;i++)
    {
	  ds2438_write(*p);
	  p++;
	                                  
	  }
   p=dat;     
  ds2438_write(0xbe);
  ds2438_write(x);
  
  for(i=0;i<8;i++)
  {
    *p=ds2438_readbyte();
     p++;
     
	 }
   EA=1;
 }

/*void ds2438_write_integrated_page(unsigned char x,unsigned char d[8],unsigned char dat[8])
{
 unsigned char *p;
 unsigned char i; 
  
  p=d;
  EA=0;
   ds2438_reset();
   ds2438_wait();                     
   ds2438_write(0x55);
   for(i=0;i<8;i++)
    {
	  ds2438_write(*p);
	  p++;
	                                  
	  }
   p=dat;        
  ds2438_write(0x4e);
  ds2438_write(x);
  
  for(i=0;i<8;i++)
  {
    ds2438_write(*dat);
     dat++;
     
	 }
   ds2438_reset();
  ds2438_wait();
  ds2438_write(0xcc);
   ds2438_write(0x48);
   ds2438_write(x);
 
   EA=1;
 }                   */


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -