北邮微机系统与接口技术小学期报告.docx
- 文档编号:23165390
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:20
- 大小:22.16KB
北邮微机系统与接口技术小学期报告.docx
《北邮微机系统与接口技术小学期报告.docx》由会员分享,可在线阅读,更多相关《北邮微机系统与接口技术小学期报告.docx(20页珍藏版)》请在冰豆网上搜索。
北邮微机系统与接口技术小学期报告
北京邮电大学课程设计报告
课程设计
名称
微机系统与
接口技术
学院
计算机学院
指导教师
班级
班内序号
学号
学生姓名
成绩
课
程
设
计
内
容
实验目的:
进一步加深和巩固对所学知识点的理解和掌握;综合运用所学知识、工程原理来分析和完成本课程设计;理解计算机软件、硬件如何配合工作,能对计算机硬件进行功能扩展;掌握接口电路设计过程和驱动程序的编写方法;学会如何区分系统中软件、硬件故障和调试手段;培养计算机软硬件的综合设计能力和调试能力。
基本内容:
(硬件部分)4x4小键盘接口设计;异步串行通信接口设计;4位数码管显示器设计。
(软件部分)键盘扫描程序;串行接口通信程序;4位七段数码管显示程序;两组间进行双机通信;
在液晶显示器上实现显示功能。
实验方法:
在HQFC集成环境下,采用汇编语言完成程序设计
团队分工:
学生
课程设计
报告
(附页)
见附页
课
程
设
计
成
绩
评
定
遵照实践教学大纲并根据以下四方面综合评定成绩:
1、课程设计目的任务明确,选题符合教学要求,份量及难易程度
2、团队分工是否恰当与合理
3、综合运用所学知识,提高分析问题、解决问题及实践动手能力的效果
4、是否认真、独立完成属于自己的课程设计内容,课程设计报告是否思路清晰、文字通顺、书写规范
评语:
成绩:
指导教师签名:
年月日
1.实验目的
1.进一步加深和巩固对所学知识点的理解和掌握;
2.综合运用所学知识、工程原理来分析和完成本课程设计;
3.理解计算机软件、硬件如何配合工作,能对计算机硬件进行功能扩展;
4.掌握接口电路设计过程和驱动程序的编写方法;
5.学会如何区分系统中软件、硬件故障和调试手段;
6.培养计算机软硬件的综合设计能力和调试能力。
2.实验内容
硬件部分
■4x4小键盘接口设计(利用8255C口)
■异步串行通信接口设计(8254为波特率发生器)
■4位数码管显示器设计
软件部分
■键盘扫描程序。
将按键0F转换成015的二进制值
■串行接口通信程序。
1.发送/接收均为查询方式;2.发送为查询方式/接收采用中断方式;二者选其一
■4位七段数码管显示程序。
左移位方式显示09、AF
■将串行接口发送端和接收端环回,当在4x4小键盘上敲击按键时,经串口发送、接收后将对应键值显示在4位数码管上。
(要求:
依次敲击1、2、3、4、5、…,则依次显示xxx1、xx12、x123、1234、2345、…)
要求
■两个实验组间进行双机通信,一方用小键盘键入数字,另一方接收到后在4位数码管上显示
■在液晶显示器上实现显示功能(选作,成绩加10分,但满分为100分)
3.实验原理
设计思想
主函数
■发送端:
从8255C口进行键盘扫描读入按键,获得其ASCII码值,将其发送给8251,并把发送值变换为七段译码值在LED上进行移位显示。
■接收端:
8251接收到发送来的ASCII码值,在液晶显示器LCD上进行移位显示。
■主函数为一个大循环,采用查询方式,依次查询是否有键被按下,发送是否准备好,按键是否为E,接收是否准备好,接受到的数据是否为E,条件满足则执行相应操作,不满足则进行下一个查询,而不是原地踏步地查询。
若按键不为E则返回一开始循环执行主程序。
键盘扫描
■8255C口高四位PC7-PC4输出,低四位PC3-PC0输入,接键盘的行3-列0。
■采用行扫描法,使键盘上某一行线为低电平,而其余行接高电平,然后读取列值;如果列值中有某位为低电平,则表明当前行与当前列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止。
■分别用寄存器记录当前行和当前列,并用行数X4+列数计算键值。
数码管显示
■8255B口输出,高四位PB7-PB4接LED位码S3-S0,选择某一个数码管。
■8255A口输出,PA7-PA0接LED的DP-A,将七段译码值输出到数码管,并进行显示。
液晶屏显示
■8255B口输出,低三位PB2,PB1,PB0分别接LCD的E,RW,DI,控制液晶显示器的使能,读/写,数据/指令。
■8255A口输出,PA7-PA0接LCD的D7-D0,与LED复用数据线,将ASCII值输出到液晶屏,并进行显示。
实验原理图
系统接线图
自发自收
CLK0/8254接1M时钟
GATE0/8254接+5V
OUT0/8254接TX/RXCLK/8251
CS/8254接Y0/IO地址
CS/8251接Y7/IO地址
RXD/8251接TXD/8251
双机通信
机器A的RXD/8251接机器B的TXD/8251,机器B的RXD/8251接机器ATXD/8251,其余接线与自发自收相同。
显示模块
PA7~PA0/8255接DP-A/7段译码管
PA7~PA0/8255接D7-D0/LCD12864
PB7-PB4/8255接S3-S0/7段译码管
PB2/8255接E/LCD12864
PB1/8255接R/W/LCD12864
PB0/8255接D/I/LCD12864
PC7~PC0/8255接行3-列0/4*4键盘
CS/8255接Y1/IO地址
流程图
4.实验程序
DATASEGMENT
IO8251EQU2B8H
IO8251CTRLEQU2B9H
IO8255AEQU288H
IO8255BEQU289H
IO8255CEQU28AH
IO8255CTRLEQU28BH
IO82540EQU280H
IO8254CTRLEQU283H
的ASCII值,用于LCD显示
ASCTABLEDB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H
七段译码值,用于LED显示
LEDTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
用于键盘扫描第1、2、3、4行
SCANDB70H,0B0H,0D0H,0E0H
LEDBUFDB00H,00H,00H,00H;LED显示的四位数
LCDBUFDB20H,20H,20H,20H;LCD显示的四位数
FLAGDB00H;是否有数据传输的标志位
NUMDB00H;输入的数
CUDB00H;接收的数
DATAENDS
STACKSEGMENTSTACK'STACK'
DB100DUP()
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
;延时子程序
DELAYPROCNEAR
PUSHCX
MOVCX,100H
WAIT1:
LOOPWAIT1
POPCX
RET
DELAYENDP
;LED移位函数
LEDSHIFTPROCNEAR
PUSHDX
PUSHBX
PUSHAX
;LEDBUF中四个数依次左移,右补NUM
MOVBX,OFFSETLEDBUF
MOVDL,[BX+2]
MOV[BX+3],DL
MOVDL,[BX+1]
MOV[BX+2],DL
MOVDL,[BX]
MOV[BX+1],DL
MOVDL,NUM
MOV[BX],DL
POPAX
POPBX
POPDX
RET
LEDSHIFTENDP
;LED显示函数,用于显示LEDBUF中的四个数
SHOWLEDPROCNEAR
PUSHDX
PUSHBX
PUSHAX
MOVBX,OFFSETLEDBUF
;点亮数码管的最高位
MOVDX,IO8255B;选择8255B口,控制位码
INAL,DX
ANDAL,0FH;位码清零
OUTDX,AL
MOVDX,IO8255A;选择8255A口,输出最高位
MOVAL,[BX+3]
OUTDX,AL
MOVDX,IO8255B;位码控制选数码管4
INAL,DX
ANDAL,0FH
ORAL,80H;S3置1,其余置0
OUTDX,AL
;点亮数码管的第三最高位
MOVDX,IO8255B
INAL,DX
ANDAL,0FH;位码清0
OUTDX,AL
MOVDX,IO8255A;选择8255A口,输出第三最高位
MOVAL,[BX+2]
OUTDX,AL
MOVDX,IO8255B;位码控制选数码管3
INAL,DX
ANDAL,0FH
ORAL,40H;S2置1,其余置0
OUTDX,AL
;点亮数码管的第二最高位
MOVDX,IO8255B
INAL,DX
ANDAL,0FH;位码清0
OUTDX,AL
MOVDX,IO8255A;选择8255A口,输出第二最高位
MOVAL,[BX+1]
OUTDX,AL
MOVDX,IO8255B;位码控制选数码管2
INAL,DX
ANDAL,0FH
ORAL,20H;S1置1,其余置0
OUTDX,AL
;点亮数码管的最低位
MOVDX,IO8255B
INAL,DX
ANDAL,0FH;位码清0
OUTDX,AL
MOVDX,IO8255A;选择8255A口,输出最低位
MOVAL,[BX]
OUTDX,AL
MOVDX,IO8255B;位码控制选数码管2
INAL,DX
ANDAL,0FH
ORAL,10H;S0置1,其余置0
OUTDX,AL
MOVDX,IO8255B;位码清0
INAL,DX
ANDAL,0FH
OUTDX,AL
POPAX
POPBX
POPDX
RET
SHOWLEDENDP
;LCD移位函数
LCDSHIFTPROCNEAR
PUSHDX
PUSHBX
PUSHAX
;LCDBUF中四个数依次左移,右补CU
MOVBX,OFFSETLCDBUF
MOVDL,[BX+2]
MOV[BX+3],DL
MOVDL,[BX+1]
MOV[BX+2],DL
MOVDL,[BX]
MOV[BX+1],DL
MOVDL,CU
MOV[BX],DL
POPAX
POPBX
POPDX
RET
LCDSHIFTENDP
;LCD发送指令函数
SEND_INSPROCNEAR
MOVDX,IO8255B
INAL,DX
OUTDX,AL
NOP
INAL,DX
ORAL,00000100B;E=1,W,I
OUTDX,AL
MOVDX,IO8255A;选择数据口,输出指令码
MOVAL,BL;BL中是要输出的指令码
OUTDX,AL
MOVDX,IO8255B
INAL,DX
OUTDX,AL
RET
SEND_INSENDP
;LCD发送数据函数
SEND_DATAPROCNEAR
MOVDX,IO8255B
INAL,DX
ORAL,00000001B;E=0,W,D
OUTDX,AL
NOP
INAL,DX
ORAL,00000101B;E=1,W,D
OUTDX,AL
MOVDX,IO8255A;选择数据口,输出数据
MOVAL,BL;BL中是要输出的数据
OUTDX,AL
MOVDX,IO8255B
INAL,DX
ORAL,00000001B;E=0;WD
OUTDX,AL
RET
SEND_DATAENDP
;LCD显示函数,用于显示LCDBUF中的四个数
SHOWLCDPROCNEAR
PUSHDX
PUSHBX
PUSHAX
MOVBL,92H;第3位输出地址
CALLSEND_INS
MOVBX,OFFSETLCDBUF;输出第3位
MOVBX,[BX+3]
CALLSEND_DATA
MOVBL,93H;第2位输出地址
CALLSEND_INS
MOVBX,OFFSETLCDBUF;输出第2位
MOVBX,[BX+2]
CALLSEND_DATA
MOVBL,94H;第1位输出地址
CALLSEND_INS
MOVBX,OFFSETLCDBUF;输出第1位
MOVBX,[BX+1]
CALLSEND_DATA
MOVBL,95H;第0位输出地址
CALLSEND_INS
MOVBX,OFFSETLCDBUF;输出第0位
MOVBX,[BX+0]
CALLSEND_DATA
POPAX
POPBX
POPDX
RET
SHOWLCDENDP
;获取键盘的输入数字的子程序
INPUTPROCNEAR
PUSHAX;保护现场
PUSHCX
PUSHDX
MOVCX,00H;从第一行开始扫描
CHECK:
MOVDX,IO8255C;选择C口地址
MOVBX,OFFSETSCAN;得到扫描码
ADDBX,CX
MOVAL,[BX]
OUTDX,AL;把要扫描的那一行置0,其余置1
;防止抖动
INAL,DX;判断是否有键盘按下
MOVAH,AL
CALLDELAY;延迟一段时间,避过抖动区间
INAL,DX;延时后再次读入
CMPAL,AH;比较两次读入的值
JNZCHECK;不相等说明为抖动,重新检测
;判断按下的是哪一列
ANDAL,0FH
CMPAL,0FH;没有键按下
JZNEXT
CMPAL,0EH;第四列有键按下
JZNEXT1
CMPAL,0DH;第三列有键按下
JZNEXT2
CMPAL,0BH;第二列有键按下
JZNEXT3
MOVBX,00H;第一列有键按下
JMPGETNUM
NEXT:
INCCX;修改变量扫描下一行
CMPCX,04H
JNZCHECK;没有扫描完四行跳转
JMPDONE;已经扫描完四行跳转
;记录是哪一列有键按下
NEXT1:
MOVBX,03H
JMPGETNUM
NEXT2:
MOVBX,02H
JMPGETNUM
NEXT3:
MOVBX,01H
;计算按下的键的数值
GETNUM:
MOVAL,CL
MOVDL,04H
MULDL;行数乘以4,再加上列数
ADDBL,AL;此时BL中所存即为按下的键
;检测键盘是否弹起
MOVDX,IO8255C;C口输入
INAL,DX
MOVAH,AL
NOTUP:
CALLDELAY
INAL,DX
CMPAL,AH
JZNOTUP;未弹起,延时重复检测
MOVFLAG,01H;有键按下,把flag置1,
CALLFINDASC;把键盘值转换为ASC值
MOVDL,CL;按键值显示到DOS界面上
MOVAH,02H
INT21H
DONE:
POPDX;恢复现场
POPCX
POPAX
RET
INPUTENDP
;找到键值对应的ASC数值,存到NUM中
FINDASCPROCNEAR
XORCX,CX
MOVCL,BL;BL中是键盘按下的值
MOVBX,OFFSETASCTABLE
ADDBX,CX;此时BX即为在ASCTABLE中对应的地址
MOVCL,[BX];CL内存着此次按下键盘值的ASC值
MOVNUM,CL
RET
FINDASCENDP
;找到键值对应的七段译码值,存到NUM中
FINDLEDPROCNEAR
XORCX,CX
MOVCL,BL;BL中是键盘按下的值
MOVBX,OFFSETLEDTABLE
ADDBX,CX;此时BX即为LEDTABLE中对应的地址
MOVCL,[BX];CL内存着此次按下键盘值的七段译码值
MOVNUM,CL
RET
FINDLEDENDP
;主程序
START:
MOVAX,DATA
MOVDS,AX
;初始化8253
MOVDX,IO8254CTRL;8253控制端口地址
MOVAL,16H;8253选择计数器0低八位,方式3,二进制计数,00010110
OUTDX,AL
MOVDX,IO82540;计数器0地址
MOVAL,52;写入计数初值52(时钟1M,波特率1200baud,波特率因子16)
OUTDX,AL
;初始化8251
MOVDX,IO8251CTRL;8251控制端口地址
MOVAL,40H;工作命令字软复位,01000000
OUTDX,AL
NOP
MOVAL,4EH;方式命令字,一个停止位,无校验,8个数据位,波特率因子16,异步01001110
OUTDX,AL
NOP
MOVAL,27H;工作命令字,允许发送接收,00100111
OUTDX,AL
NOP
;初始化8255
MOVDX,IO8255CTRL;8255控制端口地址
MOVAL,081H;方式控制字:
C口低四位输入,B口输出,方式0,A口输出,方式0
OUTDX,AL
MOVFLAG,00H
;LCD初始化
PUSHAX
PUSHBX
PUSHDX
MOVDX,IO8255CTRL
OUTDX,AL
MOVBL,30H;基本指令操作,RE=0
CALLSEND_INS
MOVBL,01H;清除显示
CALLSEND_INS
MOVBL,06H;指定在资料写入或读取时,光标的移动方向
CALLSEND_INS;DDRAM的地址计数器(AC)加1
MOVBL,0CH;开显示,关光标,不闪烁
CALLSEND_INS
POPDX
POPBX
POPAX
CALLSHOWLCD
;扫描键盘
LOOP1:
CALLINPUT
CALLSHOWLED
MOVDX,IO8251CTRL;检验8251发送是否准备好TxRDY
INAL,DX
ANDAL,01H
JNZSEND;8251发送准备好,转去发送
;发送未准备好,检验接收是否准备好
LOOP2:
MOVDX,IO8251CTRL
INAL,DX
ANDAL,02H;检验8251发送是否准备好RxRDY
JNZRECEIVE;接收准备好,转去接收
JMPLOOP1;接收未准备好,转去扫描键盘
;发送准备好,判断键盘是否按下
SEND:
CMPFLAG,01H
JESSEND
JMPLOOP2;发送准备好,但是没有键盘按下,转去检验接收
;键盘按下,要发送数据
SSEND:
MOVDX,IO8251;8251数据端口地址
MOVAL,NUM
OUTDX,AL;把发送的数据(ASC值)输出到8251
CMPNUM,45H;数据与E比较
JZEXIT;数据是E则转去退出
CALLFINDLED;将数据转为七段译码值
CALLLEDSHIFT;移位后显示
CALLSHOWLED
MOVFLAG,00H;显示后把flag恢复为0
JMPLOOP2
;开始接收
RECEIVE:
MOVDX,IO8251
INAL,DX;8251接收到数据,存到CU中
MOVCU,AL
CMPCU,45H;数据与E比较
JZEXIT;数据是E则转去退出
CALLLCDSHIFT;移位输出
CALLSHOWLCD
CALLSHOWLED
JMPLOOP1
;返回DOS
EXIT:
MOVAL,00H;结束输出0
MOVDX,288H;A口输出
OUTDX,AL
MOVBL,01H;清除显示
CALLSEND_INS
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
5.实验结果
硬件连线图
自发自收
自发自收时,按下4×4键盘,可以看到对应键值在数码管上移位显示,即发送的数据,同时,在LCD液晶显示屏上出现接收的数据,与数码管显示的一致。
当在键盘按下E,数码管不再显示,LCD液晶屏也清屏。
双机通信
两机通信时,A机按下4×4键盘,A机的数码管显示按下的键值,B机收到A机发送的数据,在LCD液晶显示屏显示,即A机的数码管与B机的液晶显示屏显示内容一致。
B机发送数据时,在B机的数码管显示B机按下的键值,A机LCD液晶显示屏显示收到的数据,即B机的数码管与A机的液晶显示屏显示内容一致。
通信过程中,任意一端均可做发送或接受端。
在任意一端4×4键盘按下E时,两机都结束通信,数码管不显示,LCD液晶屏清屏。
6.问题解决及收获体会
问题解决
■问题:
LED显示出现明显的闪烁
解决:
LED是靠高电平点亮,要保持其显示,必须要持续给LED高电平。
所以在每个循环中,要多次调用LED显示函数。
■问题:
LED输出重叠显示
解决:
在进行数码管显示时,要先输出数据,再选择位码,否则会因为顺序相反造成重叠显示。
■问题:
运行程序时,只按键一次程序就退出
解决:
在主程序中有个大循环,在大循环的最后要使用jmp语句跳到开头重复进行查询。
■问题:
LCD无法显示
解决:
在一开始要对LCD进行初始化,如发送基本指令集等。
■问题:
双机通信时双方没有显示
解决:
数据未能稳定传输,将两台机器共地。
实验过程还有很多如编译错误,赋值错误等问题,不再一一列出。
还有部分问题解决见收获体会↓。
收获体会
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 系统 接口 技术 小学 报告