中期报告参考Word下载.docx
《中期报告参考Word下载.docx》由会员分享,可在线阅读,更多相关《中期报告参考Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
模数转换采用ADC0809,它是芯片输出端具有可控的三态门,这种芯片的输出端可以直接和系统总线相连,由读信号控制三态门,转换结束后,CPU执行一条输入指令,从而产生读信号,将数据从A/D转换器取出。
ADC0809是典型的8位8通道逐次逼近式A/D转换器,CMOS工艺,可实现8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道地址锁存译码电路,其转换时间为100µ
s左右。
ADC0809内部结构如图所示,图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换,地址锁存与译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择。
8位A/D转换器是逐次逼近式,由控制与时序电路、逐次逼近寄存器、树状开关以及256R电阻阶梯网络等组成。
输出器用于存放和输出转换得到的数字量。
(3)在KeiluVision2环境下进行具体程序设计
程序如下
#include<
reg51.h>
absacc.h>
sbitcp_164=P2^6;
//164的脉冲控制引脚
sbitdata_164=P2^7;
//164的串行数据引脚
floatxiaoshu;
inttemper1,c,temper2;
//保存实际温度的变量,只考虑温度为正且取整数
sbitDQ=P2^4;
//数据端口
voiddelay(unsignedinti)
{
while(i--);
}
//初始化函数
Init_DS18B20(void)
unsignedcharx=0;
DQ=1;
//DQ复位
delay(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
delay(80);
//精确延时大于480us
//拉高总线
delay(14);
x=DQ;
//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(20);
//读一个字节
ReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
//给脉冲信号
dat>
>
=1;
if(DQ==1)
dat=dat|0x80;
delay(4);
}
return(dat);
//写一个字节
WriteOneChar(unsignedchardat)
i>
i--)
DQ=dat&
0x01;
delay(5);
//读取温度
ReadTemperature(void)
unsignedchara=0;
unsignedcharb=0;
unsignedchart=0;
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
//跳过读序号列号的操作
WriteOneChar(0xBE);
//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<
<
=8;
t=t|a;
temper1=t/16;
temper2=t%16;
xiaoshu=temper2/16.0;
c=xiaoshu*10000;
//以下是显示两位的函数,参数X是两位整数//
voidled_2(unsignedcharx)
unsignedcharzixing[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
//字型代码
unsignedchari,zixing2;
zixing2=zixing[x%10];
//以下显示X的低位
for(i=0;
i<
8;
i++)
{
cp_164=0;
data_164=zixing2&
cp_164=1;
zixing2=zixing2>
1;
zixing2=zixing[x/10];
//以下显示X的高位
/*以下是顺序显示a,b,c的函数,共显示6位,abc均是两位整数*/
voidled_6(unsignedchara,unsignedcharb,unsignedcharc)
led_2(c);
led_2(b);
led_2(a);
main()
unsignedinti=0;
while
(1)
ReadTemperature();
//读温度
led_6(temper1,c/100,c%100);
40000;
i++);
程序仿真图如下:
除此之外我通过微机原理一书找到了如何使用以8088CPU系统为核心设计一个温度采集系统并在三位LED显示器上显示当前温度。
他实现起来较为简单,所需要的
芯片清单及器件为:
CPU8088ADC0809接口芯片8255温度传感器AD590
74LS138译码器74LS273段码锁存器DM7407N
8282锁存器晶振运算放大器数码管三个电容电阻若干。
程序流程图
程序清单为:
PORTAEQU020H;
定义端口地址
PORTBEQU021H
PORTCEQU022H
PORTDEQU023H
DATASEGMENT
TABLEDB40H
DB4FH
DB24H
DB30H
DB19H
DB12H
DB02H
DB78H
DB00H
DB10H
BUFDA1DB?
BUFDA2DB?
BUFDA3DB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,98H
OUTPORTD,AL;
8255的初始化
;
*****************************
MOVAL,01
OUTPORTC,AL
MOVAL,00
OUTPORTC,AL;
PC0为0,启动A/D转换
FIND:
INAL,PORTC
TESTAL,010H
JNZFIND;
读PC4的值,如为1则继续查询
MOVAL,01
使PC0为1,撤消启动信号
INAL,PORTA;
读取转换数据
******************************
MOVCL,100;
计算百位,十位,个位
DIVCL
MOVBUFDA1,AL
XORAL,AL
MOVCL,10
MOVBL,AH
MOVAL,BL
MOVAH,0
MOVBUFDA2,AL
MOVBUFDA3,AH
DISPLAY:
MOVBX,OFFSETTABLE
MOVAL,[DI+0]
XLAT;
换码
MOVDX,PORTB
OUTDX,AL
MOVCX,30H;
延迟程序
DELAY:
LOOPDELAY
RET
**********************************
MOVCX,30H
DISPLAY1:
MOVAL,06H
OUTPORTD,AL
MOVAL,05H
MOVAL,03H
MOVDI,OFFSETBUFDA1
CALLDISPLAY;
使LED0工作
MOVAL,07H
MOVAL,04H
MOVDI,OFFSETBUFDA2
使LED1工作
MOVAL,02H
MOVDI,OFFSETBUFDA3
使LED2工作
LOOPDISPLAY1;
延迟
***********************************
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
LED的输出
通过微机原理的学习我明白了由于输出的电压量范围是0~5V即转换为数字量后为0~FF之间。
所以,要使温度表示范围为0~85℃,需把0~FF除以3。
经过CPU未经处理过的数值是以ASCII码的方式显示在电脑屏幕上的,还需将ASCII码转换成十进制显示。
为了便于读数。
在LED灯上的显示将设计为8421码的方式显示。
转换方法在程序中已注明。
2.存在问题及解决措施
在学习和程序编写过程中遇到了一些问题:
主要是开始对KeiluVision2软件的使用以及汇编语言的掌握问题,在程序编写过程中,出现了一些错误,比如语法使用错误,程序格式错误以及仿真时属性设置错误等原因,在后来的深入学习后,这些问题得到解决。
在编程过程中,对于如何使用语言在KeiluVision2环境下充分完成部件功能较为棘手,后来经过深入分析,以及对开发环境的学习得以解决。
3.后期工作安排
在KeiluVision环境下已基本学习了如何实现温度采集的编程,下一步的工作是深入学习硬件连接,编写出完整的程序,同时,应尽量搭配硬件进行测试,对比显示结果,验证程序的正确性。
同时,开始着手论文的撰写,主要是准备足够的前期资料和程序编写调试过程中记录好调试的过程和仿真的结果,为论文积累素材。
注:
1、正文:
宋体小四号字,行距22磅。
2、中期报告由各系集中归档保存,不装订入册。