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

📄 ds1302_pic.txt

📁 pic单片机与ds1302的接口编程
💻 TXT
字号:
DS1302与PIC16F877接口程序
 
 
  
  
;================================================  
;DS1302控制子程序  
;=================================================  
;程序包括:DS1302初始化,时间数据写入和读取程序  
;DS1302_init    ;init ds1302  
;Set_DS1302     ;set time to ds1302  
;Get_DS1302     ;get time from ds1302  
;=================================================  

;============== 1302定义 ===========================================  
#DEFINE T_IO         PORTE,2         ;1302 I_O  
#DEFINE T_CLK        PORTE,1         ;1302时钟  
#DEFINE T_RST        PORTE,0         ;1302使能位  
#DEFINE DS1302_RX    20H             ;保存接受的1个数据  
#DEFINE DS1302_TX    28H             ;准备写入到DS1302的一个数据  

counter    equ      xxxh  
temp_cnt   equ      xxxh        

;**************************************************  
;        DS1302初始化程序  
;**************************************************  
DS1302_init  
      ;未写  
      return  
;**********************************************************  
;子程序名:Set_DS1302  
;功    能:设置DS1302 初始时间,并启动计时。  
;说    明:  
;调    用:Write_byte  
;入口参数:初始时间在:W_Second,W_Minute,W_Hour,W_Day,W_Month,W_Week.W_YearL(地址连续)  
;出口参数:无   
;消耗资源:counter,SecAddr(预定义)  
;设    计:zhengYanbo           日    期:2005.4.21  
;修    改:                     日    期:   
;**********************************************************  
Set_DS1302:  
         bcf     T_RST  
         bcf     T_CLK  
         bsf     T_RST  
         movlw   8eh  
         movwf   DS1302_TX     ;数据发送寄存器  
         call    Write_byte    ;发送字节  
         movlw   00h           ;WP=0  
         movwf   DS1302_TX  
         call    Write_byte  
         bsf     T_CLK  
         bcf     T_RST  
           
         movlw   W_Second  
         movwf   FSR  
         movlw   counter,D’7’  
         movlw   80h          
         movwf   SecAddr        ;秒写地址  
S13021:          
         bcf     T_RST  
         bcf     T_CLK  
         bsf     T_RST  
         movf    SecAddr,W  
         movwf   DS1302_TX  
         call    Write_byte     ;写秒地址  
         movf    INDF,W  
         movwf   DS1302_TX  
         call    Write_byte     ;写秒数据  
         incf    FSR  
         incf    SecAddr  
         incf    SecAddr  
         bsf     T_CLK  
         bcf     T_RST  
         decfsz  counter,F  
         goto    S13021  
           
         bcf     T_RST  
         bcf     T_CLK  
         bsf     T_RST  
         movlw   8eh           ;控制寄存器  
         movwf   DS1302_TX  
         call    Write_byte  
         movlw   80h           ;控制WP=1,写保护  
         movwf   DS1302_TX  
         call    Write_byte  
         bsf     T_CLK  
         bcf     T_RST  
         return  

;**********************************************************  
;子程序名:Get_DS1302  
;功    能:从DS1302 读时间  
;说    明:  
;调    用:Write_byte,Read_byte  
;入口参数:时间保存在:R_Second,R_Minute,R_Hour,R_Day,R_Month,R_Week.R_YearL  
;出口参数:无  
;消耗资源: counter,SecAddr(预先定义)  
;设    计:zhengYanbo          日    期:2005.4.21  
;修    改:                    日    期:   
;**********************************************************  
Get_DS1302:        
          movlw    R_Second         ;准备地址  
          movwf    FSR  
          movlw    D’7’  
          movwf    counter  
          movlw    81h              ;秒读地址  
          movwf    SecAddr            
G13021      
          bcf      T_RST  
          bcf      T_CLK  
          bsf      T_RST  
          movf     SecAddr,W  
          movwf    DS1302_TX  
          call     Write_byte  
          call     Read_byte  
          movf     DS1302_RX,W  
          movwf    INDF  
          incf     FSR  
          incf     SecAddr  
          incf     SecAddr  
          bsf      T_CLK  
          bcf      T_RST  
          decfsz   counter,F      ;接受7个数据  
          goto     G13021  
          return  
;**********************************************************  
;功    能:写1302一字节  (内部子程序)  
;入口:数据预先在DS1302_TX中  
;出口:无  
;消耗资源:temp_cnt(预先定义)  
;**********************************************************  
Write_byte  
         movlw    D’8’  
         movwf    tmp_cnt  
W_shift      
         rrf      DS1302_TX,F     ;带C移位(低位在前)  
         btfsc    STATUS,C  
         goto     send_1  
         bcf      T_IO  
         goto     send_0  
send_1     
         bsf      T_IO  
send_0  
         bsf      T_CLK           ;上升沿写  
         nop  
         bcf      T_CLK  
         decfsz   temp_cnt,F  
         goto     W_shift  
         return   
;**********************************************************  
;功    能:读1302一字节  (内部子程序)  
;入口:无  
;出口:数据保存在DS1302_RX中  
;消耗资源:temp_cnt(预先定义)  
;**********************************************************  
Read_byte  
         bsf      STATUS,RP0   ;bank1  
         bsf      TRISE,2      ;设置串行数据口为输入  
         bcf      STATUS,RP0   ;bank0  
         movlw    D’8’  
         movwf    temp_cnt  
R_shift    
         btfsc    T_IO  
         goto     get_1  
         bcf      STATUS,C     ;clr c  
         goto     get_0  
get_1      
         bsf      STATUS,C  
get_0  
         rrf      DS1302_RX,F  
         bsf      T_CLK          
         nop  
         bcf      T_CLK        ;下降沿读  
         decfsz   temp_cnt,F  
         goto     R_shift  

         ;reset   output  
         bsf      STATUS,RP0   ;bank1  
         bcf      TRISE,2      ;设置T_IO为输出  
         bcf      STATUS,RP0   ;bank0          
         return  
这个程序一定要,PIC默认PORTE为A/D口,切记,切记!改为其他口时候请参考PIC的DATASHEET  
;=============================================  
;       初始化端口  
;=============================================  
Port_Init  
        bsf     STATUS,RP0     ;bank1  
        bcf     ADCON1,PCFG0  
        bsf     ADCON1,PCFG1  
        bsf     ADCON1,PCFG2  
        bcf     ADCON1,PCFG3   ;PORTA and PORTE:digital I/O  
        bcf     STATUS,RP0     ;bank0  
        return 
 
 

⌨️ 快捷键说明

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