ATMEGA48与DS1302组成的定时控制系统

2006-07-26 15:02:33来源: 电子设计应用

  Atmel公司的ATMEGA48是一款高性能、低功耗的8 位AVR微处理器,使用先进的RISC 结构,大多数指令的执行时间为单个时钟周期,所以运算速度更快。两个具有独立预分频器比较器功能的8 位定时器/ 计数器;一个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器;具有独立振荡器的实时计数器RTC;六通道PWM;8路10 位ADC(TQFP 与MLF 封装)[ 6路10 位ADC( PDIP 封装)];可编程的串行USART 接口;可工作于主机/ 从机模式的SPI 串行接口;面向字节的两线串行接口;具有独立片内振荡器的可编程看门狗定时器;片内模拟比较器;引脚电平变化可引发中断及唤醒MCU等。

  其具有的下面特点无论从编程、自编程和加密等方面都给用户提供了很大的方便。4K字节的系统内可擦写10,000 次的可编程Flash;具有独立锁定位的可选Boot 代码区,通过片上Boot程序实现系统内编程;256字节的擦写100,000 次的EEPROM;512字节的片内SRAM,可以对锁定位进行编程以实现用户程序的加密。

  Maxim公司的8脚串行实时时钟日历芯片DS1302,体积小、与单片机接口简单、工作电压范围宽(2.5~5.5V)、功耗低、接口容易、占用CPU I/O口线少、可对时钟芯片备份电池进行涓流充电等特点。所以应用方便,被很多设计者所青睐。


图1 ATMEGA48与DS1302的电路连接


  笔者利用这两种芯片,设计了实时时钟,实时数据采集和定时控制系统。现就DS1302与ATMEGA48的应用介绍给大家。

  由于ATMEGA48有可选的内部振荡器,所以只需接通电源即可;DS1302需要一个32768Hz的晶振,和一个备用电池。可以看出结构很简单(由于本文只介绍ATMEGA48和DS1302的应用,所以其余的显示电路和数据采集电路均省略。)。

ATMEGA48与DS1302的通讯程序(ASM)


图2 DS1302的时序

图3 DS1302充电原理图



DS1302的时序如图2。
根据时序图,给出下面的读/写程序:
读出数据子程序如下:
 ;sbi portd,7;假设调用子程序以前已经保持rst为高
RDS: clr r17  ;将取到的数据保存到R17中
 ldi r24,8
 sbi portd,6 ;sclk
RDS1:cbi portd,6 ;sclk 下降沿读取数据
 nop
 IN R16,pind    ;从CPU I/O读取数据
 nop
 sbi portd,6 ;sclk
 BST R16,5 ;复制PIND.5到T
 LSR R17
 BLD R17,7 ;复制T到R17.7
 dec r24
 CPI R24,0
 BRNE  RDS1
 RET

  注:ATMEGA48 I/O口有三个寄存器分别是:数据寄存器- PORTx、数据方向寄存器- DDRx 和端口输入引脚- PINx。I/O作为数据输入使用时,读取数据命令应为 IN Rd,PINx,如果使用IN Rd,PORTx则读取到的是I/O口的状态,尽管将DDRx设置成数据输入。特别注意的是,读取软件赋予引脚电平和执行读取指令in 之间至少有一个时钟周期的间隔,文中用nop间隔。

写入数据(命令/地址)子程序如下:
 ;ldi R17,data;假设要写入的数据已经存放到R17中
 ;sbi portd,7;假设调用子程序以前已经保持rst为高
WDS: ldi r24,8
WDS1:cbi portd,6 ;sclk
 in r16,portd ;读入D口状态
 BST R17,0 ;将R17.0复制到T
 BLD R16,5 ;将T复制到R16.5
 nop
 out portd,r16;写数据到portd(R16.5->portd.5)
 sbi portd,6 ;sclk
 lsr r17
 dec r24
 CPI R24,0
 BRNE WDS1
 RET

  关于命令字节的说明。DS1302命令字节由8位组成,BIT 0 为1时,读取数据,为0时写入数据。BIT 1-5 为地址。BIT 6 为1时指向31个RAM,为0 时指向时钟寄存器。BIT 7 必须为1,为0时将使DS1302停止。

  DS1302的控制寄存器的第七位是写保护位,所以在写入数据前应该将其关闭,并在写数据完毕后将其使能。下面是一段完整的设置分的程序。
......
ldi r19,0x43 ;假设当前时间为43分,DS1302时间寄存器保存的数据为10进制数十六进制存储。
ldi r18,0x82 ;写分 命令
ldi r27,0x00 ;x H
ldi r26,19 ;x L   在这里使用间接寻址,所以只需改变R19的数据即可。
......
WRITE_DS1302:
 cbi portd,7
 cbi portd,6
 sbi portd,7
 ldi r17,0x8e   ;控制寄存器en_WRITE
 rCALL  WDS
 ldi r17,0   ;写操作前WP=0
 rCALL  WDS
 mov r17,r18   写秒 分 时 日 月 星期 年 地址
   rCALL  WDS
 ld r17,x   写秒 分 时 日 月 星期 年(R19中的数据)
   rCALL  WDS
 cbi portd,7
 cbi portd,6
 sbi portd,7
 di r17,0x8e   ;控制寄存器un_en_WRITE
 rCALL  WDS
 ldi r17,0x80  ;写操作前WP=1
 rCALL  WDS 
 cbi portd,7  
 RET

  同样,下面给出了一个完整的读取分的程序
ldi r18,0x83 ;读分 命令
ldi r27,0x00 ;x H
ldi r26,19 ;x L   将取到的数据存储到R19中。
READ_DS1302:
 cbi portd,7
 cbi portd,6
 sbi portd,7
 mov r17,r18      ;写秒 分 时 日 月 星期 年 地址
  rCALL  WDS
  rCALL  RDS
 st x,r17 ; 保存数据到R19
 cbi portd,7
 RET

  整合写和读分的程序,改变R18的内容就可以实现“秒、分、时、日、月、星期、年”的读写,写操作时只需改变R19的内容就可以将新的数据写入,读操作时直接读取R19的内容即可。也可以通过此程序直接来对31个RAM进行数据读取。

DS1302的充电功能

  DS1302的涓流充电功能也是非常方便的,同时又是其非常重要的一个功能,所以简单介绍一下其使用。其原理框图如图3。

  DS1302有一个单独的寄存器控制涓流充电。BIT7:BIT4是涓流充电功能的选择器,只有当它们被设置成1010才能够将其使能。使用DS(BIT3和BIT2)可以在一个和两个二极管之间选择;使用RS(BIT1和BIT0)可以选择两个电源(Vcc1和Vcc2)之间的电阻,这两个选择器共同使用来帮助您得到所需要的电流。

结语

  通过这一实践,表明应用DS1302在测控系统中的数据记录,其软硬件设计简单,时间记录准确。同时由于ATMEGA48的高速度,大数据吞吐,给实际应用带来了很大方便。由于笔者水平有限,仅将应用笔记供大家参考。

参考文献
1. 8-bit AVR Microcontroller with 4K Bytes In-System Programmable Flash (data sheet)
2. DS1302 - Trickle Charge Timekeeping Chip (data sheet)

关键字:寄存器  读取  时钟

编辑: 引用地址:http://www.eeworld.com.cn/gykz/qrsxt/200607/4111.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
寄存器
读取
时钟

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved