欢迎来到友道创新学院!
咨询电话:010-59519886
硬件集成电路设计热门培训内容之PIC单片机控制DS1302子程序

;================================================   

;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   

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中   

;出口:无   

;消耗资源: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   cnt,F   

         goto     W_shift   

         return    

;**********************************************************   

;功    能:读1302一字节  (内部子程序)   

;入口:无   

;出口:数据保存在DS1302_RX中   

;消耗资源:cnt(预先定义)   

;**********************************************************   

Read_byte   

         bsf      STATUS,RP0   ;bank1   

         bsf      TRISE,2      ;设置串行数据口为输入   

         bcf      STATUS,RP0   ;bank0   

         MOVlw    D’8’   

         MOVwf    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   cnt,F   

         goto     R_shift   

         ;reset   output   

         bsf      STATUS,RP0   ;bank1   

         bcf      TRISE,2      ;设置T_IO为输出   

         bcf      STATUS,RP0   ;bank0           

         return   

这个程序一定要,PIC默认PORTA为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         

 


立即咨询有惊喜哦 !