数据采集系统(汇编 微机原理与接口技术课程设计)

                                                     ——2011年 6 月14 日

一、  设计任务书

(一)课题:数据采集系统

(二)设计目的:

1、 掌握数据采集系统的设计、实现基本方法,提高软、硬件综合设计、调试与应用能力;提高分析问题、解决问题的能力。

2、 掌握I/O接口地址译码的原理。

3、 掌握并行可编程接口芯片8255A、可编程定时/计数器芯片8253、中断控制器8259(可选)和模数转换器ADC0809的应用方法。

(三)设计内容:

1、 采用定时中断(或延时方式)和软件控制的方法,实现每隔N秒(N可设置)实现对模拟量的采集。

2、 根据预先设置的数值和采集的模拟量决定控制输出。如假设控制中心值为2.0V,当输入值超过2.0±0.3(V)时,控制步进电机转:正偏差时反转,负偏差时正转;当输入值超过2.0±0.8(V)时,进行上、下限报警。

3、 对采集的值应进行数字滤波,如可一次采集10个值,去掉最大值、最小值,然后取平均值。

4、 使用循环队列保存近期(如100个数据)数据值,并将其数据用波形的形式显示出来。

5、 实现多路采集,不同路的中心值及上、下项等参数可灵活设置。

注:其中1~3为基本要求,4~5可根据自己的能力选择实现。

二、        设计的背景及意义

在一些工业控制领域往往需要通过传感器将外界各类模拟信号数值化,并根据不同的信号让控制系统中心自动做出相应的处理。

三、        功能及实现方法简介

鉴于时间与设备条件的限制,在这里我们来不及用中断方法实现,固采用延时方式和软件控制的方法实现。通过8253各计时器的组合使用实现每隔N秒(N可设置)发出一个信号(我们采用下降沿信号);8255的PB0每接收到一个下降沿信号时就让AD模块采集十次,再判断去掉最大值、最小值后的平均值,让8255的PA7~PA0输出相应的处理信号对LED小灯和步进机的状态进行控制。

四、        系统的硬件组成及原理 

 

使用Protel工具软件绘制的硬件图

 

五、        软件组成、流程图及原理

 

 

六、        调试过程说明

在设计过程中,我们采用模块化设计的方法一步步完成设计要求实现的功能。

之前我们刚做过8253和8255综合应用的实验,已经比较熟练,现在直接运用自如。只是把下降沿跑马灯换成AD采集而已,这时就可以通过8个LED灯先调试观察采集到的AD值了,与电压表实测值对应的AD值比较还可以大致了解当前使用的AD的精度。

AD调试没问题后,我们通过对采集到的信号(ad十次均值)与临界值比较判断,确定其所属区间并做出相应的处理。在实现步进机正反转的过程中,折腾了我们不少时间,通过测试(不用正转表和反转表,直接一个个输出)断定问题出现在数据段正转表和反转表的读取上,有读取不正常的情况,还有报错信息:phase error between passes(标号地址跑位)。最后发现是数据段地址没有设好所致,改正段头问题得以解决:

code segment

  assume CS:code,DS:code

 

start:  mov ax,8100h

        mov ds,ax

在完成设计的基本要求后还剩一些时间,于是我们又添加了使用循环队列保存近期(如100个数据)数据值的功能。

七、        系统使用说明

调节开发版左上角的电位器旋钮,输出0~5V的电压作为AD模块的模拟信号输入值。控制中心值为2.0V,假设 AD输入值为X,则

X<1.2V 时         L7亮,步进电机不转;

1.2<=X<1.7V时     L6亮,步进机正转;

1.7V<=X<=2.3V时  灯全灭,步进机不转;

2.3V<X<2.8V 时    L5亮,步进机反转;

X>=2.8V 时        L4亮,步进电机不转。

注:以上为理论计算值,实测值误差在+0.1V左右,鉴于每天使用的不同实验板上的AD模块精度不一,我们觉得没必要加以调整。实际问题中如需调整,只要稍微调整代码中的临界值即可。以我们的设计为例,将临界比较值1.2V、1.7V、2.3V、2.8V调整为1.1V、1.6V、2.2V、2.7V左右所对应的AD值,然后再调试,不符合就继续微调临界比较值…

八、        软件清单

code segment

  assume CS:code,DS:code ;数据定义在代码段里

start:  mov ax,8100h     ;实验板的数据段地址已经被设定为8100h

        mov ds,ax

 

;1.初始化8255,8253计数器1、计数器0*****************************************

 

;8255初始化:

        mov al,10000010b  ;A口:方式0,输出。B口:方式0,输入。C口没用。

        mov dx,20Bh

        out dx,al         ;写入方式控制字 

 

;8253初始化:

  ;计数器1初始化:

        mov al,01110110b  ;计数器1为方式3,采用二进制计数,先低后高写入计数值

        Mov dx,207h       ;控制寄存器地址

        out dx,al         ;写入方式控制字     

        mov ax,10000      ;计数值为10000 ,f_out1=1M/10000=100Hz

        mov dx,205h       ;计数器1

        out dx,al         ;写入低字节计数值

        mov al,ah        

        out dx,al         ;写入高字节计数值

 

  ;计数器0初始化:

        mov al,00110110b ;计数器0为方式3,采用二进制计数,先低后高写入计数值

        Mov dx,207h       ;控制寄存器地址

        out dx,al         ;写入方式控制字

        mov ax,200        ;计数值为200 ,f_out0=100/200=0.5Hz, T=1/0.5=2s.

        mov dx,204h       ;计数器0

        out dx,al         ;写入低字节计数值

        mov al,ah

        out dx,al         ;写入高字节计数值

 

;2.AD采集、数字滤波********************************************************

 

   wait1:mov dx,209h      ;8255-B口

         in  al,dx

         test al,01h

         jz wait1         ;8255-B0为低电平 转 继续等待高电平

   wait0:mov dx,209h      ;8255-B口

         in al,dx

         test al,01h

         jnz wait0        ;8255-B0为高电平 转 继续等待下降沿

 

;以一个下降沿作为十次AD采集的信号

         mov cl,10     ;十次采集前的变量初始化

         mov ax,0

         mov sum,ax

        ;mov al,0

         mov max,al

         mov al,255

         mov min,al

 collect:MOV  AL,00H   ;AD通道0

         MOV  DX,210H

         OUT DX,AL

         call delay1

         MOV DX,210H

         IN AL,DX      ;读取AD值

         mov ah,0

         add sum,ax    ;累加和

         cmp al,max

         ja changemax  ;最大值

   cmpmin:cmp al,min

         jb changemin  ;最小值

      aa:dec cl

         jnz collect

         jmp bb

 

changemax:mov max,al

          jmp cmpmin

changemin:mov min,al

          jmp aa

 

;数字滤波

      bb:mov al,max

         mov ah,0

         sub sum,ax    ;去掉最大值

         mov al,min

        ;mov ah,0

         sub sum,ax    ;去掉最小值

         mov ax,sum

         mov bl,8

         div bl        ;取平均值【被除数默认为ax,平均值(商)默认寄存于al】

         

;3.使用循环队列保存近期(如100个数据)数据值*********************************

 

   mov BX,adpoint

   mov adtable[BX],al

   inc BX

   cmp BX,100

   jz changeBX

cc:mov adpoint,BX

   jmp ee

changeBX:mov BX,0

         jmp cc

 

;4.临界值判断并作出相应处理************************************************

 

      ee:cmp al,61 ;(1.2V/5V)*255

         jb lim1   ;上限

         cmp al,87 ;(1.7V/5V)*255

         jb fpzz   ;负偏

         cmp al,117;(2.3V/5V)*255

         ja gocmp  

         mov al,0f0h   ;工作正常,没有超过2.0±0.3(V)  (灯全灭,步进机不转)

         mov dx,208h   ;A口

         out dx,al

         jmp wait1  

   gocmp:cmp al,143;(2.8V/5V)*255

         jb zpfz   ;正偏

         mov al,11100000b   ;下限信号(L4亮,步进机不转)

         mov dx,208h    ;A口

         out dx,al

         jmp wait1

    lim1:mov al,01110000b   ;上限信号(L7亮,步进机不转)

         mov dx,208h    ;A口

         out dx,al

         jmp wait1

 

    fpzz:mov cl,4     ;负偏正转(L6亮,步进机正转)

         mov SI,0

      zz:mov al,zztable[SI]

         mov dx,208h    ;A口

         out dx,al

         call delay2

         inc SI

         dec cl

         jnz zz        

         jmp wait1

 

    zpfz:mov cl,4     ;正偏反转(L5亮,步进机反转)

         mov SI,0

      fz:mov al,fztable[SI]

         mov dx,208h    ;A口

         out dx,al

         call delay2

         inc SI

         dec cl

         jnz fz        

         jmp wait1

 

mov ah,4ch

int 21h

 

;5.延时子程序**************************************************************

 

delay1 proc near 

     push bx

     mov bx,5000   ;延时等待AD完成转换

  d1:dec bx

     jnz d1

     pop bx

     ret

delay1 endp

 

delay2 proc near    ;步进机延时

     push bx

     mov bx,0ffffh

  d2:dec bx

     jnz d2

     pop bx

     ret

delay2 endp

 

;6.变量、数组数据定义区*****************************************************

 

sum dw 0

max db 0

min db 255

zztable db 10111100b,10110110b,10110011b,10111001b     ;步进机正转表

fztable db 11011001b,11010011b,11010110b,11011100b     ;步进机反转表

adpoint dw 0 ;最后十次采集的平均值的存储地址(指针)

adtable db 100 dup(0)  ;用来保存最近100个AD采集的数据(平均值)

 

code ends

  end  start

转载于:https://www.cnblogs.com/Estrong/archive/2012/11/05/2754438.html

第一章 需求分析 1 1. 本课程设计题目 1 2. 本课程设计要求及任务 1 3. 课程设计思想 1 4. 软硬件开发环境 2 5. 开发工具 2 第二章 概要设计 3 1. 分析 3 2. 设计 4 第三章 详细设计 5 1. 原理图及PCB图 5 2. 程序流程图 7 3. 软件设计程序 8 4. 设计计算结果 12 第四章 调试与操作说明 12 第五章 课程设计总结与体会 12 第六章 致谢 14 第七章 参考文献 14 第一章 需求分析 1. 本课程设计题目 微机数据采集系统设计 2. 本课程设计要求及任务 要求: 单通道采集数据并显示; 多通道循环采集数据并显示。 任务: 进行微机数据采集系统电路硬件设计,画出电路原理图PCB图或元器件布线图;安装或焊接元器件;进行数据采集系统控制程序设计(采用ASM或CPP语言);系统联调,提交一个满足上述二种要求之一的微机数据采集系统设计。 3. 课程设计思想 首先,根据实验要求,设计A/D数据采集电路,然后,按照电路原理,选用一些元器件,在面包板上分别搭建电路模块。由于实验中要用到MFID多功能微机实验平台板上的8255A作接口控制信号,所以要用两头带插针的软导线,通过26芯电缆的插孔将8255A的输出信号接入面包板,这样整个的组成了A/D数据采集系统的硬件。 然后,编写A/D数据采集系统的控制程序,并进行调试。 最后,加入软件控制程序,对接口进行驱动,组成了A/D数据采集系统。 A/D数据采集模块、平台板、微机组成的数据采集系统框图 如图3.1所示。 4. 软硬件开发环境 MF软件采用系统集成技术,把实验程序的开发工具,故障诊断程序和外设模块演示程序集成在一个环境中,构成一个用户程序集成开发环境IDE(Integrated Development Environment)。用户程序的编辑、编译、连接、运行和修改的全过程都在一个集成的环境中完成,大大提高了编程的效率。这个环境目前已有4个版本,每个版本提供了内容丰富的汇编语言和C/C++语言开发软件包,并以全屏幕窗口环境的形式供用户使用。 5. 开发工具 实验程序的开发工具包括编辑器、编译系统、连接程序和调试程序。 1:编辑器采用全屏幕多窗口编辑器,复制,粘贴,裁减十分方便。: 2:编译系统 MF软件包括了C/C++语言和汇编语言两个编译系统,用户可根据自己所熟悉的语言,任选一个来编写程序,并在集成环境中进行程序的编译(汇编)、连接、运行与调试。 3:连接程序 采用TLINK。 4:调试程序 采用TDEBUGGER全屏幕调试程序,直观全面,使用方便。 以上应用程序(实验程序)开发工具,集成在集成开发环境(IDE)中,用户只需在集成开发环境全屏幕窗口中,点击主菜单的相应菜单项,即可随时启用。 第二章 概要设计 1. 分析 要实现上述设计要求,至少需要考虑:被控对象ADC0809的特性、接口电路结构形式。 ADC0809的外部特性: ADC的外部引脚如图4.7,从图中 可以看出 ,ADC0809有八个模拟 量输入端(IN0-IN7),相应设 置3根模拟量通道地址线(ADDA -ADDC),用以编码来选择8个 模拟量输入通道。并且还设置1根地址锁存允许信号ALE,高电平有效。当ALE变高,锁存由ADDa-ADDc编码所选中的通道号,将该通道的模拟量接入A/D转换器。 ADC0809的分辨率为8位,有8根数字量输出线(D0-D7),带有三态输出锁存器。并设置了1根输出允许信号OE,高电平有效。当读数据时,要使OE置高,打开三态输出锁存器,把转换的数字量送到数据线上。 ADC0809的转换启动信号是START,高电平有效。转换结束信号EOC,转换过程中为低电平,转换完毕变为高电平,可利用EOC的上升沿申请中断,或作查询之用。 2. 设计 1.A/D数据采集模块电路 本外设模块采用8855A作为接口电路,其中,PA0-PA7接数据线,其低三位与通道地址线ADDA-ADDC相连,即将通道号写入A口。另外,转换后的数据从A口读入CPU。PC0连接START和ALE信号,高电平有效,表示启动转换。PC1连接输出允许信号OE。当查询方式时,PC4连接EOC信号,转换过程中,PC4为0,当转换完毕时,PC4为1。 2.设计方法及其原理: 通过ADC0809数模转换器将由电位器转动所产生的模拟信号转换为数字信号,然后通过8255A并行接口送入内存并显示在窗口中。 第三章 详细设计 1. 原理图及PCB图 原理图如下: PCB图如下: 2. 程序流程图 3. 软件设计程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值