智能仪器设计报告.docx
《智能仪器设计报告.docx》由会员分享,可在线阅读,更多相关《智能仪器设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
智能仪器设计报告
目录
一、设计要求说明
二、电路设计思想
三、硬件设计
(1)温度传感器及其信号调理电路
(2)键盘接口电路与报警电路
(3)显示接口电路
(4)微型打印机接口
(5)总电路设计
四、软件设计
(1)监控程序设计
(2)自检程序设计
(3)A/D转换与计算程序设计
(4)显示子程序设计
(5)键盘处理子程序
(6)打印程序
五、实验感想
六、各芯片引脚及参考文献
七、附录:
程序清单
一、设计要求说明
⑴一路水温或环境温度检测,误差:
≤±0.5℃;
⑵温度3位数码显示(XX.X℃);
⑶工作状态指示(如加热器工作指示);
⑷开机自检;
⑸配简单键盘,如温度上、下限临界报警值设置;
⑹配微型打印机接口;
⑺配置通信接口。
二、电路设计思想
实验过程采用自顶向下的设计思想,先考虑整体目标,明确任务,把整体分解为一个个子任务,并考虑子任务之间的关系。
这样就把较大的、复杂的、难解决的问题分解成若干个小的、简单的、易解决的问题。
本系统首先单独设计各个功能模块,分模块测试后,最后将其组合调试,完成整个电路的设计。
整个仪器采用89C51单片机为核心,以MTS102作传感器进行温度信号的采集。
本次设计的系统具有以下几个功能模块:
(1)温度传感器及其信号调理电路
采用MTS102作传感器进行温度采集,并利用激励电路、补偿电路和放大电路构成调理电路,输出与温度成线性关系的电压。
(2)A/D接口电路
利用ADC0809进行AD转换,将输入电压模拟信号转换为数字量,便于单片机处理。
(3)键盘接口电路
利用8279进行键盘扫描,可靠性高,实现高温报警设置、中断打印功能。
(4)温度显示电路
利用四位一体的共阳极数码管显示XX.X的温度显示,减少了段选线的条数,简化电路。
(5)打印机接口电路
采用查询方式判断微型打印机GP16是否忙,若不忙则将单片机传送过来的数据打印。
(6)报警部分
当当前温度值大于键盘所设定的上限值时,发光二极管亮并发出报警声。
三、硬件设计
(1)温度传感器及其信号调理电路
本设计采用MTS102二极管作为温度传感器,激励和放大电路采用REF2000电流源及OPA1013双运放来实现。
设测温范围为0~50℃,调节电阻使50℃时对应为5V,因为该传感器是线性的,则0~50℃对应的输出电压为0~5V。
图3.1温度传感器信号调理电路
(2)A/D采集
AD转换器采用ADc0809,ADc0809是8路的AD转换器,输入电压对应着的它的量化值0~255,也就是对应温度的0~50℃。
本设计采用查询的方式来判断A/D是否转换完毕。
查询到转换完成后,则进行数据读操作。
当AD转换器转换地址和RD非信号同时有效是,选通OE,且转换数据送入到数据总线,由89C51读入。
图3.2A/D采样
(2)键盘接口电路与报警电路
图3.3键盘接口电路
图3.4报警电路
(3)显示接口电路
图3.5显示接口电路
(4)微型打印机接口
微型打印机GP16中有三态锁存器,在CS非和WR非的控制下能锁存CPU总线上得数据,三台门又能与CPU实现隔离,故GP16与8051自间不需要外加锁存器。
图中,BUSY信号接到单片机的P2.1假,用来查询打印机是否空闲,该打印机的选通地址为0FFFFH。
图3.6微型打印机接口电路
(6)总电路设计
将各个模块组合起来,得到如图下的总电路。
图3.7总体电路原理图
四、软件设计
程序设计工作的主要任务是把已经转换的电压量转换为电压量的温度信号经过A/D转换变为数字量,进行判断和报警等处理;然后,再通过编程计算得到的温度的BCD码,最后送LED显示。
1s的定时时间由定时器T0采用中断方式实现。
通过键盘申请外部中断,打印机的工作通过外部中断INT0实现;报警上限值的设定通过外部中断INT1实现。
(1)监控程序设计
监控程序流程图
(2)自检程序设计
为了检查数码管的好坏,需对数码管进行自检。
方法是先令所有字段全亮再令其全灭,检出数码管的输出是否正常。
(3)A/D转换与计算程序设计
1.温度采集与计算程序
本设计中的温度信号是否转换完毕是通过P2.2脚查询EOC输出的方法来判断的。
当EOC=1时,转换完毕。
转换后的数字量放在累加器A中,这是1字节二进制数,先用它与温度上限比较,根据比较的结果设置相应的报警标志位。
比较处理完毕,还需进行物理量与数字量的变换,即标度变换。
标度变换值应该为B=50.0℃/255,为了达到转换精度,即为能精确显示到小数点后一位的值,则计算公式应修改为T=D*10*B=D*10*50.0/255(D为采集的数字量),所以变换后的温度实际最大值为500.
2.温度值转换为BCD码子程序
经过标度变换后的温度值为十六进制,为了满足LED显示,需要变换为BCD码用于显示。
(4)显示子程序设计
(4)键盘处理子程序
S2按下后,申请外部中断INT1,所以S3,S4,S5的键盘处理程序即为外部中断1的中断处理程序。
(5)打印程序
S1按下后,申请外部中断INT0,所以打印程序即为外部中断0的中断处理程序。
五、实验感想
由于考研,此次课程设计的时间很赶,在紧张的二周时间内,我们组完成了软件程序的编写,电路板的搭建和电路的调试。
在这次课程设计中,我主要负责电路调试部分。
虽然之前,我们也进行过类似于传感器设计的课程设计,但是在此次智能仪器设计的过程还是发现了很多问题。
我发现电路搭建的好坏直接决定了电路调试的成功与否,在芯片引脚和对应的管脚之间的连接应该很认真。
比如,在检查数码管的好坏过程中,由于我们采用的是四位一体的ARKSR420561K,和之前的常用的数码管的引脚不一样,所以在调试的时候数码管显示不正确,在改正好连线后显示正常。
通过此次课程设计,我发现了理论联系实际的重要性。
一些本来就仅仅了解或者根本不会的东西,在自己和大家的一起研究和讨论下,也弄懂不少。
学习是个没有止境的过程,在之后的学习过程更应该不断充实自己。
六、各芯片引脚及参考文献
(1)各芯片引脚
(2)参考文献
[1]赵新民,王祁.智能仪器设计基础[M].黑龙江,哈尔并工业大学出版社,1999.
[2]张俊谟.单片机中级教程,原理与应用[M].北京,北京航空航天大学出版社,2002.
[3]袁鹏平,何志刚,罗开玉.快速精通AltiumDesigner6电路图和PCB设计[M].北京,化学工业出版社,2009.
[4]周严.数字化测量系统[M].北京,北京理工大学出版社,2011.
[5]周严.测控系统电子技术[M].北京,科学出版社,2007.
[6]寇戈,蒋立平.模拟电路与数字电路(第2版)[M].北京,电子工业出版社,2009.
八、附录:
程序清单
ORG0000H
SJMPMAIN
ORG0003H
AJMPINT_0
ORG000BH
AJMPTIME
ORG0013H
AJMPINT_1
MAIN:
CLREA
MOVDPTR,#7FFFH;8279命令状态口地址7FFFH
MOVA,#09H
MOVX@DPTR,A
MOVA,#34H;ALE12MHz经20分频得100KHz
MOVX@DPTR,A
MOVA,#0DFH;清零
MOVX@DPTR,A
WAIT:
MOVXA,@DPTR
JBACC.7,WAIT
MOVTMOD,#01H;定时器0模式控制字
MOVTH0,#0FEH
MOVTL0,#0CH
SETBTR0;定时器0启动
SETBIT0;下降沿触发
SETBIT1
SETBEA;全局中断使能
SETBET0;定时器0中断使能
SETBEX0;INT0中断使能
;SETBEX1
MOVDPTR,#3FFFH
MOVA,0F9H
MOVX@DPTR,A
MOVA,0F9H
MOVX@DPTR,A
MOVA,0F9H
MOVX@DPTR,A
MOVA,0F9H
MOVX@DPTR,A
MOVR0,#10H
MOV30H,#0
MOV31H,#0
HI:
AJMP$
INT_0:
PUSHDPH
PUSHDPL
MOVDPTR,#3FFFH
MOVXA,@DPTR
ANLA,#3FH
MOVDPTR,#KEYTAB
MOVCA,@A+DPTR
MOVDPTR,#DISTAB
MOVCA,@A+DPTR
MOVDPTR,#3FFFH
MOVX@DPTR,A
NOP
POPDPL
POPDPH
RETI
TIME:
CLRTR0
AD:
MOVDPTR,#9FFFH
MOVA,#00H
MOVX@DPTR,A
NOP
NOP
NOP
SETBP3.3
EOC:
MOVA,P3
JNBACC.3,EOC
MOVDPTR,#9FFFH
MOVXA,@DPTR
ADDA,30H
MOV30H,A
MOVA,31H
ADDCA,#0
MOV31H,A
DJNZR0,BACK
SWAPA
ANLA,#0F0H
MOV31H,A
MOVA,30H
SWAPA
ANLA,#0FH
ADDA,31H
MOVR0,#10H
MOV30H,#0
MOV31H,#0
MOVB,A
MOVDPTR,#7FFFH
MOVA,#90H
MOVX@DPTR,A
MOVA,B
LCALLCHANGE
MOVTH0,#0FEH
MOVTL0,#0CH
BACK:
SETBTR0
RETI
INT_1:
RETI
CHANGE:
CLREA
MOVB,#51
DIVAB
MOVDPTR,#DISTAB_DOT
MOVCA,@A+DPTR
MOVDPTR,#3FFFH
MOVX@DPTR,A
MOVA,B
MOVB,#10
MULAB
MOV32H,B
MOVB,#51
DIVAB
MOV33H,B
MOVB,32H
MOV32H,A
MOVA,B
XRLA,#0
JZNEXT
MOVA,32H
ADDA,#5
INC33H
MOV32H,A
NEXT:
MOVA,32H
MOVDPTR,#DISTAB
MOVCA,@A+DPTR
MOVDPTR,#3FFFH
MOVX@DPTR,A
MOVA,33H
MOVB,#10
MULAB
MOV32H,B
MOVB,#51
DIVAB
MOV33H,B
MOVB,32H
MOV32H,A
MOVA,B
XRLA,#0
JZNEXT1
MOVA,32H
ADDA,#5
INC33H
MOV32H,A
NEXT1:
MOVA,32H
MOVDPTR,#DISTAB
MOVCA,@A+DPTR
MOVDPTR,#3FFFH
MOVX@DPTR,A
MOVA,33H
MOVB,#10
MULAB
MOV32H,B
MOVB,#51
DIVAB
MOV33H,B
MOVB,32H
MOV32H,A
MOVA,B
XRLA,#0
JZNEXT2
MOVA,32H
ADDA,#5
INC33H
MOV32H,A
NEXT2:
MOVA,32H
MOVDPTR,#DISTAB
MOVCA,@A+DPTR
MOVDPTR,#3FFFH
MOVX@DPTR,A
SETBEA
RET
KEYTAB:
DB01H,02H,03H,0AH
DB00H,00H,00H,00H
DB04H,05H,06H,0BH
DB00H,00H,00H,00H
DB07H,08H,09H,0CH
DB00H,00H,00H,00H
DB0FH,00H,0EH,0DH
DISTAB:
DB0C0H,0F9H,0A4H,0B0H,99H
DB92H,82H,0F8H,80H,90H;0~9
DB088H,083H,0C6H,0A1H,86H,08EH;A~F
;DB08CH,0C1H,0C7H,07FH
DISTAB_DOT:
DB040H,079H,024H,030H,19H
DB12H,02H,078H,00H,10H;0~9
END
_
;调试8279
ORG0000H
LJMPMAIN
ORG0003H
LJMPJIANPAN
ORG0100H
MAIN:
MOVSP,#5FH;设置堆栈指针
CLREA
MOVDPTR,#0BFFFH;指向命令/状态口
MOVA,#00H;置键盘/显示器工作方式命令字
MOVX@DPTR,A;送入命令字
MOVA,#2AH;置分频命令字
MOVX@DPTR,A;送入命令字
MOVA,#40H;置读FIF0RAM命令字
MOVX@DPTR,A;送入命令字
MOV51H,#03H;设定温度为3位
SETBEA
SETBEX1
LOOP:
SJMP$;等待中断
ORG0003H
JIANPAN:
CLREA;关闭所有的中断
PUSHACC
PUSHPSW
MOVR7,51H
MOVDPTR,#0BFFEH;指向数据口
MOVXA,@DPTR;读入键值编码
CJNER7,#03H,ATT2
ATT1:
MOVR0,#70H;键值存放首地址
MOVDPTR,#KEYTAB1;DPTR指向键符表
MOVCA,@A+DPTR;查找键值
MOV@R0,A
DEC51H
SJMPOUT0
ATT2:
CJNER7,#02H,ATT3
MOVR0,#71H
MOVDPTR,#KEYTAB1;DPTR指向键符表
MOVCA,@A+DPTR;查找键值
MOV@R0,A
DEC51H
SJMPOUT0
ATT3:
MOVR0,#72H
MOVDPTR,#KEYTAB1;DPTR指向键符表
MOVCA,@A+DPTR;查找键值
MOV@R0,A
MOV51H,#03H
OUT0:
POPPSW
POPACC
SETBEA;打开所有中断
RETI
KEYTAB1:
DB0FFH,04H,01H,00H,07H,0FFH,0FFH,0FFH
DB0FFH,05H,02H,13H,08H,0FFH,0FFH,0FFH
DB0FFH,06H,03H,0AH,09H,0FFH,0FFH,0FFH
DB0FFH,0CH,0DH,0EH,0BH,0FFH,0FFH,0FFH
;DBFFH,10H,11H,12H,0FH,FFH,FFH,FFH
KEYTAB2:
DB0FFH,04H,07H,0EH,01H,0FFH,0FFH,0FFH
DB0FFH,05H,08H,00H,02H,0FFH,0FFH,0FFH
DB0FFH,06H,09H,0FH,03H,0FFH,0FFH,0FFH
DB0FFH,0BH,0CH,0DH,0AH,0FFH,0FFH,0FFH
END
_;调试键盘
ORG0000H
LJMPMAIN
ORG0013H
LJMPJIANPAN
ORG0100H
MAIN:
MOVSP,#5FH;设置堆栈指针
CLRIT1
CLREA
MOVDPTR,#0BFFFH;指向命令/状态口
MOVA,#0D1H;置总清除命令
MOVX@DPTR,A;总清除命令送入
LP:
MOVXA,@DPTR;读入状态字节
JBACC.7,LP;等待清除
MOVA,#00H;置键盘/显示器工作方式命令字
MOVX@DPTR,A;送入命令字
MOVA,#34H;置二十分频命令字
MOVX@DPTR,A;送入命令字
MOVA,#40H;置读FIF0RAM命令字
MOVX@DPTR,A;送入命令字
MOV90H,#03H;设定温度为3位
SETBIT1
SETBEA
SETBEX1
LOOP:
SJMPLOOP;等待中断
ORG0160H
JIANPAN:
CLREA;关闭所有的中断
PUSHACC
PUSHPSW
MOVR7,90H
MOVDPTR,#0BFFEH;指向数据口
MOVXA,@DPTR;读入键值编码
CJNER7,#03H,ATT2
ATT1:
MOVR0,#10H;键值存放首地址
MOVDPTR,#KEYTAB1;DPTR指向键符表
MOVCA,@A+DPTR;查找键值
MOV@R0,A
DEC90H
SJMPOUT0
ATT2:
CJNER7,#02H,ATT3
MOVR0,#11H
MOVDPTR,#KEYTAB1;DPTR指向键符表
MOVCA,@A+DPTR;查找键值
MOV@R0,A
DEC90H
SJMPOUT0
ATT3:
MOVR0,#12H
MOVDPTR,#KEYTAB1;DPTR指向键符表
MOVCA,@A+DPTR;查找键值
MOV@R0,A
MOV90H,#03H
OUT0:
POPPSW
POPACC
SETBEA;打开所有中断
RETI
KEYTAB1:
DB0FFH,01H,04H,07H,0EH,0FFH,0FFH,0FFH
DB0FFH,02H,05H,08H,00H,0FFH,0FFH,0FFH
DB0FFH,03H,06H,09H,0FH,0FFH,0FFH,0FFH
DB0FFH,0AH,0BH,0CH,0DH,0FFH,0FFH,0FFH
END
_