当前位置:文档之家› 微机综合实验

微机综合实验

微机原理与接口技术
实验报告
实验内容:微机原理综合设计实验
数字电压表A
组别:5
班级:******** 姓名:刘庭欣学号:********** 班级:******** 姓名:罗太鑫学号**********
一、实验目的:
1、掌握8255的使用及编程原理。

2、掌握8253定时/计数器的编程原理。

3、掌握ADC0809的使用及编程原理。

4、掌握共阴极七段数码管的工作原理。

5、掌握芯片的综合运用。

6、掌握汇编语言程序设计。

二、实验内容:
利用ADC0809采集电位器的电压值,将采集的电压值通过8255显示在七段数码管上,显示数据保留小数点后2位,利用8253定时数据更新,每隔0.5秒数据更新一次。

要求:
1、查阅资料,掌握共阴极七段数码管的工作原理。

2、分析实验原理,设计实验方案,绘出实验连线图。

3、绘制实验程序流程图。

4、编写实验程序,检查无误后,编译、链接并下载入实验系统。

5、运行实验程序,验证程序功能。

扩展要求:
具有设置报警阈值功能,当超过阈值时,点亮一个LED灯。

三、实验方法:
1、设计思路:
利用ADC0809采集电位器的电压值,通过8255 依次选通3个数码管,通过8255依次送入刚才所得的三个值的显示码,利用8253工作在方式二,每隔0.5秒产生一低脉冲送到8255。

将可变电位器AN0与ADC0809的ADIN0相连,将CS2与ADC0809的片选CS0809端相连,将ADC0809的EOC与8255的PC0相连,CS0与8253的片选CS8253相连,CLK3(750KHz)与8253CLK0相连,8253的OUT0与8253CLK2相连,OUT2与8255的PA0相连,CS1与8255的片选CS8255相连,PC4-PC6与LED1-LED3依次相连,PB0-PB7依次与LED-A—LED-DP相连。

画出实验各芯片的连线图,如图:
2、程序流程图:
四、实验源程序:
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START:
MOV AX,0H
MOV DS,AX
MOV SI,2000H ;定义从0:2000H开始的存储单元
MOV DX,04B6H
MOV AX,91H
OUT DX,AX ;初始化8255,使B口输出,A口输入,C口低四位输入,高四位输出
MOV DX,04A6H
MOV AX,36H ;计数器0,方式3-方波,低八位,后高八位,二进制
OUT DX,AX
MOV DX,04A0H
MOV AX,720
OUT DX,AL
MOV AL,AH
OUT DX,AL
MOV DX,04A6H
MOV AX,0B5H ;计数器2,方式2-频率发生器,低八位,后高八位
OUT DX,AX
MOV DX,04A4H
MOV AX,501
OUT DX,AL
MOV AL,AH
OUT DX,AL ;OUT2每0.5秒输出一个低电平到PA0
L2: ;初始化0809,并调用获取AD值函数(已将要显示的数字求出)MOV SI,2000H
MOV DX,04C0H ;指向通道0
CALL GETAD ;调用A/D转换子程序,取得A/D值
L1: ;作为数码管显示模块
MOV SI,2000H
MOV BL,DS:[SI+2]
MOV BH,0 ;取出电压值小数点后第二位
LEA SI,TABLE
ADD SI,BX
MOV BL,CS:[SI] ;得到电压值小数点后第二位的数码管显示码
MOV DX,04B4H ;C口的地址
MOV AL,0E0H ;低电平有效,11100000,PC4
OUT DX,AL ;选通LED1数码管
MOV DX,04B2H ;B口地址
MOV AL,BL
OUT DX,AL ;通过B口送入显示码
CALL DELAY
MOV SI,2000H
MOV BL,DS:[SI+1]
MOV BH,0 ;取出电压值小数点后第一位
LEA SI,TABLE
ADD SI,BX
MOV BL,CS:[SI] ;得到电压值小数点后第一位的数码管显示码
MOV AL,0D0H ;11010000
MOV DX,04B4H ;C口的地址
OUT DX,AL ;选通LED2数码管
MOV DX,04B2H
MOV AL,BL
OUT DX,AL ;通过B口送入显示码
CALL DELAY
MOV SI,2000H
MOV BL,DS:[SI]
MOV BH,0 ;取出电压值个位值
LEA SI,TABLE1
ADD SI,BX
MOV BL,CS:[SI] ;得到电压值个位值的数码管显示码
MOV AL,0B0H
MOV DX,04B4H
OUT DX,AL ;选通LED3数码管
MOV DX,04B2H
MOV AL,BL
OUT DX,AL ;通过B口送入显示码
CALL DELAY
MOV DX,04B0H ;8255A口地址,定时器模块
IN AL,DX
AND AL,00000001
CMP AL,0 ;PA0是否接收到一低电平
JNZ L1 ;PA0没有接收到低电平,跳到数码管显示程序
JMP L2 ;PA0接收到低电平,跳到电压采集程序,每0.5秒采集一次
DELAY:
MOV BP,100H ;延时程序
DELAY1:
DEC BP
CMP BP,0
JNE DELAY1
RET
GETAD:
PUSH DX
MOV AX,34H ;启动A/D
OUT DX,AX
CALL DELAY ;延时等待转换
MOV DX,04B4H ;指向8255C口地址,PC0与0809的EOC相连
WAIT1:
IN AX,DX ;读进EOC状态
TEST AX,1 ;EOC=1,表示一次转换已经结束,=0表示正在转换,TEST相与
JZ WAIT1
POP DX
IN AX,DX ;读A/D值
MOV AH,0 ;用AL储存转换后的8位2进制数
MOV CX,AX
MOV AL,51
MOV BL,3 ;电压阈值在此修改,电压超过3v则报警
MUL BL ;AX现在是阙值
CMP AX,CX
JC L3
MOV AL,01H
MOV DX,4D0H ;指向74LS273
OUT DX,AL
jmp ne ;若小于阈值则灯灭
L3:MOV AL,0
MOV DX,4D0H ;74LS273的第一个口地址
OUT DX,AL ;若大于阈值则灯亮
ne:
MOV AX,CX ;AX现在是测量值
MOV BL,0C4H
MUL BL ;AX乘以196,转换为实际电压的100倍,500/255=196
MOV BX,0001H
MUL BX
MOV BL,64H ;除数100
MOV BH,0
DIV BX ;注意要除两次才能得到个位
DIV BL
MOV DS:[SI],AL ;得到个位值存入0:2000H
MOV AL,AH
MOV AH,00H
MOV BL,0AH
DIV BL
MOV DS:[SI+1],AL ;得到小数点后第一位值存入0:2001H
MOV DS:[SI+2],AH ;得到小数点后第一位值存入0:2002H
RET
TABLE:DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0-9的八段
数码管显示码
TABLE1:DB
0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH ;0-9的DP点亮八段
数码管显示码,个位用
CODE ENDS
END START
五、实验结果:
在实验箱上连接好电路图,输入源程序,编译并链接,运行程序。

当转动电位器,数码管上显示的数值不断变化,实验箱上的连线图如图:
当旋转电位器,电压值大于3V时(我们设置的阈值为3V),LED灯亮,报警。

达到实验的要求。

实验结果如图:
六、实验中遇到的问题及解决方法:
1.最开始设计电路连接的时候,由于对于实验箱不熟悉,不知道CS0,CS1这些片选信号指向的地址是什么,还有就是第一次连接好电路图,没有拔掉数码管右边的那一排跳线帽,导致转到电位器,数码管显示不会有变化。

2.在程序中没有加入延时函数之间,数码管显示的数一直闪烁,加入合适的延时时间后,数码管能比较稳定的显示。

3.在设计扩展功能时,最开始想着把8255上的一个输出端口接到灯上,后来发现不行,因为没有锁存功能,所以最后选用了74LS273输出。

七、心得体会与建议:
对于综合实验,通过完成一个任务,在这过程中,让我们将几个芯片的功能结合起来,去完成某个特定的功能。

我们小组在准备的时候,发现刚开始并不知道如何让这几个芯片一起工作,后来研究了每个芯片的具体使用方法和功能,才慢慢有了思路。

整个过程下来,感觉综合实验对我们的理论知识提出了更高的要求。

而在完成实验的过程中,我们遇到问题,发现问题,解决问题,虽然过程很曲折,但是确实是收获到了很多。

相关主题