网友来电询问关于修改、调试方面的一些问题,为此,做而论道将就利用 PROTEUS 软件进行仿真调试的方法再作一简单的介绍。
进行串行通信,一般应该有两个计算机,两个程序,利用一条串行通信电缆,互相“全双工”的传送信息。
互相通信的这两个程序,应该有一个是成熟的程序,而另一个可以是有待调整、修改的。
利用 PROTEUS 软件,问题就简单多了,不用去找两台计算机和成熟的程序。PROTEUS 软件中,含有多种虚拟仪器,有一个可以模拟完善的串行通信设备,可以和我们编写的、待调整的程序进行全双工的通信。
这个设备就是:Virtual Terminal,中文应该叫做:虚拟终端。
其实,用两个 Virtual Terminal,连接上线路,它们就可以通信了。请看下图:
最简单的“单工”串行通信系统,在这个系统里面并不需要单片机,不用装载程序。
把它运行起来,就会弹出两个对话窗口,在左边的,只能键入不能显示,键入的字符,将会传输的右边窗口中,在右边显示出来。
大家可以自己试试看,很简单的。可以双击 Virtual Terminal,在弹出的对话框中设置通信参数。
当理解了 Virtual Terminal 的一般应用之后,就可以把单片机,加入到通信系统中了。
见下图:
了清晰起见,在图中,仍然使用了“单工”的形式。
上面的 Virtual Terminal,是向单片机输送数据的,当键入'A',单片机将会显示出来字符的 ASCII 码 41。注意,这是以 16 进制显示的。大家可以胡乱敲键,看看它们的 ASCII 码都是什么!
在单片机一方,按下“发送”按键,将会把拨码开关输入的二进制数字,发送到下面的 Virtual Terminal 中,图中把 39 显示成了 9,能看出来是怎么回事吗?
图中的单片机,里面应该载入程序,其源代码如下:
;----------------------------------------
ORG 0000H
SJMP START
ORG 0003H
LJMP INT0_INT
ORG 0023H
LJMP UART_INT
;----------------------------------------
START:
MOV SP, #60H
MOV SCON,#50H ;方式1, 8-n-1
MOV TMOD,#20H
MOV TH1, #0FDH ;波特率设置
MOV TL1, #0FDH ;
SETB TR1
SETB IT0 ;P3.2下降沿触发中断
SETB EX0
SETB ES ;开放中断
SETB EA SJMP $
;----------------------------------------
INT0_INT:
MOV P2, #0FFH
MOV A, P2 ;读出的拨码开关信息
MOV SBUF, A ;向串口发送
RETI
;----------------------------------------
UART_INT:
JB TI, _FA_
MOV A, SBUF ;读出串口收到的信息
MOV P0, A ;送到P0口进行显示
CLR RI
RETI
;--------------------
_FA_:
CLR TI
RETI
;----------------------------------------
END
;----------------------------------------
呵呵,注意到了吗?这程序是和前述博文的程序是完全相同的。