- 6
- 0
- 约2.58千字
- 约 4页
- 2018-05-05 发布于河南
- 举报
嵌入式系统部分习题解答
习题解答
习题 1(123页)
1。片外RAM从1000H~10FFH有一数据块,编写程序将其传送到片外RAM的2500H单元开始的区域中。
char xdata *rp,xdata *wp; //指向xdata中字符型的指针
int i;
rp=(char xdata*)0x1000; //读指针,指向源
wp=(char xdata*)0x2500; //写指针,指向目标
for(i=0;i0x100;i++)
{
*wp = *rp;
rp++;
wp++;
}
说明:C语言中通常不建议绝对地址访问。此为借用汇编语言习题。
习题 2
2。将无符号整型变量i求补码后送回原处。
unsigned int i; //xdata中的字符型数组
i = -i; //求补码
习题 3
3。编写函数,将十六进制数0~F转换为ASCII码。
/*-----------十六进制数0~F转换为ASCII码的函数---------*/
uchar hextoasc(uchar h)
{
uchar asc;
if(h10) asc=h+’0’;
else asc=h-10+’A’;
return asc;
}
/*-----------函数调用例---------*/
x = hextoasc(0x05); //结果x=‘5’
x = hextoasc(0x0a); //结果x=‘A’
习题 4
1, x0
4。编写函数,计算y= 0, x=0
-1, x0
uchar jisuan(uchar x)
{
uchar y;
if(x0) y=1;
else if(x==0) y=0;
else y=-1;
return y;
}
习题 5
5。x=0~5,根据x的值,分别执行fun0、func1...func5。
switch(x)
{
case 0: func0(); break;
case 1: func1(); break;
case 2: func2(); break;
case 3: func3(); break;
case 4: func4(); break;
case 5: func5(); break;
}
习题 6
6。根据x中的8位二进制,用ASCII码填充到buf数组。
例如:x,buf=’0’,’1’,’0’,’1’,’0’,’0’,’1’,’1’
uchar i,x,buf[8];
x = 0x53; //送个试验的值
for(i=0;i8;i++)
{
if(x 0x80) buf[i]=‘1’; //最高位=1
else buf[i]=0;
x = 1; //左移1位
}
习题 7
7。将x中的十六进制数0~F转换为7段码送P1口。
uchar code tab_7dm[16]= /*7段码表*/
{
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, /*0,1,2,3,4,5,6,7*/
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71 /*8,9,A,B,C,D,E,F*/
};
P1 = tab_7dm[x];
习题 8
8。有一个5行*8列的二维数组,将第i行、第j列元素送y。
uchar sz[5][8];
y = sz[i][j];
习题 9
9。实现图示功能。
P1.1
P2.2
IE0
IE1 P1.3
b25
b26
#include reg51.h //在reg51.h中有P13、IE0等定义
bit b25,b26;
P13 = ((P22 |IE0) P11) (IE1 | !b25) !b26;
习题 10
10。有2个不同大小的数组buf1、buf2,首单元是数组长度。编程找出数组中最大值,相乘后送y。
uchar getmax(uchar data *p) //找到最大值的函数
{
uchar i,max=0;
for(i=1;i=p[0];i++) //从第2单元开始,到最后
{
if(p[i]max) max=p[i];
}
return max;
}
void main(void)
{uchar buf1[]={4,1,200,2,4}; //试验数据
uchar buf2[]={5,1,3,7,4,100};
uint x1,x2,y;
x1 = getmax(buf1); //调用找最大值的函数
x2 = getmax(buf2); //调用找最大值的函数
y = x1 * x2
原创力文档

文档评论(0)