DS1302和ATMEGA48设计的实时时钟

DS1302和ATMEGA48设计的实时时钟

DS1302是美国DALLAS公司推出的具有trick流充电功能的低功耗实时时钟芯片。

它可以计时年,月,日,星期,小时,分钟和秒,并具有多种功能,例如leap年补偿。

Atmel的ATMEGA48是一种高性能,低功耗的8位AVR微处理器。

本文使用这两款芯片来设计一个实时时钟,实时数据采集和定时控制系统。

下面介绍DS1302和ATMEGA48的应用:1. Atmel的ATMEGA48电路连接是高性能,低功耗的8位AVR微处理器,采用先进的RISC结构,大多数指令的执行时间为单个时钟周期,因此计算速度更快。

两个8位定时器/计数器,具有独立的预分频器和比较器功能; 1个具有预分频器,比较功能和捕获功能的16位定时器/计数器;具有独立振荡器的实时计数器RTC;六通道PWM 8通道10位ADC(TQFP和MLF封装)[6通道10位ADC(PDIP封装)];可编程串行USART接口;可以在主/从模式下工作的SPI串行接口;面向单词的部分的两线串行接口;带有独立片内振荡器的可编程看门狗定时器;片上模拟比较器;引脚电平的变化会导致中断并唤醒MCU。

它的以下功能在编程,自编程和加密方面为用户提供了极大的便利。

可编程闪存,可以在4K字节的系统中擦除和写入10,000次;一个可选的具有独立锁定位的引导代码区,通过片上引导程序来实现系统内编程; 256字节擦除和EEPROM写入100,000次; 512字节片上SRAM,可以对锁定位进行编程以实现用户程序加密。

图1 ATMEGA48和DS1302的电路连接图1所示为ATMEGA48和DS1302的电路连接。

由于ATMEGA48具有可选的内部振荡器,因此您只需打开电源即可。

DS1302需要一个32768Hz的晶体振荡器和一个备用电池。

可以看出其结构非常简单(因为本文仅介绍了ATMEGA48和DS1302的应用,因此省略了其余的显示电路和数据采集电路。

)。

2.通信程序(ASM)DS1302的顺序如图2所示。

图2根据顺序图的DS1302的顺序,给出了以下读/写过程:读数据子例程如下: sbiportd,7岁;假设在调用子程序RDS之前rst一直保持高电平:clrr17;将获取的数据保存到R17中的Ldir24、8sbiportd,6; sclkRDS1:cbiportd,6; sclk下降沿读取数据nopINR16,固定;从CPUI / O nopsbiportd读取数据,6; sclkBSTR16,5;将PIND.5复制到TLSRR17BLDR17,7;复制T到R17.7decr24CPIR24,0BRNERDS1RET注:ATMEGA48 I / O端口具有三个寄存器:数据寄存器-PORTx,数据方向寄存器-DDRx和端口输入引脚-PINx。

当I / O用作数据输入时,读取数据命令应为INRd,PINx。

如果使用INRd,即使将DDRx设置为数据输入,PORTx也会读取I / O端口的状态。

特别要注意的是,在读取软件分配的引脚电平和执行读取指令之间至少有一个时钟周期间隔,并且在文本中使用了nop间隔。

写入数据(命令/地址)的子例程如下: ldiR17,数据;假设要写入的数据已经存储在R17中; sbiportd,7岁;假设在调用子例程之前rst为高。

WDS:ldir24,8WDS1:cbiportd,6; sclkinr16,portd;读取端口D BSTR17的状态,0;将R17.0复制到TBLDR16,5;将T复制到R16.5 nopoutportd,r16;将数据写入portd(R16.5-》 portd.5)sbiportd,6; sclklsrr17decr24CPIR24,0BRNEWDS1RET命令字节的描述。

DS1302命令字节由8位组成。

当BIT0为1时,读取数据,而当BIT0为0时,写入数据。

BIT1-5是地址。

当BIT6为1时,它指向31个RAM;当BIT6为0时,它指向时钟寄存器。

BIT7必须为1,并且当DS130为0时它将停止DS1302。

DS1302控制寄存器的第七位是写保护位,因此应在写入数据之前将其关闭,并在写入数据后将其启用。

以下是用于设置点的完整程序。

ldir19,0x43;假设当前时间为43分钟,则DS1302时间寄存器中存储的数据以十进制十六进制存储。

ldir18,0x82;写子命令ldir27,0x00; xHldir26,19; xL在此使用间接寻址,因此您只需要更改R19的数据。

WRITE_DS1302:cbiportd,7cbiportd,6sbiportd,7ldir17、0x8e;控制寄存器en_WRITErCALLWDSldir17,0;写操作之前WP = 0rCALLWDSmovr17,r18;写第二,分钟,日,月和年地址rCALLWDSldr17,x;写下秒,分钟,小时,日,月和年的地址rCALLWDSldr17,x;数据输入)rCALLWDScbiportd,7cbiportd

深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询