课程设计任务书实验报告.docx
《课程设计任务书实验报告.docx》由会员分享,可在线阅读,更多相关《课程设计任务书实验报告.docx(13页珍藏版)》请在冰点文库上搜索。
课程设计任务书实验报告
班级:
姓名:
座号:
试验时间:
一、试验题目:
数据采集系统
二、设计目的:
1、掌握数据采集系统的设计、实现基本方法,提高软、硬件综合设计、调试与应用能力;提高分析问题、解决问题的能力。
2、掌握I/O接口地址译码的原理。
3、掌握并行可编程接口芯片8255A、可编程定时/计数器芯片8253、中断控制器8259和模数转换器ADC0809的应用方法。
三、设计内容
1、采用定时中断和软件控制的方法,实现每隔N秒(N可设置)实现对模拟量的采集。
2、根据预先设置的数值和采集的模拟量决定控制输出。
如假设控制中心值为3.0V,当输入值超过3.0±0.3(V)时,控制步进电机转:
正偏差时反转,负偏差时正转;当输入值超过3.0±0.8(V)时,进行上、下限报警。
3、对采集的值应进行数字滤波,如可一次采集10个值,去掉最大值、最小值,然后取平均值。
4、使用循环队列保存近期(如100个数据)数据值,并将其数据用波形的形式显示出来。
5、实现多路采集,不同路的中心值及上、下项等参数可灵活设置。
注:
其中1~3为基本要求,4~5可根据自己的能力选择实现。
四、课程设计书
1、概述:
说明设计的背景、意义、功能及实现方法。
1)背景:
专周实验;
2)意义:
1)、掌握数据采集系统的设计、实现基本方法,提高软、硬件综合设计、调试与应用能力;提高分析问题、解决问题的能力。
2)、掌握I/O接口地址译码的原理。
3)、掌握并行可编程接口芯片8255A、可编程定时/计数器芯片8253、中断控制器8259和模数转换器ADC0809的应用方法。
3)功能:
每隔1s模拟量转化成数字量。
4)实现方法:
1)用8253芯片做定时,用2计数器计数,每隔1s(假定1s)输出一个脉冲给8255芯片;
2)8255芯片设置成C口输入,A、B口输出;
3)当8253输进8255一个脉冲周期后,0809模数转换器采集一个数据,通过EOC反汇给8255芯片;并且循环10次;
4)8255判断是转动进步机还是报警。
2、系统的硬件组成及原理。
3、软件组成、框图及原理。
4、调试过程说明。
原先地址译码器这一块一直弄不懂,经过试验,明白了地址是各个端口的地址,
例如本实验中8055控制字写入地址为20bh那么C、B、A地址分别为20ah、209h、
208h。
5、系统使用说明。
接通电源后,旋转模拟量采集器(0~5v)旋钮,旋转结束采集。
6、设计体会。
通过本次专周试验,我进一步了解了8253芯片、8255芯片、0809芯片,并掌握了他们的一些应用。
当然在实验中又遇到很多困难,期间请教了不少同学老师,最后终于完成实验。
而对于各个芯片的端口地址,实验前一直不明白是从哪里来的,但经过试验我明白了,很有成就感。
7、带有较详细注释的软件清单。
codesegment
assumecs:
code
start:
movax,8000h
movds,ax
movcx,10
movbh,00h
movdx,20Bh;对8255写入控制字
moval,10000001b
outdx,al
;时钟初始化
moval,01110110b;计数器1为方式3,采用二进制计数,
;先低后高写入计数值
Movdx,213h
outdx,al;写入方式控制字
movax,20000;计数值为20000
movdx,211h
outdx,al
moval,ah;写入低字节计数值
outdx,al
moval,00110110b;计数器0为方式3,采用二进制计数,
;先低后高写入计数值
Movdx,213h
outdx,al;写入方式控制字
movax,50;计数值为50
movdx,210h
outdx,al;写入低字节计数值
moval,ah
outdx,al
movsi,2000h
movdi,1000h
movbyteptr[di],0
again1:
movdx,20Ah;从C口输入时钟脉冲
wait0:
;低电平等待
inal,dx
testal,02
jzwait0
wait1:
;高电平等待
inal,dx
testal,02
jnzwait1
;一个时钟周期结束,采样进行数模转换
movdx,20bh;C口检查数模转换是否完成的输入口复位
moval,00000000b
outdx,al
MOVAL,00H
MOVDX,200H
OUTDX,AL
aa:
;检查AD转换是否完成,未完成持续等待
movdx,20Ah
inal,dx
testal,01h
jzaa
MOVDX,200H
INal,DX
movbl,al
cmpcx,0;当已经存入10个数时不再存入buff数组中
Jzpa
movbyteptr[si],bl
addwordptr[di],bx
INCSI
DECCX;存入一个数CX减1
cmpcx,1;存入最后一个数的时候进行滤波
jnzpa;采集不是第十个数的时候跳转不进行滤波
subax,ax
movsi,2000h
movcx,10
sort:
;寻找采集量中的最大值最小值最大值存放在AH中最小值存放在AL中
cmpbyteptr[si],ah;[si]大于ah将[si]中值存入ah中不大于跳转
jbda
movah,[si]
da:
cmpbyteptr[si],al;[si]小于al将[si]中值存入al中不小于跳转
jbda
jaxiao
moval,[si]
xiao:
INCsi;si+1
loopsort
movdl,ah
movah,00h
subwordptr[di],ax;减去最大数
moval,dl
subwordptr[di],ax;减去最小数
movax,[di];[di]值存入ax中
movdl,08h
divdl
movwordptr[di],ax;除8结果存在8000:
2000单元中
pa:
cmpbl,143;电压是否大于2.8V大于报警
jcbb
movdx,209h
moval,0feh
outdx,al
jmpagain1
bb:
cmpbl,61;电压是否小于1.2V小于报警
jnccc
movdx,209h
moval,7fh
outdx,al
jmpagain1
cc:
moval,0ffh;B口报警控制端复位
movdx,209h
outdx,al
;安全范围内按指定参数控制步进机转动
cmpbl,117
jcxx;小于2.3V跳转
;大于控制步进机正传
movdx,208h
moval,00001000b
outdx,al
movcx,0
delay1:
nop
loopdelay1
moval,00001100b
outdx,al
movcx,0
delay2:
nop
loopdelay2
moval,00000100b
outdx,al
movcx,0
delay3:
nop
loopdelay3
moval,00000110b
outdx,al
movcx,0
delay4:
nop
loopdelay4
moval,00000010b
outdx,al
movcx,0
delay5:
nop
loopdelay5
moval,00000011b
outdx,al
movcx,0
delay6:
nop
loopdelay6
moval,00000001b
outdx,al
movcx,0
delay7:
nop
loopdelay7
moval,00001001b
outdx,al
movcx,0
delay8:
nop
loopdelay8
xx:
cmpbl,87;大于1.7V跳转
jncyy;小于控制步进机反转
movdx,208h
moval,00001001b
outdx,al
movcx,0
delay12:
nop
loopdelay12
moval,00000001b
outdx,al
movcx,0
delay22:
nop
loopdelay22
moval,00000011b
outdx,al
movcx,0
delay32:
nop
loopdelay32
moval,00000010b
outdx,al
movcx,0
delay42:
nop
loopdelay42
moval,00000110b
outdx,al
movcx,0
delay52:
nop
loopdelay52
moval,00000100b
outdx,al
movcx,0
delay62:
nop
loopdelay62
moval,00001100b
outdx,al
movcx,0
delay72:
nop
loopdelay72
moval,00001000b
outdx,al
movcx,0
delay82:
nop
loopdelay82
yy:
jmpagain1
movah,4ch
int21h
codeends
endstart