51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > PIC单片机 > 详细内容
DS1302与PIC16F877接口程序
发布时间:2009/7/18  阅读次数:819  字体大小: 【】 【】【
;================================================  
;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                  
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号