(完整版)单片机原理及应用——基于Proteus和Keil_C林立_张俊亮版课后习题答案一至七章 联系客服

发布时间 : 星期五 文章(完整版)单片机原理及应用——基于Proteus和Keil_C林立_张俊亮版课后习题答案一至七章更新完毕开始阅读8f4f1a43b968a98271fe910ef12d2af90242a8ac

SM2:多机通信控制位

REN:串行口接收使能控制端;REN=1时,允许接收,REN=0时,禁止接收 TB8:发送接收数据位8 RB8:接收数据位8

TI:发送中断标志位;TI=1表示帧发送结束,TI可由软件置0 RI:接收中断标志位;RI=1表示帧接收完成,RI可由软件置0

7.4. 在方式1和方式3的通信模式下,波特率通过那个定时器驱动产生?采用何种定时方式?如果要求采用晶振为11.0592MHz,产生的传送波特率为2400b/s,应该怎样对定时器初始化操作?

答:由定时器1驱动产生,采用定时器1的工作方式2,自动从装初值 当晶振为11.0592MHz,波特率为2400b/s,由波特率公式: 波特率=

(2SMOD/32)?fOSC/(12?(256?a))

a?256?11.0592?106/(384?2400)

可求得初值a为F4H 初始化操作: TMOD=0x20; TL1=0xF4; TH1=0xF4; PCON=0x00; SCON=0x00; TR1=1;

8.3 在由单片机80C51和一片ADC0809组成的数据采集系统中,假设ADC0809的地址为0x7ff8~0x7fff,画出接口电路图,并编写每隔1ms轮流采集一次8个通道数据的程序。采样100次取平均值。 答:电路图书上实例有,做了如下改动

1.控制端ADDA,ADDB,ADDC分别接P2^0,P2^!,P2^2.

2.删去了译码器与逻辑器件器件,74LS373,74HC14,74HC02, 3.中断检测端EOC接P3^2。

参考程序如下,自己写的没经过仿真, #include #include

#define uchar unsigned char//宏定义 #define uint unsigned int

#define AD_0 XBYTE[0xff8]//定义通道访问地址 #define AD_1 XBYTE[0xff9] #define AD_2 XBYTE[0xffa] #define AD_3 XBYTE[0xffb] #define AD_4 XBYTE[0xffc] #define AD_5 XBYTE[0xffd]

29

#define AD_6 XBYTE[0xffe] #define AD_7 XBYTE[0xfff]

sbit busy=P3^2;//定义中断请求端 uchar count=0;//定义采样次数

uchar datcode[100]={0};//定义数据存放数组 int dat=0,dat1=0;//定义临时数据与最终平均数据 uchar i,j,num;//定义变量 void main() {

TMOD=0x01;//定时器0 工作方式1

TL0=(65536-1000)/256;//1ms中断一次 TH0=(65536-1000)%6;

EA=1;//开总中断,定时器中断,打开定时器0 ET0=1; TR0=1;

while(count<100)//100次数据求和函数 {

dat1=dat1+datcode[i]; count++; }

dat=dat1/100; if(count>=100) count=0; }

void timer0() interrupt 1//中断函数 {

TMOD=0x01;

TL0=(65536-1000)/256; TH0=(65536-1000)%6;

AD_0=0;//启动0通道AD转换 while(busy==1) {

num=AD_0+1;//把0通道数据附给num,并指向AD_1通道查询 datcode[i+1]=num; j++;

if(j==7)//八次查询完毕退出循环 {

busy=0; j=0; } } }

30