周国运版51单片机课后习题答案资料 联系客服

发布时间 : 星期四 文章周国运版51单片机课后习题答案资料更新完毕开始阅读e7d24dbc9f3143323968011ca300a6c30c22f1bc

21.编写一C51函数,使用专用指针,把片外数据存储器中从0x100开始的30个字节数据,传送到片内从0x40开始的区域中。 void main() {

unsigned char data i,*dpt; unsigned char xdata *xdpt; dpt=0x40; xdpt=0x100;

for(i=0;i<30;i++)

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

22.编写一C51程序,实现从P1口输出产生的流水灯,要求用汇编语言函数实现数据左移或右移。 #pragma src

#include void main() {

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) {

13

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

}

}

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.在数字滤波中有一种叫做“去极值平均滤波”技术,就是对采集的数据按照

14

从大到小或者从小到大进行排序,然后去掉相同数目的极大值和极小值,对中间部分数据求算术平均值作为采样值。试编写一函数,对存放在片外数据存储器中从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;

}

} }

temp=0;

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

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

*ptr1=temp/(16-2); } 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++;

15

}

}

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++; } } 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() {

16