汇编语言显示时钟程序
- 格式:pdf
- 大小:57.87 KB
- 文档页数:6
单片机延时500ms程序汇编一、概述在单片机编程中,延时操作是非常常见且重要的一部分。
延时可以使程序在执行过程中暂停一段时间,以确保输入输出设备能够正常工作,或者是为了保护其他设备。
本文将介绍如何使用汇编语言编写单片机延时500ms的程序。
二、延时原理在单片机中,延时操作通常通过循环来实现。
每个循环需要一定的时间,通过控制循环次数和循环体内的指令数量,可以实现不同长度的延时。
在汇编语言中,可以使用计数器来控制循环次数,从而实现精确的延时操作。
三、汇编语言编写延时程序接下来,我们将使用汇编语言编写延时500ms的程序。
1. 设置计数器初值在程序的开头我们需要设置计数器的初值,这个初值需要根据单片机的工作频率和所需的延时时间来计算。
假设单片机的工作频率为1MHz,那么在循环500次后,就能够达到500ms的延时。
我们需要将计数器的初值设为500。
2. 循环计数接下来,我们进入一个循环,在循环中进行计数操作。
每次循环结束时,都需要检查计数器的值,当计数器减至0时,表示已经达到了500ms的延时时间,可以退出循环。
3. 优化程序为了提高程序的执行效率,可以对计数器进行优化。
例如可以通过嵌套循环的方式,减少循环的次数,从而提高延时的精度和稳定性。
四、程序示例下面是一个简单的示例程序,演示了如何使用汇编语言编写延时500ms的程序。
```org 0x00mov r2, #500 ; 设置计数器初值为500delay_loop:djnz r2, delay_loop ; 进行计数ret ; 延时结束,退出程序```五、结语通过以上的示例程序,我们可以看到如何使用汇编语言编写单片机延时500ms的程序。
当然,实际的延时程序可能会更加复杂,需要根据具体的单片机型号和工作频率进行调整,但是思路是相似的。
在实际的编程中,需要根据具体的需求和硬件环境来进行调整和优化,以实现更加稳定和精确的延时操作。
希望本文对单片机延时程序的编写有所帮助,也欢迎大家在评论区提出宝贵意见和建议。
沈阳航空航天大学课程设计报告课程设计名称:微机系统综合课程设计课程设计题目:电子秒表院(系):计算机学院专业:计算机科学与技术班级:04010101学号:2010040101024姓名:指导教师:訾学博完成日期:2013年7月5日目录第1章总体设计方案 (1)1.1课程设计的内容和要求 (1)1.2设计原理 (1)1.3设计思路 (2)1.4实验环境 (3)第2章详细设计方案 (4)2.1主程序设计 (4)2.2功能模块的设计与实现 (5)2.3程序连线图 (7)第3章结果测试及分析 (9)3.1结果测试 (9)3.2结果分析 (9)参考文献 (10)附录 (11)第1章总体设计方案1.1 课程设计的内容和要求一、课程设计内容:设计一个带时间显示的电子秒表,具体内容如下:1.电子秒表的初始状态为零,分别显示分、秒、毫秒;2.设计一个按钮,按第一次开始计时,按第二次计时暂停,显示当前记录的时间,按第三次计时停止,回到初始态;3.有时间显示的功能,当不用电子秒表的功能时,显示当先的时间,分别为时、分、秒形式。
二、课程设计要求:1.独立完成课程设计任务;2.通过老师当场验收;3.交出完整的课程设计报告。
1.2 设计原理根据课程设计任务书的内容与要求,要设计一个带时间显示的电子秒表,设计一个按钮带有计时开始、计时暂停、计时清零功能,还要可以进行时钟显示。
在本次设计中主要使用了8253定时/计数器芯片、8259A中断控制芯片以及8279键盘/显示芯片来完成电子秒表的计时过程和时钟显示过程的模拟。
程序开始时扫描键盘判断是否按键,如有则读出相应的控制键,来决定做什么操作,例如开始计时、暂停计时、停止计时、时钟显示等等。
利用8253定时/计数器芯片实现分频功能,使其产生100HZ(10毫秒)的方波,使计时周期为10ms;利用8259A中断控制芯片产生中断响应,通过8253控制8259每10毫秒产生一次中断,使秒表加1,实现计时功能;利用8279键盘/显示芯片在数码管上进行显示,将秒表的计时过程、时钟的当前时间显示在数码管上。
课程设计说明书姓名:学号:院系:专业:题目:实时时钟程序设计指导教师:职称:课程设计说明书院系:专业:姓名:学号:课程设计题目:实时时钟程序设计起迄日期:课程设计地点:指导教师:系主任:课程设计任务书课程设计任务书目录第一章课题设计目的容及要求 (6)1.1 目的................ ... . . . . . . . . .61.2 容 (6)1.3 要求 (6)第二章程序流程图设计 (2)2.1主流程图设计 (2)2.2子流程图设计.............. 错误!未定义书签。
第三章程序段落的说明 (8)3.1光标的设立和隐藏 (8)3.2调用系统的时间 (5)3.3判断是否有键盘的输入 (6)第四章程序调试说明、结果记录与分析 (7)4.1程序调试的过程 (7)4.2调试结果 (7)4.3分析结果 (8)第五章总结与体会 (8)参考文献 (8)附录 (9)1.程序流程图 (9)2.程序清单 (11)第一章课题设计目得容及要求1.1 目得1)培养学生文献检索的能力,特别是如何利用Internet检索需要的文献资料。
2)培养学生综合分析问题、发现问题和解决问题的能力。
3)培养学生运用知识的能力和工程设计的能力。
4)提高学生课程设计报告撰写水平。
1.2 容设计一个根据所学汇编语言课程的知识,熟练8086汇编语言的编程原理,和程序设计思想,编写一个实时时钟程序进一步提高综合运用知识的能力。
1.3 要求每隔一秒显示系统时钟;可以重复输入,有退出键功能。
第二章程序流程图设计2.1主流程图设计由方案设计分析可知,此次设计比较简单,先初始化程序,然后设立光标,在光标移动时,不断地取时,取分,取秒,并不断的循环。
在循环的过程中,当按下ESC键时退出程序;当按下其它键时,程序继续运行,并显示时间界面,再按下ESC键时,程序又将退出。
流程图设计:当初始化后,设定一个光标用来显示时间的时、分、秒,并将光标隐藏。
目录摘要 (Ⅰ)1 电子秒表与闹钟系统概述 (1)1.1 课程设计基本要求 (1)1.2 系统实现功能 (1)1.3 系统应用价值展望 (2)2 仿真软件Proteus和Keil简介 (3)2.1 Proteus简介 (3)2.2 Keil简介 (3)3 系统工作原理分析 (4)3.1AT89C2051模块 (4)3.2 显示驱动模块 (6)3.3 数码管显示模块 (8)4 程序流程图设计 (9)5 Proteus仿真原理图 (12)6 课程设计体会 (14)参考文献 (15)附:源程序代码 (16)摘要随着科学技术的不断发展 , 人们对时间计量的要求越来越高。
在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。
本作品是以STC89C51单片机作为主控芯片,使用12MHZ的晶振,使用专用时钟日历芯片DS12C887产生时间信息,时间精确。
软件部分以C语言为主体,用1602LCD 液晶屏显示输出信息,输出信息量多,更直观、人性化。
该时钟可实现人机交互,可通过提供的键盘对其进行调整。
系统具有以下功能:年、月、日、时、分、秒显示;12小时/24小时模式切换,在12小时模式中,用AM和PM区分上午和下午;秒表功能;整点闹铃和报时功能,且闹钟可设置多组。
本次设计的电子时钟系统由单片机最小系统,1602LCD液晶屏,时钟芯片,调整按键,蜂鸣器,电源五大部分组成。
关键词:定时器中断闹钟电子时钟1 电子秒表与闹钟系统概述1.1 课程设计基本要求(1) 用并行口设计一个具有显示功能的秒表,显示准确的北京时间(时、分、秒),可用24小时制式;(2) 有时间校准功能;(3) 允许通过转换功能键转换显示时间,用定时器实现一个电子闹钟,能设定和修改定时的时间,并能到时响铃通知;(4) 所有按键需要通过串口自发自收来调校各种功能。
1.2 系统实现功能本系统是基于单片机AT89S52制作的数字电子钟。
根据实验要求,在完成实验所要求的基本功能外,扩展了几个功能。
编号单片机课程设计(2013 级)题目:基于52单片机电子时钟的设计学院:物理与机电工程学院专业:电子信息科学与技术作者姓名:陈✘✘党✘✘杜✘✘指导教师:张✘✘职称:教授完成日期:2016 年7 月 2 日二〇一六年七月基于52单片机电子时钟的设计摘要本次设计的多功能时钟系统采用STC89C52单片机为核心器件,利用其定时器/计数器定时和记数的原理,结合液晶显示电路、时钟芯片DS1302电路、电源电路以及按键电路来设计计时器。
将软硬件有机地结合起来,使得系统能够实现液晶显示,显示有年、月、日、时、分、秒以及星期,还可以设置闹钟和整点报时。
其中软件系统采用单片机汇编语言编写程序,包括显示程序、闹钟程序、中断、延时程序,按键消抖程序等,并在keil中调试运行,硬件系统利用PROTEUS 强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。
关键词:STC89C52芯片;时钟芯片DS1302;单片机汇编语言;液晶显示电路1 设计任务及要求分析1.1 设计任务:基于单片机的电子时钟设计1.2 要求:1.2.1 用LCD液晶作为显示设备1.2.2 可以分别设定小时、分钟和秒,复位后时间为 00 00 001.2.3 能实现日期的设置年、月、日1.3 扩展要求:如闹钟功能、显示星期、整点音乐报时等2 系统方案2.1 系统整体方案的论证电路原理设计是基于小系统板包括电源电路、复位电路、按键电路、DS1302时钟电路、液晶显示驱动电路、输出控制电路。
电源部分是用电池来提供的3v-5v,晶体振荡器采用的是12MHz的石英晶体振荡器。
整个系统用单片机为中央控制器,由单片机执行采集时钟芯片的时间信号并通过显示模块来输出信号及相关的控制功能。
时钟芯片产生时钟信号,利用单片机的I/O口传给单片机;并通过I/O口实现LCD的显示。
系统设有4个独立式按键可以对时间年、月、日和星期进行调整,还可以设置闹钟。
具体如图2.1所示:图2.1 系统整体框图3硬件设计与实现3.1单片机最小系统STC89C52是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。
汇编语⾔实现电⼦闹钟思路详解2.1 设计思路⾸先使⽤8255、8254、8259 三个芯⽚实现电⼦时钟的功能,让闹钟可以正常⾛时;其次,在时钟的基础上添加闹铃功能、整点报时功能、设置当前时间功能;完成设计。
2.2 设计⽅案1. 电⼦时钟部分:此次设计是通过对计数器8254设定计数值对脉冲进⾏计数,在程序⾥,8254⼯作于计数器0,⽅式3。
接⼊的CLK为1MHz,设计数初值为10000,每100次中断计数⼀次,产⽣的记数时间正好是时钟每秒⾛过的时间。
通过对中断控制器8259设置初始化命令字初值来控制中断。
程序中通过移位指令来实现时、秒、分的个位和⼗位的独⾃存储,将分、秒的个位⼗位分别存⼊指定的寄存器中。
⽐较转移指令来完成秒和分的累加。
七段数码管由8255并⾏接⼝的A⼝进⾏位的选择,通过B⼝输出要显⽰的段码。
这样就在6个七段数码管上分别显⽰时、分和秒。
当1S时间到时,修改当前数码管数值,10秒时将秒的低位清零,⾼位加1,分和时亦是如此;到达60秒时,将秒清零,分加1,到达60分时,将分清零,⼩时加1,到达24⼩时则全部清零。
2. 闹钟响铃部分:对于闹钟部分,我们⾸先要完成数码管显⽰单元按键的连接和设计,让16个按键分别为0-F;再利⽤实验平台的单次脉冲输⼊KK1产⽣⼀次中断,这样就可以设置时间了。
将设置好的时间储存起来,时刻与当前的时间进⾏⽐较,当时间⼀样时,计数器1⼯作,蜂鸣器蜂鸣,播放⾳乐,这就完成了闹钟响铃功能。
3. 整点报时部分:整点报时,就是在整时的时候响⼀次铃,当时钟整点时,⽆论是⼏点,时钟的分和秒部分都为零,所以,只要让时钟的分和秒部分与零进⾏⽐较,当他们都相等时,就代表到达整点了,可以响铃了。
整点报时就完成了,本闹钟设置的整点报时时长为5秒。
4. 设置当前时间:本部分也⽤到了数码管显⽰单元的按键部分,只要利⽤之前的设计就好了,这次使⽤单次脉冲输⼊的KK2产⽣中断设置时间,再将设置的时间存储在时间变量中,时间就设置好了。
实验一乘法运算实验一、实验目的:1、了解调试程序DEBUG的常用命令和功能。
2、掌握多字节乘法运算程序的编写方法。
3、学会程序调试方法。
二、实验原理一、实验目的:1、掌握宏汇编语言源程序的编辑方法。
2、学会用MASM 及LINK 程序将源程序文献转换成可执行文献的方法。
3、学会调用DOS 软中断功能来显示字符串的方法。
二、实验环节:1、运用全屏幕编辑程序来编辑源程序,文献扩展名为ASM,操作如下:A>NE 盘号:文献名.ASM2、运用MASM 程序将源程序文献汇编成目的文献,目的文献扩展名为OBJ,操作如下:A>MASM 盘号:文献名.ASM 盘号:文献名.OBJ在编辑中发生错误,要用NE 程序来修改源程序文献。
3、用L I NK 程序将目的文献转换成可执行文献,可执行文献扩展名为EXE,操作如下:A>L I NK 盘号:文献名.OBJ 盘号:文献名.EXE 4、在DOS 环境下执行可执行文献。
三、实验内容:按照宏汇编语言源程序格式的规定,编写一个文献,显示如下字符串:I like mi c r oc o mputer v ery much.四、实验报告内容:1、 实验用源程序STACKS SEGMENT STACK 滩栈段实验四显示字符串实验 DWI 2 8 DU P(?);只有128个字节STACKS ENDS DATAS SEGM ENT;数据段MSG1 D B'I lik e m i crocomputer very much.?$'DATA S ENDSCODES SEGMENT;代码段ASSUME CS: CODE S,DS:DATASSTART: MOV AX,DATAS ;初始化MOV DS,AXMOV DX,OFFSET MSGIMOV AH,9INT 2 1 HMOV AX, 4 COO H ;退出程序I NT 21HC ODES END SEND START2、实验结果分析实验显示出了“I 1 ike mic r o c o mputer ver y much.实验五显示字符串实验一、实验目的:1、进一步掌握字符串的显示方法。
电子钟汇编课程设计一、课程目标知识目标:1. 学生能理解电子钟的基本工作原理,掌握汇编语言编程的基本语法;2. 学生能运用汇编语言设计简单的电子时钟程序,实现时、分、秒的正常显示和更新;3. 学生了解并能解释电子钟程序中关键汇编指令的作用及其执行过程。
技能目标:1. 学生掌握汇编语言编程的基本步骤,具备编写、调试简单电子钟程序的能力;2. 学生能够运用所学知识解决实际电子钟编程中遇到的问题,提高问题解决能力;3. 学生通过课程实践,提高动手操作能力,培养团队协作意识。
情感态度价值观目标:1. 学生培养对电子技术和编程的兴趣,激发探索精神,增强创新意识;2. 学生在学习过程中,培养良好的编程习惯,遵循代码规范,提高自我约束能力;3. 学生通过课程学习,认识到编程在现实生活中的应用价值,树立正确的价值观。
课程性质:本课程为实践性较强的电子技术课程,旨在让学生通过动手实践,掌握汇编语言编程技能,培养解决实际问题的能力。
学生特点:学生具备一定的电子技术基础知识,对编程有一定了解,但可能缺乏实际编程经验。
教学要求:教师应注重理论与实践相结合,引导学生主动参与实践,培养学生动手能力和创新精神。
同时,关注学生的个体差异,因材施教,确保课程目标的实现。
通过分解课程目标为具体学习成果,为后续教学设计和评估提供依据。
二、教学内容本课程教学内容主要包括以下几部分:1. 电子钟基本原理:介绍电子钟的组成、工作原理,特别是时钟芯片的应用和时序控制。
2. 汇编语言基础知识:回顾汇编语言的基本语法、指令系统,重点讲解与电子钟编程相关的重要指令。
3. 电子钟程序设计:详细讲解电子钟程序的编写步骤,包括初始化设置、时序控制、显示更新等。
4. 实践操作:指导学生动手编写、调试电子钟程序,学会使用开发工具和调试技巧。
5. 程序优化与调试:分析程序中可能出现的错误和问题,引导学生进行程序优化,提高电子钟的稳定性和可靠性。
教学内容安排如下:第一周:电子钟基本原理学习,了解时钟芯片的使用。
汇编语言显示时钟程序
cursor equ45H attrib equ2fh
code segment
assume cs:code,ds:code
start:
jmp go
oldcur dw?
OLD1C DW2DUP(?)
NEWINT1C:
PUSHF
CALL DWORD PTR CS:OLD1C
push ax
PUSH BX
PUSH CX
PUSH DX
XOR BH,BH
MOV AH,3
INT10H
MOV CS:OLDCUR,DX
MOV AH,2
xor bh,bh
MOV DX,CURSOR
INT10H
MOV AH,2;;读取系统时钟
INT1AH
PUSH DX
PUSH CX
POP BX
PUSH BX
CALL SHOWBYTE
CALL SHOWCOLON
POP BX
XCHG BH,BL
CALL SHOWBYTE
CALL SHOWCOLON
POP BX
CALL SHOWBYTE
MOV DX,CS:OLDCUR
MOV AH,2
XOR BH,BH
INT10H
POP DX
POP CX
POP BX
POP AX
IRET
SHOWBYTE PROC NEAR PUSH BX
MOV CL,4
MOV AL,BH
SHR AL,CL
ADD AL,30H
CALL SHOW
CALL CURMOVE
POP BX
MOV AL,BH
AND AL,0FH
ADD AL,30H
CALL SHOW
CALL CURMOVE
RET
SHOWBYTE ENDP
SHOWCOLON PROC NEAR MOV AL,':' CALL SHOW
CALL CURMOVE
RET
SHOWCOLON ENDP
CURMOVE PROC NEAR PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,3
MOV BH,0
INT10H
INC DL
MOV AH,2
INT10H
POP DX
POP CX
POP BX
POP AX
RET
CURMOVE ENDP
SHOW PROC NEAR
PUSH AX
PUSH BX
PUSH CX
MOV AH,09H
MOV BX,attrib
MOV CX,1
INT10H
POP CX
POP BX
POP AX
RET
SHOW ENDP
GO:
PUSH CS
POP DS
MOV AX,351CH;取中断向量
INT21H
MOV OLD1C,BX;;保存原中断向量
MOV BX,ES
MOV OLD1C+2,BX
MOV DX,OFFSET NEWINT1C;;置新的中断向量
MOV AX,251CH
INT21H
MOV DX,OFFSET GO
SUB DX,OFFSET START
MOV CL,4
SHR DX,CL
ADD DX,11H
MOV AX,3100H;;结束并驻留
INT21H
CODE ENDS
END START
-----------------------------------------------------------------------------------
cursor equ45H;定义显示位置
attrib equ2fh;定义时钟显示颜色,绿底白字
code segment
assume cs:code,ds:code
start:
jmp go;转到程序预处理,设置中断并驻留
oldcur dw?;用于保存原来光标位置
OLD1C DW2DUP(?);用于保存原来的int1c入口地址
NEWINT1C:;新的int1c入口
PUSHF;标志压栈
CALL DWORD PTR CS:OLD1C;调用原来的int1c中断
push ax
PUSH BX
PUSH CX
PUSH DX
XOR BH,BH
MOV AH,3
INT10H;int10子功能03取当前光标位置
MOV CS:OLDCUR,DX;当前光标位置存入CS:OLDCUR
MOV AH,2
xor bh,bh
MOV DX,CURSOR;DX=CURSOR=45h,表示光标定位在1行70列
INT10H;int10子功能02设置光标位置
MOV AH,2
INT1AH;INT1AH子功能02读取系统时钟,返回CH/CL/DH=BCD码小时/BCD码分钟/BCD码秒
PUSH DX
PUSH CX
POP BX;小时分钟数给BX
PUSH BX
CALL SHOWBYTE;调用子程序显示小时,小时在bh中
CALL SHOWCOLON;调用子程序显示时间分隔符":"
POP BX
XCHG BH,BL;分钟给bh
CALL SHOWBYTE;调用子程序显示分钟,bh是分钟数
CALL SHOWCOLON;调用子程序显示时间分隔符":"
POP BX;秒数给bh
CALL SHOWBYTE;调用子程序显示秒数
MOV DX
,CS:OLDCUR;读取备份的光标位置
MOV AH,2
XOR BH,BH
INT10H;int10
子功能02还原原来的光标位置
POP CX
POP BX
POP AX
IRET;中断返回
SHOWBYTE PROC NEAR;BCD值显示子程序,BCD值在BH中
PUSH BX;压栈BX值,以防冲掉
MOV CL,4;以下代码BH中BCD十位值转ASCLL码
MOV AL,BH
SHR AL,CL
ADD AL,30H
CALL SHOW;调用子程序显示AL,当前AL为时间值十位上的数值
CALL CURMOVE;调用子程序后移光标
POP BX;还原BX值
MOV AL,BH;以下代码BH中BCD个位值转ASCLL码
AND AL,0FH
ADD AL,30H
CALL SHOW;调用子程序显示AL,当前AL为时间值个位上的数值
CALL CURMOVE;调用子程序后移光标
RET
SHOWBYTE ENDP
SHOWCOLON PROC NEAR;显示字符":"子程序,用于时间分隔符MOV AL,':'
CALL SHOW;调用子程序显示":"
CALL CURMOVE;调用子程序后移光标
RET
SHOWCOLON ENDP
CURMOVE PROC NEAR;光标后移子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,3
MOV BH,0
INT10H;取光标位置
INC DL;光标列位置加1
MOV AH,2
INT10H;设光标位置
POP DX
POP CX
POP BX
RET
CURMOVE ENDP
SHOW PROC NEAR;显示一个ASCLL字符子程序,AL为所显字符PUSH AX
PUSH BX
PUSH CX
MOV AH,09H
MOV BX,attrib;BH/BL=字符背景色/字符颜色,attrib=2fh=绿底白字MOV CX,1;显示个数1
INT10H;int10子功能09显示一个字符
POP CX
POP BX
POP AX
RET
SHOW ENDP
GO:
PUSH CS
POP DS
MOV AX,351CH;取时钟中断int1c中断原入口
INT21H
MOV OLD1C,BX;保存原中断向量
MOV BX,ES
MOV OLD1C+2,BX
MOV DX,OFFSET NEWINT1C;设置新的时钟中断int1c入口
MOV AX,251CH
INT21H
MOV DX,OFFSET GO
SUB DX,OFFSET START;计算驻留内存字节数
MOV CL,4
SHR DX,CL;驻留内存值转换为节
ADD DX,11H;内存数加psp11节
MOV AX,3100H;结束并驻留
INT21H
CODE ENDS
END START。