logo资料库

嵌入式系统综合设计实习报告.doc

第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
资料共16页,剩余部分请下载后查看
嵌入式系统综合设计实习报告 实习内容 :单片机电子时钟 学 院 : 信科院 专 业 : 计本 08-2 班 姓 名 : 罗运涧 同 组 人 :陈宥达 学 号 : 3081817230 指导教师 : 金 红 1
目录 一、实习课题………………………………………………………3 二、设计方案………………………………………………………3 三、设计内容………………………………………………………3 四、系统软计程序设计 … …………………………………3 4.1 主程序……………………………………………………3 4.2 数码管显示模块…………………………………………3 4.3 定时器/计数器 T0 中断服务程序………………………3 4.4 按键处理模块……………………………………………5 4.5 汇编语言程序……………………………………………5 五、系统硬件电路的设计…………………………………14 六、实习总结………………………………………………15 七、参考资料………………………………………………16 2
一、实习课题:电子钟设计 二、设计方案: 1、通过单片机内部的计数/定时器,采用软件编程来实 现时钟计数,一般称为软时钟,这种方法的硬件线路简单, 系统的功能一般与软件设计相关,通常用在对时间精度要求 不高的场合。 2、采用时钟芯片,它的功能强大,功能部件集成在芯 片内部,具有自动产生时钟等相关功能,硬件成本相对较高; 软件编程简单,通常用在对时钟精度要求较高的场合。 三、设计内容: 这里采用应用广泛的 AT89C52 作为时钟控制芯片,利用 单片机内部的定时/计数器 T0 实现软时钟的目的。首先将 T0 设定工作于定时方式,对机器周期计数形成基准时间 (50ms),然后用另一个定时/计数器 T1 对基准时间计数形 成秒,妙计 60 次形成分,分计 60 形成小时,小时计到 12。 最后通过数码管把它们的内容在相应的位置显示出来,达到 时、分、秒计时的功能。 此外还要实现对时间的调整功能,89C52 的 P3.2、P3.3、 P3.4 外接三个独立按键,当按下 P3.2 按键时,系统进入调时 间的状态;当按下 P3.3 按键时,对显示的数码管进行加一的 功能;当按下 P3.4 按键时,对显 3
示的数码管进行减一的功能,当按下 P3.5 时确定显示时间, 达到调整时间的目的。 四、系统软件程序设计 4.1、主程序 先对显示单元和定时器/计数器初始化,然后重复调用数 码管显示模块和按键处理模块,当有按键按下时,则转入相 应的功能程序。 4.2 数码管显示模块 本实验有 8 个数码管,从右到左为妙、横线、分、横线、 时。在本系统中数码管显示采用软件译码动态显示。在存储 器中首先建立一张显示信息的字段码表,显示时,先从显示 缓冲区中取出显示的信息,然后通过查表程序在字段 表中查出所显示的信息的断码,从 P0 端口输出,同时 在 P2 端口进行数码管显示。 4.3、定时器/计数器 T0 中断服务程序 T0 用于计时,选中方式一,重复定时,定时时间设为 50ms,定时时间到则中断,在中断服务程序中用一个计数器 对 50ms 计数,计 20 次则对秒单元加一。秒单元加到 60 则 对分单元加一,同时秒单元清 0;分单元加到 60 则对时单元 加一,同时分单元清 0;时单元加到 24 则对时单元清 0,标 志一天时间计满。在对各单元计数的同时,把他们的值放到 4
存储器单元的指定位置。流程图如下: 开始 现场保护,重置初值,启动下一个 50ms 50ms 计数器加一 50ms 计数器=20? 秒单元加一,50ms 计数器清 0 秒单元=60? 分单元加一,秒单元清 0 分单元=60? 时单元加一,分单元清 0 时单元=24? 时单元清 0 NO NO NO NO 开始 显示单元清 T0、T1 设为 16 位计数模式 允许 T0 中断 调用显示子程序 是 按下键否 进入功能程序 4.4、按键处理模块 按键设置为:如果没有按键吗,则时钟正常走时。当按 中断返回 主程序流程图 T0 中断服务程序 下 K0 键时,进入调分状态,时钟停止走动;按 K1 和 K2 按 键可以进行加一和减一操作;继续按 K0 键可以分别进行分 和小时的调整;最后按 K0 键启动计时。 4.5、汇编语言程序 ;======1602 液晶时钟显示程序========== ;四键控制,P3.2 为调时选择键,按第 1 次为秒钟调整,按第 2 次为分钟调整, 5
;将 LCD 使能端与 P2.5 针脚连接 ;将 LCD 的 RS 端与 P2.6 针脚连接 ;将 LCD 的 RW 端与 P3.6 针脚连接 ;设置时显示缓冲区的首地址 ;设置时数据暂存的地址 ;设置分数据暂存的地址 ;设置秒数据暂存的首地址 ;LCD 数据显示输入端口与 P0 端口连接(采用 按第 3 次为时钟调整 ;P3.3 为加 1 键 ' ;P3.4 为减 1 键 ;P3.5 为确认键 LCD EQU P0 并行输入) E BIT P2.5 RS BIT P2.6 RW BIT P3.6 H_BIT EQU 20H M_BIT EQU 21H S_BIT EQU 22H EQU 23H HH MM EQU 24H SS EQU 25H HH_BIT EQU 26H MM_BIT EQU 27H SS_BIT EQU 28H ;================ ORG 0000H AJMP MAIN ORG 000BH AJMP TIME0 ORG 0030H ;========主程序=========== MAIN: MOV SP,#60H MOV P1,#00H MOV R5,#00H MOV H_BIT,#00H MOV M_BIT,#00H MOV S_BIT,#00H MOV HH_BIT,#00H MOV MM_BIT,#00H MOV SS_BIT,#00H MOV HH,#0CH MOV MM,#00H MOV SS,#00H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB TR0 ;将 P1 端口置为 0 ;将 R5 寄存器值为 0 ;将时数据保存地址置为 0 ;将时数据保存地址置为 0 ;时初值设置 ;分初值设置 ;秒初值设置 ;设置定时计数器方式为 T1 门控制 ;设置计数器高字节 ;设置计数器低字节 ;总中断允许 ;定时器 0 中断允许 6
;调用 BCD 码转换子程序 ;调用 LCD 设置子程序 ;将 TAB1 的首地址存入到 DPTR 上 ;将时十位显示缓冲里的数据转移到 A 寄 ;调用数据显示传送子程序 ;将时个位显示缓冲里的数据转移至 A 寄 ;将 LCD 设置为等待写状态 ;向 P0 口输出 00000001 ;调用 LCDWC 程序 ;显示':' MOV LCD,#01H LCALL LCDWC ;===================================== LOOP: LCALL EY LCALL KEY LCALL EYY LJMP LOOP ;=========显示子程序================= EY: LCALL LOOP1 LCALL LCDSET MOV DPTR,#TAB1 MOV A,H_BIT 存器里 LCALL DISP MOV A,HH_BIT 存器里 LCALL DISP MOV A,#58 MOV LCD,A LCALL WRR MOV A,M_BIT LCALL DISP MOV A,MM_BIT LCALL DISP MOV A,#58 MOV LCD,A LCALL WRR MOV A,S_BIT LCALL DISP MOV A,SS_BIT LCALL DISP RET ;=======BCD 码转换子程序=============== LOOP1: MOV A,SS MOV B,#10 DIV AB MOV S_BIT,A 显示缓冲上 MOV SS_BIT,B 示缓冲上 MOV A,MM ;转换为 BCD 将原数除以 10, ;得到十位为商,保存在 A 里,转移到十位 ;个位为余数,保存在 B 里,转移到个位显 7
MOV B,#10 DIV AB MOV M_BIT,A MOV MM_BIT,B MOV A,HH MOV B,#10 DIV AB MOV H_BIT,A MOV HH_BIT,B RET ;==========中断子程序================= TIME0: PUSH ACC PUSH PSW MOV TH0,#3CH MOV TL0,#0B0H INC R5 CJNE R5,#20,LOOP2 MOV R5,#00H INC SS MOV A,SS CJNE A,#60,LOOP2 MOV SS,#00H INC MM MOV A,MM CJNE A,#60,LOOP2 MOV MM,#00H INC HH MOV A,HH CJNE A,#24,LOOP2 MOV HH,#00H LOOP2: POP PSW POP ACC RETI ;分重新计数 ;时加 1 ;将累加器内容推入堆栈寄存器保存 ;将状态寄存器内容推入堆栈寄存器保存 ;将 T0 计数器高字节置为 3CH ;将 T0 计数器低字节置为 B0H ;R5 自增加 1 ;当 R5 等于 20,调用 LOOP2 子程序 ;将 R5 重置为 0,重新计数 n ;秒加 1 ; ;每六十秒,调用 LOOP2 子程序一次 ;将秒置为 0,重新计数 ;分加 1 ;每六十分钟调用一次 LOOP2 ;每 24 小时,调用一次 LOOP2 ;时重新计数 ;=====按键检测子程序==================== KEY: CLR EA ;中断不允许,即屏蔽中断 ;当 A 键按下,进入时间调整,并调 JNB P3.2,HH_KEY 用时调整子程序 KEY1: SETB EA RET ;中断允许 ;=======时钟调整子程序============== 8
分享到:
收藏