#智能仪器原理应用实验指导书.docx
《#智能仪器原理应用实验指导书.docx》由会员分享,可在线阅读,更多相关《#智能仪器原理应用实验指导书.docx(21页珍藏版)》请在冰点文库上搜索。
![#智能仪器原理应用实验指导书.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/bf66670d-d367-4d8e-851a-37edb1df7d94/bf66670d-d367-4d8e-851a-37edb1df7d941.gif)
#智能仪器原理应用实验指导书
徐州项目学院
《智能仪器原理及应用》实验指导书
实验一A/D转换实验
一、实验目的:
掌握A/D转换与单片机接口的方法;了解A/D芯片0809转换性能及编程方法。
二、实验内容:
1、利用综合实验仪上的0809做A/D转换器,综合实验仪上的电位器提供模拟量输入,编制程序,将模拟量转换成数字量,通过8155键显区数码管显示出来。
2、编程实现将从0809采集到的数字量转换成实际的模拟电压值,并显示在LED上。
使用编写测程序和万用表同时在测量电压范围内采集不低于50个的电压值,用MATLAB作图对测量结果进行分析比较,分析误差产生的原因。
如何对程序修改能减小误差?
三、实验器材:
1、超想-3000TC综合实验仪1台
2、KEIL仿真器1台
3、连线若干根
4、计算机1台
四、实验原理:
A/D转换器的功能主要是将输入的模拟信号转换成数字信号,如电压、电流、温度测量等都属于这种转换。
本实验中采用的转换器为ADC0809,它是一个8位逐次逼近型A/D转换器,可以对8个模拟量进行转换,转换时间为100μS。
其工作过程如下:
首先由地址锁存信号ALE的上升沿将引脚ADDA、ADDB和ADDC上的信号锁存到地址寄存器内,用以选择模拟量输入通道;START信号的下降沿启动A/D转换器开始工作;当转换结束时,AD0809使EOC引脚由低电平变成高电平,程序可以通过查询的方式读取转换结果,也可以通过中断方式读取结果。
CLOCK为转换时钟输入端,频率为100KHz-1.2MHz,推荐值为640KHz。
五、、实验步骤:
1、设定仿真模式为程序空间在仿真器上,数据空间在用户板上,即点击[设置]下的[仿真模式],在RAM区选中用户RAM,ROM区选中系统ROM<注:
本书中的实验除另行说明外,均与此相同)。
把AD0809的零通道09IN0孔用连线接至模拟信号发生器的VIN孔,AD0809的片选信号CS09孔接“译码器”YC2<0A000-0AFFFH)孔,“脉冲源”中的0.5MHZ孔连AD0809的CLOCK孔。
2、编写程序,并编译通过。
本程序使用查询的方式读取转换结果。
在读取转换结果的指令后设置断点,运行程序,在断点处检查并读出A/D转换结果,数据是否与VIN相对应。
修改程序中错误,使显示值随VIN变化而变化。
六、接线图:
七、思考问题:
1、试编写循环采集8路模拟量输入A/D转换程序;2、以十进制方式显示。
八、实验程序:
程序框图:
OUTBITequ0e101h。
位控制口
CLK164equ0e102h。
段控制口(接164时钟位>
DAT164equ0e102h。
段控制口(接164数据位>
INequ0e103h。
键盘读入口
LEDBufequ40h。
显示缓冲
org0000h
movsp,#60h
movdptr,#0e100h。
8155初始化
mova,#03h
movx@dptr,a
mov40h,#00h。
显示缓冲器初始化
mov41h,#08h
mov42h,#00h
mov43h,#09h
mov44h,#00h
mov45h,#00h
LOOP1:
MOVR7,#40
VI:
lcallDISPLAY
DJNZR7,VI
mova,#00h
movdptr,#0a000h。
0809AD的通道开始转换吗?
movx@dptr,a
movr7,#0fh
loop2:
djnzr7,loop2
movxa,@dptr
movr0,#45h。
拆字
lcallptds
sjmploop1
ptds:
movr1,a
lcallptds1
mova,r1
swapa
ptds1:
anla,#0fh
mov@r0,a
decr0
ret
Delay:
movr7,#0。
延时子程序
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
ret
DISPLAY:
setb0d3h
movr0,#LEDBuf
movr1,#6。
共6个八段管
movr2,#00100000b。
从左边开始显示
Loop:
movdptr,#OUTBIT
mova,#00h
movx@dptr,a。
关所有八段管
mova,@r0
movdptr,#LEDmap
movca,@a+dptr
movB,#8。
送164
DLP:
rlca
movr3,a
movacc.0,c
anla,#0fdh
movdptr,#DAT164
movx@dptr,a
movdptr,#CLK164
orla,#02h
movx@dptr,a
anla,#0fDh
movx@dptr,a
mova,r3
djnzB,DLP
movdptr,#OUTBIT
mova,r2
movx@dptr,a。
显示一位八段管
movr6,#1
callDelay
mova,r2。
显示下一位
rra
movr2,a
incr0
djnzr1,Loop
movdptr,#OUTBIT
mova,#0
movx@dptr,a
clr0d3h。
关所有八段管
ret
LEDMAP:
。
八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
END
实验二智能仪器人机接口实验
一、实验目的:
1、掌握键盘和显示器的接口方法和编程方法。
2、掌握键盘扫描和LED八段数码管显示器的工作原理。
二、实验要求:
首先,在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
然后,实现一个两位十进制整数的运算器,能实现输入两位十进制整数,并进行加减乘除运算,将运算结果在LED上显示。
实验程序可分成三个模块。
1、键输入模块:
扫描键盘、读取一次键盘并将键值存入键值缓冲单元。
2、显示模块:
将显示单元的内容在显示器上动态显示。
3、主程序:
调用键输入模块和显示模块。
三、实验器材:
1、超想-3000TC综合实验仪1台
2、KEIL仿真器1台
3、计算机1台
四、实验电路:
这里只是键盘草图,主要说明行、列扫描地址。
列码
(0e101H>
行码
(0e103H>
五、实验说明:
本实验仪提供了一个6×4的小键盘,向列扫描码地址(0e101H>逐列输出低电平,然后从行码地址(0e103H>读回,如果有键按下,则相应行的值应为低,如果无键按下,因为上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的延时,防止键盘抖动。
列扫描码还可以分时用作LED的位选通信号。
六、实验框图:
主程序框图
七、实验程序:
。
键盘扫描实验
OUTBITequ0e101h。
位控制口
CLK164equ0e102h。
段控制口(接164时钟位>
DAT164equ0e102h。
段控制口(接164数据位>
INequ0e103h。
键盘读入口
ORG0000H
LJMPSTAR
KEY1:
MOV13H,#06H
MOV12H,#20H
KEY2:
MOVA,12H
CPLA
MOVR7,A
MOVDPTR,#0E101H
MOVA,R7
MOVX@DPTR,A
MOVA,12H
CLRC
RRCA
MOV12H,A
MOVDPTR,#0E103H
MOVXA,@DPTR
MOVR7,A
MOVA,R7
CPLA
MOVR7,A
MOVA,R7
ANLA,#0FH
MOV14H,A
DEC13H
MOVR7,13H
MOVA,R7
JZKEYDIS
MOVA,14H
JZKEY2
KEYDIS:
MOVA,14H
JZTESTKEY5
MOVA,13H
ADDA,ACC
ADDA,ACC
MOV13H,A
MOVA,14H
JNBACC.1,TESTKEY
INC13H
SJMPTESTKEY2
。
键盘扫描
TESTKEY:
MOVA,14H
JNBACC.2,TESTKEY1
INC13H
INC13H
SJMPTESTKEY2
TESTKEY1:
MOVA,14H
JNBACC.3,TESTKEY2
MOVA,#03H
ADDA,13H
MOV13H,A
TESTKEY2:
MOVDPTR,#0E101H
CLRA
MOVX@DPTR,A
TESTKEY3:
MOVR7,#0AH
LCALLMLOOP
LCALLMLOOP4
MOVA,R7
JNZTESTKEY3
MOVR7,13H
MOVA,R7
MOVDPTR,#0134H
MOVCA,@A+DPTR
MOVR7,A
RET
TESTKEY4:
DB22H。
"
TESTKEY5:
MOVR7,#0FFH
RET
GETKEY:
MOV10H,#20H
MOV0EH,#00H
GETKEY1:
MOVA,0EH
CLRC
SUBBA,#06H
JNCGOON2
MOVDPTR,#0E101H
CLRA
MOVX@DPTR,A
MOVR7,0EH
MOVA,#08H
ADDA,R7
MOVR0,A
MOVA,@R0
MOVR7,A
MOV11H,R7
MOV0FH,#00H
GETKEY2:
MOVA,0FH
CLRC
SUBBA,#08H
JNCGOON1
MOVA,11H
JNBACC.7,KLOOP
MOVDPTR,#0E102H
MOVA,#01H
MOVX@DPTR,A
SJMPKLOOP1
KLOOP:
MOVDPTR,#0E102H
CLRA
MOVX@DPTR,A
KLOOP1:
MOVDPTR,#0E102H
MOVXA,@DPTR
MOVR7,A
MOVA,R7
ORLA,#02H
MOVR7,A
MOVA,R7
MOVX@DPTR,A
MOVDPTR,#0E102H
MOVXA,@DPTR
MOVR7,A
MOVA,R7
ANLA,#0FDH
MOVR7,A
MOVA,R7
MOVX@DPTR,A
MOVA,11H
ADDA,ACC
MOV11H,A
INC0FH
SJMPGETKEY2
GOON1:
MOVDPTR,#0E101H
MOVA,10H
MOVX@DPTR,A
MOVR7,#01H
LCALLMLOOP
MOVA,10H
CLRC
RRCA
MOV10H,A
INC0EH
SJMPGETKEY1
GOON2:
RET
WAIT:
MOVDPTR,#0E100H
MOVA,#03H
MOVX@DPTR,A
MOV08H,#0FFH
MOV09H,#0FFH
MOV0AH,#0FFH
MOV0BH,#0FFH
MOV0CH,#00H
MOV0DH,#00H
WAIT1:
LCALLGETKEY
LCALLMLOOP4
MOVA,R7
JZWAIT1
LCALLKEY1
MOVR6,#00H
MOVR6,#00H
MOVA,R7
ANLA,#0FH
MOVR7,A
MOVA,#24H
ADDA,R7
MOVDPL,A
MOVA,#01H
ADDCA,R6
MOVDPH,A
CLRA
MOVCA,@A+DPTR
MOVR7,A
MOV0DH,R7
SJMPWAIT1
RET
TAB:
Q0124:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H。
Q012C:
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H。
Q0134:
DB00H,01H,04H,07H,0FH,02H,05H,08H。
Q013C:
DB0EH,03H,06H,09H,0DH,0CH,0BH,0AH。
Q0144:
DB10H,11H,12H,13H,14H,15H,16H。
MLOOP:
MOV15H,R7
MLOOP1:
MOVR7,15H
DEC15H
MOVA,R7
JZMLOOP3
MOV16H,#64H
MLOOP2:
MOVA,16H
JZMLOOP1
DEC16H
SJMPMLOOP2
SJMPMLOOP1
MLOOP3:
RET
MLOOP4:
MOVDPTR,#0E101H
CLRA
MOVX@DPTR,A
MOVDPTR,#0E103H
MOVXA,@DPTR
MOVR7,A
MOVA,R7
CPLA
MOVR7,A
MOVA,R7
ANLA,#0FH
MOVR7,A
RET
STAR:
MOVR0,#7FH
CLRA
STAR1:
MOV@R0,A
DJNZR0,STAR1
MOVSP,#16H
LJMPWAIT
END
实验三智能仪器的通信接口设计
一、实验目的:
<1)掌握单片机串行口工作方式的程序设计及简单三线式通讯的方法。
<2)了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
<3)学习串行口通讯的中断方式程序的编写方法。
二、实验内容:
利用8031单片机串行口,实现实验台和电脑之间的串行通讯。
其中实验台作为发送方,电脑为接收方。
实验台读入按键值,将键值在LED上显示。
同时每次按键按下时发送方将A/D转换数据通过串口发送给电脑,电脑可通过串口调试助手观察。
三、接线图
四、实验步骤
1、把AD0809的零通道09IN0孔用连线接至模拟信号发生器的VIN孔,AD0809的片选信号CS09孔接“译码器”YC2<0A000-0AFFFH)孔,“脉冲源”中的0.5MHZ孔连AD0809的CLOCK孔。
2、将实验台RX1、TD1孔分别连P3.0、P3.1孔。
3、将串口线分别连接实验台串口插槽和实验电脑串口插槽。
4、完成实验台串口通信程序,电脑运行串口调试助手观察串口输出数据。
五、实验程序:
#include
#include
#defineLEDLen6
#definemode0x03。
#defineCAddrXBYTE[0xe100]/*控制字地址*/
#defineOUTBITXBYTE[0xe101]/*位控制口*/
#defineCLK164XBYTE[0xe102]/*段控制口(接164时钟位>*/
#defineDAT164XBYTE[0xe102]/*段控制口(接164数据位>*/
#defineINXBYTE[0xe103]/*键盘读入口*/
#defineCS0809XBYTE[0xa000]
unsignedcharLEDBuf[LEDLen]。
/*显示缓冲*/
codeunsignedcharLEDMAP[]={/*八段管显示码*/
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
}。
voidDelay(unsignedcharCNT>
{
unsignedchari。
while(CNT--!
=0>
for(i=100。
i!
=0。
i-->。
}
voidDisplayLED(>
{
unsignedchari,j。
unsignedcharPos。
unsignedcharLED。
Pos=0x20。
/*从左边开始显示*/
for(i=0。
ii++>{
OUTBIT=0。
/*关所有八段管*/
LED=LEDBuf[i]。
for(j=0。
j<8。
j++>{/*送164*/
if(LED&0x80>DAT164=1。
elseDAT164=0。
CLK164=CLK164|0x02。
CLK164=CLK164&0xfd。
LED<<=1。
}
OUTBIT=Pos。
/*显示一位八段管*/
Delay(1>。
Pos>>=1。
/*显示下一位*/
}
}
codeunsignedcharKeyTable[]={/*键码定义*/
0x00,0x01,0x04,0x07,
0x0f,0x02,0x05,0x08,
0x0e,0x03,0x06,0x09,
0x0d,0x0c,0x0b,0x0a,
0x10,0x11,0x12,0x13,0x14,
0x15,0x16,
}。
unsignedcharTestKey(>
{
OUTBIT=0。
/*输出线置为0*/
return(~IN&0x0f>。
/*读入键状态(高四位不用>*/
}
unsignedcharGetKey(>
{
unsignedcharPos。
unsignedchari。
unsignedchark。
i=6。
Pos=0x20。
/*找出键所在列*/
do{
OUTBIT=~Pos。
Pos>>=1。
k=~IN&0x0f。
}while((--i!
=0>&&(k==0>>。
/*键值=列X4+行*/
if(k!
=0>{
i*=4。
if(k&2>
i+=1。
elseif(k&4>
i+=2。
elseif(k&8>
i+=3。
OUTBIT=0。
doDelay(10>。
while(TestKey(>>。
/*等键释放*/
return(KeyTable[i]>。
/*取出键码*/
}elsereturn(0xff>。
}
unsignedcharRead0809(>
{
unsignedchari。
CS0809=0。
/*起动A/D*/
for(i=0。
i<0x20。
i++>。
/*延时>100us*/
return(CS0809>。
/*读入结果*/
}
unsignedcharstring[]={"AT89S52Microcomputer\0"}。
unsignedchari=0。
voidmain(>
{
CAddr=mode。
LEDBuf[0]=0xff。
LEDBuf[1]=0xff。
LEDBuf[2]=0xff。
LEDBuf[3]=0xff。
LEDBuf[4]=0x00。
LEDBuf[5]=0x00。
TMOD=0x21。
TH1=0xFD。
TL1=0xFD。
SCON=0x40。
TR1=1。
TI=0。
RI=0。
TH0=0x3c。
TL0=0xb0。
IE=0x82。
TR0=1。
P1=0x00。
while(1>{
DisplayLED(>。
if(TestKey(>>{
LEDBuf[5]=LEDMAP[GetKey(>&0x0f]。
i=0。
SBUF=Read0809(>。
LEDBuf[4]=LEDMAP[Read0809(>&0x0f]。
LEDBuf[3]=LEDMAP[Read0809(>>>4&0x0f]。
/*
while(string[i]!
=0>
{
while(TI==0>。
TI=0。
SBUF=0x5A。
i++。
}
*/
}
}
}
timer0(>interrupt1using1
{
staticunsignedintjitter=0。
TH0=0x3c。
TL0=0xb0。
P1^=0xFF。
jitter++。
if(jitter>=20>{
//while(TI==0>。
//TI=0。
//SBUF=Read0809(>。
jitter=0。
}
}
voidserial(>interrupt4using1
{
unsignedcharRX_char。
TI=0。
if(RI>{
RI=0。
RX_char=SBUF。
SBUF=RX_char。
}
}
附录实验报告基本要求与书写格式
一、实验名称:
说明:
本次实验的名称。
二、实验目的:
说明:
本次实验的主要目的,参考每次的实验指导书。
三、实验环境:
说明:
实验用到的硬件软件环境。
四、实验内容与步骤:
说明:
实现实验目的而进行的实验内容,如果有步骤要求则简要列出步骤。
五、实验总结:
说明:
1.画出硬件连接图和程序流程图。
2.参照本次实验的主程序,重新设计主程序并给出详尽注释。
3.本次实验得到了什么?
收获是什