6. 在C51中,通过绝对地址来访问的存储器有几种?
答:通过绝对地址来访问存储器有三种方法:1. 使用C51运行库中预定义宏。2. 通过指针访问。3. 使用C51扩展关键字_at_
7. 在C51中,中断函数与一般函数有什么不同? 答:中断函数在定义时后面带interrupt m修饰符,m的取值为0~31,对应的中断情况如下:0——外部中断0,1——定时/计数器T0,2——外部中断1,3——定时/计数器T1,4——串行口中断,5——定时/计数器T2,其他值预留。
编写MCS-51中断函数需要注意如下几点。
(1) 中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。 (2) 中断函数没有返回值。
(3) 在任何情况下都不能直接调用中断函数
(4) 如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器必须与中断函数相同,否则会产生不正确的结果。
(5) C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容。
(6) C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。
(7) 中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其他程序调用。 ※8. 按给定的存储类型和数据类型,写出下列变量的说明形式。 (1) 在data区定义字符变量val1。 char data val1;
(2) 在idata区定义整型变量val2。 int idata val2;
(3) 在xdata区定义无符号字符型数组val3[4]。 unsigned char xdata val3[4];
(4) 在xdata区定义一个指向char类型的指针px。 char xdata *px;
(5) 定义可寻址位变量flag。 bit flag;
(6) 定义特殊功能寄存器变量P3。 sfr P3=0xb0;
(7) 定义特殊功能寄存器变量SCON。 sfr SCON=0x98;
(8) 定义16位的特殊功能寄存器T0。 sfr16 T0=0x8a;
9. 写出下列关系表达式或逻辑表达式的结果,设a=3,b=4,c=5。 (1) a+b>c&&b= =c 结果:假 (2) a||b+c&&b-c 结果:真 (3) !(a>b)&&!c||1 结果:真 (4) !(a+b)+c-1&&b+c/2 结果:假 10. 写出下列C51程序的执行结果。 (1)#include <stdio.h> extern serial_initial(); main() {
int x,y,z;
serial_initial(); x=y=8;z=++x;
printf("\n %d %d %d",y,z,x); x=y=8;z=x++;
printf("\n %d %d %d",y,z,x); x=y=8;z=--x;
printf("\n %d %d %d",y,z,x);