版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、51系列单片机第第11讲讲 时钟芯片时钟芯片时钟芯片的分类时钟芯片的分类 并行日历时钟芯片并行日历时钟芯片DS12887 串行时钟芯片串行时钟芯片DS1302表面贴装样式(体积小,价格便宜,直接焊接在印刷电路板上)双列直插样式(接插方便,适合在实验室使用)DS12887主要功能主要功能内含锂电池,断电后运行十年以上不丢失数据计秒、分、时、天、星期,日、月、年,有闰年补偿功能二进制数码或BCD码表示时间,日历和定闹12小时或24小时制,12小时模式带有PM和AM指示,有夏令时功能Motorola和Intel总线时序选择128字节RAM单元与软件接口,其中:14字节作为时钟与控制寄存器,114字节
2、为通用RAM,所有RAM单元数据都具有掉电保护功能可编程方波信号输出中断信号输出(IRQ)和总线兼容,定闹中断、周期性中断、时钟更新周期结束中断可分别由软件屏蔽,也可分别进行测试DS12887的内部结构组成的内部结构组成 振荡电路振荡电路 分频电路分频电路 周期中断周期中断/方波选择电路方波选择电路 14字节时钟寄存器和控制寄存器字节时钟寄存器和控制寄存器 114字节用户非易失字节用户非易失RAM 十进制十进制/二进制累加器二进制累加器 总线接口电路总线接口电路 电源开关写保护单元电源开关写保护单元 锂电池(据称可用锂电池(据称可用10年)年)DS12887的引脚的引脚 1 2 3 4 5 6
3、 7 8 9 10 11 12 MOT NC NC AD0 AD1 AD2AD3AD4AD5AD6AD7GND24 23 22 21 20 19 18 17 16 15 14 13 VCCSQWNC NCNCIRQRESET DSNCCSAS R/W DS12887的引脚作用的引脚作用 Vcc:+5V Vcc电压在正常范围内时,数据可读写,锂电池充电;电压在正常范围内时,数据可读写,锂电池充电; Vcc4.25V,读写被禁止,计时功能仍继续;,读写被禁止,计时功能仍继续; Vcc3V,RAM和计时器供电被切换到内部锂电池和计时器供电被切换到内部锂电池 MOT(模式选择)(模式选择) 接接Vcc
4、,选择,选择MOTOROLA时序时序 接接GND,选择,选择Intel时序(时序( 本课程选择本课程选择Intel时序时序) SQW(方波输出)(方波输出) 能从实时钟内部能从实时钟内部15级分频器的级分频器的13个抽头中选择一个作个抽头中选择一个作为输出信号,输出频率可通过对寄存器为输出信号,输出频率可通过对寄存器A编程改变编程改变 AD0-AD7(双向地址(双向地址/数据复用线):数据复用线): 总线周期前半部分出现地址总线周期前半部分出现地址 总线周期后半部分出现数据总线周期后半部分出现数据DS12887的引脚作用的引脚作用 AS(地址选通输入):(地址选通输入): 下降沿把下降沿把AD
5、0AD7输入的地址锁存入输入的地址锁存入DS12887 DS(数据选通或读输入)(数据选通或读输入) 在在Intel模式下,作为读允许输入引脚(模式下,作为读允许输入引脚(read enable)DS12887写时序写时序(Intel模式模式)DS12887读时序读时序(Intel模式模式)DS12887内部寄存器内部寄存器 128个存储单元个存储单元 时间、日历、闹钟时间、日历、闹钟10字节字节 控制和状态寄存器控制和状态寄存器4字节字节 带掉电保护的用户带掉电保护的用户RAM114字节字节DS12887寄存器寄存器地址地址D7D6D5D4D3D2D1D0功能功能00H00059秒秒01H0
6、0059秒闹铃秒闹铃02H00059分分03H00059分闹铃分闹铃04HAM/PM00011 或或 023时时05HAM/PM00011 或或 023时闹铃时闹铃06H0000017星期星期07H000131日日08H0000112月月09H0063年年0AHUIPDV2DV1DV0RS3RS2RS1RS0寄存器寄存器A0BHSETPIEAIEUIESQWEDM24/12DSE寄存器寄存器B0CHIRQFPFAFUF0000寄存器寄存器C0DHVRT0000000寄存器寄存器D0E31RAM32世纪世纪337FRAM时间、日历和闹钟寄存器时间、日历和闹钟寄存器寄存器寄存器A 地址:地址:0
7、x0a UIP(0:至少:至少44us内不会更新,内不会更新,1:更新开始):更新开始) DV2DV0 010:晶振开启并保持时钟运行:晶振开启并保持时钟运行 X11:晶振开启,但分频器保持复位状态:晶振开启,但分频器保持复位状态 RS3RS0(中断周期和(中断周期和SQW输出频率选择)输出频率选择)D7D6D5D4D3D2D1D0UIPDV2DV1DV0RS3RS2RS1RS0中断周期和中断周期和SQW输出频率编码表输出频率编码表RS3 RS2 RS1 RS0中断周期(中断周期(ms)SQW输出频率(输出频率(Hz)000000013.90625ms25600107.8125ms128001
8、1122.070us81920100244.141us40960101488.281us20480110976.562us102401111.953125ms51210003.90625ms25610017.8125ms128101015.625ms64101131.25ms32110062.5ms161101125ms81110250ms41111500ms2寄存器寄存器B 地址:地址:0 x0b SET(0:芯片更新,:芯片更新,1:更新禁止):更新禁止) PIE(0:禁止周期中断输出到:禁止周期中断输出到IRQ,1:允许):允许) AIE(0:禁止闹钟中断输出到:禁止闹钟中断输出到IRQ
9、,1:允许):允许) UIE(0:禁止更新中断输出到:禁止更新中断输出到IRQ,1:允许):允许) SQWE(0:SQW脚为低,脚为低,1:输出方波):输出方波) 24/12(0:12小时制,小时制,1:24小时制)小时制) DSE(1:夏令时允许):夏令时允许)D7D6D5D4D3D2D1D0SETPIEAIEUIESQWEDM24/12DSE寄存器寄存器C 地址:地址:0 x0c IRQF:中断请求标志(:中断请求标志(IRQ输出低电平)输出低电平) PF:周期中断标志:周期中断标志 AF:闹钟中断标志:闹钟中断标志 UF:更新中断标志:更新中断标志D7D6D5D4D3D2D1D0IRQF
10、PFAFUF0000寄存器寄存器D 地址:地址:0 x0d VRT=0 内置电池能量耗尽内置电池能量耗尽D7D6D5D4D3D2D1D0VRT0000000DS12887与单片机的接口与单片机的接口 +5V VCCP3.3 IRQRESETDSCSALE R/WGNDAD7AD0P1.7P1.0P3.7P3.6P3.5P3.4P2.7P2.01516714215+5V3456DS12887LCD1602单片机单片机P3.1P3.2P3.0MOT悬空DS12887的工作过程的工作过程寄存器寄存器B的的SET位置位置1,芯片停止工作,芯片停止工作时间、日历和闹钟单元置初值时间、日历和闹钟单元置初值
11、读寄存器读寄存器C,以消除已有的中断标志,以消除已有的中断标志读寄存器读寄存器D,使片内寄存器和,使片内寄存器和RAM数据有数据有效效寄存器寄存器B的的SET位清位清0,芯片启动工作,芯片启动工作DS12887时钟在液晶板上显示时钟在液晶板上显示#include#define uchar unsigned char #define uint unsigned intsbit RS=P30;/LCD1602数据数据/命令选择命令选择sbit RW=P31;/LCD1602读读/写选择(读写选择(读1,写,写0)sbit EN=P32;/LCD1602Enablesbit dscs=P34;/DS
12、12887片选片选sbit dsas=P35;/DS12887地址锁存地址锁存sbit dsrw=P36;/DS12887读写控制读写控制sbit dsds=P37;/DS12887数据选通数据选通int p;bit flag1,flag_ri;/定义两个位变量定义两个位变量uchar count,s1num,flag,t0_num;/其它变量定义其它变量定义char miao,shi,fen,year,month,day,week,amiao,afen,ashi;char miao_s,miao_g,shi_s,shi_g,fen_s,fen_g;uint temp,realtemp;flo
13、at f_temp;uchar code word1 = time:;uchar code word2 = To popsong !;uchar shim=0,0;uchar fenm=0,0;uchar miaom=0,0;uchar temperature4=0,0,0,0;uchar k=0;void delay(uint z)/延时函数延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void delay_led()/延时子函数延时子函数uchar i=0,j=0;for(i=0; i=10; i+)for(j=0; j=10; j+);LCD16
14、02写命令子函数写命令子函数void LCDcomm_write(uchar command)RS = 0;/规定为指令操作规定为指令操作RW = 0;/允许写操作允许写操作P2 = command;/准备写的命令字准备写的命令字EN = 0;/Enable低电平低电平delay_led();/等待地址和数据在总线上稳定等待地址和数据在总线上稳定EN = 1;/Enable上升沿,写入命令上升沿,写入命令delay_led();/高电平维持一段时间高电平维持一段时间LCD1602写数据子函数写数据子函数void LCDdata_write(uchar content)RS = 1;/规定为数据
15、操作规定为数据操作RW = 0;/允许写操作允许写操作P2 = content;/准备写的数据准备写的数据EN = 0; /Enable低电平低电平delay_led(); /等待地址和数据在总线上稳定等待地址和数据在总线上稳定EN = 1;/Enable上升沿,写入数据上升沿,写入数据delay_led(); /高电平维持一段时间高电平维持一段时间 LCD1602初始化初始化void LCD_init()LCDcomm_write(0 x01);/清屏,数据指针清清屏,数据指针清0LCDcomm_write(0 x38);/设置设置2行行*16字符显示模式字符显示模式LCDcomm_writ
16、e(0 x0c);/开显示,不显示光标,不闪烁开显示,不显示光标,不闪烁LCDcomm_write(0 x06);/写一个字符后地址指针加写一个字符后地址指针加1写写12C887函数函数void DS12887write(uchar addr,uchar date) dsds=1;/在地址写入期间在地址写入期间DS应始终为高电平应始终为高电平dsrw=1;/时序要求地址信号出现以前时序要求地址信号出现以前RW应为高应为高电平电平dsas=1;/地址锁存端输出高电平地址锁存端输出高电平P1=addr;/把地址信号送上总线把地址信号送上总线dscs=0;/选中芯片选中芯片dsas=0;/地址锁存下
17、降沿将地址写入地址锁存下降沿将地址写入DS12887dsrw=0;/RW低电平,准备写数据低电平,准备写数据P1=date;/把数据信号送上总线把数据信号送上总线dsrw=1;/写数据完成写数据完成dsas=1;/取消地址锁存取消地址锁存dscs=1;/取消芯片选择取消芯片选择读读12C887函数函数uchar DS12887read(uchar addr) / uchar ds_date;dsds=1;dsrw=1;/时序要求地址信号出现以前时序要求地址信号出现以前RW应为高电平应为高电平dsas=1;dscs=0;/选中芯片选中芯片P1=addr;/把地址信号送上总线把地址信号送上总线ds
18、as=0; /地址锁存下降沿将地址写入地址锁存下降沿将地址写入DS12887dsds=0;/DS低电平表示低电平表示“读允许读允许”P1=0 xff; /P1口先输出全口先输出全1,为读数据做准备,为读数据做准备ds_date=P1;/从从P1口读入数据口读入数据dsds=1;/读数据完成读数据完成dsas=1; /取消地址锁存取消地址锁存dscs=1; /取消芯片选择取消芯片选择return ds_date;/返回读取的数据返回读取的数据DS12887时钟初始化函数时钟初始化函数void DS12887init()DS12887write(0 x0A,0 x20);/打开振荡器打开振荡器DS
19、12887write(0 x0B,0 x26);/设置设置24小时模式,数据小时模式,数据二进制格式二进制格式set_time();/设置上电初始时间设置上电初始时间 首次上电初始化时间函数首次上电初始化时间函数void set_time() DS12887write(4,14);/ 时时DS12887write(2,21);/分分DS12887write(0,10);/秒秒DS12887write(6,6); /星期星期DS12887write(7,11);/日日DS12887write(8,6);/月月DS12887write(9,11);/年年void main()LCD_init();
20、/液晶显示模块初始化液晶显示模块初始化DS12887init();/ds12c887 初始化,第一次使用时才用初始化,第一次使用时才用while(1) miao=DS12887read(0);/获取时间获取时间 fen=DS12887read(2); shi=DS12887read(4); miao_g=miao%10;/将获取时间转换为将获取时间转换为一位一位 miao_s=miao/10; fen_g=fen%10; fen_s=fen/10; shi_g=shi%10; shi_s=shi/10;LCDcomm_write(0 x80);/指定写入起始地址(第一行开头)指定写入起始地址(
21、第一行开头)for(k=0;k5;k+) LCDdata_write(word1k);/逐个字符写入逐个字符写入LCDdelay_led();LCDdata_write(0 x30+shi_s);/分别将时间写入分别将时间写入LCDLCDdata_write(0 x30+shi_g);LCDdata_write(0 x2f);/间隔符间隔符LCDdata_write(0 x30+fen_s);LCDdata_write(0 x30+fen_g);LCDdata_write(0 x2f);/间隔符间隔符LCDdata_write(0 x30+miao_s);LCDdata_write(0 x30
22、+miao_g);LCDcomm_write(0 xc0);/指定写入起始地址(第二行开头)指定写入起始地址(第二行开头)for(k=0;k15;k+) LCDdata_write(word2k);/逐个字符写入逐个字符写入LCDdelay_led();DS1302串行日历时钟芯片串行日历时钟芯片 美国美国Dallas公司的涓流充电时钟芯片公司的涓流充电时钟芯片 主要应用于微型便携式仪器主要应用于微型便携式仪器Vcc2X1X2GNDVcc1SCLKI/ORST87651234DS1302的主要性能指标的主要性能指标(1)能计算)能计算2100年之前的秒、分、时、日、日期、年之前的秒、分、时、日
23、、日期、星期、月、年,有闰年调整能力星期、月、年,有闰年调整能力(2)内部含有)内部含有31字节静态字节静态RAM,可提供用户访问,可提供用户访问(3)采用串行数据传送方式,)采用串行数据传送方式,3 线接口,引脚少线接口,引脚少(4)工作电压范围宽:)工作电压范围宽:2.05.5V(5)工作电流:)工作电流:2.0V时,小于时,小于300nA(6)时钟或)时钟或RAM数据的读数据的读/写有两种传送方式:单写有两种传送方式:单字节传送和多字节传送字节传送和多字节传送(7)采用)采用8脚脚DIP封装或封装或SOIC封装封装(8)可选工业级温度范围:)可选工业级温度范围:-40 C+85 C(9)
24、具有涓流充电能力)具有涓流充电能力(10)双电源供应(主电源和备份电源)双电源供应(主电源和备份电源) , 备份备份电源可由电池或大容量电容实现电源可由电池或大容量电容实现DS1302引脚功能引脚功能 X1、X2: 32.768KHz晶振接入晶振接入 GND:地地 RST:复位,低电平有效复位,低电平有效 I/O:数据输入数据输入/输出,三态输出,三态 SCLK:串行时钟输入串行时钟输入 Vcc1:工作电源工作电源 Vcc2:备用电源备用电源Vcc2X1X2GNDVcc1SCLKI/ORST87651234Vcc1和和Vcc2中的较大者中的较大者给给DS1302供电供电DS1302的控制寄存器
25、的控制寄存器 用于存放控制命令字用于存放控制命令字 RST引脚回到高电平后,写入的第一个字节就为引脚回到高电平后,写入的第一个字节就为控制命令控制命令 RAM/CK片内片内RAM或日历、时钟寄存器选择或日历、时钟寄存器选择 D5D1地址选择地址选择 R/W读写选择(读写选择(1:读:读 0:写):写)D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0R/WDS1302片内存储单元地址选择片内存储单元地址选择寄存器名称寄存器名称D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0R/W秒寄存器秒寄存器10000000或或1分寄存器分寄存器10000010或或1小时寄
26、存器小时寄存器10000100或或1日寄存器日寄存器10000110或或1月寄存器月寄存器10001000或或1星期寄存器星期寄存器10001010或或1年寄存器年寄存器10001100或或1写保护寄存器写保护寄存器10001110或或1慢充电寄存器慢充电寄存器10010000或或1时钟突发模式时钟突发模式10111110或或1RAM011000000或或1110或或1RAM3011111100或或1RAM突发模式突发模式11111110或或1DS1302内部寄存器内部寄存器寄存器名称寄存器名称取值范围取值范围D7D6D5D4D3D2D1D0秒寄存器秒寄存器0059CH秒的十位秒的十位秒的个位
27、秒的个位分寄存器分寄存器00590分的十位分的十位分的个位分的个位小时寄存器小时寄存器0112或或002312/240A/PHR小时的个位小时的个位日寄存器日寄存器013100日的十位日的十位日的个位日的个位月寄存器月寄存器01120001或或0月的个位月的个位星期寄存器星期寄存器01070000星期几星期几年寄存器年寄存器0199年的十位年的十位年的个位年的个位写保护寄存器写保护寄存器WP0000000慢充电寄存器慢充电寄存器TCSTCSTCSTCSDSDSRSRS时钟突发寄存器时钟突发寄存器DS1302内部寄存器功能说明内部寄存器功能说明 数据都以数据都以BCD码形式表示码形式表示 小时寄
28、存器小时寄存器 D712/24小时制选择位小时制选择位 12小时制(小时制(D7=1 ) ,D5为为1是上午,是上午,D5为为0是下午,是下午,D4为小时的十位为小时的十位 24小时制(小时制(D7=0 ) ,D5、D4为小时的十位为小时的十位 秒寄存器秒寄存器 CH(D7)为时钟暂停位()为时钟暂停位(1:时钟暂停,:时钟暂停,0:时钟启动)时钟启动)DS1302内部寄存器功能说明内部寄存器功能说明 写保护寄存器写保护寄存器 WP写保护位(写保护位(1:写保护,:写保护,0:未写保护):未写保护) 对日历、时钟寄存器或片内对日历、时钟寄存器或片内RAM进行写操作时,进行写操作时,WP应清零应
29、清零 对日历、时钟寄存器或片内对日历、时钟寄存器或片内RAM进行读操作时,进行读操作时,WP一般置一般置1DS1302内部寄存器功能说明内部寄存器功能说明 慢充电寄存器慢充电寄存器 TCS控制慢充电的选择,控制慢充电的选择,TCS=1010时才时才能使慢充电工作能使慢充电工作 DS二极管选择位二极管选择位 DS=01,选择一个二极管,选择一个二极管 DS=10,选择二个二极管,选择二个二极管 DS=11或或00,充电器被禁止,与,充电器被禁止,与TCS无关无关 RS选择连接在选择连接在VCC2与与VCC1之间的电阻,之间的电阻,RS为为00,充电器被禁止,与,充电器被禁止,与TCS无关无关说明
30、:(1)数据都以BCD码形式。(2)小时寄存器的D7位为12小时制/24小时制的选择位,当为1时选12小时制,当为0时选24小时制。当12小时制时,D5位为1是上午,D5位为0是下午,D4为小时的十位。当24小时制时,D5、D4位为小时的十位。(3)秒寄存器中的CH位为时钟暂停位,当为1时钟暂停,为0时钟开始启动。(4)写保护寄存器中的WP为写保护位,当WP=1,写保护,当WP=0未写保护,当对日历、时钟寄存器或片内RAM进行写时WP应清零,当对日历、时钟寄存器或片内RAM进行读时WP一般置1。(5)慢充电寄存器的TCS位为控制慢充电的选择,当它为1010才能使慢充电工作。DS为二极管选择位。
31、DS为01选择一个二极管,DS为10选择二个二极管,DS为11或00充电器被禁止,与TCS无关。RS用于选择连接在VCC2与VCC1之间的电阻,RS为00,充电器被禁止,与TCS无关,电阻选择情况见表.RSRS位位电阻器电阻器阻值阻值0000无无无无0101R1R12K2K1010R2R24K4K1111R3R38K8KDS1302片内片内RAM DS1302片内有片内有31个个RAM单元单元 对片内对片内RAM的操作有两种方式:的操作有两种方式: 单字节方式(命令字为单字节方式(命令字为C0HFDH),命令字),命令字中的中的D5D1用于选择对应的用于选择对应的RAM单元,其中奇单元,其中奇
32、数为读操作,偶数为写操作数为读操作,偶数为写操作 多字节方式(命令字为多字节方式(命令字为FEH、FFH),可一次),可一次把所有的把所有的RAM单元内容进行读写。单元内容进行读写。FEH为写操为写操作,作,FFH为读操作为读操作DS1302的输入输出过程的输入输出过程 RST高电平,启动输入输出过程高电平,启动输入输出过程 命令字写入控制寄存器命令字写入控制寄存器 根据写入的命令字,依次读写内部寄存器或片内根据写入的命令字,依次读写内部寄存器或片内RAM单单元的数据元的数据 对于日历、时钟寄存器,根据命令字,一次可以读写一个日历、对于日历、时钟寄存器,根据命令字,一次可以读写一个日历、时钟寄
33、存器,也可以一次读写时钟寄存器,也可以一次读写8个字节个字节 对所有的日历、时钟寄存器,对所有的日历、时钟寄存器,“写写”命令字为命令字为0BEH,“读读”命令命令字为字为0BFH 对于片内对于片内RAM单元,根据命令字,一次可读写一个字节,一次也单元,根据命令字,一次可读写一个字节,一次也可读写可读写31个字节个字节 数据读写完后,数据读写完后,RST变为低电平,结束输入输出过程变为低电平,结束输入输出过程 无论是命令字还是数据,一个字节传送时都是低位在前,无论是命令字还是数据,一个字节传送时都是低位在前,高位在后,高位在后,每一位的读写发生在时钟的上升沿每一位的读写发生在时钟的上升沿DS1
34、302在开发板上的接口在开发板上的接口 晶振频率晶振频率32768Hz练习练习 在开发板的在开发板的LED数码管上显示预设的时间数码管上显示预设的时间#include#include#define uchar unsigned char#define uint unsigned intuchar code table10 = 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;sbit ACC0 = ACC0;sbit ACC7 = ACC7;sbit T_CLK = P16; /时钟线引脚时钟线引脚sbit T_IO = P
35、35; /数据线引脚数据线引脚sbit T_RST = P17; /复位线引脚复位线引脚1ms延时延时void delay_ms(uint i)/1ms延时延时uchar x,j;for(j=0;ji;j+)for(x=0;x0; i-)/逐个数据位写入逐个数据位写入DS1302T_IO = ACC0;/经经IO口向芯片写入数据最低位口向芯片写入数据最低位T_CLK = 1;/产生一个时钟上升沿,写入数据位产生一个时钟上升沿,写入数据位T_CLK = 0;/时钟恢复低电平时钟恢复低电平ACC = ACC 1;/把下一个待写数据位移到最低位把下一个待写数据位移到最低位读取数据字节读取数据字节uc
36、har DS1302readbyte(void) uchar i;T_RST = 1;/RST高电平启动数据读写过程高电平启动数据读写过程for(i=8; i0; i-)ACC = ACC 1; /右移一位,最高位准备保存数据右移一位,最高位准备保存数据T_IO=1;/向芯片的向芯片的IO端口写端口写1ACC7 = T_IO; /读入读入IO端口的数据位,保存到累加器最高位端口的数据位,保存到累加器最高位T_CLK = 1;/产生时钟上升沿,读出芯片中的下一个数据位产生时钟上升沿,读出芯片中的下一个数据位T_CLK = 0;/时钟恢复低电平时钟恢复低电平return(ACC);/返回从芯片读得
37、的数据字节返回从芯片读得的数据字节向指定地址写入数据向指定地址写入数据void DS1302writedata(uchar ucAddr, uchar ucDa)T_RST = 0;/复位复位T_CLK = 0;/时钟恢复低电平时钟恢复低电平T_RST = 1;/RST高电平,启动读写过程高电平,启动读写过程DS1302writebyte(ucAddr); /写地址写地址 _nop_();/短暂延时短暂延时_nop_();DS1302writebyte(ucDa); /写数据字节写数据字节T_CLK = 1;T_RST = 0;/RST低电平,结束读写过程低电平,结束读写过程读取指定地址的数据
38、字节读取指定地址的数据字节uchar DS1302readdata(uchar ucAddr)uchar ucDa;T_RST = 0;/复位复位T_CLK = 0;/时钟恢复低电平时钟恢复低电平T_RST = 1;/RST高电平,启动读写过程高电平,启动读写过程DS1302writebyte(ucAddr); /写地址,命令写地址,命令_nop_();_nop_();ucDa = DS1302readbyte(); /读读1Byte数据数据T_CLK = 1;/需要关注时序问题需要关注时序问题T_RST = 0;/RST低电平,结束读写过程低电平,结束读写过程return(ucDa);BCD
39、码转换为码转换为DEC码码uchar bcdtodec(uchar bcd)uchar data1;data1 = bcd & 0 x0f; /取取BCD低低4位位bcd = bcd & 0 x70; /剔除剔除BCD的最高位和低的最高位和低4位。位。data1 += bcd 1;data1 += bcd 3; /用位移代替乘法运算用位移代替乘法运算return data1;/返回转换结果返回转换结果写入初始化日期时间写入初始化日期时间void DS1302init(void)DS1302writedata(0 x8e,0);/取消写保护取消写保护DS1302writedata
40、(0 x80,0 x50);/写入秒写入秒DS1302writedata(0 x8e,0);DS1302writedata(0 x82,0 x59);/写入分写入分DS1302writedata(0 x8e,0);DS1302writedata(0 x84,0 x18);/写入小时写入小时DS1302writedata(0 x8e,0);DS1302writedata(0 x86,0 x09);/写入日写入日DS1302writedata(0 x8e,0);DS1302writedata(0 x88,0 x06);/写入月写入月DS1302writedata(0 x8e,0);DS1302wr
41、itedata(0 x8a,0 x04);/写入星期写入星期DS1302writedata(0 x8e,0);DS1302writedata(0 x8c,0 x11);/写入年写入年这种方法只能在程序中写入固定的日期时间这种方法只能在程序中写入固定的日期时间读出日期时间,并在读出日期时间,并在LED数码管上显示数码管上显示void DS1302run(void)uchar sec, min, hour, day, month, year;while(1)DS1302writedata(0 x8f, 0);/秒寄存器读秒寄存器读sec = bcdtodec(DS1302readdata(0 x8
42、1);/读出秒读出秒DS1302writedata(0 x8f, 0);min = bcdtodec(DS1302readdata(0 x83);/读出分读出分DS1302writedata(0 x8f, 0);hour = bcdtodec(DS1302readdata(0 x85); /读出小时读出小时DS1302writedata(0 x8f, 0);day = bcdtodec(DS1302readdata(0 x87);/读出日读出日DS1302writedata(0 x8f, 0);month = bcdtodec(DS1302readdata(0 x89); /读出月读出月DS1
43、302writedata(0 x8f, 0);year = bcdtodec(DS1302readdata(0 x8d); /读出年读出年P0 = tablehour / 10 % 10;/小时十位小时十位P2 = 0;delay_ms(2);P0 = tablehour % 10;/小时个位小时个位P2 = 1;delay_ms(2);P0 = 0 x80;/小数点小数点P2 = 2;delay_ms(2);P0 = tablemin / 10 % 10;/分钟十位分钟十位P2 = 3;delay_ms(2);P0 = tablemin % 10;/分钟个位分钟个位P2 = 4;delay_
44、ms(2);P0 = 0 x80;P2 = 5;delay_ms(2);P0 = tablesec / 10 % 10;/秒十位秒十位P2 = 6;delay_ms(2);P0 = tablesec % 10;/秒个位秒个位P2 = 7;delay_ms(2); void Main(void)DS1302init();DS1302run();练习练习 利用下载程序的利用下载程序的“串口助手串口助手”,通过串行,通过串行异步通信接口,把指定的日期时间写入异步通信接口,把指定的日期时间写入DS1302的寄存器中,并在的寄存器中,并在LDE数码管上显数码管上显示实时时钟示实时时钟利用串口助手写入初始
45、日期时间利用串口助手写入初始日期时间在这里写在这里写日期时间日期时间打开串口打开串口发送数据发送数据#include#include#define uchar unsigned char#define uint unsigned intsbit ACC0 = ACC0;/累加器累加器0位位sbit ACC7 = ACC7;sbit T_CLK = P16; /时钟线引脚时钟线引脚sbit T_IO = P35; /数据线引脚数据线引脚sbit T_RST = P17; /复位线引脚复位线引脚uchar flag=0,a,i;uchar code table10 = 0 x3f,0 x06,0
46、x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar numbers17;初始化串口初始化串口void delay_ms(uint ms)/1ms延时延时uchar x,j;for(j=0;jms;j+)for(x=0;x 1;data1 += bcd 3; /用位移代替乘法运算用位移代替乘法运算return data1;从串口接收日期时间字符串从串口接收日期时间字符串void getdatetime()while(i0; i-)T_IO = ACC0;/经经IO口向芯片写入数据最低位口向芯片写入数据最低位T_CLK = 1;/产生时钟上升沿,
47、写入数据位产生时钟上升沿,写入数据位T_CLK = 0;/时钟恢复低电平时钟恢复低电平ACC = ACC 1; /把累加器中下一个待写数据位移到最低位把累加器中下一个待写数据位移到最低位向指定地址写入数据向指定地址写入数据void DS1302writedata(uchar ucAddr, uchar ucDa)T_RST = 0;/复位复位T_CLK = 0;/时钟恢复低电平时钟恢复低电平T_RST = 1;/RST高电平,启动数据读写过程高电平,启动数据读写过程DS1302writebyte(ucAddr); /写地址写地址 _nop_();/短暂延时短暂延时_nop_();DS1302w
48、ritebyte(ucDa); /写数据字节写数据字节T_CLK = 1;T_RST = 0;/RST低电平,结束读写过程低电平,结束读写过程读取数据字节读取数据字节uchar DS1302readbyte(void) uchar i;T_RST = 1;/RST高电平启动数据读写过程高电平启动数据读写过程for(i=8; i0; i-)ACC = ACC 1; /累加器右移一位,最高位准备保存数据累加器右移一位,最高位准备保存数据T_IO=1;/向芯片的向芯片的IO端口写端口写1ACC7 = T_IO;/读入芯片读入芯片IO端口的数据位,保存到累加器最高位端口的数据位,保存到累加器最高位T_
49、CLK = 1;/产生一个时钟上升沿,读出芯片中的下一个数据位产生一个时钟上升沿,读出芯片中的下一个数据位T_CLK = 0;/时钟恢复低电平时钟恢复低电平return(ACC);/返回从芯片读得的数据字节返回从芯片读得的数据字节读取指定地址的数据字节读取指定地址的数据字节uchar DS1302readdata(uchar ucAddr)uchar ucDa;T_RST = 0;/复位复位T_CLK = 0;/时钟恢复低电平时钟恢复低电平T_RST = 1;/RST高电平,启动数据读写过程高电平,启动数据读写过程DS1302writebyte(ucAddr); /写地址,命令写地址,命令_n
50、op_();_nop_();ucDa = DS1302readbyte(); /读读1Byte数据数据T_CLK = 1;/需要关注时序问题需要关注时序问题T_RST = 0;/RST低电平,结束读写过程低电平,结束读写过程return(ucDa);写入初始日期时间写入初始日期时间void DS1302init(void)uchar temp;DS1302writedata(0 x8e,0);/取消写保护取消写保护temp=numbers15*16+numbers16;DS1302writedata(0 x80,temp);/写入秒写入秒DS1302writedata(0 x8e,0);temp=numbers12*16+num
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全面商场清洗服务合同
- 保密协议商业合同的常见问题
- 肉鸭购销合同范本
- 健康养生信息咨询服务合同
- 时尚耳机购买合同
- 陕西省劳动合同
- 2024标准的长期供货合同(服装类)
- 2024网上订货与回购交易客户合同格式
- 2021年注册城乡规划师《城乡规划相关知识》考试题库及答案解析
- 柑橘基地投资合同范例
- 第五单元(知识清单)【 新教材精讲精研精思 】 七年级语文上册 (部编版)
- 缓冲托辊说明书
- 煤矿机电运输安全培训课件
- 2023年人教版新目标八年级英语下册全册教案
- 安抚(氟比洛芬酯注射液)-泌尿外科术后疼痛管理的基础药物
- 学前教育职业规划书
- GB/T 42249-2022矿产资源综合利用技术指标及其计算方法
- 《意识形态工作管理制度》
- GB/T 21010-2007土地利用现状分类
- GB/T 10125-2021人造气氛腐蚀试验盐雾试验
- 科研-稀土发光材料
评论
0/150
提交评论