单片机课后习题答案(《单片机应用技术》C语言版) - 图文 下载本文

#include #include

#define DA0832 XBYTE[0x7fff] #define uchar unsigned char #define uint unsigned int uchar i,j;

void delay_100us() { TH1=0xff; TL1=0x9c; TR1=1;

// 启动定时器1

//置定时器初值0xff9c,即65436,定时0.1ms

while(!TF1); // 查询计数是否溢出,即定时0.1ms时间到,TF1=1 TF1=0; }

void main(void) {

TMOD=0x10; while(1) {

for(i=0;i<=255;i++) //形成三角波输出值,最大255

//D/A转换输出

// 置定时器1为方式1

// 0.1ms时间到,将定时器溢出标志位TF清零

{ DA0832=i; }

delay_100us();

for(j=255;j>=0;j--)//形成三角波输出值,最大255

}

{ DA0832=j; } }

//D/A转换输出

delay_100us();

(3)周期为50ms的方波C语言源程序如下:

#include #include

#define DA0832 XBYTE[0x7fff] #define uchar unsigned char #define uint unsigned int uchar i,j;

void delay_25ms() { TH1=0x9e; TL1=0x58;

TR1=1; // 启动定时器1

while(!TF1); // 查询计数是否溢出,即定时25ms时间到,TF1=1

TF1=0; 志位TF清零 }

void main(void)

// 25ms时间到,将定时器溢出标

// 置定时器初值

{ TMOD=0x10;

while(1) {

// 置定时器1为方式1

DA0832=255; //形成方波输出值,最大255 ,D/A

转换输出

}

delay_25ms(); DA0832=0; delay_25ms();

//D/A转换输出

}

6.7

答:

在选定转换通道后,ADC0809工作的主要有以下几个步骤: 1.启动A/D转换,给START引脚一个下降沿; 2.ALE信号与START信号一般连接在一起,这样使得在ALE信号的前沿写入地址信号,紧接着在其后沿就启动转换;

3.查询EOC引脚状态,EOC引脚由0变1,表示A/D转换过程结束; 4.允许读数,将OE引脚设置为1状态。

5.读取A/D转换结果,从ADC0809的外部地址读取其转换结果。

习题7答案

7.1 单项选择题 (1) A (2)B (3)D (6) C (7)B (8)C (11) C (12)D (13)A 7.2

答:

在异步通信中,数据是不连续传送的,数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,每一帧数据是低位在前,高位在后,通过传输线被接收端一帧一帧地接收。发送端和接收端可以由各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。

(4) C (5)B (9) C (10)A

异步通信的字符帧格式分为无空闲位帧格式和有空闲位帧格式。 7.3 答:

T1的溢出率取决于单片机定时器T1的计数速率和定时器的预置值。当定时器T1做波特率发生器使用时,通常是工作在模式2,即自动重装载的8位定时

器,此时TL1作计数用,自动重装载的值在TH1内。设计数的预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一次。为了避免溢出而产生不必要的中断,此时应禁止T1中断。

7.4 答:

参考程序如下: #include

#define uchar unsigned char code uchar

tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f};

uchar send[]={0x04,0x03,0x02,0x01,0x08,0x07,0x06,0x05}; int i,t;

//延时函数,当t取值12000时,若晶振fosc=12MHz,大约延时1s void delay(t) {for(i=0;i

main() {

unsigned char i,j,k,m;

SCON=0x00; //串行口工作方式 while(1)

{ for(i=0;i<6;i++)

{SBUF=(tab[send[i]]); // 发送第i个数据 while(TI==0); // 等待发送是否完成 TI=0; // TI清0 }

delay(12000) ; for(m=6;m<12;m++)

{SBUF=(tab[send[m]]); // 发送第i个数据 while(TI==0); // 等待发送是否完成 TI=0; // TI清0 }

delay(12000) ; } } 7.5 答:

参考程序如下: 甲机发送

发送子程序参考如下: #include #include #include