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

📄 a(gettime_ie).c

📁 PIC16C63单片机UART通信——A机读取时钟芯片DS1302获得当前时间
💻 C
字号:
#include<pic166x.h>
#define uchar unsigned char
#define _nop_() asm("nop")


//定义DS1302端口
#define RST RA4
#define CLK RA5
#define SDA RB7

uchar ACC,time[7];
uchar sig[7]={0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6};//标识码


// 1302读取时间模块
void wbyte1302(uchar da)
{
 uchar i;
 ACC=da;
 TRISB=0X00;
 for(i=8;i>0;i--)
 {
  if(ACC&0x01) SDA=1;
  else   SDA=0;
  CLK=1; 	
  _nop_();
 _nop_();
  CLK=0;  
  ACC>>=1;
 _nop_();
}
}

uchar rbyte1302()
{
 uchar i;
 TRISB=0XFF;
 for(i=8;i>0;i--)
 {
  ACC>>=1;
  if(SDA)  ACC|=0x80;
  CLK=1; 
  _nop_();
_nop_();
  CLK=0;
_nop_();
 }
 return ACC;
}

void gettime(uchar *dat)      
{
  uchar i;
  RST=0;
  CLK=0;
  RST=1;  
  wbyte1302(0xbf);  
  
  for(i=7;i>0;i--)   *dat++=rbyte1302();
  
  CLK=1;
  RST=0;
  }
            
/**************UART communication****************/
void init_uart()
{
 TRISC=0x80; 
 SPBRG=25;
 SPEN=1;   //open serial port
 CREN=1;
 TXEN=1;
 }

void send_byte(uchar dat)
{
 TXREG=dat;
 do{
    ; }while(!TXIF); 
 }

uchar rec_byte()
{
 if(RCIF) return RCREG;
 else     return 0xff;
}
 
send_str(uchar *sign,uchar *dat)
{
 uchar i,temp;

 for(i=7;i>0;i--)
 {
   send_byte(*sign++);
   for(;;) 
   {
    temp=rec_byte();
    if(temp!=0xff) break;
    }

   send_byte(*dat++);
   for(;;) 
   {
    temp=rec_byte();
    if(temp!=0xff) break;
    }
   }
  }

/*************主函数main**************************/

void main()
{
    uchar temp;
    TRISA=0x00;  //output
    TRISB=0X00;  //output(LCD DATA)
 
 init_uart();

 while(1)
  { 
  gettime(time);
  send_str(sig,time);
  }
}

⌨️ 快捷键说明

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