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         
日期:2005年06月25日   来源: 
相关文章:
·用超低功耗MSP430单片机设计数据采集系统 2005-06-27
·Atmega16在开关磁阻电机调速系统中的应用 2005-06-28
·火灾探测器受干扰的原因及改进方法 2005-07-02
·特殊构件的焊接技术 2005-10-18
·触摸屏的工作原理及典型应用 2005-11-25
·高质量C++/C编程指南---类的构造函数,析构函数,赋值 2005-12-13
·基于ATmega8的新型电动自行车调速控制系统设计 2005-12-20
·电子产品高温老化的原理以及一间智能温控老化室的应用 2006-01-05
·新近成功开发无霍尔传感器无刷电机控制器 2006-01-20
·归纳一下最近比较流行的电动自行车技术 2006-01-23
·电子工作台 --- workbench 电子仿真软件 2006-05-23
·液晶字模工具 ------ HZDotReader V3 2006-05-23
·51系列单片机仿真软件----伟福e6000w  2006-05-23
·无传感器无刷电机驱动控制器系统的优点 2006-06-10
·PIC单片机C语言编译器 --PICC 8.05 完整破解版 2006-07-09