0 0 0 //查询方式 #include
void delay(void) /*延时*/ {
unsigned char i; for (i=50;i>0;i--); }
void mian() {
unsigned char i; while(P1_1==1); P1_0=1; delay(); P1_0=0; SCON=0x10; while(!RI); RI=0; i=SBUF; }
开关S接到INT1 //中断方式
#include
void delay(void) /*延时*/ {
unsigned char i; for (i=50;i>0;i--); }
void EXT0_INIT(void) {
EA=1; EX0=1; IT0=1; }
void int(void)interrupt0 {
unsigned char i;
1 0 0 0 0 P1_0=1; delay(); P1_0=0; SCON=0x10; while(!RI); RI=0; i=SBUF; }
void mian(void) {
EXT0_INIT(); while(1); }
第三章作业
3.1 衡量D/A转换器好坏的主要性能指标有哪几项? 答:分辨率、转换精度、建立时间和非线性误差。
3.2 已知8位DA转换器参考电压VREF为-5V,当输入数据为80H时,理论上输出电压为多少?
答:利用下面公式计算:
BVout??VREF
256B=128 (80H转换为十进制),VREF=-5V,计算得到Vout=2.5 V。
3.3 8位D/A转换器DAC0832中的8位输入寄存器和8位DAC寄存器各有什么功能?为什么需要两个寄存器?
答:两个寄存器配合实现如下工作方式:直通、单缓冲和双缓冲。使用两个寄存器可以实现两次缓冲操作,从而可以简化某些应用系统中的硬件接口电路设计。同时,利用两级缓存,提高了转换速率。
3.4 某A/D转换电路如图所示。 (1) 写出8255的四个端口的地址;
(2) 该电路采用什么控制方式?画出该种转换的程序框图; (3) 用C51编写完成上述转换的程序。
P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.01&G1G2AY6G2BABC8255CSPB7-PB0ADC0809D7-D0IN0V1PC7A1A0PC3STARTALEEOCABCP0.7-P0.0D7-D0 答:
(1) AD0809通过8255与单片机连接,因此,8255的四个端口地址为:0x78ff-0x7bff; (2) 采用查询式控制方法,相应得程序流程图如下:
开始设置8255工作模式ADC0809工作EOC=1?YN
从8255读数据结束
(3).
#include
#define uchar unsigned char
#define COM8255 XBYTE[0x7bff] //命令口地址 #define PB8255 XBYTE[0x79ff] //B口地址 #define PC8255 XBYTE[0x7aff] // C口地址
void main(void) {
uchar j;
COM8255=0x83;//PC高位置输出,低位置输入;B口输入 _nop_();
COM8255=0x0e; //启动AD转换 COM8255=0x0f; _nop_();
COM8255=0x0e;
while(( 0x08 & PC8255)==0); // 判断A/D转换结束 j=PB8255; while(1) }
3.5 如下图所示,试用中断方式编写C51程序,对IN3通道上的模拟电压数据连续进行8次采集,求平均值后将转换结果送入内部RAM 20H单元的数据缓冲区中。 答:
D ALE G 74LS 373 OE Q ADC0809 CLK IN0 IN1 IN2 ADDA ADDB ADDC D0~D7 IN3 IN4 IN5 IN6 IN7 CP Q A0 A1 A2 P0 MCS-51 单 片 机 WR P2.7 RD INT0 ≥1 ≥1 START ALE OE EOC 51单片机与ADC0809的接口
#include
#define uchar unsigned char uchar xdata *adch; uchar data *addata; uchar i; uchar sum; uchar ave;
void ADint0 (void) interrupt 0 {
uchar j; j=*adch; sum=sum+j; i++; if(i==0x08)