单片微型计算机与接**术思考与习题4
4.1 改正下面程序的错误。
#include<> 1
main2a=c3
int a=7,c4
delay(105
void delay6
char i8
for(i=0;i<=255;i++)9
解:(1)变量a,c必须先定义再引用。
2)第五句delay(10)后面必须加分号。
3)main()函数没有“}”
4)被调函数delay()在main()后面,必须在前面先声明。
5)第6句函数说明语句后的分号应去掉。
4.3定义变量a、b、c,a为内部ram的可位寻址区的字符变量;b为外部数据存储区浮点型变量;c为指向int型xdata区的指针。
解:bdata char a;
xdata float b;
xdata int *c;
4.5 将如下汇编程序译成c程序(等效即可)。
org 0000h
mov p1,#04h
mov r6,#0ah
mov r0,#30h
clr p1.0
setb p1.3
acall tlc
sjmp $
tlc: mov a,#
clr p1.3
mov r5,#
loop:mov c,p1.2
setb p1.0
clr p1.0
djnz r5,loop
mov @r0,a
inc r0
djnz r6,tlc
retend
解:#include<>
#define uchar unsigned char
sbit p1_0=p1^0;
sbit p1_1=p1^1;
sbit p1_2=p1^2;
sbit p1_3=p1^3;
sbit msb=acc^7;
sbit lsb=acc^0;
uchar tlc(void);
main()
uchar *p,i;
p1=0x04;
p=0x30;
p1_0=0;
p1_3=1;
for(i=0;i<10;i++)
*p=tlc();
p++;uchar tlc(void)
uchar i,y;
acc=0;
p1_3=0;
for(i=0;i<8;i++)
p1_1=msb;
y=acc<<1;
lsb=p1_2;
p1_0=1;
p1_0=0;
return y;
4.7完成逻辑表达式p1.2=p1.4(“”表示逻辑与,“+表示逻辑或)。
解:#include<>
sbit p12=p1^2;
main()
p12==(p1^4&&acc^0)||acc^7;
4.9内部ram的20h、21h和22h、23h单元分别存放着两个无符号的16位数,将其中的大数置于24h和25h单元。
#include<>
#define uint unsigned int
main()
uint data *m,*n,*p;
for(;;
m=0x20;
n=0x22;
p=0x24;
if(*m<*n)
p=*n;else *p=*m;
4.11将内部ram30h单元存放的2字节二进制数转换为十进制数存于21h为首的单元中,长度存放于20h单元中。
#include<>
main()
unsigned int a,k,*p3;
char i,*p1,*p2;
p1=0x20;
p2=0x25;
p3=0x30;
a=*p3;
k=10000;
while(a/k==0)
k=k/10;
for(i=0;a!=0;i++)
*p2=a/k;
a=a%k;
p2++;k=k/10;
p1=i;
第4章作业
1 已知以下投资方式 当前投入7000元,第二年底投入1000元。回报方式为 第一年底收回4000元,第三年底收回5500元。判断如果投资者的可接受利率为0.12,该项目是否可行?2 现有两种可选的投资项目 a 期限5年,每年的收益率为0.09 b 期限10年,每年的收益率为0.08。为了使两种资产...
第4章作业
写出以下指令汇编后str1的偏移地址。datadsegment bu1db10hdup str1 db hello datad endscodesegment assume cs code,ds datad,es datadstart 2 试指出下列程序中有哪些语法错误,并说明是什么错误。datas...
第4章作业
写出以下指令汇编后str1的偏移地址。datad segment bu1 db 10h dup str1 db hello datad ends code segment assume cs code,ds datad,es datad start 2 试指出下列程序中有哪些语法错误,并说明是什么错...