时斌
【摘要】Proteus软件强大的CPU仿真功能让其在电子、通信、物联网等相关专业的课程学习中有着重要作用。本文给出了一个用Proteus软件仿真8086系统下数字温度传感器TC77的实例,指出在教学实践中采用适当的仿真技术对教学质量提高的重要意义。
【关键词】微机原理 8086 TC77 Proteus 仿真
电子、通信、物联网等相关专业在选修课学习中大多有传感器技术等课程,而对传感器的相关实验有仿真和实际制作两大类,即使是实际制作,之前先做仿真也是一个比较好的选择。目前高校的教学中以8088为重点的微机原理课程一般安排在单片机之前,以致学习传感器课程时单片机课程尚未学完,故用微机原理的知识进行传感器的仿真成为一种选择,同时也能深化对微机原理课程的理解。
1 8086最小系统
微机原理课程大多以8088为核心进行讲解,但遗憾的是目前Proteus软件里没有8088CPU,只有8086,故要稍作修改,幸好改的地方不多。
图1 8086最小系统图
图1为8086最小系统图,该图提供了16根地址线A0~A15,8根数据线D0~D7,理论上8086可提供16根数据线,但本应用中有8根即可,所以D8~D15没有画出。注意8086的READY端要接VCC,否则系统运行时只运行1条语句,8086的CLK端未接,时钟用的是内部仿真时钟,一般用5MHz即可。
2 系统的控制信号
图2 8086系统的控制信号
图2为系统的控制信号,CS0为8255的片选信号,IOR和IOW为8255的读选通和写选通信号。另外要注意8086的28脚M/IO信号和8088不一样,该脚为低电平时表示IO接口,高电平时表示存储器,该表示方法正好和8088相反。
3 IO接口及传感器和显示部分
图3 8255接口、TC77和显示部分
图3为8255接口和数字传感器TC77及数码管显示部分,8255的A口接数码管的段码,B口低4位接数码管的位码,本应用中用的是共阳数码管。8255的PC7接TC77的CS,PC6接TC77的SCK,PC0接TC77的SI/O。
采用数码管显示是因为程序比较简单,毕竟8086CPU要用汇编进行编程。
4 数字温度传感器TC77
如图3所示,TC77有5个引脚,另外2个是电源和地。
图4 TC77的时序图
图5 TC77的数据格式
图4为TC77的时序图,图5为TC77的数据格式。由图5可看出TC77有16位数据,但其中后3位不用,一直为1,所以有效位为13位,故图4时序图中为13位数据,注意其中第1位为符号位,最低有效位表示0.0625℃。
5 数码管显示子程序
display proc ;输出一位数码管
mov dx,8020h
mov bx,offset seg7
xlat
xor al,0FFh
out dx,al ;输出段码
mov dx,8022h
mov al,ah
out dx,al ;输出位码
call delay
mov al,00h ;清位码
out dx,al
ret
display endp
org 0400h ;数码管段码
seg7 db 03fh,006h,05bh,04fh,066h,06dh,07dh,007h,
db 07fh,06fh,077h,07ch,039h,05eh,079h,071h
上述程序为显示子程序,注意seg7段放在程序的代码段里,因为在Proteus中分段比较麻烦,为简单考虑就一起放在代码段里了。8255的控制口地址为8026h,A口地址为8020h,B口地址为8022h,C口地址为8024h。该子程序的入口AL中放入要输出的00~0F字符,AH中放入位码,第1个数码管为01h,第2、3、4数码管分别为02h、04h、08h。
6 读取TC77数据子程序
Getdata proc
mov ah,0h
mov dx,8024h
mov al,80h ;CS:1,SCK:0
out dx,al
mov al,00h ;CS:0,SCK:0
out dx,al
mov cx,9
g10: in al,dx
and al,01h
shl ah,1
add ah,al
mov al,40h ;SCK:1
out dx,al
mov al,00h ;SCK:0
out dx,al
loop g10
mov al,80h ;CS:1
out dx,al
ret
getdata endp
上述程序为TC77读取数据程序,为简单起见,未考虑小数和负数的情况。返回的TC77数据放在AH中。该程序先把TC77的CS置1,SCK清0,再把CS清0,然后开始串行读取数据,总共读了9位,其中第1位为符号位,为简单考虑丢弃了,最后1位正好代表1℃。
7 主循环程序
start proc far
mov sp,800h
mov dx,8026h
mov al,81h
out dx,al
s10: call getdata ;ah:温度值
mov al,ah
mov ah,0
mov bl,10
div bl
push ax
mov al,ah
mov ah,4
call display
pop ax
mov ah,2
call display
jmp s10
start endp
上述程序为主循环程序,第1行设置了SP,后3行对8255进行初始化。循环体中的程序为调用读取TC77数据子程序及把返回的AH值用十进制方式显示在数码管的2、3位上。
7 仿真结果
图6 仿真结果
图6为仿真结果,如调整TC77的上下按钮可看到数码管上的数据相应变化,TC77每一次变化0.5℃,连续变化2次就可看到数码管上变化1℃。图6中示波器上的3个信号分别为TC77的CS、SCK、SI/O信号,图6中SI/O的数据为000011100,第1位为符号位,后面8位转换为十进制即为28,和数码管中显示的一致。
本文给出了一个用Proteus软件仿真8086系统下数字温度传感器TC77的实例,很好地理解了数字温度传感器的使用方法,为以后的实际制作打下了良好的基础,同时用8086CPU做主控系统在高校的本科教学中也起到了承上启下的效果。
【参考文献】
[1]微型计算机原理与接口技术(第3版)冯博琴 吴宁主编 清华大学出版社