第08章 单片机应用系统中的模拟量输入与输出 习题解答.docx
- 文档编号:7383824
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:12
- 大小:76.83KB
第08章 单片机应用系统中的模拟量输入与输出 习题解答.docx
《第08章 单片机应用系统中的模拟量输入与输出 习题解答.docx》由会员分享,可在线阅读,更多相关《第08章 单片机应用系统中的模拟量输入与输出 习题解答.docx(12页珍藏版)》请在冰豆网上搜索。
第08章单片机应用系统中的模拟量输入与输出习题解答
第8章单片机应用系统中的模拟量输入与输出习题解答
一、填空题
1.模拟/数字(A/D)转换,是模拟信号转换为数字信号的过程,数字/模拟(D/A)转换是模拟信号转换为数字信号的过程。
2.ADC0832是一个具有串行接口的8位分辨率、双通道A/D转换芯片,DAC0832是是一个8位D/A转换器芯片。
3.ADC0809的工作频率允许范围是不高于640KHZ。
4.ADC0832的工作频率是250KHZ。
5.DAC0832的工作电源电压是+5V~+15V。
二、简答题
1.画出ADC0809典型应用电路,其中CLK引脚连接时应注意什么问题?
EOC引脚连接在查询和中断工作方式下应如何处理?
答:
ADC0809典型应用电路如题图1所示。
CLK引脚接入的工作频率应不高于640KHZ。
EOC引脚的连接在查询时可接到某个引脚上,编程时不断查询该引脚,一旦为1说明转换结束。
在中断工作方式下应如题图1所示,接在某个外中断输入端,一旦转换结束,申请中断。
题图1ADC0809与80C51接口
2.设已知8051单片机的晶振频率为12MHz,ADC0809口地址为CFFFH,采用中断工作方式,要求对8路模拟信号不断循环A/D转换,转换结果存入以30H为首地址的内RAM中。
请画出该8路采集系统的电路图,并编写相应程序。
答:
8路采集系统的电路图如题图2所示。
题图28路采集系统的电路图
汇编参考程序:
ORG0000H;上电后程序从00000H开始,在0000H单元存放转移指令
LJMPSTART;转移到主程序
ORG000BH;定时器T0的中断入口地址
LJMPINTT0;转到中断子程序
ORG0100H;主程序从0100H开始
START:
MOVR0,#30H;设立数据存储区指针
MOVR2,#08H;设置8路采样计数值
SETBIT0;设置外部中断0为边沿触发方式
SETBEA;CPU开放中断
SETBEX0;允许外部中断0中断
MOVDPTR,#0CFF8H;送入口地址并指向IN0
LOOP:
MOVX@DPTR,A;启动A/D转换,A的值无意义
HERE:
SJMPHERE;等待中断
中断服务程序:
INTT0:
MOVXA,@DPTR;读取转换后的数字量
MOV@R0,A;存入片内RAM单元
INCDPTR;指向下一模拟通道
INCR0;指向下一个数据存储单元
DJNZR2,INT;8路未转换完,则继续
MOVR2,#8;准备下一循环
MOVR0,#30H
MOVDPTR,#0CFF8H
RETI;中断返回
INT:
MOVX@DPTR,A;再次启动A/D转换
RETI;中断返回
END
C语言参考程序:
#include
#include
#defineucharunsignedchar//定义uchar为无符号字符数据类型
#defineIN0XBYTE[0xcff8]//定义IN0为通道0的地址
staticuchardatax[8];//定义8个单元的数组,存放结果
ucharxdata*ad_adr;//定义指向通道的指针
uchari=0;//定义变量i,初值为0
voidmain(void)//主函数,完成初始化
{
IT1=1;//外中断INT1为边沿触发
EX1=1;//开INT1中断
EA=1;//开CPU中断
ad_adr=&IN0;//指针指向通道0
*ad_adr=i;//启动通道0转换
for(;;){;}//等待中断
}
voidint_adc(void)interrupt0//中断函数
{
x[i]=*ad_adr;//接收当前通道转换结果
i++;//指向下一个单元
ad_adr++;//指向下一个通道
if(i<8)//判循环8次否
{
*ad_adr=i;//8个通道未转换完,启动下一个通道返回
}
else
{
i=0;//8个通道转换完,准备下一轮
ad_adr=&IN0;
*ad_adr=i;//启动通道0转换
}
}
3.在图8-5中,ADC0809的转换时钟由单片机的ALE提供,由于ADC0809的典型转换频率为640KHz左右,如果单片机的晶振频率为12MHZ,则ALE的频率为2MHZ,不符合要求,需要分频。
请画出分频电路。
答:
ALE的输出通过4分频后得到500KHz的工作频率送ADC0809的CLK端。
可采用2个由D触发器构成的T’触发器实现。
4.简述DAC0832的直通工作方式、单缓冲工作方式、双缓冲工作方式的特点和用途。
答:
直通工作方式:
5个控制端均有效,直接D/A转换,不需受控。
单缓冲工作方式:
两个输入寄存器中任意一个处于直通方式,另一个工作于受控方式。
在只有一路模拟量输出,或虽有几路模拟量但并不要求同步输出时,可采用单缓冲方式。
双缓冲工作方式:
两个锁存器都处于受控状态,用于需两路模拟量同时输出的场合。
5.试利用DAC0832单缓冲方式,设计一个可以产生50Hz的矩形波发生电路,并编写相应程序(设晶振频率6MHZ)。
答:
50Hz的矩形波,周期20ms,高低电平各延时10ms。
产生矩形波的汇编语言参考程序如下:
ORG0000H;上电后程序从00000H开始,在0000H单元存放转移指令
LJMPBEGIN;转移到主程序BEGIN
ORG0100H;主程序从0100H开始
BEGIN:
MOVDPTR,#7FFFH;输入寄存器地址,假定P2.7接
LP:
MOVA,#DATAH;设置矩形波上限
MOVX@DPTR,A;将A的内容送D/A转换
LCALLDELAYH_10ms;高电平延时时间,延时子程序略。
MOVA,#DATAL;设置矩形波下限
MOVX@DPTR,A;将A的内容送D/A转换
LCALLDELAYL_10ms;低电平延时时间,延时子程序略。
SJMPLP;循环
END
矩形波C语言参考程序如下:
#include
#include
#defineucharunsignedchar//定义uchar为无符号字符数据类型
#defineDAC0832XBYTE[0x7FFF]//定义DAC0832表示片外地址0x7FFF
voiddelay()//延时函数
{
voiddelay(void)
{
unsignedcharj,m,n;
for(m=0;m<20;m++)
for(n=0;n<250;n++);//循环延时10ms
}
}
voidmain()//主函数
{
uchari;//变量i为无符号字符数据类型
while
(1)//无限循环体
{
DAC0832=0;//输出低电平
delay();//延时
DAC0832=0xff;//输出高电平
delay();//延时
}
}
三、Proteus仿真
1.在Proteus下,完成8.4节内容。
答:
全自动洗衣机水量控制Proteus仿真
在全自动洗衣机控制系统中,常用压力传感器来检测进水量的多少。
传感器将水的压力这一物理量转换成电信号,电信号通过模/数转换变成相应的数字量后送给单片机进行控制处理,单片机将检测到的水位信息和设定的信息进行判断,若水量不够,继续进水;若达到设定水量,则停止进水并开启电机工作。
为了仿真的方便,将传感器用可变电阻代替。
仿真电路如图8-16所示。
图中,用一个10K的电位器模拟压力传感器,进水量的多少将改变模/数转换器ADC0832输入电压的大小。
开关S代表洗衣机启动开关,D1代表电机启动信号,灯亮为启动电机工作。
D2代表进水控制信号,灯亮为正在进水,灯灭为停止进水。
图8-6全自动洗衣机水量控制电路图
图8-16电路工作过程:
当按键S按下,启动洗衣机工作,开始进水,D2亮。
调节电位器的中间抽头,可改变模/数转换器ADC0832输入电压的大小,以此来表示进水量的多少。
变化的电压经ADC0832转换成相应的二进制数送给单片机,单片机对数据进行比较后,判断是否要停止进水。
如转换的数据(或变化的电压)超过了预设进水量的标准,则在单片机控制下停止进水(D2灯灭),并启动电机工作(D1灯亮),电机的速度调整,参考上一节内容。
基于ADC0832的全自动洗衣机进水控制汇编语言参考程序:
ORG0000H;在0000H存放转移指令
AJMPMAIN;转移到主程序
ORG0100H;主程序从0100H开始
MAIN:
CLRP1.6;先关进水信号,D2灯灭
CLRP1.7;关电机启动信号,D1灯灭
MOVA,#00H;累加器A清0,准备移位接收数据
L1:
JBP2.7,L1;判按键S是否按下,没按下循环等待
LCALLdelay10ms;若按键S按下,调延时子程序去抖动
JBP2.7,L1;再判按键S是否按下,没按下循环等待,按下顺序执行
SETBP1.6;表示开始进水,D2灯亮
L2:
LCALLA_D;调用将模拟信号转换成数字信号子程序A_D
CJNER0,#128,L3;判转换的数据是否到了预设值
L3:
JCL2;没到,继续进水
CLRP1.6;到了,停止进水
SETBP1.7;启动电机开始工作
SJMPL2
;A/D转换子程序功能:
将模拟信号转换成数字信号
A_D:
MOVR7,#8;设循环次数
SEBTP3.4;置CS=1,一个转换周期开始
CLRP1.0;为第一个脉冲作准备
CLRP3.4;CS置0,片选有效
SEBTP1.1;P1.1置1,规定的起始信号
SEBTP1.0;第一个脉冲
CLRP1.0;第一个脉冲的下降沿,此前P1.1必须是高电平
SEBTP1.1;P1.1置1,通道选择信号
SEBTP1.0;第二个脉冲,第2、3个脉冲下降之前,DI必须分别输入两位数据用于选择通道,这里选通道CH0
CLRP1.0;第二个脉冲下降沿
CLRP1.1;DI置0,选择通道0
SEBTP1.0;第三个脉冲
CLRP1.0;第三个脉冲下降沿
SEBTP1.1;第三个脉冲下降沿之后,输入端DIO失去作用,应置1
RR:
SEBTP1.0;第四个脉冲
CLRP1.0;第四个脉冲下降沿
MOVC,P1.1;将DI输入数据送位累加器C,高位在前
RLCA;累加器A带进位左移一位,循环8次,将转换好的数据存在A中。
DJNZR7,RR
SEBTP3.4;片选无效
MOVR0,A;将转换好的数据送R0
RET;子程序返回
delay10ms:
;延时10ms子程序,(3×33+2)×100=10100(微秒),可以认为是10毫秒
MOVR2,#100;送大循环计数初值
LL1:
MOVR3,#33;送小循环计数初值
LL2:
DJNZR3,LL2;循环延时
DJNZR2,LL1;循环延时
RET;子程序返回
END;汇编结束
C语言参考程序:
#include
sbitCS=P3^4;//将CS位定义为P3.4引脚
sbitCLK=P1^0;//将CLK位定义为P1.0引脚
sbitDIO=P1^1;//将DIO位定义为P1.1引脚
sbitP1_6=P1^6;//将P1_6位定义为P1.6引脚
sbitP1_7=P1^7;//将P1_7位定义为P1.7引脚
sbitP2_7=P2^7;//将P2_7位定义为P2.7引脚
/*****************************************************
函数功能:
延时1ms
(3j+2)*i=(3×33+2)×100=10100(微秒),可以认为是10毫秒
***************************************************/
voiddelay10ms()
{
unsignedchari,j;
for(i=0;i<100;i++)
for(j=0;j<33;j++)
}
/*****************************************************
函数功能:
将模拟信号转换成数字信号
***************************************************/
unsignedcharA_D()//A_D转换函数。
功能:
将模拟信号转换成数字信号
{
unsignedchari,dat;//设i和det为无符号字符变量
CS=1;//一个转换周期开始
CLK=0;//为第一个脉冲作准备
CS=0;//CS置0,片选有效
DIO=1;//DIO置1,规定的起始信号
CLK=1;//第一个脉冲
CLK=0;//第一个脉冲的下降沿,此前DIO必须是高电平
DIO=1;//DIO置1,通道选择信号
CLK=1;//第二个脉冲,第2、3个脉冲下降之前,DI必须分别输入两位数据用于选择//通道,这里选通道CH0
CLK=0;//第二个脉冲下降沿
DIO=0;//DI置0,选择通道0
CLK=1;//第三个脉冲
CLK=0;//第三个脉冲下降沿
DIO=1;//第三个脉冲下降沿之后,输入端DIO失去作用,应置1
CLK=1;//第四个脉冲
for(i=0;i<8;i++)//高位在前
{
CLK=1;//第四个脉冲
CLK=0;//第四个脉冲下降沿
dat<<=1;//将下面储存的低位数据向右移
dat|=(unsignedchar)DIO;//将输出数据DIO通过或运算储存在dat最低位
}
CS=1;//片选无效
returndat;//将读书的数据返回
}
main(void)//主函数
{
unsignedintAD_val;//储存A/D转换后的值
//unsignedcharinc;//分别储存转换后的整数部分与小数部分
P1_6=0;//先关进水信号,D2灯灭
P1_7=0;//关电机启动信号,D1灯灭
if(P2_7==0)//判按键S是否按下,没按下循环等待
{
delay10ms();//若按键S按下,调延时子程序去抖动
if(P2_7==0)//再判按键S是否按下,没按下循环等待,按下顺序执行
{
P1_6=1;//表示开始进水,D2灯亮
while
(1)//无限循环
{
AD_val=A_D();//进行A/D转换
if(AD_val>128)//等待进水到指定量
{
P1_6=0;//到指定量,停止进水
P1_7=1;//电机开始工作
}
}
}
}
}
2.在Proteus下,完成简答题第5题内容。
答:
请参考第5题答案。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第08章 单片机应用系统中的模拟量输入与输出 习题解答 08 单片机 应用 系统 中的 模拟 输入 输出 习题 解答