微原硬件实验
PLAY6:MOV AL,LA MOV C1,AL MOV AL,LA1 MOV C2,AL MOV AL,LA_T MOV A,AL CALL RUN JMP BEGIN
PLAY7:MOV AL,SI_1 MOV C1,AL MOV AL,SI1_1 MOV C2,AL MOV AL,SI_T MOV A,AL CALL RUN JMP BEGIN
JIESHU: MOV DX,280H MOV AL,0 OUT DX,AL ;消音 MOV DX,283H MOV AL,00011110B ;初始化工作状态 OUT DX,AL MOV AX,4C00H INT 21H
CODE ENDS END BEGIN
五、实验结果
本次实验我完成了基础要求和提高要求,可以放音并在数码管上显示音符,但是键盘部分的还有瑕疵,没有设置检测按键抬起的动作,仅通过延时实现了响音一段时间,以实现弹奏功能。
六、实验总结
第36页
微原硬件实验
通过本次综合了8255串行接口和8253计数器的实验,加深了我对并行接口的理解,也引起了我对数据线位数的重视。开始的时候放音始终音调不对,原因是我直接将16位的计数初值赋给了8253,导致8位数据端口的8253无法读入16位,应该分两次读入的。后来经过了反复的思考和查阅书本,解决了这个问题。 在做键盘弹奏的时候,基于小学期做的单片机实验,我想到了行列扫描的方法,但是忽略了检测键盘抬起的动作,验收的时候老师指出了我这个问题。
七、实验收获与心得体会
已经是第三次硬件实验了,理论知识已经积累了很多,付诸实践还有很长的路要走,不仅需要正确书写代码,还要联系硬件实际状况来做。
第37页
微原硬件实验
四、串行通讯接口8251实验
一、实验目的
1、了解串行通讯的基本原理。
2、掌握串行接口芯片8251的工作原理和编程方法。
二、实验原理和目的
1、按图4-16-1连接好电路,(8251插通用插座)其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。
2、编程: 从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,(或将内存制定区域内存放的一批数据通过8251A的TXD发送出去,然后从RXD接收回来,并在屏幕上或数码管上显示出来。)实现自发自收。
3、接线: CLK0 /8254 接 1M时钟 GATE0 /8254 接 +5V
0UT0 /8254 接 TX/RXCLK /8251 CS /8254 接 Y0 /IO地址 CS /8251 接 Y7 /IO地址 RXD /8251 接 TXD /8251
三、硬件连接图和软件流程图
图一硬件连接图
第38页
微原硬件实验
开始初始化8253初始化8251显示提示从8251控制口读状态字TxRDY为1吗?从键盘接收字符是ESC吗?N是ESC吗?将键入字符ASC码加一通过8251数据端口发送字符从8251控制端口读入状态字DXRDY为1吗Y从8251数据口接收数据将字符显示在屏幕
第39页
微原硬件实验
图二软件流程图
四、源程序及注释
DATA SEGMENT INFO DB 'START,PLEASE INPUT',0DH,0AH,'$';输入提示 DATA ENDS
STACK SEGMENT STACK'STACK' DB 100 DUP (?) STACK ENDS
CODE SEGMENT ASSUME CS:CODE,SS:STACK
;显示提示词的子程序 SHOW PROC NEAR MOV AH,09H MOV DX,SEG INFO MOV DS,DX MOV DX,OFFSET INFO INT 21H RET SHOW ENDP
START: MOV DX,283H MOV AL,00010110B OUT DX,AL ;送出8253的控制字,计数器0,只读第八位,方式三,二进制 MOV DX,280H MOV AL,52 OUT DX,AL ;送出8253的计数初值52 MOV DX,2B9H MOV AL,40H ;8251内部复位命令 OUT DX,AL NOP MOV AL,01001110B ;8251的方式控制字,一个停止位,无校验位,8位数据位,波特率因子为16 OUT DX,AL MOV AL,00110111B ;8251的命令控制字,RTS,ER,RxE,DTR,TxEM置一 OUT DX,AL CALL SHOW
第40页