北邮微机系统与接口技术小学期报告_第1页
北邮微机系统与接口技术小学期报告_第2页
北邮微机系统与接口技术小学期报告_第3页
北邮微机系统与接口技术小学期报告_第4页
北邮微机系统与接口技术小学期报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、北京邮电大学课程设计报告课程设计名称微机系统与接口技术学 院计算机学院指导教师班 级班内序号学 号学生姓名成绩课程设计内容实验目的:进一步加深和巩固对所学知识点的理解和掌握;综合运用所学知识、工程原理来分析和完成本课程设计;理解计算机软件、硬件如何配合工作,能对计算机硬件进行功能扩展;掌握接口电路设计过程和驱动程序的编写方法;学会如何区分系统中软件、硬件故障和调试手段;培养计算机软硬件的综合设计能力和调试能力。基本内容:(硬件部分)4x4小键盘接口设计;异步串行通信接口设计;4位数码管显示器设计。(软件部分)键盘扫描程序;串行接口通信程序;4位七段数码管显示程序;两组间进行双机通信;在液晶显示

2、器上实现显示功能。实验方法:在hqfc集成环境下,采用汇编语言完成程序设计团队分工: 学生课程设计报告(附页)见附页课程设计成绩评定遵照实践教学大纲并根据以下四方面综合评定成绩:1、课程设计目的任务明确,选题符合教学要求,份量及难易程度2、团队分工是否恰当与合理3、综合运用所学知识,提高分析问题、解决问题及实践动手能力的效果4、是否认真、独立完成属于自己的课程设计内容,课程设计报告是否思路清晰、文字通顺、书写规范评语: 成绩: 指导教师签名: 年 月 日目录1. 实验目的32. 实验内容32.1 硬件部分32.2 软件部分32.3 要求33. 实验原理43.1 设计思想43.2 实验原理图73

3、.3 流程图104. 实验程序125. 实验结果235.1 硬件连线图235.2 自发自收235.3 双机通信236. 问题解决及收获体会246.1 问题解决246.2 收获体会241. 实验目的. 进一步加深和巩固对所学知识点的理解和掌握;. 综合运用所学知识、工程原理来分析和完成本课程设计;. 理解计算机软件、硬件如何配合工作,能对计算机硬件进行功能扩展;. 掌握接口电路设计过程和驱动程序的编写方法;. 学会如何区分系统中软件、硬件故障和调试手段;. 培养计算机软硬件的综合设计能力和调试能力。2. 实验内容2.1 硬件部分 4x4小键盘接口设计(利用8255 c口) 异步串行通信接口设计(

4、8254为波特率发生器) 4位数码管显示器设计 2.2 软件部分 键盘扫描程序。将按键0f转换成015的二进制值 串行接口通信程序。1.发送/接收均为查询方式;2.发送为查询方式/接收采用中断方式;二者选其一 4位七段数码管显示程序。左移位方式显示09、af 将串行接口发送端和接收端环回,当在4x4小键盘上敲击按键时,经串口发送、接收后将对应键值显示在4位数码管上。(要求:依次敲击1、2、3、4、5、,则依次显示xxx1、xx12、x123、1234、2345、)2.3 要求 两个实验组间进行双机通信,一方用小键盘键入数字,另一方接收到后在4位数码管上显示 在液晶显示器上实现显示功能(选作,成

5、绩加10分,但满分为100分) 3. 实验原理3.1 设计思想3.1.1 主函数 发送端:从8255c口进行键盘扫描读入按键,获得其ascii码值,将其发送给8251,并把发送值变换为七段译码值在led上进行移位显示。 接收端:8251接收到发送来的ascii码值,在液晶显示器lcd上进行移位显示。 主函数为一个大循环,采用查询方式,依次查询是否有键被按下,发送是否准备好,按键是否为e,接收是否准备好,接受到的数据是否为e,条件满足则执行相应操作,不满足则进行下一个查询,而不是原地踏步地查询。若按键不为e则返回一开始循环执行主程序。3.1.2 键盘扫描 8255c口高四位pc7-pc4输出,低

6、四位pc3-pc0输入,接键盘的行3-列0。 采用行扫描法,使键盘上某一行线为低电平,而其余行接高电平,然后读取列值;如果列值中有某位为低电平,则表明当前行与当前列交点处的键被按下;否则扫描下一行,直到扫完全部的行线为止。 分别用寄存器记录当前行和当前列,并用 行数x 4+列数 计算键值。3.1.3 数码管显示 8255b口输出,高四位pb7-pb4接led位码s3-s0,选择某一个数码管。 8255a口输出,pa7-pa0接led的dp-a,将七段译码值输出到数码管,并进行显示。3.1.4 液晶屏显示 8255b口输出,低三位pb2,pb1,pb0分别接lcd的e,rw,di,控制液晶显示器

7、的使能,读/写,数据/指令。 8255a口输出,pa7-pa0接lcd的d7-d0,与led复用数据线,将ascii值输出到液晶屏,并进行显示。3.2 实验原理图3.2.1 系统接线图3.2.2 自发自收clk0 /8254接 1m时钟gate0/8254接 +5vout0 /8254 接 tx/rxclk/8251cs /8254接 y0/io地址cs /8251 接 y7/io地址rxd /8251 接 txd/82513.2.3 双机通信机器a的rxd/8251接机器b的txd/8251 ,机器b的rxd/8251 接机器atxd/8251,其余接线与自发自收相同 。3.2.4 显示模块

8、pa7pa0/8255 接 dp-a/7段译码管pa7pa0/8255 接 d7-d0/lcd12864pb7-pb4/8255接 s3-s0/7段译码管pb2 /8255接 e/lcd12864pb1 /8255接 r/w /lcd12864pb0 /8255接 d/i /lcd12864pc7pc0/8255 接 行3-列0/4*4键盘cs /8255 接 y1/io地址3.3 流程图 4. 实验程序data segmentio8251 equ 2b8hio8251ctrl equ 2b9hio8255a equ 288hio8255b equ 289hio8255c equ 28ahio

9、8255ctrl equ 28bhio82540 equ 280hio8254ctrl equ 283h;0123456789abcdef的ascii值,用于lcd显示asctable db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,41h,42h,43h,44h,45h,46h;0123456789abcdef七段译码值,用于led显示ledtable db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h;70h=01110000,0b0h=10110000,0d0h=110

10、10000,0e0h=11100000,用于键盘扫描第1、2、3、4行scan db 70h,0b0h,0d0h,0e0hledbuf db 00h,00h,00h,00h ;led显示的四位数lcdbuf db 20h,20h,20h,20h ;lcd显示的四位数flag db 00h ;是否有数据传输的标志位num db 00h ;输入的数cu db 00h ;接收的数data endsstack segment stack stack db 100 dup(?)stack endscode segment assume cs:code,ds:data,ss:stack;延时子程序dela

11、y proc near push cx mov cx,100h wait1 : loop wait1 pop cx retdelay endp;led移位函数ledshift proc near push dx push bx push ax ;ledbuf中四个数依次左移,右补num mov bx,offset ledbuf mov dl,bx+2 mov bx+3,dl mov dl,bx+1 mov bx+2,dl mov dl,bx mov bx+1,dl mov dl,num mov bx,dl pop ax pop bx pop dx retledshift endp;led显示函

12、数,用于显示ledbuf中的四个数showled proc near push dx push bx push ax mov bx,offset ledbuf ;点亮数码管的最高位 mov dx,io8255b ;选择8255b口,控制位码 in al,dx and al,0fh ;位码清零 out dx,al mov dx,io8255a ;选择8255a口,输出最高位 mov al,bx+3 out dx,al mov dx,io8255b ;位码控制选数码管4 in al,dx and al,0fh or al,80h ;s3置1,其余置0 out dx,al ;点亮数码管的第三最高位

13、mov dx,io8255b in al,dx and al,0fh ;位码清0 out dx,al mov dx,io8255a ;选择8255a口,输出第三最高位 mov al,bx+2 out dx,al mov dx,io8255b ;位码控制选数码管3 in al,dx and al,0fh or al,40h ;s2置1,其余置0 out dx,al ;点亮数码管的第二最高位 mov dx,io8255b in al,dx and al,0fh ;位码清0 out dx,al mov dx,io8255a ;选择8255a口,输出第二最高位 mov al,bx+1 out dx,a

14、l mov dx,io8255b ;位码控制选数码管2 in al,dx and al,0fh or al,20h ;s1置1,其余置0 out dx,al ;点亮数码管的最低位 mov dx,io8255b in al,dx and al,0fh ;位码清0 out dx,al mov dx,io8255a ;选择8255a口,输出最低位 mov al,bx out dx,al mov dx,io8255b ;位码控制选数码管2 in al,dx and al,0fh or al,10h ;s0置1,其余置0 out dx,al mov dx,io8255b ;位码清0 in al,dx a

15、nd al,0fh out dx,al pop ax pop bx pop dx retshowled endp;lcd移位函数lcdshift proc near push dx push bx push ax ;lcdbuf中四个数依次左移,右补cu mov bx,offset lcdbuf mov dl,bx+2 mov bx+3,dl mov dl,bx+1 mov bx+2,dl mov dl,bx mov bx+1,dl mov dl,cu mov bx,dl pop ax pop bx pop dx retlcdshift endp;lcd发送指令函数send_ins proc

16、near mov dx,io8255b in al,dx and al,11110000b ;e=0,w,i out dx,al nop in al,dx and al,11110000b or al,00000100b ;e=1,w,i out dx,al mov dx,io8255a ;选择数据口,输出指令码 mov al,bl ;bl中是要输出的指令码 out dx,al mov dx,io8255b in al,dx and al,11110000b ;e=0,w,i out dx,al retsend_ins endp;lcd发送数据函数send_data proc near mov

17、 dx,io8255b in al,dx and al,11110000b or al,00000001b ;e=0,w,d out dx,al nop in al,dx and al,11110000b or al,00000101b ;e=1,w,d out dx,al mov dx,io8255a ;选择数据口,输出数据 mov al,bl ;bl中是要输出的数据 out dx,al mov dx,io8255b in al,dx and al,11110000b or al,00000001b ;e=0;w d out dx,al retsend_data endp;lcd显示函数,用

18、于显示lcdbuf中的四个数showlcd proc near push dx push bx push ax mov bl,92h ;第3位输出地址 call send_ins mov bx,offset lcdbuf ;输出第3位 mov bx,bx+3 call send_data mov bl,93h ;第2位输出地址 call send_ins mov bx,offset lcdbuf ;输出第2位 mov bx,bx+2 call send_data mov bl,94h ;第1位输出地址 call send_ins mov bx,offset lcdbuf ;输出第1位 mov

19、bx,bx+1 call send_data mov bl,95h ;第0位输出地址 call send_ins mov bx,offset lcdbuf ;输出第0位 mov bx,bx+0 call send_data pop ax pop bx pop dx retshowlcd endp;获取键盘的输入数字的子程序input proc near push ax ;保护现场 push cx push dx mov cx,00h ;从第一行开始扫描check: mov dx,io8255c ;选择c口地址 mov bx,offset scan ;得到扫描码 add bx,cx mov al

20、,bx out dx,al ;把要扫描的那一行置0,其余置1 ;防止抖动 in al,dx ;判断是否有键盘按下 mov ah,al call delay ;延迟一段时间,避过抖动区间 in al,dx ;延时后再次读入 cmp al,ah ;比较两次读入的值 jnz check ;不相等说明为抖动,重新检测 ;判断按下的是哪一列 and al,0fh cmp al,0fh ;没有键按下 jz next cmp al,0eh ;第四列有键按下 jz next1 cmp al,0dh ;第三列有键按下 jz next2 cmp al,0bh ;第二列有键按下 jz next3 mov bx,00

21、h ;第一列有键按下 jmp getnumnext: inc cx ;修改变量扫描下一行 cmp cx,04h jnz check ;没有扫描完四行跳转 jmp done ;已经扫描完四行跳转;记录是哪一列有键按下next1: mov bx,03h jmp getnumnext2: mov bx,02h jmp getnumnext3: mov bx,01h ;计算按下的键的数值getnum: mov al,cl mov dl,04h mul dl ;行数乘以4,再加上列数 add bl,al ;此时bl中所存即为按下的键 ;检测键盘是否弹起 mov dx,io8255c ;c口输入 in a

22、l,dx mov ah,alnotup: call delay in al,dx cmp al,ah jz notup ;未弹起,延时重复检测 mov flag,01h ;有键按下,把flag置1, call findasc ;把键盘值转换为asc值 mov dl,cl ;按键值显示到dos界面上 mov ah,02h int 21h done: pop dx ;恢复现场 pop cx pop ax ret input endp;找到键值对应的asc数值,存到num中findasc proc near xor cx,cx mov cl,bl ;bl中是键盘按下的值 mov bx,offset

23、asctable add bx,cx ;此时bx即为在asctable中对应的地址 mov cl,bx ;cl内存着此次按下键盘值的asc值 mov num,cl retfindasc endp;找到键值对应的七段译码值,存到num中 findled proc near xor cx,cx mov cl,bl ;bl中是键盘按下的值 mov bx,offset ledtable add bx,cx ;此时bx即为ledtable中对应的地址 mov cl,bx ;cl内存着此次按下键盘值的七段译码值 mov num,cl retfindled endp;主程序start: mov ax,dat

24、a mov ds,ax ;初始化8253 mov dx,io8254ctrl ;8253控制端口地址 mov al,16h ;8253选择计数器0低八位,方式3,二进制计数,00010110 out dx,al mov dx,io82540 ;计数器0地址 mov al,52 ;写入计数初值52(时钟1m,波特率1200baud,波特率因子16) out dx,al ;初始化8251 mov dx,io8251ctrl ;8251控制端口地址 mov al,40h ;工作命令字软复位,01000000 out dx,al nop mov al,4eh ;方式命令字,一个停止位,无校验,8个数据

25、位,波特率因子16,异步01001110 out dx,al nop mov al,27h ;工作命令字,允许发送接收,00100111 out dx,al nop ;初始化8255 mov dx,io8255ctrl ;8255控制端口地址 mov al,081h ;方式控制字:c口低四位输入,b口输出,方式0 ,a口输出,方式0 out dx,al mov flag,00h ;lcd初始化 push ax push bx push dx mov dx,io8255ctrl mov al,10000001b out dx,al mov bl,30h ;基本指令操作,re=0 call sen

26、d_ins mov bl,01h ;清除显示 call send_ins mov bl,06h ;指定在资料写入或读取时,光标的移动方向 call send_ins ;ddram 的地址计数器(ac)加1 mov bl,0ch ;开显示,关光标,不闪烁 call send_ins pop dx pop bx pop ax call showlcd;扫描键盘loop1: call input call showled mov dx,io8251ctrl ;检验8251发送是否准备好txrdy in al,dx and al,01h jnz send ;8251发送准备好,转去发送;发送未准备好,

27、检验接收是否准备好 loop2: mov dx,io8251ctrl in al,dx and al,02h ;检验8251发送是否准备好rxrdy jnz receive ;接收准备好,转去接收 jmp loop1 ;接收未准备好,转去扫描键盘 ;发送准备好,判断键盘是否按下send: cmp flag,01h je ssend jmp loop2 ;发送准备好,但是没有键盘按下,转去检验接收;键盘按下,要发送数据ssend: mov dx,io8251 ;8251数据端口地址 mov al,num out dx,al ;把发送的数据(asc值)输出到8251 cmp num,45h ;数据与e比较 jz exit ;数据是e则转去退出 call findled ;将数据转为七段译码值 call ledshift ;移位后显示 call showled mov flag,00h ;显示后把flag恢复为0 jmp loop2;开始接收receive: mov dx,io8251 i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论