基于51单片机的ds12c887时钟芯片的时钟电路设计内容摘要:
s 内芯片不会进行更新,此时可以通过读写相应字节获取时间信息和设置信息 .UIP 位为只读位且不受复位信号影响,通过把 B 寄存器中的 SET 位置 1将 UIP 位清零并禁止时间更新 .DV0DV2 用来开关晶体振 荡器和复位分频器 ,本课题中不需设置 .RS0RS3用于控制分频器输出,设置成不同的值可以在 SQW引脚得到不同的分频输出或得到周期性的中断 (通过控制寄存器 B 实现 ).由于本设计不涉及,具体设置值与对应频率请参考 DS12C887技术文档 ,不在列举 . 寄存器 B结构如图所示 . 表 DS12C887寄存器 B结构 当 SET位为 0时,时间正常更新;当 SET位置 1时,停止更新 ,此时, MUC可以对 DS12C887进行初始化,该位不受复位信号影响 .PIE位为周期性中断使能位,该位为 1时,周期性中断使能;为 0 时禁止中断 .本课题中此位置 位为闹钟中断使能位本课题中由于没有使用中断,该位置 ,本设计中不考虑 .SQWE为方波使能信号,本设计不予处理 .DM 位为数据格式选择位,置 1时时间数据以二进制格式存放,清 0 后,数据以 BCD码格式存放 .24/12 位为时间格式设置位,该位为 1时,时间为 24小时格式,为 0时,时间为 12小时格式,该位不受复位信号影响 .DSE为夏令时使能位,本设计不予考虑 寄存器 C结构如图所示 . 表 DS12C887寄存器 C结构 其中 4 个有效位均为中断标志,本设计不予考虑 ,但当初始化完成并禁止中断时,应将该寄存器读取清 0. 寄存器 D结构如图所示 表 DS12C887寄存器 D结构 VRT位指示片内锂电池状态,当为 0 时,说明内部锂电池耗尽,不能保证内部 RAM中数据和时间数据的正确性 .该位只读 . 3)DS18B20接口程序设计 . DS18B20设置寄存器结构如图 表 DS18B20设置寄存器结构 通过设置该寄存器中 R R0的不同状态,可以得到不同的温度分辨率,分辨率越高,转换所需时间也越长 (见图 ).为简便起见,本课题中采用系统复位后的默认值,即 R1R0=11,分辨率为 12位数据 .其余位为传感器内部使用,不能进行操作 . 表 DS18B20控制寄存器 R0、 R1设置与分辨率对应关系 由于 DS18B20数据传送采取单总线方式,所以对操作时序和操作步骤有着严格的要求,任何不符合步骤的操作,都可能造成 DS18B20 不响应 .每次在对 DS18B20 进行操作时,都要进行初始化 .初始化时序如图所示: 图 DS18B20初始化时序图 首先,控制器将总线拉低并保持 480μ s,释放总线,等待 1560μ s后,如果复位成功, DS18B20 会将总线拉低,产生一个 60240μ s的低脉冲,控制器通过检测低脉冲信号确定复位是否成功 .复位成功后,在上拉电阻的作用下, DS18B20会恢复到高电平静止状态 . 在静止状态,总线在内部上拉电阻作用下,保持高电平 .当控制器进行读写操作时,先将总线拉低 1μ s以上, DS18B20回应一个高电平应答信号,控制器检测到应答信号后,即可对总线进行操作 . 向 DS18B20读写一位数据时序如图所示: 图 DS18B20读写数据时序图 写” 0”时,控制器将总线拉低 30μ s 以上即可,写” 1”时,控制器将总线拉低 15μ s,然后释放总线 .读数据时,控制器将总线拉低 15μ s,然后释放总线并读取总线上的数据 . 4)LCD显示驱动程序 : 读状态 : 输入 :RS=L,RW=H,E=H 输出 :D0D8=状态字 写指令 : 输入 :RS=L,RW=L,D0D7=指令码, E=高脉冲 输出 :无 读数据 : 输入 :RS=H,RW=H,E=H 输出: D0D7数据 写数据:输入: RS=H,RW=L,D0D7=数据, E=高脉冲 输出 : 无 STA7 STA6 STA5 STA4 STA3 STA2 STA1 STA0 D7 D6 D5 D4 D3 D2 D1 D0 表 LCD状态字寄存 器结构 STA0STA6:当前数据地址指针的数值 STA7:读写操作使能 1:禁止, 0:允许 由于 LCD指令集比较简单,不再详细介绍,请参考 1602字符型液晶屏资料 . : 图 LCD初始化流程图 初始化完成后,即可对液晶显示器进行操作,具体程序: 汇编程序 : ORG 0000H AJMP START START: ACALL SETTIME。 设置初始时间 LOOP: ACALL GETTIME。 循环读取当前时间 AJMP LOOP。 SETTIME: MOV DPTR,7D0AH。 DS12C887 的 A寄存器 MOV A,20H MOVX @DPTR,A。 打开 DS12C887 的内部晶振并使 RTC(实时时钟)记录时间 INC DPTR。 DS12C887 的 B 寄存器 MOV A,08H MOVX @DPTR,A。 设十进制 BCD 码, 24 小时制,不定时 MOV DPTR,7D0DH。 DS12C887 的 D 寄存器 MOVX A,@DPTR。 如果 D 寄存器的第 7 位为 0,表示电池耗尽 JNB ,ERROR MOV DPTR,7D00H。 DS12C887 的秒单元 MOV A,00H MOVX @DPTR,A。 写入秒 MOV DPTR,7D02H。 DS12C887 分单元 MOV A,21H MOVX @DPTR,A。 写 入分 MOV DPTR,7D04H。 DS12C887 时单元 MOV A,03H MOVX @DPTR,A。 写入时 MOV DPTR,7D06H。 DS1。基于51单片机的ds12c887时钟芯片的时钟电路设计
相关推荐
111D31Q22D42Q53D73Q64D84Q95D135Q126D146Q157D177Q168D188Q19U 5 017 4L S 3 73P 2. 0P 2. 1P 2. 2A L EIN T 0V C CV C CR 5 00IN 0C 5 051 04C 5 031 04C 5 041 041234567J 50 3C O N 73 12J 50 4C O N 2R 5 061
是对应口地址不同。 JM12864J 的电路结 构特点 JM12864J是使用 HD61202及其兼容控制驱动器作为列驱动器,同时使用 HD61203作为行驱动器的液晶模块。 由于 HD6120不与 MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单,因此这里就不作介绍了。 下面主要介绍一下JM12864J的逻辑电路图。 JM12864J共有两片
,否则,移入 0. if(IR_timer=7){ IR_DATAL|=1。 IR_DATAL=1。 }else{ IR_DATAL=1。 } } i++。 IR_timer=0。 if(i=32) //i=32时,标志着一个完整的红外数据帧已经接收完,将接收完标志致一 { IR_OK=1。 } }else { i=0。 starflag=1。 IR_OK=0。 IR_timer=0。 } }
首先根据硬件设计在 Protues 中完成原理图的设计,确定使用单片机的哪些 I/O 口,然根据软件设计中 的流程图编写单片机 C 语言程序。 结合题目要求模块化地编写程序,首先编写走时程序,然后编写闹铃 闹铃 的程序,最后完成倒计时设计,在分模块化编写过程中,不断地根据仿真现象调试程序来修复软件编写错误。 例如调试液晶的显示问题,写指令 write_(0x80)将数据指针定位到第一行第一个字处
respectively, of an inverting amplifier which can be configured for use as an onchip oscillator, as shown in Figure a quartz crystal or ceramic resonator may be used. To drive the device from an
ack()。 } stop()。 //停止 } read(uchar slave_write_address,uchar byte_address,uchar slave_read_address)//读一个数据 { uchar temp,temp1,i,ii,x,data_data。 star()。 //开始 for(ii=0。 ii3。 ii++)//根据 24CXX 文档资料,和时序图