1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 微机原理与接口技术课程设计——数字电压表的设计(含完整代码与实验连接图)

微机原理与接口技术课程设计——数字电压表的设计(含完整代码与实验连接图)

时间:2019-06-05 15:20:57

相关推荐

微机原理与接口技术课程设计——数字电压表的设计(含完整代码与实验连接图)

1.设计内容

此次课程设计的基础内容为设计一个可精确到小数点后两位的电压表,作为拓展并加入了电压报警功能,该功能实现一个对超过额定电压就会发出蜂鸣声,进行报警。

它主要是通过采集实验箱提供的0~5V的电压; 当输入电压在额定值4V以内,用数码管显示其实际电压值;当输入电压超过额定值4V,数码管显示“E.O”,并发出报警音,用来提示用户修正电压值。

2. 设计要求

(1)硬件构成:PC机,计数器/定时器芯片,并行接口芯片,4位8 段数码管单元,模数转换单元,蜂鸣器。

(2)程序功能:显示电压,报警。

3.芯片选择

在本系统中,主要采用的芯片有8254可编程计数/定时器芯片、8255并行接口芯片和A/D转换接口芯片ADC0809。

8254可编程计数/定时器芯片:用来控制蜂鸣器。

8255并行接口芯片:用来连接数码管显示单元和控制8254。

ADC0809A/D转换单元:将模拟信号转换为数字信号。

4.硬件连线

4.1 8254可编程定时/计数器芯片接线图

在本系统中,8254门控信号输入引脚GATE0与8255的PA0和PA1相连,时钟输入信号CLK0与系统总线的CLK相连,OUT0与蜂鸣器相连,当门控信号GATE0接收到从8255的PA0和PA1传来的高电平,则蜂鸣器会发出报警声,具体接线图如下(图3-1):

4.23.2 8255并行接口芯片接线图

8255的D0-D7连接系统总线的XD0-XD7,RD,WR,CS分别连接系统总线的XIOR,XIOW,IOY0。8255的A口低两位PA0,PA1控制8254可编程计数/定时器芯片。8255的B口的PB0-PB7和C口的低四位PC0-PC3来控制数码的显示。

8255除了连接系统总线之外,还要连接数码管,数码管显示引脚是A,B,C,D,E,F,G,DP分别连接8255的PB0-PB7,数码管选择引脚X1,X2,X3,X4分别连接8255的PC0-PC3,具体接线图如下:

4.3 A/D转换接口芯片接线图

在电压报警功能中,ADC0809的CS片选信号连接系统总线的IOY2端口,CLK连接系统总线CLK,WR,RD分别连接系统总线的XIOW和XIOR,具体接线图如下:

4.4 数码管连线图

数码管显示引脚是A,B,C,D,E,F,G,DP分别连接8255的PB0-PB7,数码管选择引脚X1,X2,X3,X4分别连接8255的PC0-PC4,具体接线图如下

5.软件实现

5.1 模块流程图

5.1.1 主程序流程图

5.1.2 电压转换模块流程图

5.1.3 电压显示模块流程图

5.1.4 电压报警模块流程图

5.2 代码设计

5.2.1 主程序代码

主程序主要由电压转换模块和电压报警模块组成,首先给8255写方式控制字,然后初始化8255,再启动A/D转换,将转换后的值读入AL中,最后再在电压转换模块中处理转换后的数据,然后检测数据的大小看是否需要报警,具体代码如下:

START: MOV AX,DATA ;初始化寄存器MOV DS,AXMOV DX,MY8255_MODE ;8255初始化MOV AL,80H ;工作方式为0,A口,B口都为输出OUT DX,ALMOV DX,OFFSET STR0 MOV AH,09H ;显示STR0的内容INT 21HSTART1: MOV DX,ADC0809 MOV AL,0OUT DX,AL ;启动A/D转换,通过ADC0809输出MOV CL,AL ;将A/D转换后的值送到CL当中去MOV DX,ADC0809 ;读出转换结果IN AL,DXMOV CL,ALCALL TRANSFORM ;调用电压转换 CALL ALARM ;调用电压报警MOV AH,01HINT 16H ;判断是否有按键按下JNE QUITJMP START1

5.2.2 电压转换模块代码

在电压转换模块中,主要是对A/D转换后的数据进行处理,A/D转换后的数据范围是0-255,但是电压要求范围是0-5V,所以这里需要对转换后的数据进行缩小。缩小后,还需要精确到小数点,于是这里需要将除后的余数保留,并且将余数扩大10倍,在一次除以33H,则可以获得小数点后面的数字,具体代码如下:

TRANSFORM PROCCHANGE:MOV SI,2000HMOV AL,CLMOV BL,33HMOV AH,00H ;屏蔽高四位DIV BL;整除,默认为AX/BLMOV DS:[SI],AL ;MOV CL,ALMOV AL,AHMOV BL,10MUL BL ;余数扩大十倍MOV BL,33HDIV BLMOV DS:[SI+1],AL ;2000H存入第一位小数MOV CH,ALMOV AL,AHMOV BL,10MUL BL ;余数扩大十倍MOV BL,33HDIV BLMOV DS:[SI+2],AL ;2001H存入第二位小数RETTRANSFORM ENDP

5.2.3数码管显示模块代码

8255并行接口芯片连接数码管,用高低电平来控制数码管的显示,具体代码如下:

DISPLAY0 PROC;数码管显示子程序SHOW: MOV DX,MY8255_C ;写C口MOV AL,1011B;让整数部分数码管亮OUT DX,ALMOV AL,CLMOV BX,offset DTABLE1 ;通过偏移地址寻地址XLATMOV DX,MY8255_B ;读B端口地址OUT DX,ALCALL DALLYMOV DX,MY8255_C ;写C口MOV AL,0111B ;让小数部分数码管亮OUT DX,ALMOV AL,CHMOV BX,offset DTABLE0XLATMOV DX,MY8255_B ;读B端口地址OUT DX,ALCALL DALLYRETDISPLAY0 ENDP ;结束子程序

5.2.4 电压报警模块代码

电压报警模块中,主要是对电压值的大小进行判断,若大于3.0V,则蜂鸣器工作,发出一定频率的声音,并在数码管显示E.0,若小于3.0V,则显示当前电压值,具体代码如下:

ALARM PROC ;调用报警子程序CMP CL,3;判断整数部分是否小于3JB SHOW2;小于3则跳转到SHOW2CMP CL,3;断整数部分是否等于3JZ SHOW3;等于3则跳转到SHOW3JMP SHOW1;否则跳转到SHOW1SHOW3: CMP CH,0;判断小数部分是否等于3JZ SHOW2;等于则跳转到SHOW2JMP SHOW1;否则跳转到SHOW1SHOW1: MOV DX,OFFSET STR1MOV AH,09H ;显示STR1的内容INT 21H;报警CALL XIANGCALL DELAYMOV AH,01HINT 16H ;判断是否有按键按下JNE QUITJMP START1 SHOW2: MOV AX,00502HMOV DX,MY8254_C0OUT DX,ALMOV AL,AHOUT DX,ALCALL DALLYMOV DX,MY8255_AMOV AL,00000000B ;gate信号置0OUT DX,ALMOV DX,OFFSET STR2MOV AH,09H ;显示STR2的内容,不报警INT 21HCALL DISPLAY0 ;调用电压显示MOV AH,01HINT 16H ;判断是否有按键按下JNE QUITJMP START1ALARM ENDP

5.2.5 蜂鸣器模块

蜂鸣器模块,设置8254的控制方式字,设置初始值,产生一个方波,送往蜂鸣器spk端口,产生警报响铃。

XIANG PROCMOV DX,MY8254_MODE ;设置8254的控制字MOV AL,36HOUT DX,ALPLAY:MOV AX,00502HMOV DX,MY8254_C0OUT DX,AL ;向计数器0送初值,产生方波MOV AL,AHOUT DX,ALCALL DALLYMOV DX,MY8255_C ;左边数码管显示E.MOV AL,1011BOUT DX,ALMOV AL,0F9HMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_C ;右边数码管显示0MOV AL,0111BOUT DX,ALMOV AL,03FHMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_A;gate信号置1MOV AL,00000011BOUT DX,ALRETXIANG ENDP

6.实验结果

6.1实验箱连线图

6.2 程序运行结果

6.2.1 显示电压

采样实验箱的电压,当电压处于标定的正常范围(0—4V),数码管显示相应的电压值(精确到百分位),此时在输出窗口显示safe

6.2.2 报警

当实验箱的电压超过标定的正常范围即4V,数码管显示E.O,在输出窗口显示dangerous,并且蜂鸣器报警。

7.课设心得与体会

本此课程设计的内容为设计一个显示精确度到百分位的数字电压表,并且加以扩展,增加了一个电压报警功能,当超过额定电压值4.00时就进行报警,并显示“E.O”,若没有超过则显示当前电压值就显示正常的电压值。

在课程设计的开始,在硬件连线时,由于要用到多个芯片与系统总线的XD0-XD7相连,而系统总线只提供两个插槽,不知道怎么操作,然后发现试验箱的有一个转换单元上有四个接口并且是等同的,想到可不可以通过它进行扩充系统总线接口。还有我们需要将针接口p0与孔接口GATE0相连,应该也可以通过转换单元进行连线。我们向老师请教验证了我们的想法。于是我们使用转换单元,解决了这个问题。另外在硬件连接时,没有注意到芯片的高低位,导致数码管不能正常显示。

编代码时,在采样时,由于之前做过实验,知道采集到的是00-FFH的数,我们要把这个数除以33H将整数位AL中的值存到CL中,将模乘以10,除以33H后将小数位AL,存到CH中。我们的数码管左边要显示闪烁带小数点的,所以还要采用两个不同的段码表,左边的显示偏暗,后来我们加了clear清屏模块,把我们延时的时间进行了调整,才解决了数码管显示的问题。我们通过8254计时器0方式3产生一个方波,送往蜂鸣器产生报警信号,通过gate信号控制报警是否结束。通过8255向gate写值来控制gate,但是用一位写最低位就没用,至少需要写两位来控制。最后通过BIOS层功能调用01H,通过键盘控制ZF标志位,然后通过DOS层4CH实现程序的退出。经过不懈的努力,我们终于实现了电压报警系统。

通过这次课程设计,我们对各个模块的数据的输入内容,以及如何控制,和输出的数据,有了更加清楚的认识,对它们之间的数据和信号传输的方式有了进一步的了解,对于微机原理与接口技术这门课程掌握的更加透彻。

8.附录完整代码如下:

;8255IOY0 EQU 0600HMY8255_A EQU IOY0+00H*2MY8255_B EQU IOY0+01H*2MY8255_C EQU IOY0+02H*2MY8255_MODE EQU IOY0+03H*2;8254IOY1 EQU 0640HMY8254_C0 EQU IOY1+00H*2MY8254_C1 EQU IOY1+01H*2MY8254_C2 EQU IOY1+02H*2MY8254_MODE EQU IOY1+03H*2;A/D转换IOY2 EQU 0680HADC0809 EQU IOY2+00H*2DATA SEGMENTDTABLE0 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDTABLE1 DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFHSTR0 DB 'The voltmeter starts working! $'STR1 DB 'dangerous! $' STR2 DB 'safe! $'DATA ENDSSTACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA;主程序代码START: MOV AX,DATA;初始化寄存器MOV DS,AXMOV DX,MY8255_MODE;8255初始化MOV AL,80HOUT DX,ALMOV DX,OFFSET STR0 ;提示电压表开始工作MOV AH,09HINT 21HSTART1:MOV DX,ADC0809 ;0809初始化MOV AL,0OUT DX,ALMOV CL,ALMOV DX,ADC0809IN AL,DX MOV CL,AL ;读取转换结果存入CLSTART2:CALL TRANSFORM CALL ALARMMOV AH,01HINT 16H;JNE QUITJMP START1QUIT: MOV AH,4CH;退出INT 21H;电压转换TRANSFORM PROCCHANGE:MOV SI,2000HMOV AL,CLMOV BL,33HMOV AH,00H ;屏蔽高四位DIV BL;整除,默认为AX/BLMOV DS:[SI],AL ;MOV CL,ALMOV AL,AHMOV BL,10MUL BL ;余数扩大十倍MOV BL,33HDIV BLMOV DS:[SI+1],AL ;2000H存入第一位小数MOV AL,AHMOV BL,10MUL BL ;余数扩大十倍MOV BL,33HDIV BLMOV DS:[SI+2],AL ;2001H存入第二位小数MOV AL,AHMOV BL,10MUL BL ;余数扩大十倍MOV BL,33HDIV BLMOV DS:[SI+3],AL ;2001H存入第二位小数RETTRANSFORM ENDPALARM PROC;电压报警CMP CL,4JB SHOW2CMP CL,4JZ SHOW3JMP SHOW1SHOW3: CMP CH,0JZ SHOW2JMP SHOW1SHOW1: MOV DX,OFFSET STR1MOV AH,09HINT 21HCALL XIANGMOV AH,01HINT 16HJNE QUITJMP START1SHOW2: MOV AX,00502HMOV DX,MY8254_C0OUT DX,ALMOV AL,AHOUT DX,ALCALL DALLYMOV DX,MY8255_AMOV AL,00000000BOUT DX,ALMOV DX,OFFSET STR2MOV AH,09HINT 21HCALL DISPLAY0CALL CLEARMOV AH,01HINT 16H;JNE QUITJMP START1ALARM ENDPXIANG PROC ;蜂鸣器报警和电子管显示MOV DX,MY8254_MODEMOV AL,36HOUT DX,ALPLAY:MOV AX,00502HMOV DX,MY8254_C0OUT DX,ALMOV AL,AHOUT DX,ALCALL DALLYMOV DX,MY8255_CMOV AL,1110BOUT DX,ALMOV AL,0F9HMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_CMOV AL,1101BOUT DX,ALMOV AL,079HMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_CMOV AL,1011BOUT DX,ALMOV AL,079HMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_CMOV AL,0111BOUT DX,ALMOV AL,079HMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_AMOV AL,00000011BOUT DX,ALRETXIANG ENDPDISPLAY0 PROC ;数码管显示模块代码SHOW: MOV DX,MY8255_CMOV AL,1110BOUT DX,ALMOV AL,DS:[SI]MOV BX,OFFSET DTABLE1XLATMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_CMOV AL,1101BOUT DX,ALMOV AL,DS:[SI+1]MOV BX,OFFSET DTABLE0XLATMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_CMOV AL,1011BOUT DX,ALMOV AX,DS:[SI+2]MOV BX,OFFSET DTABLE0XLATMOV DX,MY8255_BOUT DX,ALCALL DALLYMOV DX,MY8255_CMOV AL,0111BOUT DX,ALMOV AX,DS:[SI+3]MOV BX,OFFSET DTABLE0XLATMOV DX,MY8255_BOUT DX,ALCALL DALLYRETDISPLAY0 ENDPDALLY PROC ;延时子程序PUSH CXPUSH AXMOV CX,000FHD1: MOV AX,009FHD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDPCLEAR: ;清屏子程序MOV DX,MY8255_B MOV AL,00HOUT DX,ALRETCODE ENDSEND START

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。