河北科技大学
课程设计报告
学生姓名: 学 号:
专业班级:
课程名称: 微型计算机原理及应用技术
学年学期: 2 0 1 2 —2 0 1 3 学年第一学期
指导教师:
2 0 1 3 年 1 月
课程设计成绩评定表
目录
一、设计题目............................................................................................................. 1
二、设计目的............................................................................................................. 1
三、设计原理及方案................................................................................................. 1
1、8251A的基本性能........................................................................................... 1
2、8251A的内部结构........................................................................................... 1
3、8251外部引脚图............................................................................................. 2
4、8251A的编程................................................................................................... 2
5、8251A的初始化............................................................................................... 4
四、实现方法............................................................................................................. 5
1、程序流程图如下:.......................................................................................... 5
2、连线图.............................................................................................................. 6
3、8251A操作过程流程图................................................................................... 7
4、试验程序(见附录)...................................................................................... 7
五、实施结果............................................................................................................. 7
六、改进意见及建议................................................................................................. 8
七、个人所做贡献..................................................................................................... 8
八、设计体会............................................................................................................. 8
九、同组成员名单..................................................................................................... 8
十、附录..................................................................................................................... 9
一、设计题目
双机通过两台试验箱串行通讯
二、设计目的
1、掌握8088/86实验串行口通信的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串行口通讯程序编写方法。
三、设计原理及方案
1、8251A的基本性能
8251A是可编程的串行通信接口芯片,基本性能有:
(1).两种工作方式:同步方式,异步方式。同步方式下,波特率为064K,异步方式下,波特率为0~19.2K。
(2).同步方式下的格式
每个字符可以用5、6、7或8位来表示,并且内部能自动检测同步字符,从而实现同步。除此之外,8251A也允许同步方式下增加奇/偶校验位进行校验。
(3).异步方式下的格式
每个字符也可以用5、6、7或8位来表示,时钟频率为传输波特率的1、16或64倍,用1位作为奇/偶校验。1个启动位。并能根据编程为每个数据增加1个、1.5个或2个停止位。可以检查假启动位,自动检测和处理终止字符。
(4).全双工的工作方式
(5).提供出错检测
2、8251A的内部结构
发送器由发送缓冲器和发送控制电路两部分组成。接收器由接收缓冲器和接收控制电路两部分组成。数据总线缓冲器,读/写控制电路,调制解调控制电路。
8251A内部结构图
3、8251外部引脚图
8251的外部引脚下图所示,共28个引脚,每个引脚信号的输入输出方式如图中的箭头方向所示。
8251外部引脚图
4、8251A的编程
编程的内容包括两大方面:
一是由CPU发出的控制字,即方式选择控制字和操作命令控制字;
二是由8251A向CPU送出的状态字。
(1)、方式选择控制字(模式字)
方式选择控制字的格式如图所示。
(2)、操作命令控制字(控制字)
操作命令控制字的格式如下:
(3)、状态字
状态字的格式如下:
5、8251A的初始化
8251的初始化和操作流程下图所示。
8251初始化流程图
a)芯片复位以后,第一次用奇地址端口写入的值作为模式字进入模式寄存器。
b)如果模式字中规定了8251A工作在同步模式,
c)由CPU用奇地址端口写入的值将作为控制字送到控制寄存器,而用偶地址端口写入的值将作为数据送到数据输出缓冲寄存器。
四、实现方法
1、程序流程图如下:
串口发送子程序
2、连线图
3、8251A操作过程流程图
8251A操作过程流程图
4、试验程序(见附录)
五、实施结果
双机串行通信实现了数据的双项收发。两台试验箱A,B可相互发送、接受数据。在一台小键盘键入字符,由8251A的发送端发送给另一台的 8251A的接收端接收,然后在另一台LED数码显示器上显示出来。同样另一台也可做发送端发送字符。
六、改进意见及建议
本次课程设计是通过8251的收发功能将两个试验箱实现串行通讯,我们组顺利实现了两台机箱的同时发送和接收数据的双机通讯。而在本次试验中发送的一直都是一个字符而不能发送多位字符,我希望改进的是可以发送任意长短的字符,由用户自己定义。
七、个人所做贡献
在本次试验中我负责程序的编写、修改和调试,我们在网上查找,在本机实验程序中查找,修改,在一条一条指令的研究后,在询问了别人意见后,最后定下了附录里的这段程序。
八、设计体会
学生学习完理论后就要进行课程设计,因为理论课程学习是让学生学习基本理论知识,对课程内容和原理有比较深刻的理解,只要从理论上理解,不用考虑实际的可行性,而课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,不仅需要在理论上能实现而且还要考虑实际的可行性,不能纸上谈兵。随着科学技术发展的日新日异,微型计算机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握微型计算机的开发技术是十分重要的。尤其是在现在这个金融危机的时刻,找工作越来越难,只有加强自身的能力才能有一席立足之地。
回顾起此次接口课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说8251A芯片的使用,软件的应用技巧,对汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
九、同组成员名单
十、附录
OUTBIT equ 08002h ; 位控制口
OUTSEG equ 08004h ; 段控制口
IN_KEY equ 08001h ; 键盘读入口
CS8251D equ 09000h ; 串行通信控制器数据口地址
CS8251C equ 09001h ; 串行通信控制器控制口地址
data segment
LEDBuf db 6 dup(?) ; 显示缓冲
Num db 1 dup(?) ; 显示的数据
DelayT db 1 dup(?)
RBuf db 0
TBuf db 0
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
KeyTable: ; 键码定义
db 16h, 15h, 14h, 0ffh
db 13h, 12h, 11h, 10h
db 0dh, 0ch, 0bh, 0ah
db 0eh, 03h, 06h, 09h
db 0fh, 02h, 05h, 08h
db 00h, 01h, 04h, 07h
code segment
assume cs:code, ds:data
Delay proc near
push ax ; 延时子程序
push cx
mov al, 0
mov cx,ax
loop $
pop cx
pop ax
ret
Delay endp
DisplayLED proc near
mov bx, offset LEDBuf
mov cl, 6 ; 共6个八段管
mov ah, 00100000b ; 从左边开始显示
DLoop:
mov dx, OUTBIT
mov al, 0
out dx,al ; 关所有八段管
mov al, [bx]
mov dx, OUTSEG
out dx, al
mov dx, OUTBIT
mov al, ah
out dx, al ; 显示一位八段管
push ax
mov ah, 1
call Delay
pop ax
shr ah, 1
inc bx
dec cl
jnz DLoop
mov dx, OUTBIT
mov al, 0
out dx,al ; 关所有八段管
ret
DisplayLED endp
TestKey proc near
mov dx, OUTBIT
mov al, 0
out dx, al ; 输出线置为0
mov dx, IN_KEY
in al, dx ; 读入键状态
not al
and al, 0fh ; 高四位不用
ret
TestKey endp
GetKey proc near
mov ch, 00100000b
mov cl, 6
KLoop:
mov dx, OUTBIT
mov al, ch ; 找出键所在列
not al
out dx, al
shr ch, 1
mov dx, IN_KEY
in al, dx
not al
and al, 0fh
jne Goon_ ; 该列有键入
dec cl
jnz KLoop
mov cl, 0ffh ; 没有键按下, 返回 0ffh
jmp Exit1
Goon_:
dec cl
shl cl, 2 ; 键值 = 列 X 4 + 行
mov ch, 4
LoopC:
test al, 1
jnz Exit1
shr al, 1
inc cl
dec ch
jnz LoopC
Exit1:
mov dx, OUTBIT
mov al, 0
out dx, al
mov ch, 0
mov bx, offset KeyTable
add bx, cx
mov al, [bx] ; 取出键码
mov bl, al
WaitRelease:
mov dx, OUTBIT
mov al, 0
out dx, al ; 等键释放
mov ah, 10
call Delay
call TestKey
jne WaitRelease
mov al, bl
ret
GetKey endp
IInit proc near ; 8251初始化
mov dx, CS8251C
mov al, 01001111b ; 1停止位,无校验,8数据位, x64
out dx, al
mov al, 00010101b ; 清出错标志, 允许发送接收
out dx, al
ret
IInit endp
Send proc near ; 串口发送
mov dx, CS8251C
mov al, 00010101b ; 清出错,允许发送接收
out dx, al
WaitTXD:
in al, dx
test al, 1 ; 发送缓冲是否为空
jz WaitTXD
mov al, TBuf ; 取要发送的字
mov dx, CS8251D
out dx, al ; 发送
push cx
mov cx,0ffffh
loop $
pop cx
ret
Send endp
Receive proc near ; 串口接收
mov dx, CS8251C
WaitRXD:
in al, dx
test al, 2 ; 是否已收到一个字
je WaitRXD
mov dx, CS8251D
in al, dx ; 读入
mov RBuf, al
ret
Receive endp
start proc near
mov ax, data
mov ds, ax
call IInit
mov LEDBuf, 0ffh ; 显示 8.8.8.8.
mov LEDBuf+1, 0ffh
mov LEDBuf+2, 0ffh
mov LEDBuf+3, 0ffh
mov LEDBuf+4, 0
mov LEDBuf+5, 0
MLoop:
call DisplayLED ; 显示
mov dx, CS8251C
in al, dx ; 是否接收到一个字
test al, 2
jnz RcvData
call TestKey ; 有键入?
je MLoop ; 无键入, 继续显示
call GetKey ; 读入键码
and al, 0fh ; 显示键码
mov TBuf, al
call Send
jmp MLoop
RcvData:
call Receive ; 读入接收到的字
mov al, RBuf
and al, 0fh ; 只显示低四位
mov ah, 0
mov bx, offset LEDMAP
add bx, ax
mov al, [bx] ; 转换成显示码
mov LEDBuf+5, al
jmp MLoop
Start endp
code ends
end start