第8章思考与练习.docx
- 文档编号:758295
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:15
- 大小:18.38KB
第8章思考与练习.docx
《第8章思考与练习.docx》由会员分享,可在线阅读,更多相关《第8章思考与练习.docx(15页珍藏版)》请在冰豆网上搜索。
第8章思考与练习
思考与练习
一、选择题
1.一个10位的A/D转换器,模拟输入量程为0-5V,若其相对误差为1LSB则用百分数
表示的相对误差为(C)。
A、1%B、0.39%C、0.488%D、0.18%
2.A/D转换结束后,单片机读取数据的方式有3种,其中不包括(B)。
A、查询方式B、直接读取C、中断方式D、固定时间延时
3.A/D转换器在使用前都需要调节零点和增益,调节零点时,模拟输入量(A);调
节增益时,模拟输入量(A)。
A、0V,5VB、0V,最大值C最大值,最小值D、最大值,最大值。
4.DAC0832有(B)几种控制方式。
A、全通、单控、双通B直通、单缓冲方式、双缓冲方式
5•当单片机启动ADC0808进行模/数转换时,应采用(D)指令。
A、MOVA,R0B、MOVXA,@DPTRC、MOVCA,@A+DPTRD、MOVX@DPTR,A
、填空题
1.A/D转换器两个最重要的技术指标是转换精度和_转换速度。
2.A/D转换器种类很多,目前应用广泛的主要由3类:
逐次逼近式、双积分式和V/F变换式。
3.ADC0808是8位256逐次逼近并行A/D转换芯片,具有地址锁存、译码电路的8路模拟开关。
4.D/A转换器的种类很多,DAC0831是8位串行D/A转换芯片。
5.DAC0832的工作方式通常是直通方式、单缓冲方式以及双缓冲方。
三、应用题
1、用单片机设计一简易数字电压表,并在PROTEUS^进行仿真。
参考答案(详见作业8.1):
#inelude
#ineludevintrins.h>
#defineuintunsignedint
#defineueharunsignedchar
sbitCS=P2A0;
sbitCLK=P2A1;
sbitDATA=P2A2;
ueharcodenum[]={0xfb,0xfd,0xfe};
ueharcodetable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共阳极数码管带小数点段码表
ucharcodetable1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管不带小数点段码表
uinttab[3];//存放电压的数组
voiddelay();
voiddisplay();
ucharRead_AD0831();//读取AD0831的数据
voidmain()
{
while
(1)
{
uintt=200,temp;
以51是因为一个51代表1V
tab[0]=temp/100;
temp=temp%100;
tab[1]=temp/10;tab[2]=temp%10;
while(t--)
AD0831的数据
temp=Read_AD0831()*100/51;//乘以100是为了保留小数点后两位数据,除
//得到百位数
//将百位去掉
//得到十位数
//得到个位数
//因为CPU运行很快所以不需要每时每刻都去读取
{
display();//在数码管上显示数据
}
}
}
ucharRead_AD0831()
inti=0,tmp=0;
DATA=1;
CS=0;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=O;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
for(i=0;i<8;i++)//循环八次按从高位到低位的顺序把数据读走
{
tmp=tmp<<1;
tmp=tmp|DATA;
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
}
CS=1;//读完过后将AD0831关闭
_nop_();
_nop_();
returntmp;
}
voiddisplay。
{
externuinttab[3];
uchari;
for(i=0;i<3;i++)//采用动态扫描的方式在3个数码管显示数据
{
P3=num[i];//控制哪个数码管可以显示
if(i==0)
P仁table[tab[i]];//百位应该带小数点显示
}
else
{
P仁table1[tab[i]];//十位和个位不带小数点显示
}
delay();
P3=0xff;//消影
}
}
voiddelay()
{
uintt=100;
while(t--);
}
2、设计8路数据采集,要求显示路数和采集值,并在PROTEUS^进行仿真。
参考答案(详见作业8.2):
#include
#includevintrins.h>
#defineuintunsignedint
#defineucharunsignedchar
sbita=P2A0;
sbitb=P2Al;
sbitc=P2A2;
sbitOE=P2A3;
sbitEOC=P2A4;
sbitstart=P3A0;
sbitwelaO=P3A1;
sbitwela仁卩3人2;
sbitwela2=P3A3;
sbitwela3=P3A4;
uinttab[]={O,O,O};
ucharcodetable1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共阳极数
码管带小数点段码表
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管不带小数点段码表
voiddelay();
voidread();
voiddisplay();
uinttemp;
voidmain()
{
while
(1)
{
uchart=200;
read();
while(t--);
}
}
voidread()
{
start=0;
start=1;
start=0;
while(EOC==0);//转换结束才能退出循环
OE=1;//允许数据输出
temp=P1;
display();//显示数据
OE=0;
}
voiddisplay()
{
ucharnum,i,n;
temp=temp*100;//保留小数点后两位
temp=temp/51;
tab[0]=temp/100;//得到百位数
tab[1]=temp%100/10;//得到十位数
tab[2]=temp%10;//得到个位数
num=P2|0xf8;//为显示哪个通道做准备
switch(num)
{
case(0xf8):
n=1;break;//一通道
case(0xf9):
n=2;break;//二通道
case(Oxfa):
n=3;break;
case(0xfb):
n=4;break;
case(0xfc):
n=5;break;
case(0xfd):
n=6;break;
case(0xfe):
n=7;break;
case(0xff):
n=8;break;
}
for(i=0;i<4;i++)//循环显示四位数(通道(一位数),数据(三位数))
{
if(i==0)//显示通道
{
PO=table[n];
wela0=1;//打开位选
delay();
wela0=0;//关闭位选
}
if(i==1)
{
PO=table1[tab[O]];//百位数(使用带小数点显示)
wela1=1;
delay();
wela1=0;
}
if(i==2)
{
PO=table[tab[1]];//十位数(不带小数点显示)
wela2=1;
delay();
wela2=0;
}
if(i==3)
P0=table[tab[2]];//个位数(不带小数点显示)
wela3=1;
delay();
wela3=0;
}
}
}
voiddelay()
{
uchart=100;
while(t--);
}
3、用ADC0831实现对单路数据的采集。
参考答案(详见作业8.3):
#include
#includevintrins.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitCS=P2A0;
sbitCLK=P2A1;
sbitDATA=P2A2;
ucharcodenum[]={0xfb,0xfd,0xfe};
//共阳极数
//共阳极数码
ucharcodetable[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
码管带小数点段码表
ucharcodetable1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
管不带小数点段码表
uinttab[3];//存放电压的数组
voiddelay();
voiddisplay();
ucharRead_AD0831();//读取AD0831的数据
voidmain()
{
while
(1)
{
uintt=200,temp;
temp=Read_AD0831()*100/51;II乘以100是为了保留小数点后两位数据,除
以51是因为一个51代表1V
tab[O]=temp/1OO;
//得到百位数
temp=temp%100;
//将百位去掉
tab[1]=temp/10;
//得到十位数
tab[2]=temp%10;
//得到个位数
while(t--)
//因为CPU运行很快所以不需要每时每刻都去读取
AD0831的数据
{
display。
;//在数码管上显示数据
}
}
}
ucharRead_AD0831()
{
inti=0,tmp=0;
DATA=1;
CS=O;
_nop_();_nop_();CLK=O;
_nop_();_nop_();CLK=1;
_nop_();_nop_();CLK=0;
_nop_();_nop_();CLK=1;
_nop_();_nop_();CLK=0;
_nop_();
_nop_();
for(i=0;i<8;i++)//循环八次按从高位到低位的顺序把数据读走
{
tmp=tmp<<1;
tmp=tmp|DATA;
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 思考 练习
![提示](https://static.bdocx.com/images/bang_tan.gif)