基于PC机串口的方波发生器Word格式文档下载.docx
《基于PC机串口的方波发生器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于PC机串口的方波发生器Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
发出数据(TXD)
8
清除发送(CTS)
4
数据终端准备好(DTR)
9
振铃指示(RI)
5
信号地线(SG)
图1.1PC机9针串行口功能
1.2RS232C串口通信接线方法(三线制)
首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:
同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连
·
同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连。
两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)
上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:
接收数据针脚(或线)与发送数据针脚(或线)相连,彼此交叉,信号地对应相接,就能百战百胜。
1.3串口调试中要注意点
串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果;
强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。
第二章方波产生原理
通过循环取反功能在DTR引脚输出0、1,从而在示波器上显示出方波,其中键盘输入中断(上键和下键)改变延时来改变方波的频率,ESC键退出程序。
主程序流程图如图3.1所示:
图3.1主程序流程图
主要程序如下:
MOVDX,3FCH;
;
MCR寄存器端口地址
MOVAL,01H
XORAL,01H;
LP1:
XORAL,01H;
AL反向
OUTDX,AL
CALLDELAY;
调用延时程序
CALLDELAY2;
JMPLP1;
无条件转移
第三章子程序设计
3.1中断子程序
3.1.1中断方式的定义
当出现来自系统外部,机器内部,甚至处理机本身的任何例外的,或者虽然是事先安排的,但出现在现行程序的什么地方是事先不知道的事件时,CPU暂停执行现行程序,转去处理这些事件,等处理完成之后,CPU自动返回到原来的程序继续执行。
中断系统是计算机系统中用来实现中断功能的软、硬件总称。
在一般计算机系统中,在CPU内部要设置中断机构,在中断源中要设置中断控制器,在操作系统中要设置相应的中断处理程序。
从程序执行的顺序看,中断过程类似于子程序调用,中断系统中的现行程序相当于主程序,中断服务程序相当于子程序,但是,这两者之间却有着本质上的区别,主要区别如下:
1.在子程序调用中,什么时间执行子程序是由程序员事先安排的,当需要转入子程序时,通过在主程序中插入一条调用子程序的指令转入。
在中断系统中,什么时间从现行程序进入中断服务程序是随机的,它出现在现行程序的什么地方是事先不知道的。
如果说调用子程序是由主程序主动发起的,那么,进入中断服务程序必须由中断源主动申请,即由中断服务程序主动发起。
2.在中断系统中,往往有多个中断源同时申请中断服务,即有多个中断服务程序同时要求执行的情况发生;
但在子程序调用时,每次只能调用唯一的一个子程序。
3.子程序通常与调用它的主程序或上一层子程序之间有非常紧密的联系,而中断服务程序一般与被中断的现行程序之间没有关系。
从上面的分析中可以看出,中断系统要比子程序调用复杂得多。
[3]
键盘的中断有3个:
(1)DOS的21H号中断,提供功能较强的读键功能;
(2)BIOS的16H号中断,提供较低层次的服务;
(3)BIOS的9号中断,这是键盘硬中断,每当键盘上有键被按下,键盘都会通过接口向CPU提出9号中断请求。
9号中断与键盘工作原理
键盘上的按键分为普通键和控制键两类。
控制键包括Shift、Ctrl、Alt、CapsLock等,其余为普通键。
对于每个普通键,根据各键在键盘上的分布位置对键进行编码,得到键盘扫描码(P317)。
每个键还有ASCII码。
当发生9号中断请求时,表明键盘有按键信息需要送到主机中,在没有被屏蔽的情况下,CPU将响应该中断,执行一次9号中断服务程序,处理从键盘传来的信息。
9号中断服务程序的功能主要有:
如果是控制键被按下或松开,就把BIOS数据区中的键盘状态字节作相应调整;
如果是普通键,则把按键的扫描码和ASCII码一起存入键盘缓冲区。
虽然int9也是中断,但是编写、调试新的int9中断并不简单。
只要出了一点错误,就会导致系统死机(因为键盘无法使用了)。
本小组在写int9中断例程的时候,获得了一个经验。
写完安装程序后,如果不是很有把握,先不要急着运行或调试。
可以在修改中断向量表的那一段代码每行之前都加上分号注释掉,然后编译运行。
接着用debug查看,确认代码写入位置无误且中断例程正确时,再用e命令改写中断向量表(注意:
必须4个内存单元一起修改,因为只能这中间只能进行一次键盘操作),这样调试就方便了。
还有一点非常重要,运行了安装程序后,往往大家会忽视被修改了的中断向量表,假如再运行一个int9中断例程安装程序,也会导致系统错误。
有一个DOS工具,叫escape.exe,可以在任意时刻按下Esc键时返回DOS.现在发现这个程序非常有用,如果我们写的程序出错,使程序无法返回,利用这个东西就可以让我们的机子不死机了。
3.1.2中断流程图
如图3.2所示为程序中断原理流程图。
图3.2中断原理流程图
3.1.3中断程序代码
INT9PROCnear;
现场保护
PUSHAX
PUSHBX
PUSHES
PUSHDX
PUSHDS:
[0]
[2]
PUSHCSREG
POPDS:
PUSHIPREG
XORAX,AX
INAX,60H
PUSHF
CALLDWORDPTRDS:
[0];
调用系统提供的中断处理程序
控制
AX=键值
CMPAX,KEY_ESC
JNEKEY1
JMPSTOP
;
上
KEY1:
CMPAX,UP
JNEKEY2
MOVBX,HIGH_TIME
CMPBX,07FFH
JAL1
ADDBX,STEP
MOVHIGH_TIME,BX
JMPL1
下
KEY2:
CMPAX,DOWN
JNEKEY3
CMPBX,0FH
JNAL1
SUBBX,STEP
JMPL1
左
KEY3:
CMPAX,LEFT
JNEKEY4
MOVBX,LOW_TIME
MOVLOW_TIME,BX
右
KEY4:
CMPAX,RIGHT
JNEL1
SUBBX,STEP
现场恢复
L1:
POPDX
POPES
POPBX
POPAX
IRET
INT9ENDP
3.2延时子程序
延时子程序是为了改变方波频率而设计的,可使用嵌套双循环功能实现。
在数据段中定义一个DELAY_TIME、STEP,分别为基准延时时间和延时时间增减的步长。
通过这段延时程序,可以让电脑做一段空循环,次期间不执行任何指令,在这段延时过后才去执行主程序部分,这样就有效的增加或减少了方波产生频率,以达到实验要求。
延时子程序如下:
DELAYPROCNEAR
PUSHAX
PUSHDX
MOVDX,HIGH_TIME;
LOOP10000000HTIMES
MOVAX,0
S1:
SUBAX,1
SBBDX,0;
SBB带借位减法
CMPAX,0;
根据结果置标志位
JNES1;
结果不为零转移
CMPDX,0
JNES1
POPDX
POPAX
RET
DELAYENDP
DELAY2PROCNEAR
MOVDX,LOW_TIME;
S2:
SBBDX,0;
CMPAX,0;
JNES2;
JNES2
DELAY2ENDP
3.3退出子程序
按ESC键可以退出主程序的取反循环,并将INT9中的中断向量恢复。
退出子程序代码:
STOP:
MOVAX,0
MOVES,AX
PUSHCSREG;
DS:
CLI;
置屏蔽中断标志位
POPES:
[9*4]
PUSHIPREG;
[2]
POPES:
[9*4+2];
将中断向量表中的INT9中断向量恢复
STI;
取消屏蔽
MOVAX,4C00H;
返回dos
INT21H
第四章结论
将示波器地线接9针串口的第五脚,示波器探头接串口连接线的第四脚DTR,运行程序,接收到如图4.1所示的初始状态占空比为50%的方波。
按键盘向左向右键改变低电平延时时间,如图4.2所示,所得方波占空比改变了,同时频率也有所变化;
按键盘向上向下键改变高电平延时时间,如图4.2所得方波占空比改变了,同时频率也有所变化。
经测试,所产生的方波高电平和低电平的频率变化范围为4.7Hz~~105Hz。
图4.1占空比50%的方波
图4.2控制键盘左右键的方波
图4.3控制键盘上下键的方波
结束语
本文主要介绍了利用PC机串口原理技术的一些方面,并利用8250芯片的DTR引脚输出方波,其中还用到了INT9中断功能作为辅助。
当然,PC机串口原理技术的内容还是很深很广的,我们只是简单的了解了其中一点而已,因此更应进行深入的研究与探讨。
自己制作的程序也存在着一定的不足,有几个效果体现的不是很好。
微机原理程序编写技术也有待于更深入的学习。
参考文献
[1]王冰.通过PC机串行口产生频率可调的方波[J].电气自动化,1997.
[2]朱金钧麻新旗.微型计算机原理及应用技术[M](第二版).北京:
机械工业出版社,2005.
[3]王爽.汇编语言[M](第二版).北京:
清华大学出版社,2003.
附录
附录A
程序代码:
键值映射;
UPEQU200;
上箭头
DOWNEQU208;
下箭头
LEFTEQU203;
左箭头
RIGHTEQU205;
右箭头
KEY_ESCEQU81H;
ESC
STACKSEGMENT
DQQDB300DUP(?
)
STACKENDS
DATASEGMENT
CSREGDW?
IPREGDW?
HIGH_TIMEDW05FH;
高电平保持时间计数值
LOW_TIMEDW05FH;
高电平保持时间计数值;
STEPDW0FH;
步长
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVSP,SIZEDQQ
MOVAX,0
MOVES,AX;
设置ES=0,为获得原理的INT9中断程序的入口地址
PUSHES:
[9*4]
POPIPREG;
[9*4+2]
POPCSREG;
[2];
将原来的INT9中断例程的入口地址保存
CLI
MOVWORDPTRES:
[9*4],OFFSETINT9;
设置新的中断向量以指向
MOVES:
[9*4+2],CS
STI
MOVDX,3FCH
moval,01h
主循环,产生方波;
OUTDX,AL
CALLDELAY
CALLDELAY2
JMPLP1
退出控制台;
PUSHCSREG;
CLI;
[9*4+2];
STI;
movax,4c00h;
int21h
延时子程序;
PUSHDX
MOVDX,HIGH_TIME;
SBBDX,0;
CMPAX,0;
JNES1;
CMPDX,0
JNES1
POPDX
POPAX
RET
MOVDX,LOW_TIME;
JNES2;
JNES2
INT9中断的改写;
INT9PROCnear
INAX,60H;
从键盘输入寄存器读键值到AX
PUSHF;
JNEKEY2
MOVBX,HIGH_TIME
CMPBX,07FFH
JAL1
ADDBX,STEP
MOVHIGH_TIME,BX
JMPL1
JNEKEY3
CMPBX,0FH
JNAL1
SUBBX,STEP
JMPL1
JNEKEY4
MOVBX,LOW_TIME
MOVLOW_TIME,BX
JNEL1
SUBBX,STEP
POPES
POPBX
POPAX
IRET
CODEENDS
ENDSTART
附录B
键盘扫描码对应键:
扫描码键:
0x011bESC
0x3b00F1
0x3c00F2
0x3d00F3
0x3e00F4
0x3f00F5
0x4000F6
0x4100F7
0x4200F8
0x4300F9
0x4400F10
主键盘区:
0x2960~
0x02311
0x03322
0x04333
0x05344
0x06355
0x07366
0x08377
0x09388
0x0a399
0x0b300
0x0c2d-
0x0d3d=
0x2b5c\
0x0e08退格键
0x0f09Tab
0x1071q
0x1177w
0x1265e
0x1372r
0x1474t
0x1579y
0x1675u
0x1769i
0x186fo
0x1970p
0x1a5b
[0x1b5d]
0x1e61a
0x1f73s
0x2064d
0x2166f
0x2267g
0x2368h
0x246aj
0x256bk
0x266cl
0x273b;
0x2827'
0x1c0d回车
0x2c7az
0x2d78x
0x2e63c
0x2f76v
0x3062b
0x316en
0x326dm
0x332c,
0x342e.
0x352f/
0x3920空格键
0xe05b左Win
0xe05c右Win
0xe05dMenu
右边数字键盘:
0x5200Insert
0x4700Home
0x4900PageUP
0x5300Delete
0x4f00End
0x5100PageDown
0x4800上箭头
0x4b00左箭头
0x5000下箭头
0x4d00右箭头
0x372a*
0x4a2d-(注意,这是数字键盘的)
0x47377
0x48388
0x49399
0x4b344
0x4c355
0x4d366
0x4e2b+
0x4f311
0x50322
0x51333
0x52300
0x532eDel
课程设计独创性声明:
本小组保证报告所采用的程序代码均由本小组独立完成,分析逻辑基于本小组的理解,通过合理判断并得出结论,力求客观、公正,结论不受任何第三方的授意、影响,特此声明。
学生签名:
指导教师评语:
课程设计成绩:
指导教师签名:
教研室意见:
教研室主任签名: