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

📄 pic16f877控制ds1302时间芯片.txt

📁 电子密码锁程序 数码管LED显示器max7219的应用.asm 16F877网络接口控制器GOOD.asmRs232a.asm24CXX.ASM
💻 TXT
字号:
初学PIC,原来是搞51的.写了个程序,经过几天辛苦调试,终于在PIC16F877上运行通过,特此发布,算我初学PIC给大家见面礼,呵呵,希望能有用.
;================================================
;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 + -