资源描述
微机系统与接口实验报告
班级:
组员:
一、 实验目的
Ø 通过本实验了解串行通信原理;
Ø 理解计算机软件、硬件如何配合工作,如何对计算机进行功能扩展;
Ø 学会一般接口电路设计过程和驱动代码编写方法;
Ø 学会如何进行软件、硬件调试。
二、实验内容
(1)实验任务
利用两台TPC—ZK微机原理实验平台实现两机之间通信。
(2)实验要求
在实验台实现:
Ø 设计硬件电路并在实验台上完成连接;
Ø 双机通信时,一方用键盘或AD采集模拟信号,在另一方机器展示;
Ø 完成程序的编写、调试工作。
三、实验原理
分析设计思想,绘制实验原理图、流程图。
(1).实验原理图
Ø 键盘扫描原理图
按上图接线,8255C口接键盘(8255的C0~C3接键盘的列0~列3,C4~C7接键盘的行0~行3),片选CS接大板上地址译码输出的288h~28fh。识别键盘上的闭合键,通过采用行扫描法(行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值;如果列值中有某位为低电平,则表明行列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止)。
Ø 数码管显示原理图
电路原理如上图。8255CS接地址译码输出的288h~28fh.用20芯扁平电缆连接实验板与主实验台上的20芯扩展插座。8255的A口(PA0~PA6)与七段数码管的段码输入端a~g,8255的B口(PB0~PB5)与位码驱动输入端已连好,不用再接线。
(2)。流程图
开始
初始化8251、8254和8255芯片
置8255A控制字为81H:PC0~PC3输入,PC4~PC7输出
读入C口数据,判断小键盘上是否有键按下
调用键盘扫描子程序,读入小键盘的按键值
向8251数据口写入数据并发送
读串行接口芯片8251状态口数据,判断其是否可以传送数据
读8251状态口数据,判断其是否收到数据
调数码管显示子程序,输出数据
是
是
是
否
否
否
四、实验程序
程序清单及相关注释:
DATA SEGMENT
DATAﻩENDS
STACK SEGMENT STACK
ﻩDWﻩ100H DUP(?)
STACK ENDS
CODE SEGMENT
ﻩASSUME CS:CODE,DS:DATA
;;实验机器指定的端口地址
PORTAﻩEQU ﻩ288H ﻩ;8255端口地址
PORTBﻩEQUﻩ289H
PORTCﻩEQUﻩ28AH
TIMER EQU ﻩ280H ﻩ;8254的端口地址
START:
;初始化8251
ﻩMOV ﻩDX,2B9H ﻩ;控制口地址为2B9H
MOV AL,0
ﻩOUTﻩDX,AL
ﻩOUT ﻩDX,AL
ﻩOUT DX,AL
MOV AL,40H ;IR(D6)置1(40H:01000000)使8251A复位(内部复位)
OUT DX,AL
;方式控制字必须在复位后首先写入
MOV AL,0CFHﻩ;异步传送;帧的格式,8位字符,2个停止位,无校验;1200Baud/s,波特率因子64
ﻩOUT ﻩDX,AL
MOV AL,27H ﻩ;写入命令控制字,允许发送和接受,并使RTS输出为低
ﻩOUT ﻩDX,AL
ﻩ;初始化8254计数器
ﻩMOV AL,00110110B ;方式3,作为方波发生器
ﻩMOV DX,TIMER+3
OUT ﻩDX,AL
MOV AX,52ﻩ;频率19。2Khz
MOV DX,TIMER
ﻩOUT ﻩDX,AL ;写入计数器初值的低字节
MOV ﻩAL,AH
OUT DX,AL ﻩ;写入计数器初值的高字节
;初始化8255,工作方式0,A口输出,C口高位输出,低位输入,B口输出
;A口输出段码;C口用于检测键盘输入
ﻩMOVﻩDX,PORTA+3
MOVﻩAL,81H ;10000001
OUT DX,AL
ﻩ;从键盘获取输入
X1:ﻩMOV ﻩAL, 00h
MOVﻩDX, PORTC
ﻩOUTﻩDX, AL ﻩ;00—〉C口,PC0置0
WAIT:ﻩIN AL, DXﻩ;读入列线值
ﻩANDﻩAL, 0FHﻩ;只要低四位
CMP AL, 0FH ;无按键按下,则跳转至X2,判断是否收到数据
JZ X2
CALL DELAY
ﻩMOV BL, 4 ﻩ;行数
MOV ﻩBH, 4 ﻩ;列数
MOV AL, 0EFH ;扫描码
ﻩMOV CL, 0FH
MOV CH, 0FFH ;键值—1
ROW:ﻩOUT DX, AL
ROL AL, 1 ﻩ;左移生成下一个扫描码
MOV ﻩAH, AL
ﻩIN AL, DX ﻩ;读入列线值
ﻩANDﻩAL, 0FH
CMPﻩAL, 0FH
ﻩJNZ COL ;有键按下转COL
ﻩADDﻩCH, BH ;指向某列按键号,开始编号
ﻩMOVﻩAL, AH
ﻩDEC BL
ﻩJNZ ROW
JMP X1
COL:ﻩINC CH
RCR AL,1 ;根据接口可能需要改为SHL
ﻩJC COL
ﻩMOV AL, CH ;AL为键号
CALLﻩINPUT
MOV BL, AL
;;在屏幕上显示
ﻩ;;发送输入的字符
SEND:ﻩMOV DX,2B9H
IN AL,DXﻩ;读状态口
AND ﻩAL,01Hﻩ;TxRDY=1?是否可以传送
ﻩJZ SEND
ﻩDEC ﻩDX
ﻩMOV AL, BL
ﻩOUT ﻩDX, AL
;;
X2:ﻩMOV DX,2B9H
IN AL,DX ﻩ;读状态口
AND AL,02H ;RxRDY=1?是否收到新消息
JZ X1 ;未接收到跳转到X1
ﻩDEC DX
ﻩIN AL, DX
ﻩCALLﻩQDM
X3:ﻩMOVﻩDX, PORTA
OUTﻩDX, AL
JMP ﻩX1
E: MOVﻩAX,4C00H
INT ﻩ21H
DELAYﻩPROCﻩNEAR
PUSH CX
MOV CX, 7FFFH ;有按键按下
LP0: LOOP LP0 ﻩ;延时
POP CX
RET
DELAY ENDP
ﻩ;;子程序INPUT,将小键盘输入的键号,转换成相对应的ASCII码
;;输入的存储在AL中,转换结果成储存在AL中
INPUT PROC ﻩNEAR
PUSH ﻩBX
CMPﻩAL, 6
ﻩJB IN1
MOV ﻩBL, 0FH
SUB BL, AL
ﻩMOV AL, BL
ADD AL, ’0'
ﻩJMP ﻩINEND
IN1: MOVﻩBL, 'f'
ﻩSUB BL, AL
ﻩMOV AL, BL
INEND:POP BX
RET
INPUT ENDP
;;子程序QDM,将数字转换成七段码在数码管上显示
ﻩ;;AL储存要转换的字符的ASCII码,转换结果在AL中
QDMﻩPROC NEAR
CASE0:ﻩCMP ﻩAL,’0’
JNE CASE1
MOV ﻩAL,3FH
ﻩJMP CASEEND
CASE1: CMP ﻩAL,’1’
ﻩJNEﻩCASE2
ﻩMOV AL,06H
ﻩJMP CASEEND
CASE2: CMP AL,'2’
JNEﻩCASE3
MOV AL,5BH
ﻩJMP CASEEND
CASE3: CMP AL,’3’
ﻩJNEﻩCASE4
ﻩMOV AL,4FH
ﻩJMP CASEEND
CASE4:ﻩCMP ﻩAL,'4'
JNE CASE5
MOV AL,66H
JMP CASEEND
CASE5: CMP AL,’5’
ﻩJNE CASE6
ﻩMOV AL,6DH
JMP CASEEND
CASE6:ﻩCMP ﻩAL,'6'
JNE CASE7
MOV AL,7DH
JMP CASEEND
CASE7: CMP ﻩAL,’7’
ﻩJNE CASE8
ﻩMOV AL,07H
JMP CASEEND
CASE8:ﻩCMP AL,'8'
ﻩJNE CASE9
MOV AL,7FH
JMP CASEEND
CASE9: CMP AL,’9'
JNE CASEA
ﻩMOV AL,6FH
JMP CASEEND
CASEA:ﻩCMP AL,’a'
ﻩJNE CASEB
ﻩMOV AL,77H
ﻩJMP CASEEND
CASEB: CMP AL,’b'
ﻩJNE CASEC
MOV AL,7CH
ﻩJMP CASEEND
CASEC: CMP AL,'c’
JNE CASED
MOV AL,39H
JMP CASEEND
CASED: CMP AL,'d’
ﻩJNE CASEE
MOV AL,5EH
JMP CASEEND
CASEE: CMP AL,’e’
JNE CASEF
MOV AL,79H
ﻩJMP CASEEND
CASEF:ﻩCMP AL,’f’
ﻩJNE DEFAULT
ﻩMOV AL,71H
ﻩJMP CASEEND
DEFAULT: ﻩMOV AL,0H
CASEEND:ﻩRET
QDM ﻩENDP
CODE ﻩENDS
ﻩEND START
CODE ﻩENDS
END START
五、实验结果
描述实验现象及结果并给予分析。
实验现象:
按照上述实验原理图连接好每台机器的电路,然后把把两台机器的TxD和RxD分别互联起来。双机通信时,在每台机器上的小键盘上按键时,都可立刻在另一台机器的数码管上显示输入的数据,两台机器是异步双工通信的,发送和接受可同时进行且互不干扰。
结果分析:
由上述的实验流程图可知,当机器甲没有按键时,程序中会转到检查是否收到数据的部分,若机器乙有数据传来,则接收数据并调用数码管显示模块输出;若有按键,则调用键盘扫描程序读入按键值,并把数据传到串行接口芯片8251,由其与机器乙按照事先规定好的帧的格式传送数据,对机器乙也是执行与机器甲相同的流程.
六、问题解决及收获体会
本次试验首先的问题便是4乘4键盘输入的识别,通过首先确定列号再通过行扫描的方式解决了问题,而后关于芯片的具体作用通过翻阅课本得到了复习和巩固,同时在连线的时候对于软件给出的连线方式一开始有疑惑,感觉似乎少了几根线,后来才知道,实验板内部本省已有部分连线,如此给我们节省了时间也给查错带来了方便。在验收前的实验中,同旁边组的一起由于带电操作的问题把板子左上边的那一块给烧了,刚开始不知道原因,通过更换那一小块板子后整体工作正常找到了故障的所在。总体来说这次试验还算顺利,相关知识遗忘较为严重,某些考研的同学竟然也都不知道,今后在知识的学习上以及在实际的操作上都要更加的细心,更加的有条理。
展开阅读全文