基于PC机串口的方波发生器.docx

上传人:b****5 文档编号:7827632 上传时间:2023-01-26 格式:DOCX 页数:22 大小:71.28KB
下载 相关 举报
基于PC机串口的方波发生器.docx_第1页
第1页 / 共22页
基于PC机串口的方波发生器.docx_第2页
第2页 / 共22页
基于PC机串口的方波发生器.docx_第3页
第3页 / 共22页
基于PC机串口的方波发生器.docx_第4页
第4页 / 共22页
基于PC机串口的方波发生器.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

基于PC机串口的方波发生器.docx

《基于PC机串口的方波发生器.docx》由会员分享,可在线阅读,更多相关《基于PC机串口的方波发生器.docx(22页珍藏版)》请在冰豆网上搜索。

基于PC机串口的方波发生器.docx

基于PC机串口的方波发生器

 

课程设计报告

 

课程微机原理课程设计

题目基于PC机串口的方波发生器

系别物理与电子工程学院

年级08专业电子信息工程

班级3学号160408318

学生姓名刘凯

指导教师马玉龙职称助教

设计时间2011.5.30~2011.6.3

 

基于PC机串口的方波发生器

引言

在试验或检测过程中,常需要用到频率可调的方波信号。

一般情况下,这是借助于信号发生器获得的。

另外,通过PC机串行口也可产生频率可调的方波信号,这在试验设备不全的情况下是很有用的。

利用PC机串口(COM1)的DTR引脚输出一个频率可设置的方波,用示波器可观察。

[1]

第一章PC机串口简介

目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。

最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。

1.1DB9和DB25的常用信号脚说明

 9针串口(DB9)25针串口(DB25)

针号功能说明缩写针号功能说明缩写

1数据载波检测DCD8数据载波检测DCD

2接收数据RXD3接收数据RXD

3发送数据TXD2发送数据TXD

4数据终端准备DTR20数据终端准备DTR

5信号地GND7信号地GND

6数据设备准备好DSR6数据准备好DSR

7请求发送RTS4请求发送RTS

8清除发送CTS5清除发送CTS

9振铃指示DELL22振铃指示DELL

本次设计主要用到9针串口如图1.1所示:

针脚

功能

针脚

功能

1

载波检测(DCD)

6

数据准备好(DSR)

2

接受数据(RXD)

7

请求发送(RTS)

3

发出数据(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;调用延时程序

XORAL,01H;AL反向

OUTDX,AL

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]

PUSHDS:

[2]

PUSHCSREG

POPDS:

[0]

PUSHIPREG

POPDS:

[2]

XORAX,AX

INAX,60H

PUSHF

CALLDWORDPTRDS:

[0];调用系统提供的中断处理程序

POPDS:

[2]

POPDS:

[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

MOVBX,HIGH_TIME

CMPBX,0FH

JNAL1

SUBBX,STEP

MOVHIGH_TIME,BX

JMPL1

;左

KEY3:

CMPAX,LEFT

JNEKEY4

MOVBX,LOW_TIME

CMPBX,07FFH

JAL1

ADDBX,STEP

MOVLOW_TIME,BX

JMPL1

;右

KEY4:

CMPAX,RIGHT

JNEL1

MOVBX,LOW_TIME

CMPBX,0FH

JNAL1

SUBBX,STEP

MOVLOW_TIME,BX

;现场恢复

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

PUSHAX

PUSHDX

MOVDX,LOW_TIME;LOOP10000000HTIMES

MOVAX,0

S2:

SUBAX,1

SBBDX,0;SBB带借位减法

CMPAX,0;根据结果置标志位

JNES2;结果不为零转移

CMPDX,0

JNES2

POPDX

POPAX

RET

DELAY2ENDP

3.3退出子程序

按ESC键可以退出主程序的取反循环,并将INT9中的中断向量恢复。

退出子程序代码:

STOP:

MOVAX,0

MOVES,AX

PUSHCSREG;DS:

[2]

CLI;置屏蔽中断标志位

POPES:

[9*4]

PUSHIPREG;DS:

[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;DS:

[0]

PUSHES:

[9*4+2]

POPCSREG;DS:

[2];将原来的INT9中断例程的入口地址保存

CLI

MOVWORDPTRES:

[9*4],OFFSETINT9;设置新的中断向量以指向

MOVES:

[9*4+2],CS

STI

MOVDX,3FCH

moval,01h

XORAL,01H;

;;;;;主循环,产生方波;;;;;

LP1:

XORAL,01H;AL反向

OUTDX,AL

CALLDELAY

XORAL,01H;AL反向

OUTDX,AL

CALLDELAY2

JMPLP1

;;;;;退出控制台;;;;;

STOP:

MOVAX,0

MOVES,AX

PUSHCSREG;DS:

[2]

CLI;置屏蔽中断标志位

POPES:

[9*4]

PUSHIPREG;DS:

[2]

POPES:

[9*4+2];将中断向量表中的INT9中断向量恢复

STI;取消屏蔽

movax,4c00h;返回dos

int21h

;;;;;延时子程序;;;;;

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

PUSHAX

PUSHDX

MOVDX,LOW_TIME;LOOP10000000HTIMES

MOVAX,0

S2:

SUBAX,1

SBBDX,0;SBB带借位减法

CMPAX,0;根据结果置标志位

JNES2;结果不为零转移

CMPDX,0

JNES2

POPDX

POPAX

RET

DELAY2ENDP

;;;;;INT9中断的改写;;;;;

INT9PROCnear

;现场保护

PUSHAX

PUSHBX

PUSHES

PUSHDX

PUSHDS:

[0]

PUSHDS:

[2]

PUSHIPREG

POPDS:

[0]

PUSHCSREG

POPDS:

[2]

XORAX,AX

INAX,60H;从键盘输入寄存器读键值到AX

PUSHF;

CALLDWORDPTRDS:

[0];调用系统提供的中断处理程序

POPDS:

[2]

POPDS:

[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

MOVBX,HIGH_TIME

CMPBX,0FH

JNAL1

SUBBX,STEP

MOVHIGH_TIME,BX

JMPL1

;左

KEY3:

CMPAX,LEFT

JNEKEY4

MOVBX,LOW_TIME

CMPBX,07FFH

JAL1

ADDBX,STEP

MOVLOW_TIME,BX

JMPL1

;右

KEY4:

CMPAX,RIGHT

JNEL1

MOVBX,LOW_TIME

CMPBX,0FH

JNAL1

SUBBX,STEP

MOVLOW_TIME,BX

;现场恢复

L1:

POPDX

POPES

POPBX

POPAX

IRET

INT9ENDP

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右箭头

  0x352f/

  0x372a*

  0x4a2d-(注意,这是数字键盘的)

  0x47377

  0x48388

  0x49399

  0x4b344

  0x4c355

  0x4d366

  0x4e2b+

  0x4f311

  0x50322

  0x51333

  0x52300

0x532eDel

课程设计独创性声明:

本小组保证报告所采用的程序代码均由本小组独立完成,分析逻辑基于本小组的理解,通过合理判断并得出结论,力求客观、公正,结论不受任何第三方的授意、影响,特此声明。

 

学生签名:

指导教师评语:

 

课程设计成绩:

指导教师签名:

教研室意见:

 

教研室主任签名:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1