PIC单片机控制DS1302子程序

发布者:omega34最新更新时间:2017-12-05 来源: eefocus关键字: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         


关键字:PIC单片机  控制DS1302 引用地址:PIC单片机控制DS1302子程序

上一篇:12864LCD带中文字库(PIC程序)
下一篇:pic单片机控制时钟芯片DS1302程序

推荐阅读最新更新时间:2024-03-16 15:48

基于PIC单片机的多回路温度控制系统设计
1.引言 对于塑料制瓶工艺, 塑料加热处于溶融状态, 经高压注射成为管胚, 短时间冷却以后, 经过高压空气的吹胀, 在制瓶模具中成型。其工艺特点之一是: 溶融状态下的塑料定时流动; 成为管胚之后, 将与外部空气接触 2 秒钟时间左右, 产品质量不可避免地受到环境温度的影响。 制瓶工艺要求在不同的制瓶过程中, 恒定在不同的温度下, 其温度控制是制瓶的关键技术之一。目前这种设备的温度控制装置通常采用单回路的通用温度控制仪表, 温度控制无法与工艺过程直接产生联系, 使得温度控制达不到最优状态, 而且受到环境温度的影响, 必须随环境温度的变化调整温度控制参数, 否则产品质量受到影响。另一方面, 单回路的通用温度控制仪表价格也比较高, 且多
[单片机]
基于<font color='red'>PIC单片机</font>的多回路温度<font color='red'>控制</font>系统设计
PIC单片机软件异步串行口实现方法
在用单片机开发各种嵌入式应用系统时,异步串行通信是经常要用到的一种通信模式,很多应用中还要求实现多路异步串行通信。大家平时熟悉的各种厂家的单片机,绝大部分片上只提供一个硬件UART模块,利用它可以方便实现一路串行通讯。PIC系列单片机也不例外,在其丰富的产品家族成员中,除高端系列(PIC17/18)一些型号片上带有两路硬件UART模块外,其它大部分型号片上只有一路UART,一些低端廉价的PIC单片机甚至还不带硬件UART。为了提高系统的性能价格比,就要求设计工程师用软件增加实现一路或多路异步串行通信。很多工程师对用软件实现的UART在可靠性和效率方面持怀疑态度,其实关键问题是看软件采用何种方式来实现可靠的UART功能。   在
[单片机]
<font color='red'>PIC单片机</font>软件异步串行口实现方法
刚学PIC单片机,分享第一个电子时钟,定时器计时
#define _XTAL_FREQ 4000000 //晶振定义 #include pic.h //头文件包含 //__CONFIG(0x3b31);//芯片配置字定义 // CONFIG1 #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled
[单片机]
刚学<font color='red'>PIC单片机</font>,分享第一个电子时钟,定时器计时
PIC单片机中断执行的步骤及过程
1)系统初始化的时候会打开总中断控制位(GIE),打开某个中断控制位,如果是外围中断还要打开外围中断控制位(PEIE); 2)CPU正在执行某个用户程序时,突然收到一个随机产生的中断信号,使某个中断标志位置为1; 3)CPU立刻停止当前的程序,并将下一条要执行的程序的地址保存起来; 4)CPU自动关闭总中断控制位(GIE),控制指令指针跳到中断入口处; 5)从中断入口跳转至中断服务子程序(ISR)。在ISR中程序员应该首先保护中断现场(保存相应重要寄存器的值), 然后根据中断标志位来响应何种中断并作出处理; 6)中断程序执行完毕,首先清空中断标志位并恢复中断现场,执行特殊的指令返回原先用户程序终止处。
[单片机]
<font color='red'>PIC单片机</font>中断执行的步骤及过程
PIC单片机滚动码解码C程序
//-------------------------------------------------------------------- // Interrupt based receive routine // // Compiled using HiTech PIC C compiler v.7.93 //******************************************************************** #define CLOCK 4 // MHz #define TE 400 // us #define OVERSAMPLING 3 #defi
[单片机]
PIC单片机开发需注意的几个问题
1 怎样进一步降低功耗 功耗,在电池供电的仪器仪表中是一个重要的考虑因素。PIC16C××系列单片机本身的功耗较低(在5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,在保证满足工作要求的前提下,可采用降低工作频率的方法,工作频率的下降可大大降低功耗(如PIC16C××在3V,32kHz下工作,其电流可减小到15μA),但较低的工作频率可能导致部分子程序(如数学计算)需占用较多的时间。在这种情况下,当单片机的振荡方式采用RC电路形式时,可以采用中途提高工作频率的办法来解决。 具体做法是在闲置的一个I/O脚(如RB1)和OSC1管脚之间跨接一电阻(R1),如图1所示。低速状态置RB1=0。需进行快速运算时先置R
[单片机]
PIC单片机MPLAB V8设置技巧
以前对MPLAB的不人性化设计发过牢骚,今天从网上看到了一篇文章,教你如何设置,设置完后,人性化多了。在此分享一下: 原文: 让你的MPLAB好用起来!很多人抱怨,MPLAB 编辑功能不方便,很多功能没有。特别是你如果第一次接触MPLAB的时候,觉得界面太不友好,其实不然。。。。 1. 实现效果1:双击选取单词,再次双击选取整行。——打开 edit\properties菜单,选C File Types,取消Double click toggles breakpoit即可 2. 实现效果2:实现窗口停靠。——左键点击要停靠的窗口的左上角的运行图标,选定Dockable,然后将窗口拖到你要停靠的地方(一般在主窗口左边缘、
[单片机]
基于UCC3895与PIC单片机的智能充电器的设计
采用新一代移相PWM控制芯片 UCC3895 和PICl6F917单片机,针对常用的铅酸蓄电池设计开发了一种智能充电器,介绍了其硬件设计思路和软件实现方法,并提出了智能控制策略。 关键词:UCC3895;PIC;智能充电器 0 引言 现代通讯设备、电子产品、电动车辆、UPS等普遍采用蓄电池作为电源,然而多数充电设备功能单一,通用性差,维护质量低,导致产品的使用效率大大降低。本文采用UCC3895和PIC单片机,针对常用的铅酸蓄电池,设计开发了一种智能充电器。 UCC3895是TI公司生产的专用于PWM移相全桥DC/DC变换的新型控制芯片,可工作于电压模式,也可工作于电流模式,并且可实现输出脉冲占空比从0到100%相移
[工业控制]
基于UCC3895与<font color='red'>PIC单片机</font>的智能充电器的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved