原创 8086微机原理实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JZ BAOSHI
CMP DH,00H
JZ BAOSHI
JMP NEXT1
RING: ;半/整点报时
PUSH DX
PUSH AX
MOV DL,07H
MOV AH,02H
INT 21H
POP AX
POP DXAG: MOV D源自,1200IN AL,61H
ANDAL,0FEH
OR AL,02H
OUT 61H,AL
JNE DISPY
MOV DAY,0
MONT_: MOVAL,MONTH
ADDAL,1
DAA
MOV MONTH,AL
CMP AL,13H
JNE DISPY
MOV MONTH,0
SEC: MOVAL,DL
ADDAL,1
DAA
MOV DL,AL
CMP AL,60H
JNE DISPY
MOV DL,0
MIN: MOV AL,DH
PUSH DX
MOV AH,02;设置日期提示符显示位置并显示
MOV BH,0
MOV DH,15
MOV DL,30
INT 10H
MOV DX,OFFSET DATE
二、设计原理
设计的基本原理是通过软件实现延时,以实现秒的计时,进而通过进制关系实现分、时的显示。
软件延时原理如下:每条指令执行时间的长短,是以计算机的时钟周期为基本单位的。当CPU采用的时钟频率一定时,时钟周期也为定值,因此可以根据时钟周期的多少来计算执行指令需要的时间。因此可以在程序中增加适当的无关语句让计算机执行,已获得需要的延时。这就是延时程序的设计原理。
一、设计目的:
运用汇编语言设计一个电子时钟,有以下功能:
1、实现时分秒的计时,并显示于屏幕中央;
2、具有时分秒的校时功能;
3、具有半点整点声音报时功能;
4、实现年月日的计算,并显示于时间下方;
5、实现日期校对功能;
6、实现一键重启功能;
7、在屏幕左上方显示各功能操作提示
8、设计表盘,作为时间显示的背景
PUSH BX
PUSH CX
PUSH DX
CALLCLEAN;调用清屏子程序
CALLLOCATE;调用光标设置子程序,设置时钟显示
MOV DX,OFFSET BUFFER;显示缓冲区内的字符串(时间和日期)
MOV AH,9
INT 21H
POP DX
POP CX
POP BX
PUSH AX
PUSH BX
CMP AL,'r'
JZ G1
CMPAL,'g'
JZ YEAR2_
CMPAL,'y'
JZ YEAR1_
CMPAL,'n'
JZ MONTH_
CMPAL,'d'
JZ DAY_
JMP AGAIN
G1: JMP START1
AGAIN:
CALL TIME;调用延时子程序
YEAR1_: MOV AL,YEAR1;实现分时秒的计数并显示
子程序设计说明:LOCATE为光标位置设置,即输出位置设置
TURN1:将输入内容的ASCII依次转换为BCD码
TURN2:将压缩BCD码依次变换为ASCII码
TURN3:将BCD码依次转换为压缩BCD码
DELAYY:延时子程序
CLEAN:清屏操作
程序运行后,首先在屏幕的中央将显示提示信息——“BEGIN:”,提示输入
起始时间,输入起始时间(格式:HH:MM:SS)后,在屏幕左上方显示操作提示,在屏幕中央显示起始时间,并开始计时。同时在时间的下方显示日期提示符——“DATE:”以及日期(格式YYYY—MM—DD),初始日期为“0000—00—00”。
此时可以根据操作提示进行校时(h,m,s)、校日期(g,y,n,d)和重启(r)的操作。输入h,m,s可以分别使“时”、“分”、“秒”加1,以实现校时。输入g,y,n,d可以分别使“年高两位”、“年低两位”、“月”、“日”加1,以实现校日期。输入r则会重启,即回到提示输入初始时间的状态,等待输入起始时间。
MOV SS,AX
MOV AX,TOP
MOV SP,AX
START1:
CALLCLEAN
CALLLOCATE;调用光标位置设置子程序,设置提示语显示
MOV DX,OFFSETSA0;显示提示语
MOV AH,9
INT 21H
MOV DX,OFFSETSTAY;键盘输入字符串存入内存
MOV AH,10
INT 21H
MOV BX,OFFSETSTAY;将输入的ASCII码转换为BCD码
CALL TURN1
INC BX
INC BX
CALL TURN1
INC BX
INC BX
CALL TURN1
INC BX
INC BX
CALL TURN1
INC BX
INC BX
CALL TURN1
INC BX
INC BX
CALL TURN1
ADDAL,1
DAA
MOV YEAR1,AL
JNC DISPY
MOV YEAR1,0
YEAR2_: MOV AL,YEAR2
ADDAL,1
DAA
MOV YEAR2,AL
JNC DISPY
MOV YEAR2,0
DAY_: MOV AL,DAY
ADDAL,1
DAA
MOV DAY,AL
CMP AL,31H
MOV AH,02H
SUB BH,BH
MOV DX,X
INT10H
MOV AL,Y
MOV BL,0EH
MOV CX,1
MOV AH,09H
INT 10H
ENDM
START PROC FAR
ASSUME CS:COD,DS:DAT,SS:STA
MOV AX,DAT
MOV DS,AX
MOV AX,STA
Inter 8086/8088系列
微型计算机原理及接口技术






设计项目:电子时钟
院系:山东大学电气工程学院
班级:
姓名:
学号:
同组者:
目录:
一、设计目的说明························3
二、设计原理·····································3
SA2 DB 'Pressg y n dto adjust date','$'
SA3 DB 'Pressrto reset','$'
DAT ENDS
STA SEGMENTPARASTACK'STACK'
DB 100 DUP (?)
TOPLABEL WORD
STA ENDS
COD SEGMENT
PICMACRO X,Y ;X是位置Y是字符
可以通过int10中断设置背景显示:2H子功能实现光标定位,9H子功能实现输出字符颜色,个数等的设定。另外,还可以用图形方式实现图形输出。
为方便使用,在屏幕上还应当显示操作提示。
三、程序说明
用户输入的初始时间,日期是以ASCII码的形式存入内存的,在程序中将输入先后换为BCD码,压缩BCD码。以这种形式实现各变量的计数,校时控制,整点报时的条件判断。最后,将压缩BCD码转换为ASCII码,并输出。
MOV CX,233
LOOP $
ANDAL,0FDH
OUT 61H,AL
MOV CX,100
LOOP $
DEC DX
JNZ AG
NEXT1:
MOV AL,CH;将压缩的BCD码转换为ASCII码
CALL TURN2
INC BX
MOVAL,':'
MOV [BX],AL
INC BX
MOV AL,DH
CALL TURN2
MOV DL,AL
INC BX
INC BX
MOV AL,[BX]
CALLTURN3
MOV YEAR2,AL
INC BX
INC BX
MOV AL,[BX]
CALLTURN3
MOV YEAR1,AL
INC BX
INC BX
MOV AL,[BX]
CALLTURN3
MOV MONTH,AL
INC BX
INC BX
INC BX
MOVAL,MONTH
CALL TURN2
INC BX
MOVAL,'-'
MOV [BX],AL
INC BX
MOV AL,DAY
CALL TURN2
INC BX
MOV AL,20H
MOV [BX],AL
INC BX
MOVAL,0AH
MOV [BX],AL
MOVAL,'$'
MOV [BX],AL
ADDAL,1
DAA
MOV DH,AL
CMP AL,60H
JNE DISPY
MOV DH,0
HOU: MOVAL,CH
ADDAL,1
DAA
MOV CH,AL
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY:;显示模块
MOV BX,OFFSET BUFFER
CMP DL,56H;报时条件测试
INC BX
MOVAL,':'
MOV [BX],AL
INC BX
MOVAL,DL
CALL TURN2
INC BX
MOV AL,0DH;定位日期显示和时间显示的位置
MOV [BX],AL
INC BX
MOVAL,0AH
MOV [BX],AL
INC BX
MOVAL,0AH
MOV [BX],AL
PUSH CX
JZ NEXT
CMP DL,57H
JZ NEXT
CMP DL,58H
JZ NEXT
CMP DL,59H
JZ NEXT
CMP DL,00H
JZ NEXT2
JMP NEXT1
NEXT: CMP DH,29H
JZRING
CMP DH,59H
JZ BAOSHI
JMP NEXT1
NEXT2: CMP DH,30H
当时间达到半点或整点前4秒,如11:29:56或者12:59:56,将开始给8255A的PB的第一位交替置位复位,产生方波,激发扬声器。在校时、校日期以及报时的过程中,时钟不会停止计时。
四:程序流程图
见下页。
延时子程序流程图
见下页。
五、程序代码
《王子奴隶》,和雪窗写的王子奴隶同人《辽东风雪记》,《王子奴隶番外童年在坞堡》这一系列的文文都不错,很后妈。
在以上延时程序的基础上,通过时间约1s的长延时累加,并以时、分、秒的形式显示出来。同理,通过时间与日期的进制关系,还可以编写一个日期的程序。
在时、分、秒和年、月、日进制计算程序的基础上可以增加语句以实现时间和日期的校对功能,通过键盘输入不同字符可以选择对时、分、秒、年高位、年低位、月、日分别进行加一操作,以实现校对功能。
三、程序说明·····································3
四、程序流程图·································5
五、程序代码·····································10
六、效果图·········································20
MOV AL,[BX]
CALLTURN3
MOV DAY,AL
X1: MOV AH,1;读取键盘控制字符输入
INT 16H
JZ AGAIN
MOV AH,0 ;从键盘读入控制字符
INT 16H
CMP AL,'h';分析输入,实现校时功能
JZ HOU
CMPAL,'m'
JZ MIN
CMPAL,'s
JZ SEC
另外还有兰雨雨的《醉江山》
DATSEGMENT
YEAR1 DB ?
YEAR2 DB ?
MONTH DB ?
DAY DB ?
STAYDB 100 DUP (?)
DATE DB 'DATE:','$'
SA0DB 'BEGIN:','$'
SA1 DB 'Pressh m sto adjust time','$'
报时的功能可以通过将8255A的PB端口的第一位交替置位或复位产生一个方波信号,推动扬声器发出声音。产生的声音频率就是端口置位复位的频率。半点/整点条件的检测则可以编写一个分支程序体,通过对当前秒值、分值与报时点的秒值、分值进行比较以实现。当分值到达29或59时激发响铃。
另外,还可以在键盘输入特定字符的时候执行一条转移语句跳转到程序开始的地方,以实现一键重启的功能,然后提示再次输入起始时间,即重置时间。
七、调试过程·····································21
八、硬件连接图……………………22
九、心得体会·····································23
十、参考资料·····································23
INC BX
INC BX
CALL TURN1
MOV BX,OFFSETSTAY;将BCD码转换为压缩的BCD码
MOV AL,[BX]
CALLTURN3
MOV CH,AL
INC BX
INC BX
MOV AL,[BX]
CALLTURN3
MOV DH,AL
INC BX
INC BX
MOV AL,[BX]
CALLTURN3
MOV CX,38
H1: INC BX
MOV AL,20H
MOV [BX],AL
LOOPH1
POP CX
INC BX;将压缩的BCD码转换为ASCII码
MOV AL,YEAR2
CALL TURN2
INC BX
MOV AL,YEAR1
CALL TURN2
INC BX
MOVAL,'-'
MOV [BX],AL
相关文档
最新文档