具有记忆功能的电子时钟课程设计报告.doc_第1页
具有记忆功能的电子时钟课程设计报告.doc_第2页
具有记忆功能的电子时钟课程设计报告.doc_第3页
具有记忆功能的电子时钟课程设计报告.doc_第4页
具有记忆功能的电子时钟课程设计报告.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

具有记忆功能的电子时钟 一、 题义分析及解决方案 1.题义需求分析 用 STAR ES598PCI 单板开发机和接口芯片设计一电子时钟,具有以下功能: (1)电子时钟能够正常工作,显示小时、分、秒; (2)断电后再启动,要求电子钟能够按照断电前的时间继续计数; (3)预设时间为 23:59:59。 2.解决问题方法及思路 硬件部分 选用 8255 作为 IO 扩展芯片 选用 8279 驱动 8 位数码管作为时间显示模块。 选用 24C02A 存储断电前的时间。 软件部分 读取 8563 中的时间显示,将正确的时间写入 EEPROM,将 EEPROM 中的数据读入完成系统断电后 复位。 二、 硬件设计 8255 在本设计中的作用 IO 扩展,以完成按键输入检测 功能分析 8255 是可编程并行 I/O 接口芯片,有 3 个 8 位并行 I/O 口。具有 3 个通道 3 种工作方式的可编程 并行接口芯片(40 引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255 可作为单片 机与多种外设连接时的中间接口电路。 (1)一个并行输入、输出的 LSI 芯片,多功能的 I/O 器件,可作为 CPU 总线与外围的接口。 (2)具有 24 个可编程设置的 I/O 口,即 3 组 8 位的 I/O 口为 PA 口,PB 口和 PC 口。它们又可分为 两组 12 位的 I/O 口,A 组包括 A 口及 C 口(高 4 位,PC4PC7),B 组包括 B 口及 C 口(低 4 位, PC0PC3)。A 组可设置为基本的 I/O 口,闪控(STROBE)的 I/O 闪控式,双向 I/O3 种模式;B 组只能设 置为基本 I/O 或闪控式 I/O 两种模式,而这些操作模式完全由控制寄存器的控制字决定。 技术参数 RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除, 所有 I/O 口均被置成输入方式。 CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0 时,表示芯片被选中,允许 8255 与 CPU 进行通讯;/CS=1 时,8255 无法与 CPU 做数据传输. RD:读信号线,当这个输入引脚为低跳变沿时,即/RD 产生一个低脉冲且/CS=0 时,允许 8255 通过数 据总线向 CPU 发送数据或状态信息,即 CPU 从 8255 读取信息或数据。 WR:写入信号,当这个输入引脚为低跳变沿时,即/WR 产生一个低脉冲且/CS=0 时,允许 CPU 将数据 或控制字写入 8255。 D0D7:三态双向数据总线,8255 与 CPU 数据传送的通道,当 CPU 执行输入输出指令时,通过它 实现 8 位数据的读/写操作,控制字和状态信息也通过数据总线传送。 8255 具有 3 个相互独立的输入/输出通道端口,用+5V 单电源供电,能在以下三种方式下工作。 方式 0基本输入输出方式;方式 1选通输入/出方式;方式 2双向选通 输入/输出方式; PA0PA7:端口 A 输入输出线,一个 8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入锁存器。 工作于三种方式中的任何一种; PB0PB7:端口 B 输入输出线,一个 8 位的 I/O 锁存器, 一个 8 位的输入输出缓冲器。 不能工作 于方式二; PC0PC7:端口 C 输入输出线,一个 8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入缓冲器。 端口 C 可以通过工作方式设定而分成 2 个 4 位的端口, 每个 4 位的端口包含一个 4 位的锁存器, 分别与端口 A 和端口 B 配合使用,可作为控制信号输出或状态信号输入端口。不能工作于方式一 或二。 A1,A0:地址选择线,用来选择 8255 的 PA 口,PB 口,PC 口和控制寄存器. 当 A1=0,A0=0 时,PA 口被选择; 当 A1=0,A0=1 时,PB 口被选择; 当 A1=1,A0=0 时,PC 口被选择; 当 A1=1.A0=1 时,控制寄存器被选择. 24C02A 在本设计中的作用 记录掉电前的时间。 功能分析 E2PROM 技术参数 1.宽范围的工作电压 1.8v5.5v 2.低电压技术: 1mA 典型工作电流 1uA 典型待机电流 3.储存器组织结构 4.2 线串行接口,完全兼容 I2C 总线 5.施密特触发输入噪声抑制 6.硬件数据写保护 7.内部与周期(最大 5ms) 8.自动递增地址 9.可按照字节写 10.esd 保护大于 2.5kV 11.高可靠性: -擦写寿命:100 万次 数据保持时间:100 年 12.无铅工艺,符合 RoHS 标准 8279 在本设计中的作用 驱动数码管显示时间值 功能分析 (1)可同时进行键盘扫描及文字显示; (2)键盘扫描模式(Scanned Keyboard Mode); (3)传感器扫描模式(Scanned Sensor Mode); (4)激发输入模式(Strobe Input Entry Mode); (5)8 乘 8 键盘 FIFO(先进先出); (6)具有接点消除抖动,2 键锁定及 N 键依此读出模式; (7)双排 8 位数或双排 16 位数的显示器; (8)右边进入或左边进入。16 位字节显示存储器。 技术参数 RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除, 所有 I/O 口均被置成输入方式。 CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0 时,表示芯片被选中,允许 8255 与 CPU 进行通讯;/CS=1 时,8255 无法与 CPU 做数据传输. RD:读信号线,当这个输入引脚为低跳变沿时,即/RD 产生一个低脉冲且/CS=0 时,允许 8255 通过数 据总线向 CPU 发送数据或状态信息,即 CPU 从 8255 读取信息或数据。 WR:写入信号,当这个输入引脚为低跳变沿时,即/WR 产生一个低脉冲且/CS=0 时,允许 CPU 将数据 或控制字写入 8255。 D0D7:三态双向数据总线,8255 与 CPU 数据传送的通道,当 CPU 执行输入输出指令时,通过它 实现 8 位数据的读/写操作,控制字和状态信息也通过数据总线传送。 8255 具有 3 个相互独立的输入/输出通道端口,用+5V 单电源供电,能在以下三种方式下工作。 方式 0基本输入输出方式;方式 1选通输入/出方式;方式 2双向选通 输入/输出方式; PA0PA7:端口 A 输入输出线,一个 8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入锁存器。 工作于三种方式中的任何一种; PB0PB7:端口 B 输入输出线,一个 8 位的 I/O 锁存器, 一个 8 位的输入输出缓冲器。 不能工作 于方式二; PC0PC7:端口 C 输入输出线,一个 8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入缓冲器。 端口 C 可以通过工作方式设定而分成 2 个 4 位的端口, 每个 4 位的端口包含一个 4 位的锁存器, 分别与端口 A 和端口 B 配合使用,可作为控制信号输出或状态信号输入端口。不能工作于方式一 或二。 A1,A0:地址选择线,用来选择 8255 的 PA 口,PB 口,PC 口和控制寄存器. 当 A1=0,A0=0 时,PA 口被选择; 当 A1=0,A0=1 时,PB 口被选择; 当 A1=1,A0=0 时,PC 口被选择; 当 A1=1.A0=1 时,控制寄存器被选择. 4.硬件总逻辑图及其说明 使用了 E4 区的 24C02A,需要将 P1.0 和 P1.1 接到 SDA 和 SCL 使用了 E5 区的 8279 模块,需要将 CLK 接时钟,CS 接 A3 区 CS5 片选,数码管段选和位选对应插 好 使用了 B4 区的 8255,需要将 CS 接 A3 区 CS1,PA 口接按键 三、 控制程序设计 1.控制程序设计思路说明 初始化 读取 EEPROM 中的数据,判断时间是否被初始化过,如果不是,那么设置初始时间,并改写 初始化标志状态;如果是,那么读取时间来初始化时钟芯片。 走时 读取内存中的时间数值,送入数码管显示,并送入 EEPROM 更新数值,遇到计时中断后更新 内存中的时间,当按键被按下,根据按键调整时间参数 2.程序流程图 3.控制程序 SDA BITP1.0 SCL BITP1.1 ;24C02 的片选地址:100H A24C02_WRITEEQU 0A8H A24C02_READ EQU 0A9H TIMEEQU 30H;时间数据缓冲区 MS50DATA31H;存放多少个 50ms SEC DATA32H;秒 MIN DATA33H;分 HOURDATA34H;时 HOUR_MAXDATA35H ;12/24 时制 KSDATA36H BUFFERDATA37H;显示缓冲区 COM_ADDXDATA0F003H PA_ADDXDATA0F000H EXTRNCODE(Display8) ORG 0000H LJMPMAIN ORG 000BH LJMPINT_Timer0 ORG 0100H ;= ;主程序代码区 ;= MAIN: MOVSP,#60H MOVMS50,#00H LCALLI2C_INIT ;I2C 总线初始化 MOVDPTR,#COM_ADD;8255 初始化 MOVA,#90H;PA 输入 MOVXDPTR,A MOVTH0,#76;定时中断计数器初值 MOVTL0,#00;定时 50ms MOVTMOD,#01H;定时器工作方式 1 MOVIE,#82H;允许定时器 0 中断 SETBTR0;开定时器 T0 MOVR7,#06H;读取 6 个数据到内存 MOVR0,#TIME ;设置存取地址 L_R: MOVA,R0 LCALLRead_Byte MOVR0,A INC R0 DJNZR7,L_R MOVA,TIME MOVKS,#10;初始化按键消抖计数器 CJNEA,#01H,INIT_M;判断是否已经进行过时间初始化 JMP MainLoop INIT_M:;初始化时间 MOVSEC,#59 MOVMIN,#59 MOVHOUR,#12 MOVTIME,#01H;记录初始化信息 MainLoop: MOVR0,#TIME MOVA,#TIME LCALLWrite_Page;A24C02 存时间 LCALLDisplay;调用显示 WAIT:JBF0,CHANGED;每 50MS 进行一次显示更新 MOVR0,#MS50 MOVA,KS CLR C SUBBA,MS50 CJNEA,#00H,WAIT;判断当前时间是否等于按键消抖计数器数值 MOVA,KS CJNEA,#10,KS_10;更改按键消抖计数器值,在 250MS 后再进行按键扫描 MOVKS,#0;消抖 JMP KSCAN KS_10: MOVKS,#10 KSCAN: MOVDPTR,#PA_ADD MOVXA,DPTR;读入按键状态 MOVR0,A ANL A,#01H CJNEA,#00H,TEST_SW;初始化按键 JMP INIT_M TEST_SW:;切换时制按键 MOVA,R0 ANL A,#02H CJNEA,#00H,TEST_HP MOVA,HOUR_MAX CJNEA,#24,SET_24 MOVHOUR_MAX,#13 JMP WAIT SET_24: MOVHOUR_MAX,#24 JMP WAIT TEST_HP:;小时增加调整键 MOVA,R0 ANL A,#08H CJNEA,#00H,TEST_MP JMP HOUR_P TEST_MP:;分钟增加调整键 MOVA,R0 ANL A,#20H CJNEA,#00H,TEST_HM JMP MIN_P TEST_HM:;小时减小调整键 MOVA,R0 ANL A,#04H CJNEA,#00H,TEST_MM JMP HOUR_M TEST_MM:;分钟减小调整键 MOVA,R0 ANL A,#10H CJNEA,#00H,RETURN JMP MIN_M CHANGED: CLR F0 JMP MainLoop ;= RETURN:;2K 寻址中继,避免 CJNE 无法返回到 WAIT JMP WAIT ;时间调整代码块 MIN_P: MOVR1,#MIN INC R1;分加一 CJNER1,#60,RETURN MOVR1,#00H JMP WAIT HOUR_P: MOVR1,#HOUR INC R1;时加一 JMP WAIT MIN_M: MOVR1,#MIN DEC R1;分减一 CJNER1,#0FFH,RETURN MOVR1,#59 JMP WAIT HOUR_M: MOVR1,#HOUR DEC R1;时减一 MOVA,HOUR_MAX CJNEA,#24,HM_T12;是否为 24 小时制 CJNER1,#0FFH,RETURN JMP HM_M HM_T12: CJNER1,#00H,RETURN HM_M:MOVR1,HOUR_MAX DEC R1 JMP WAIT INT_Timer0: MOVTL0,#0 MOVTH0,#76 PUSHACC PUSH01H MOVR1,#MS50 INC R1;50MS 单元加一 SETBF0 CJNER1,#20,HOUR_EXTRA MOVR1,#00H;恢复初值 INC R1 INC R1;秒加一 CJNER1,#60,HOUR_EXTRA MOVR1,#00H INC R1 INC R1;分加一 CJNER1,#60,HOUR_EXTRA MOVR1,#00H INC R1 INC R1;时加一 HOUR_EXTRA:;时制判断并准备退出 MOVR1,#HOUR MOVA,HOUR_MAX SETBC SUBBA,R1 JNC ExitInt MOVA,HOUR_MAX CJNEA,#24,Z_01 MOVR1,#00H JMP ExitInt Z_01: MOVR1,#01H ExitInt: POP 01H POP ACC RETI ;十六进制转 BCD 码 HexToBCD: MOVB,#10 DIV AB MOVR0,B INC R0 MOVR0,A INC R0 RET ;准备数码管显示缓冲区 Display: MOVR0,#BUFFER MOVA,SEC ACALLHexToBCD MOVA,MIN ACALLHexToBCD MOVA,HOUR ACALLHexToBCD MOVR0,#10H;第七位不显示 INC R0 MOVR0,#10H;第八位不显示 INC R0 MOVR0,#BUFFER LCALLDisplay8 RET ;= ;24C02 代码区 ;= A24C02_Init: MOVR3,#TIME MOVR2,#01H MOVR0,#TIME A24C02_Write_1: MOVR0,02H INC R0 INC R2 CJNER0,#TIME+08H,A24C02_Write_1 MOVR0,#TIME MOVA,R3 LCALLWrite_Page RET ;I2C 总线初始化 I2C_INIT: SETBSCL SETBSDA RET ;写操作,分字节写和页写模式 ;字节写,一次写入一个字节数据,A-写入地址,B-数据 Write_Byte: PUSHACC;A 中地址压栈 MOVA,#A24C02_WRITE ;写操作指令 LCALLStart;开始信号 LCALLWrite_8bits;写入 8 位数据 LCALLAcknowledge;查询接收端应答信号 POP ACC;写入 A 中地址 LCALLAcknowledge MOVA,B LCALLWrite_8bits;写入 B 中数据 LCALLAcknowledge LCALLStop;结束信号 LCALLAckPolling;等待写操作完成 RET ;页写,一次写入 8 个字节数据,A 中存放起始写入地址,R0 中存放数据首地址 Write_Page: PUSH07H MOVR7,#8 PUSHACC;A 中地址压栈 MOVA,#A24C02_WRITE ;写操作指令 LCALLStart LCALLWrite_8bits;写入 8 位数据 LCALLAcknowledge;查询接收端应答信号 POP ACC;写入 A 中地址 LCALLWrite_8bits LCALLAcknowledge PUSHACC Write_Page_1: MOVA,R0;缓冲区数据逐一写入 LCALLWrite_8bits LCALLAcknowledge INC R0 DJNZR7,Write_Page_1;写 8 次 LCALLStop CLR A LCALLAckPolling;等待写操作完成 POP ACC POP 07H RET ;等待写操作完成 AckPolling: MOVA,#A24C02_Write;写操作指令 LCALLStart;开始信号 LCALLWrite_8bits SETBSDA;从机应答 SETBSCL;应答占用一个脉冲 LCALLDelay_Time JBSDA,AckPolling ;接收端应答标志:将 SDA 置低 CLR SCL LCALLStop;停止信号 RET ;读操作,分为字节读和连续读取操作 ;字节读,一次读取一个字节,A-读取地址 Read_Byte: PUSHACC;A 中地址压栈 LCALLStart;开始信号 MOVA,#A24C02_Write;写操作指令 LCALLWrite_8bits LCALLAcknowledge POP ACC LCALLWrite_8bits LCALLAcknowledge ;立即读,读取当前内部地址的数据,一个字节 Read_Current: LCALLStart;开始信号,下面读取数据 MOVA,#A24C02_Read;读操作指令 LCALLWrite_8bits LCALLAcknowledge LCALLRead_8bits;读取数据,放在 A 中 LCALLStop;停止信号 RET ;写入 8 位数据 Write_8bits: PUSH07H MOVR7,#8 Write_8bits_1: CLR SCL;数据在 SCL 为低时 SDA 上的数据可以改变,此时送上欲写数据 NOP RLC A MOVSDA,C LCALLDelay_Time;延时 SETBSCL LCALLDelay_Time DJNZR7,Write_8bits_1 CLR SCL POP 07H RET ;读取 8 位数据 Read_8bits: PUSH07H MOVR7,#8 Read_8bits_1: CLR SCL LCALLDelay_Time SETBSCL MOVC,SDA RLC A DJNZR7,Read_8bits_1 CLR SCL POP 07H RET ;I2C 总线开始信号 Start: SETBSDA;I2C 总线开始信号:SCL 为高时,SDA 由高低 SETBSCL LCALLDelay_Time CLR SDA LCALLDelay_Time RET ;I2C 总线结束信号 Stop:CLR SDA;I2C 总线操作结束信号

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论