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,AL      MOV DX,OFFSET STR0   MOV AH,09H                   ;显示STR0的内容INT 21H
START1:  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 PROC
CHANGE: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存入第二位小数RET
TRANSFORM 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 START1          ALARM ENDP

5.2.5 蜂鸣器模块

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

XIANG PROCMOV DX,MY8254_MODE       ;设置8254的控制字MOV AL,36HOUT DX,AL
PLAY: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,ALRET
XIANG 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.附录完整代码如下:

;8255
IOY0 EQU 0600H
MY8255_A EQU IOY0+00H*2
MY8255_B EQU IOY0+01H*2
MY8255_C EQU IOY0+02H*2
MY8255_MODE EQU IOY0+03H*2;8254
IOY1 EQU 0640H
MY8254_C0 EQU IOY1+00H*2
MY8254_C1 EQU IOY1+01H*2
MY8254_C2 EQU IOY1+02H*2
MY8254_MODE EQU IOY1+03H*2;A/D转换
IOY2 EQU 0680H
ADC0809 EQU IOY2+00H*2
DATA SEGMENT
DTABLE0 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DTABLE1 DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
STR0 DB 'The voltmeter starts working! $'
STR1 DB 'dangerous! $'
STR2 DB 'safe! $'
DATA ENDS
STACK1 SEGMENT STACKDW 256 DUP(?)
STACK1 ENDS
CODE SEGMENTASSUME CS:CODE,DS:DATA;主程序代码
START:
MOV AX,DATA;初始化寄存器
MOV DS,AX
MOV DX,MY8255_MODE;8255初始化
MOV AL,80H
OUT DX,ALMOV DX,OFFSET STR0   ;提示电压表开始工作
MOV AH,09H
INT 21HSTART1:
MOV DX,ADC0809  ;0809初始化
MOV AL,0
OUT DX,ALMOV CL,AL
MOV DX,ADC0809
IN AL,DX
MOV CL,AL  ;读取转换结果存入CLSTART2:
CALL TRANSFORM
CALL ALARM
MOV AH,01H
INT 16H
;JNE QUIT
JMP START1
QUIT: MOV AH,4CH     ;退出INT 21H
;电压转换
TRANSFORM PROC
CHANGE: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存入第二位小数RET
TRANSFORM ENDPALARM PROC      ;电压报警CMP CL,4JB SHOW2CMP CL,4JZ SHOW3JMP SHOW1
SHOW3: CMP CH,0JZ SHOW2JMP SHOW1
SHOW1: MOV DX,OFFSET STR1MOV AH,09HINT 21HCALL XIANGMOV AH,01HINT 16HJNE QUITJMP START1
SHOW2:  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 START1
ALARM 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,ALRET
XIANG 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 DALLYRET
DISPLAY0 ENDP
DALLY PROC   ;延时子程序PUSH CXPUSH AXMOV CX,000FH
D1: MOV AX,009FH
D2: DEC AXJNZ D2LOOP D1POP AXPOP CXRET
DALLY ENDP
CLEAR:    ;清屏子程序
MOV DX,MY8255_B         MOV AL,00HOUT DX,ALRET
CODE ENDS
END START

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

  1. 微型计算机接口与技术的交通灯,微机原理及接口技术课程设计交通灯

    微机原理及接口技术课程设计交通灯 序言 十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则.十字道 口的交通红绿灯控制是保证交通安全和道路畅通的关键.当前,国内大多数城市正在 采用" ...

  2. 【汇编】微机原理与接口技术课程设计

    本文是微机原理与接口技术课程设计 完整的程序和实验报告开源在我的Github上: https://github.com/zstar1003/XDU_Homework/tree/main/%E5%BE% ...

  3. 微型计算机接口与技术的交通灯,微机原理与接口技术课程设计——交通灯设计.doc...

    微机原理与接口技术课程设计--交通灯设计.doc 1 任务及要求 1.1设计任务 交通信号灯的控制: (1)通过8255A并口来控制LED发光二极管的亮灭. (2)A口控制红灯,B口控制黄灯,C口控制 ...

  4. 计算机微机原理与接口技术课程设计课题,微机原理与接口技术课程设计报告

    <微机原理与接口技术课程设计报告>由会员分享,可在线阅读,更多相关<微机原理与接口技术课程设计报告(12页珍藏版)>请在人人文库网上搜索. 1.微机原理与接口技术课程设计设计题 ...

  5. 太原理工大学微型计算机接口技术,微机原理与接口技术课程设计 太原理工大学.doc...

    微机原理与接口技术课程设计 太原理工大学.doc 还剩 18页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: 1 ...

  6. 微型计算机接口技术论文,(微机原理与接口技术课程论文.doc

    (微机原理与接口技术课程论文 <微机原理与接口技术> 论 文 学院: 班级: 姓名: 学号: 微机原理与接口技术论文 内容摘要: 微型计算机原理与接口技术是计算机科学与技术专业重要的专业基 ...

  7. 微型计算机接口课程设计报告,微机原理与接口技术课程设计报告

    <微机原理与接口技术> 课程设计报告 院系 专业 班级 学号 姓名 指导教师 1.设计目的 使学生根据所学的微机原理和数字电子技术知识,熟悉几种典型波形产生的原理,掌握AD转换电路在智能化 ...

  8. 微型计算机原理设计存储系统,微机原理与接口技术存储器设计.pdf

    2018版 微机原理与接口技术 第六章 存储器设计 董明皓 dminghao@xidian.edu.cn 准备知识 存储器的性能指标-存储容量(常用单位) 存储容量的表示  Bit -- 用二进 ...

  9. 微机原理和计算机硬件基础知识,微机原理与接口技术

    微机原理与接口技术 (2010年清华大学出版社出版的图书) 语音 编辑 锁定 讨论 上传视频 <微机原理与接口技术>是2010年8月1日清华大学出版社出版的图书,作者是姚琳.孙志辉.韩伯涛 ...

最新文章

  1. 基础练习 杨辉三角形
  2. 让java的多重继承成为现实!
  3. 一张图看懂单机/集群/热备/磁盘阵列(RAID)
  4. Hbase Compaction 队列数量较大分析
  5. sizeof与strlen使用中的问题
  6. 336计算机考研怎么做到啊,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
  7. 解决CocosCreator 在微信小游戏中使用Socket.io 报错的问题
  8. 军用计算机通用规范测试试验,军用装备环境可靠性试验项目表
  9. 高速串行总线技术发展与应用分析
  10. ant-design-vue对起始时间的校验
  11. 苏州蜗牛面试感想 ------- 知其然而不知其所以然
  12. 如何使用Python实现回文的判断?
  13. 树莓派使用摄像头——fswebcam
  14. iis7 winmail php,winmail+php的配置
  15. qlabel可以选中吗_QLabel自定义类实现点击效果以及鼠标掠过字体的颜色变化效果...
  16. 编程题:网上题库网站
  17. Apple iWork(Pages、Numbers、Keynote)11.0 发布
  18. 基于java家政服务网站设计(含源文件)
  19. 厦门科技幼儿园如何计算机,厦门市科技幼儿园
  20. CS架构--网络通信--osi 协议---套接字socket--粘包

热门文章

  1. Serv-U 15 在 IE 8+ 中兼容性视图下显示不正常的解决方案
  2. 基于微信小程序和安卓的二手车查询平台APP
  3. 博弈——Wizards and Numbers
  4. AI技术实现人工客服的开发流程
  5. iOS开发者账号类型
  6. 香港计算机专业硕士学制几年,香港城市大学一年制硕士2021申请条件
  7. 公司员工信息纯HTML代码写表格table
  8. Mac堡垒机密码加身份验证器动态口令全自动登录(带全局登录命令)
  9. coreseek 安装 4.1 版本 并使用
  10. VMware文件存储位置修改