周国运版51单片机课后习题答案(4)

2019-03-16 20:35

unsigned char temp,i; while(1) {

temp=0x55; P1=temp; delay();

#pragma asm MOV A,temp RR A

MOV temp,A

#pragma endasm

P1=temp; delay(); } }

23.某单片机系统的P2口接一数模转换器DAC0832输出模拟量,现在要求从DAC0832输出连续的三角波,实现的方法是从P2口连续输出按照三角波变化的数值,从0开始逐渐增大,到某一最大值后逐渐减小,直到0,然后再从0逐渐增大,一直这样输出。试编写一函数,使从P2口输出的值产生三角波,并且使三角波的周期和最大值通过入口参数能够改变。 #include #define DAC0832 XBYTE[0x7FFF]

void san(unsigned char max1,unsigned char zhou1) {

unsigned char i,j,max,zhou; max=max1; zhou=zhou1;

while(1) {

for(i=0;i<=max,i++) {

DAC0832=i;

for(j=0;j

}

for(i=max-1;i>0,i--) {

DAC0832=i;

for(j=0;j

}

}

16

24.在数字滤波中有一种叫做“中值滤波”技术,就是对采集的数据按照从大到小或者从小到大进行排序,然后取其中在中间位置的数作为采样值。试编写一函数,对存放在片内数据存储器中从0x50开始的20个单元的采样数据用冒泡法排序进行中值滤波,把得到的采样数据存放到0x4f单元中。 void midf() {

unsigned char data temp,i,j,*ptr,*ptr1; ptr=0x50;

ptr1=0x4f;

for(j=20;j>1,j--)

{

for(i=0;i

if(*(ptr+i)>*(ptr+i+1)) {

temp=*(ptr+i+1); *(ptr+i+1)=*(ptr+i); *(ptr+i)=temp;

}

} }

*ptr1=*(ptr+20/2); }

25.在数字滤波中有一种叫做“去极值平均滤波”技术,就是对采集的数据按照从大到小或者从小到大进行排序,然后去掉相同数目的极大值和极小值,对中间部分数据求算术平均值作为采样值。试编写一函数,对存放在片外数据存储器中从0x150开始的16个单元的采样数据,用选择法进行“去极值平均滤波”,把得到的采样数据存放到0x14f单元中。 void teaf() {

unsigned char xdata *ptr;

unsigned char data temp,i,j,*ptr1; ptr=0x150;

ptr1=0x4f;

for(j=16;j>1,j--)

{

for(i=0;i

if(*(ptr+i)>*(ptr+i+1)) {

temp=*(ptr+i+1); *(ptr+i+1)=*(ptr+i); *(ptr+i)=temp;

17

} }

} 26.利用库函数_getkey编写一函数,实现从单片机串行口接收数据的C51程序,把接收的数据存放在片内数据存储器从0x40开始的区域,遇到回车符CR(ASCII码是0x0d)结束。 include void main() {

unsigned char data *dpt; unsigned char i=0,temp; dpt=0x40;

while(1) {

temp=_getchar(); if(temp==0x0d)

break;

*(dpt+i)=temp; i++; } }

27.利用库函数scanf编写一函数,实现从单片机串行口接收数据的C51程序,把接收的数据存放在片外数据存储器从0x240开始的区域,遇到回车符CR(ASCII码是0x0d)结束。 include void main() {

unsigned char xdata *xdpt; unsigned char i=0,temp; xdpt=0x240;

while(1) {

scanf(“%c”,&temp); if(temp==0x0d)

break;

*(xdpt+i)=temp; i++;

18

}

temp=0;

for(i=0;i<16-2;i++)

temp=temp+*(ptr+i+1); *ptr1=temp/(16-2);

}

} 28.利用库函数putchar编写一函数,实现从单片机串行口发送数据的C51程序,发送的数据存放在片内数据存储器从0x50开始的区域,遇到回车符CR(ASCII码是0x0d)结束。 include void main() {

unsigned char data *dpt; unsigned char i=0; dpt=0x50;

while(*(dpt+i)!=0x0d) {

putchar(*(dpt+i)); i++; } } 29.利用库函数printf编写一函数,实现从单片机串行口发送数据的C51程序,发送的数据存放在片外数据存储器从0x100开始的区域,遇到回车符CR(ASCII码是0x0d)结束。 include void main() {

unsigned char xdata *xdpt; unsigned char i=0; xdpt=0x100;

while(*(xdpt+i)!=0x0d) {

printf(“%c”,*(xdpt+i)); i++; } } 30.编写一定时器/计数器0定时100ms中断处理函数,使函数实现时钟的功能,即产生时钟的秒、分钟和小时。设定时初值的高、低字节分别为TIMER_H和TIMER_L。 设fosc=6mhz

#include sfr TIMER_H=0x8b; sfr TIMER_L=0x8a;

unsigned char data shi,fen,miao,bfm;

19

void main() {

TMOD=0x01;

TIMER_H=15536/16; TIMER_L=15536; ET0=1; EA=1; TR0=1; while(1); }

void time0_int() interrupt 1 {

TIMER_H=15536/16; TIMER_L=15536; bfm++;

if(bfm==10) {

bfm=0; miao++; }

if(miao==60) {

miao=0; fen++; }

if(fen==60) {

fen=0; shi++; }

if(shi==24) {

shi=0; } }

31.在Keill C的调试状态下,如何使用跟踪运行、单步运行、跳出函数运行命令?

答:Step命令和Step Over命令的区别:当遇到调用函数时,前者将跟踪进入函数,而后者是一步执行完函数。

如果用全速运行命令Go,可以使用Stop Running命令停止运行。

欲退出调试状态,可以再次点击Debug菜单下的Start/Stop Debug Session命令或相应的按钮。

20


周国运版51单片机课后习题答案(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:米易县精英保安公司白马选矿厂分队

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: