微机原理上机实验七+十四实验报告 8253方波实验 电子钟设计实验.docx
《微机原理上机实验七+十四实验报告 8253方波实验 电子钟设计实验.docx》由会员分享,可在线阅读,更多相关《微机原理上机实验七+十四实验报告 8253方波实验 电子钟设计实验.docx(15页珍藏版)》请在冰点文库上搜索。
微机原理上机实验七+十四实验报告8253方波实验电子钟设计实验
微机原理上机实验报告
实验七:
8253方波实验
实验十四:
电子钟
微机原理上机实验(七)实验报告
实验七:
8253方波实验
一、实验目的
了解8253的内部结构、工作原理;了解8253与8086的接口逻辑;熟悉8253的控制寄存器和初始化编程方法,熟悉8253的6种工作模式。
二、实验内容
1、编写程序:
使用8253的计数器0和计数器1实现对输入时钟频率的两级分频,得到一个周期为1秒的方波,用此方波控制蜂鸣器,发出报警信号,也可以将输入脚接到逻辑笔上来检验程序是否正确。
2、连接线路,验证8253的功能,熟悉它的使用方法。
三、实验原理图
四、实验步骤
1、连线说明:
C4区:
CS、A0、A1
——
A3区:
CS2、A0、A1
C4区:
CLK0
——
B2区:
2M
C4区:
OUT0
——
C4区:
CLK1
C4区:
OUT1
——
F8区:
Ctrl(蜂鸣器)
2、测试实验结果:
蜂鸣器发出时有时无的声音;用逻辑笔测试蜂鸣器的输入端口,红绿灯交替点亮。
实验代码
COM_ADDR
EQU
0263H
T0_ADDR
EQU
0260H
T1_ADDR
EQU
0261H
_STACK
SEGMENT
STACK
DW
100DUP(?
)
_STACK
ENDS
CODE
SEGMENT
START
PROC
NEAR
ASSUME
CS:
CODE,SS:
_STACK
MOV
DX,COM_ADDR
MOV
AL,35H
OUT
DX,AL
;计数器T0设置在模式2状态,BCD码计数
MOV
DX,T0_ADDR
MOV
AL,00H
OUT
DX,AL
MOV
AL,10H
OUT
DX,AL
;CLK0/1000
MOV
DX,COM_ADDR
MOV
AL,77H
OUT
DX,AL
;计数器T1为模式3状态,输出方波,BCD码计数
MOV
DX,T1_ADDR
MOV
AL,00H
OUT
DX,AL
MOV
AL,10H
OUT
DX,AL
;CLK1/1000
JMP
$
;OUT1输出1S的方波
START
ENDP
CODE
ENDS
END
START
五、实验思考题
1.8253还有其它五种工作方式,其它工作模式下,硬件如何设计?
程序如何编写?
在其他工作模式下,OUT端口和CLK端口的连接方式基本不变,需要对应的修改gate端口的连接。
程序编写上需要注意修改对应的控制字的内容。
2.绘制本实验的详细实验电路图。
微机原理上机实验(十四)实验报告
实验十四:
电子钟
一、实验目的
进一步熟悉8253、8259、8279
二、实验内容
1、使用8253定时功能,产生0.5S的定时中断给8259
2、在F5区的数码管上显示时间
3、允许设置时钟初值
三、实验步骤
1、连线说明:
D3区:
CS、A0、A1
——
A3区:
CS1、A0、A1
D3区:
PC0、PC1
——
F5区:
KL1、KL2
D3区:
JP20(PB)、B、C
——
F5区:
A、B、C
B3区:
CS、A0
——
A3区:
CS3、A0
B3区:
INT、INTA
——
A3区:
INTR、INTA
B3区:
IR0
——
C4区:
OUT0
C4区:
CS(8253)、A0、A1
——
A3区:
CS2、A0、A1
(注意连线方向)
2、运行程序,按F5区的F键,设置时钟初值。
3、观察F5区数码管上显示的时间是否正确
四、实验代码
EXTRN
InitKeyDisplay:
NEAR,Display8:
NEAR,GetKeyA:
NEAR,GetKeyB:
NEAR
IO8259_0
EQU
0250H
IO8259_1
EQU
0251H
Con_8253
EQU
0263H
T0_8253
EQU
0260H
_STACK
SEGMENT
STACK
DW
200DUP(?
)
_STACK
ENDS
_DATA
SEGMENT
WORDPUBLIC'DATA'
halfsec
DB
0
;0.5秒计数
Sec
DB
0
;秒
Min
DB
0
;分
hour
DB
0
;时
buffer
DB
8DUP(0)
;显示缓冲区,8个字节
buffer1
DB
8DUP(0)
;显示缓冲区,8个字节
bNeedDisplay
DB
0
;需要刷新显示
number
DB
0
;设置哪一位时间
bFlash
DB
0
;设置时是否需要刷新
_DATA
ENDS
CODE
SEGMENT
START
PROC
NEAR
ASSUME
CS:
CODE,DS:
_DATA,SS:
_STACK
MOV
AX,_DATA
MOV
DS,AX
MOV
ES,AX
NOP
CALL
InitKeyDisplay
;对键盘、数码管扫描控制器8255初始化
mov
sec,0
;时分秒赋初值23:
58:
00
mov
min,58
mov
hour,23
MOV
bNeedDisplay,1
;显示初始值
CALL
Init8253
CALL
Init8259
CALL
WriIntver
STI
MAIN:
CALL
GetKeyA
;按键扫描
JNB
Main1
CMP
AL,0FH
;设置时间
JNZ
Main1
CALL
SetTime
Main1:
CMP
bNeedDisplay,0
JZ
MAIN
CALL
Display_LED
;显示时分秒
MOV
bNeedDisplay,0
;1s定时到刷新转速
Main2:
JMP
MAIN;循环进行实验内容介绍与测速功能测试
SetTime
PROC
NEAR
LEA
SI,buffer1
CALL
TimeToBuffer
MOV
Number,0
Key:
CMP
bFlash,0
JZ
Key2
LEA
SI,buffer1
LEA
DI,buffer
MOV
CX,8
REP
MOVSB
CMP
halfsec,0
JNZ
FLASH
MOV
BL,number
NOT
BL
AND
BX,07H
LEA
SI,buffer
MOV
BYTEPTR[SI+BX],10H
;当前设置位置产生闪烁效果
FLASH:
LEA
SI,buffer
CALL
Display8
MOV
bFlash,0
Key2:
CALL
GetKeyA
JNB
Key
CMP
AL,0EH
;放弃设置
JNZ
Key1
JMP
Exit
Key1:
CMP
AL,0FH
JZ
SetTime8
SetTime1:
CMP
AL,10
JNB
Key
;无效按键
CMP
number,0
JNZ
SetTime2
CMP
AL,3
;调整时的十位数
JNB
Key
MOV
buffer1+7,AL
JMP
SetTime7
SetTime2:
CMP
number,1
JNZ
SetTime3
CMP
buffer1+7,1
;调整时的个位数
JZ
SetTime2_1
CMP
AL,4
JNB
Key
SetTime2_1:
MOV
buffer1+6,AL
INC
number
JMP
SetTime7
SetTime3:
CMP
number,3
JNZ
SetTime4
CMP
AL,6
;调整分的十位数
JNB
Key
MOV
buffer1+4,AL
JMP
SetTime7
SetTime4:
CMP
number,4
JNZ
SetTime5
MOV
buffer1+3,AL
;调整分的个位数
INC
number
JMP
SetTime7
SetTime5:
CMP
number,6
JNZ
SetTime6
CMP
AL,6
;调整秒的十位数
JB
SetTime5_1
JMP
Key
SetTime5_1:
MOV
buffer1+1,AL
JMP
SetTime7
SetTime6:
MOV
buffer1,AL
;调整秒的个位数
SetTime7:
INC
number
CMP
number,8
JNB
SetTime8
MOV
bFlash,1
;需要刷新
JMP
Key
SetTime8:
MOV
AL,buffer1+1
;确认
MOV
BL,10
MUL
BL
ADD
AL,buffer1
MOV
sec,AL
;秒
MOV
AL,buffer1+4
MUL
BL
ADD
AL,buffer1+3
MOV
min,AL
;分
MOV
AL,buffer1+7
MUL
BL
ADD
AL,buffer1+6
MOV
hour,AL
;时
JMP
Exit
Exit:
RET
SetTime
ENDP
;hourminsec转化成可显示格式
TimeToBuffer
PROC
NEAR
MOV
AL,sec
XOR
AH,AH
MOV
BL,10
DIV
BL
MOV
[SI],AH
MOV
[SI+1],AL
;秒
MOV
BYTEPTR[SI+2],10H
;这位不显示
MOV
AL,min
XOR
AH,AH
DIV
BL
MOV
[SI+3],AH
MOV
[SI+4],AL
;分
MOV
BYTEPTR[SI+5],10H
;这位不显示
MOV
AL,hour
XOR
AH,AH
DIV
BL
MOV
[SI+6],AH
MOV
[SI+7],AL
;时
RET
TimeToBuffer
ENDP
;显示时分秒
Display_LED
PROC
NEAR
LEA
SI,buffer
CALL
TimeToBuffer
LEA
SI,buffer
CALL
Display8
;显示
RET
Display_LED
ENDP
;0.5s产生一次中断
Timer0Int:
PUSH
AX
PUSH
DX
MOV
bFlash,1
INC
halfsec
CMP
halfsec,2
JNZ
Timer0Int1
MOV
bNeedDisplay,1
MOV
halfsec,0
INC
sec
CMP
sec,60
JNZ
Timer0Int1
MOV
sec,0
INC
min
CMP
min,60
JNZ
Timer0Int1
MOV
min,0
INC
hour
CMP
hour,24
JNZ
Timer0Int1
MOV
hour,0
Timer0Int1:
MOV
DX,IO8259_0
MOV
AL,20H
OUT
DX,AL
POP
DX
POP
AX
IRET
Init8253
PROC
NEAR
MOV
DX,Con_8253
MOV
AL,34H
OUT
DX,AL
;计数器T0设置在模式2状态,HEX计数
MOV
DX,T0_8253
MOV
AL,12H
OUT
DX,AL
MOV
AL,7AH
OUT
DX,AL
;CLK0=62.5kHz,0.5s定时
RET
Init8253
ENDP
Init8259
PROC
NEAR
MOV
DX,IO8259_0
MOV
AL,13H
OUT
DX,AL
MOV
DX,IO8259_1
MOV
AL,08H
OUT
DX,AL
MOV
AL,09H
OUT
DX,AL
MOV
AL,0FEH
OUT
DX,AL
RET
Init8259
ENDP
WriIntver
PROC
NEAR
PUSH
ES
MOV
AX,0
MOV
ES,AX
MOV
DI,20H
LEA
AX,Timer0Int
STOSW
MOV
AX,CS
STOSW
POP
ES
RET
WriIntver
ENDP
START
ENDP
CODE
ENDS
END
START