计算机控制技术课程设计.docx
《计算机控制技术课程设计.docx》由会员分享,可在线阅读,更多相关《计算机控制技术课程设计.docx(32页珍藏版)》请在冰豆网上搜索。
计算机控制技术课程设计
课程设计任务书
学生姓名:
某人专业班级:
指导教师:
工作单位:
题目:
串行通信程序设计
初始条件:
用汇编语言编写程序,实现两台计算机之间的通信。
要求完成的主要任务:
①制作RS-232C通信线,并用它连接两台计算机,每一台的用户均可在自己的屏幕上不同区域看到自己和对方由键盘输入的字符(并由不同的颜色加以区分);
②若一方敲入数字(1,2,3......8,9),另一方的机器将其理解为相应的音符发出声音;
③能设置发送、接收的数据长度,并能显示接收的数据;
④能选择通信校验方式(奇校验、偶校验或无校验);
⑤可以将接收的数据作为文件保存起来;
撰写设计说明书及调试心得。
时间安排:
2011年6月20日~2011年6月29日下午17:
30
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
汇编语言是面向计算机的程序设计语言。
在汇编语言中,用助记符代替操作码,用地址符号或标号代替地址码。
这样用符号代替及其语言的二进制代码,就把机器语言变成了汇编语言。
作为最基本的编程语言之一,汇编语言的重要性毋庸置疑,因为它能够完成许多其它语言所无法完成的功能。
尤其在硬件关系非常密切的程序或要提高运算速度的程序,即使是C语言也会有些力不从心,而汇编语言能够很好的扬长避短,最大限度地发挥硬件的性能。
最重要的是计算机控制技术是一门实践性强的学科,不但要求有较高的理论水平,而且还要求有实际的动手能力,其中很多的规则,现象等仅仅靠学习教科书是无法完成掌握的,必须通过时间才能比较直观和深刻的理解。
本次课程设计的题目是用汇编语言编写程序,实现两台计算机之间的通信,要实现许多的功能,通过RS-232C通信线实现两台计算机之间的数据传输。
同时,可以传输数字,在传输数字的时候能够发声,对于接收到的东西,可以保存在指定的文件中。
程序还能够选择通信校验方式。
关键字:
汇编语言计算机通信计算机控制
目录
1设计任务和要求1
2设计思路1
2.1设计思路1
2.2程序流程图2
3软件设计3
3.1RS-232C介绍3
3.2初始化及奇偶校验3
3.3界面设计4
3.4数据传输设计6
3.4.1数据传输流程图6
3.4.2数据传输程序7
3.4.3数据接受程序7
3.5数字发声设计8
4调试过程和运行结果分析9
5心得体会12
参考文献13
附页14
串行通信程序设计
1设计任务和要求
①制作RS-232C通信线,并用它连接两台计算机,每一台的用户均可在自己的屏幕上不同区域看到自己和对方由键盘输入的字符(并由不同的颜色加以区分);
②若一方敲入数字(1,2,3......8,9),另一方的机器将其理解为相应的音符发出声音;
③能设置发送、接收的数据长度,并能显示接收的数据;
④能选择通信校验方式(奇校验、偶校验或无校验);
⑤可以将接收的数据作为文件保存起来;
撰写设计说明书及调试心得。
2设计思路
2.1设计思路
编写程序,运行程序之后,进入界面之后,显示选择奇偶校验方式,选择之后,界面跳转到下一个界面,选择校验方式的不同,会导致传输过程数据的稳定性。
在选择奇偶校验进入下一个界面之后,界面分为两个部分,左边为接受对方机子传输过来的文件和其他的信息,右边部分显示本台机子传输的文件及数字等信息,界面顶部有提示信息,可以根据提示信息操作。
在此期间,任何时候按ESC键,系统都退出运行。
输入数据,在两台机子的不同部分显示相同的信息,输入完整之后,按“[”键保存文件,在按enter显示保存的文件。
在输入数字时,数字传输到对方的电脑上,同时两台机子会同时发出声音,不同的数字发出的声音不相同。
2.2程序流程图
图2-1程序流程图
3软件设计
3.1RS-232C介绍
RS-232C是一个已制定很久的标准,它描述了计算机及相关设备间较低速率的串行数据通信的物理接口及协议。
它是由一个工业贸易组电子工业联合会定义的,最初是为电传打印机设备而制定。
RS-232C是你的计算机用来与你的modem及其它串行设备交谈或交换数据的接口。
在你PC的某处,一般是主板上的通用异步收发器芯片,你计算机上的数据正从它的数据终端设备接口传送到一个内置或外置的modem上。
因为你计算机中的数据是沿并行电路传输,而串行设备一次只能处理一个比特,因此UART芯片将把并行数据转换成连续的比特流。
你PC上的DTE代理也会和modem或其他串行设备通信,而modem与这些串行设备为了遵守RS-232C标准都有一个补充的接口数据通信设备接口。
RS-232C的通讯距离和速度,RS-232C规定最大的负载电容为2500pF,这个电容限制了传输距离和传输速率,RS-232C能够可靠进行数据传输的最大通讯距离为15米。
现在个人计算机提供的串行端口终端的传输速度一般都可以达到115200bps甚至更高,9600bps是最常见的传输速度,在传输距离较近时,使用最高传输速度也是可以的。
传输距距离和传输速度的关系成反比,适当地降低传输速度,可以延长RS-232的传输距离,提高通讯的稳定性。
表3-1串行端口通常使用下列基本I/O地址和IRQ值:
Port
Address
IRQ
COM1
03FB
4
COM2
02FB
3
COM3
03EB
4
COM4
02EB
3
3.2初始化及奇偶校验
初始化程序:
COMRDMACRO
MOVDX,3
INT14H
MOVDX,2EBH
MOVAL,80H
OUTDX,AL
MOVAL,0
MOVDX,2E9H
OUTDX,AL
MOVAL,0CH
MOVDX,2E8H
OUTDX,AL
MOVDX,2EBH
MOVAL,AH
OUTDX,AL
MOVDX,2ECH
MOVAL,08H
OUTDX,AL
ENDM
奇偶校验程序
JY:
LCRCX
set_p0300H
PUTSTISHI
MOVAH,1
INT21H
CMPAL,'o'
JZODD
CMPAL,'e'
JZEVE
CMPAL,'n'
JZNONE
JMPJY
ODD:
MOVAX,0EAH
MOVAH,AL
JMPDONE
EVE:
MOVAX,0FAH
MOVAH,AL
JMPDONE
NONE:
MOV[BX],0E3H
MOVAH,AL
3.3界面设计
设计要求在不同的区域用不同的颜色显示接收和发送的数据信息,通过BIOS、DOS系统功能调用,实现以上的要求。
调用“INT10H”和“INT21H”实现颜色和区域的选择显示。
使用宏定义、宏调用的方式来实现程序的调用。
表3-2INT21H的功能调用表
AH
功能
调用参数
返回参数
01H
带回显的键盘输入
AL=输入字符
09H
显示字符串
DS:
DX=串地址'$'结束字符串
02H
显示输出
DL=输出字符
表3-3INT10H的功能表
功能号
功能
入口参数
显示模式属性
00H
设置显示模式
AH=00H,AL=02H
80×25的16色文本
01H
设置光标形状
AH=01H
CH低四位=光标的起始行
CL低四位=光标的终止行
02H
用文本坐标下
设置光标位置
AH=02
BH=显示页码
DH=行(Y坐标)
DL=列(X坐标)
本次课程设计的题目是用汇编语言编写程序,实现两台计算机之间的通信,所以在实现传输的过程中,两台机子都有一个传输的界面,将一整块界面分为两个部分,一个部分显示传输的内容,另一个部分显示的是接受的内容。
界面程序:
SET_C0aH,80
SET_P0000H
PUTSINFORMATION1
SET_C0aH,80
SET_P0100H
PUTSINFORMATION2
SET_C0aH,80
PUTSINFORMATION4
INFORMATION1DB'OurTransmissiontest!
','$'
INFORMATION2DB'PRESS[ESC]TOEXIT','$'
INFORMATION3DB'-------------------------------------------------------------','$'
INFORMATION4DB'"["TOSAVETHEMESSAGE"]"TOSEEWHATYOUSAVED','$'
M11DB'WHATYOUWANTTOSEND:
','$'
M22DB'WHATYOUHAVERECEIVED:
3.4数据传输设计
3.4.1数据传输流程图
图3-2数据传输流程图
3.4.2数据传输程序
在字符发送的阶段,键盘输入字符后,程序对字符进行判别是否为特殊的字符,特殊的字符包括“ESC”、“[”和回车键,如果是特殊的字符,则进行相应的功能操作。
如果不是特殊字符,则将字符显示在发送的界面SET_P指定的光标的位置,和显示SET_C指定的字体颜色。
然后读取端口状态,将字符发送到另一台电脑上。
SENDSMACRO
LOCALSEND
PUSHAX
CMPAL,1BH
JZSEND1
CMPAL,'['
JZSEND1
CMPAL,0DH
JZSEND1
SET_PP1
SET_C0EH,1
MOVDL,[SI]
MOVAH,2
INT21H
LOCATION_sent
SET_P[BX]
SEND1:
LCRCX
PUSHAX
MOVDX,02EDH
SEND2:
INAL,DX
TESTAL,20H
JZSEND2
POPAX
MOVDX,02E8H
OUTDX,AL
POPAX
ENDM
3.4.3数据接受程序
在另一台电脑字符接收时,流程和发送基本相反,先读取端口状态,如果收到数据,则将字符显示在发送的界面SET_P指定的光标的位置,和显示SET_C指定的字体颜色。
同样,如果是特殊字符“ESC”、“[”和回车键,则按照特殊字符的功能做相应的处理。
数据接受程序:
RECVSMACRO
LOCALNEXT_R,AGAIN_R
LCRCX
MOVDX,02EDH
INAL,DX
TESTAL,01H
JZAGAIN_R
MOVDX,02E8H
INAL,DX
CMPAL,1BH
JZAGAIN_R
CMPAL,'['
JZAGAIN_R
CMPAL,0DH
JZAGAIN_R
MOV[DI],AL
CMPAL,30H
JLNEXT_R
CMPAL,39H
JGNEXT_R
SOUNDAL
NEXT_R:
SET_PP2
SET_C0AH,1
MOVDL,[DI]
MOVAH,2
INT21H
SAVE_PP2
LOCATION_recv
INCDI
AGAIN_R:
ENDM
3.5数字发声设计
设计任务中,要求在输入了一个数字之后,发出声音,每个数字对应不同的声音。
设计中,在键盘输入一个字符后,判断其是否为0-9的数字,如果是0-9的数字,就将其转换为相应的发声频率。
表3-4数字与发声频率的对应表
数字
0
1
2
3
4
5
6
7
8
9
频率
40
80
120
140
160
180
200
220
240
255
发声程序:
SOUNDMACROMM
LOCALLENG,DELAY
PUSHAX
MOVAL,MM
ANDAL,0FH
LEABX,FREG
XLAT
MOVCL,AL
MOVCH,0
MOVAL,0B6H
OUT43H,AL
MOVDX,08H
MOVAX,3208H
DIVCX
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,3
OUT61H,AL
MOVBX,0FFFFH
LENG:
MOVCX,663
DELAY:
LOOPDELAY
DECBX
JNZLENG
MOVAL,AH
OUT61H,AL
POPAX
ENDM
4调试过程和运行结果分析
程序的调试是一个非常重要的过程,可以测试出程序有哪些地方不对,哪些地方有欠缺,还需要修改,从而对程序进行改进,使程序更加的完美,实现的功能稳定,实现程序的良好运行
在最初运行程序的时候,存在着很多的问题,首先就是界面的问题,这个比较容易解决,主要是确定光标的位置,然后在位置上面显示字符。
经过微调,是界面开始去比较的整齐。
在后面输入字符后,由于传输和接收是不同的两个部分,但是在换行的时候,接收的部分不会在中界处跳转到下一行,对程序检查之后,发现少了一段换行的程序。
在程序调试之后,大部分的问题已经解决,但是有些功能还是没有实现,也就放弃了。
以下是程序调试之后,显示出来的结果。
进入界面之后两台电脑同时输入数据,两台电脑在不同的区域显示接受和传输的数据,在此期间,如果按下“ESC”键,程序将退出。
在输入数字之后,数字显示在界面上,同时,两台电脑发出声音。
图4-1,图4-2分别展示了两台电脑同时传输字符的过程,传输的字符和接受的字符分别显示在不同的地方:
图4-1字符传输/接收显示
图4-2字符传输/接收显示
按下“[”键之后,屏幕下方显示“SAVESUCCEED”,表示本台机子接受到的字符得到保存,显示结果如图4-3所示。
图4-3保存字符显示
在保存完数据之后,如果没有按下“ENTER”键,则可以继续传输字符,如果按下了“ENTER”键,界面跳转,显示保存的数据。
此期间,可以按“ESC”退出。
图4-4文件保存显示
5心得体会
《计算机控制原理》是自动化专业一门很重要的课程,在课程设计的这段时间里,我学习到了很多知识,也有许多的体会。
对于汇编语言,从不太熟悉到后面的熟悉,可以说,要掌握一门语言,并不是太难,主要是在遇到问题的时候要多查寻资料,这样就可以了解到更多,熟悉更多,然后这门语言也会被快速掌握,我们可以熟悉的运用语言。
对于程序的编写,对于我们来说仍然是一个很大的问题,在这方面,我们还需继续加强,所谓真正的好程序,是要有很多条件的,程序有逻辑性,可读性,高效性,可维护性,我们现在的编写能力还不能达到好程序的标准,在编写程序的时候,我们总是把一段程序想得比较简单,然后编写出来的程序也就是缺少一些功能,总是不能编写得很完美,在这个方面还需要加强。
学习编写程序的缜密性,逻辑性。
在整个课程设计的过程中,最复杂的一段就是程序的调试,每次调试都会花很多的时间。
每段程序都会遇到这样那样的问题,然后要逐条程序的检查,费时费力。
但是这个过程是收获很多的,从中可以查漏补缺,学到很多的东西。
同时,在程序的调试过程中我们也认识到,编程是需要细心和耐心的,如果在编程的时候做到了这些,那么在调试程序的时候我们就可以省去很多的麻烦,养成一个良好的编程习惯是很重要的!
这段时间里,通过这次课程设计,使我认识到了理论与实际相结合的重要性,对课本上的知识在实际生活中的运用也有了进一步的了解,进一步的掌握了书本上的知识,在解决困难的过程中,获得了许多专业方面的知识,拓展了视野。
提高了理论水平和实际动手能力,学会了解决问题的方法,激发了我们的探索精神。
这样的课程设计是很好的锻炼机会,增强了我们的实践动手能力。
对于汇编语言,也更加的熟悉,从中受益匪浅。
参考文献
[1]周佩玲.微机原理与接口技术(基于16位机).北京:
电子工业出版社,2005
[2]沈美明.IBM-PC汇编程序语言设计.北京:
清华大学出版社,1991
[3]袁新燕.计算机外设与接口简明教程.北京:
北京航空航天大学出版社,2005
[4]王力虎.PC控制及接口程序设计实例.北京:
科学出版社,2004
[5]毛明.宏汇编语言程序设计编程知道.北京:
机械工业出版社,1993
附页
;数据段
DATASSEGMENT
aa1db'*','$'
INFORMATION1DB'OurTransmissiontest!
','$'
INFORMATION2DB'PRESS[ESC]TOEXIT','$'
INFORMATION3DB'--------------------------------------------------------------','$'
INFORMATION4DB'"["TOSAVETHEMESSAGE"ENTER"TOSEEWHATYOUSAVED','$'
M11DB'WHATYOUWANTTOSEND:
','$'
M22DB'WHATYOUHAVERECEIVED:
','$'
FREGDB40,80,120,140,160,180,200,220,240,255
BUFDB255DUP(0)
BUF1DB255DUP(0)
BUF2DB255DUP(0)
P1DW0429H
P2DW0400H
FILE_SAVEDB'c:
\WENJIAN.txt',0
HANDLEDW?
SUCCEED_MESSAGEDB'SAVESUCCEED','$'
ERRORDB'SAVEERROR','$'
OPEN_INFO1DB'[ESC]toquit!
','$'
OPEN_INFO2DB'press[anykeyexceptESC]Returntotheserialtransmission','$'
OPEN_INFO3DB'Savedmessageis:
','$'
TISHIDB'pleasechoosetheway(o:
ODD,e:
EVEN,n:
NONE):
','$'
DATASENDS
;堆栈段
STACKSGSEGMENTSTACK'S'
DW64DUP(?
)
STACKSGENDS
;代码段
CODESSEGMENT
;初始化8250
COMRDMACRO;INITTIALINGCOM4
MOVDX,3
INT14H
MOVDX,2EBH
MOVAL,80H
OUTDX,AL;使通信线路寄存器最高位置1
MOVAL,0
MOVDX,2E9H
OUTDX,AL;设置波特率高位
MOVAL,0CH
MOVDX,2E8H
OUTDX,AL;设置波特率低位
MOVDX,2EBH
MOVAL,AH
OUTDX,AL;设置数据格式为8位/字符,1个停止位,无奇偶效验
MOVDX,2ECH
MOVAL,08H
OUTDX,AL;设置调制解调器控制寄存器,RTS,DTR无效
;CHOSETHEWAY
ENDM
;将LCR最高位清零
LCRCXMACRO
PUSHAX
MOVAL,1FH
MOVDX,02EBH
OUTDX,AL
POPAX
ENDM
;换行1,右边
LOCATION_sentMACRO
MOVAH,03H;读光标位置;02h,置光标位置,DH行,DL列。
MOVBH,0
INT10H
LEABX,P1
CMPDL,79
JZH1
CMPAL,0DH
JZH1
IH1:
MOV[BX],DX
jmpSH1
H1:
INCDH
MOVDL,29h
jmpIH1
SH1:
ENDM
;换行2
LOCATION_recvMACRO
MOVAH,03H
MOVBH,0
INT10H
LEABX,P2
CMPDL,28h
JZH2
CMPAL,0DH
JZH2
IH2:
MOV[BX],DX
jmpSH2
H2:
INCDH
MOVDL,00
jmpIH2
SH2:
ENDM
;显示
PUTSMACROSTRING
PUSHAX
MOVAH,9
LEADX,STRING
INT21H
POPAX
ENDM
;定光标位置
SET_PMACROP_XY
PUSHAX
MOVDX,P_XY
MOVBH,0
MOVAH,02H
INT10H
POPAX
ENDM
;保存光标位置
SAVE_PMACROPL
MOVAH,03H;读光标位置
MOVBH,0
INT10H
LEABX,PL
MOV[BX],DX
ENDM
;设置显示颜色
SET_CMACROCOLOR,LENGTH
MOVAH,9
MOVAL,1
MOVBH,0
MOVBL,COLOR;字体颜色
MOVCX,LENGTH;显示的长度
INT10H
ENDM
;从串口发送一个字符
SENDSMACRO
LOCALSEND
PUSHAX
CMPAL,1BH;ESC
JZSEND1
CMPAL,'['
JZSEND1
CMPAL,0DH
JZSEND1
SET_PP1;设置发送显示位置
SET_C0EH,1;设置字体颜色
MOVDL,[SI];显示[字符]
MOVAH,2
INT21H
LOCATION_sent
SET_P[BX]
SEND1:
LCRCX
PUSHAX
MOVDX,02EDH;状态口
SEND2:
INAL,DX;读状态
TESTAL,20H;发送就绪?
JZSEND2
POPAX
MOVDX,02E8H;数据口
OUTDX,AL
POPAX
ENDM
;从串口接收一个字符
RECVSMACRO
LOCALNEXT_R,AGAIN_R
LCRCX
MOVDX,