单片机部分答案第四版北航马忠梅_第1页
单片机部分答案第四版北航马忠梅_第2页
单片机部分答案第四版北航马忠梅_第3页
单片机部分答案第四版北航马忠梅_第4页
单片机部分答案第四版北航马忠梅_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、已知( A)=7AH,(R0)=30H,(30H)=A5H,PSW=80。H 问执行(单独执行)以下各指令的结果XCH A,R0; A=30H, R0=7AHXCH A,30H; A=A5HXCH A,R0; A=A5HXCHD A,R0; A=75H ;二者低 4 位互换SWAP A; A =A7H ; A 高低 4 位互换ADD A, R0; A = AAH, Cy=0, OV=1(a6 a7 =1)ADD A,30H;A= 1FH, Cy=1, OV=0ADD A, A,#30H; A= AAH, Cy=0, OV=1;ADDC A,30H; A= 20H, Cy=1, OV=0;因为

2、PSW的 Cy=1SUBB A,30H; A= D4H, Cy=1, OV=1;因为 PSW的 Cy=1SUBB A,#30H; A= 49H, Cy=0, OV=0;因为 PSW的 Cy=1已知( A) =83H,(R0)=17H,(17H)=34H。执行以下指令后 A=ANL A,#17H; 逻辑与 (A)=03HORL 17H,A;逻辑或 ( 17H) =37HXRL A,R0; 异或 (A)=34HCPL A取反 (A)= CBH将内部 RAM20H、21H、 22H,连续三个单元的内容以此放入MOV R0, #20HMOV R1, #2FHLOOP :MOV A, R0MOV R1,

3、 AINC R02FH 、 2DH、 2EH单元DEC R1CJNE R0, #23H, LOOP3000H3100H区SJMP $外部数据 RAM在 2000H2100H区域有一个数据块,将他们移动到域,#21H,NEXT解一:MOV DPTR, #2000HMOVP2, #30HMOVR1, #00HLOOP :MOVX A, DPTRMOV X R1, AINCDPTRINCR1CJNER1, #00H, LOOPINCP2MOV X A, DPTRMOVXR1, AMOV DPTR, #2000HMOVP2 , #30HMOVR1, #00HLOOP :MOV X A, DPTRMOV

4、 X R1, AINCDPTRINCR1CJNER1, #00H, LOOPINCP2MOVA, DPH解二:CJNE ANEXT1:MOVXA, DPTRMOVXR1, ASJMP$NEXT:INC DPTRSJMPNEXT1解三:MOVDPTR, #2000HMOVR5, #00HMOVA, #00HMOVR1,ALOOP :MOVA , R1MOV XA, A+DPTRMOV XR0, AMOVDPTR, #3000HMOVA, R0MOVXA+DPTR, AINCR1DJNZR5, LOOPMOVDPTR, #2100HMOVXA, DPTRMOVDPTR, #3100HMOVXDPT

5、R,A外部数据 RAM从 2000H 开始有100 个数据块,将他们移动到解一:MOV DPTR, #2000HMOV R4MOV P2, #10HLOOP1: MOVX2030 开始的单元,#64HA, R1MOV R1, #00HMOVX DPTR, AMOVR4 ,#64HINC R1LOOP :MOVX A, DPTRINCDPTRMOV XR1, ADJNZR4, 64H, LOOP1INCDPTRINCR1DJNZR4, 64H, LOOPMOVDPTR, #2030HMOVP2 ,#10HMOVR1, #00H解二:MOVDPTR, #2000HMOVR3,#64HMOVP2 ,

6、#10HDJNZR3, LOOPNEXT:MOVR1, #00HSJMP $MOVR4 ,#64HLOOP :MOVX A, DPTRMOVXR1, AINCDPTRINCR1NEXT1:DJNZR4, LOOPLOOP1:MOVDPTR, #1000HMOVP2 ,#20HMOVR1, #30H习题参考答案习题 3. 8051 主要的存储空间是什么为什么两个RAM的空间不同答: 8051 单片机的存储空间分为数据 RAM和代码 ROM,其中数据 RAM又分为片内 RAM和片 外 RAM。片内 RAM的地址为 8 位,由单片机指令直接在单片机内部寻址访问,而片外RAM的地址为 16 位,只能由

7、单片机的 MOVX指令通过外部总线访问。习题 4. 编一段程序, 把 8 位口新的输入值和前一次的输入值进行比较, 然后产生一个 8 位 数。这个数中的位为“ 1”的条件是:仅当新输入的位为“ 0”,而前一次输入的位为“ 1”。 答:设该 8 位口为 P1,新产生的 8 位数为 x:unsigned char x;x=P1;x&=P1;习题 6. 按给定的存储类型和数据类型,写出下列变量的说明形式:up,down 整数,使用堆栈存储;first,last 浮点数,使用外部数据存储器存储;cc,ch 字符,使用内部数据存储器存储。答:堆栈只能存储内部 RAM字节内容,必须在 idata 区:(

8、复位后 SP=07H,但是 07H中存放 堆栈地址,上电复位后典型寄存器的值)int idata up,down;float xdata first,last;char idata cc,ch;或 char data cc,ch;习题 7.判断下列关系表达式或逻辑表达式的运算结果 (1 或 0)1、10=9+1;12、0&0;03、10&8;14、8|0;15、!(3+2);06、设 x=10,y=9;x=8&y2;-b ,结果右移 2 位。注: -b 不是取反也不能确定为负数;取反一般是变成 2 进制然后按位取反。如 b=-3, 即 0FDH,则 -b=3 ,而不是 0FD按位取反4、 c=

9、+a%b-;a=a+1 ,a%b, b=b-1 , %结果赋给 c5、 !m&n;!m ,若结果为 1再和 n相与。 X(不是&)!m,再和 n 相与6、 ab|c&d;ab ,若结果为 0 再 c&d,结果相或习题参考答案 习题 6. 用选择分支编写程序,把输入的一个数字按下列对应关系显示。当输入 Z 时,程序 结束。#include #include main( )unsigned char k;doscanf( “ %c” ,&k);switch(k)case 1 : printf( “ A” ); break;case2: printf(“B”); break;case3: print

10、f(“C”); break;case4: printf(“D”); break;default: printf(); bre ak;while( k ! = Z );while( 1 );习题 7. 若在 C 中的 switch 操作漏掉 break ,会发生什么switch答:若在 case 语句中漏掉 break ,则程序执行 case 选择部分程序后不会按照要求退出 语句,而是继续执行下一个 case 语句选择的内容。unsigned char x;unsigned int y;for(x=0;x11; x+)y=(unsigned int)x*x*x;printf( “ %c,%d n

11、” ,x,y);while(1);习题 9. 用三种循环方式分别编写程序,显示1 100 的平方。答:三种流程图如下:#define uint unsigned int main()unsigned int y;unsigned char x;for( x = 0 ; x 101 ; x+)y=(unsigned int)x*x;printf( “%c,%d n” ,x,y);while(1);main( )unsigned int y;unsigned char x=1;while(x101)y=(unsigned int)x*x;printf( “%c,%d n” ,x,y);x+;whi

12、le(1);main()unsigned int y;unsigned char x=1;doy = (unsigned int)x*x ;printf( “%c, %d n” , x, y ) ; x+; while(x101);while(1);习题 9. 写出下列数组使用 * 运算的替换形式。2 ; i+1 ; 53 。1、*(data+2)p1072、*(num+i+1)3、*(*(man+5)+3)习题 10. 设下列运算表达式中 p 是指针,试分析各表达式的运算顺序。=*p- ; =*p+ ;+i=*p+ ; =*-*+p-6 。答: 1、先取 *p 给 b,再使 p 减 1 单元

13、 ( 注意不是 *p 减 1 单元 ) ;2、先取 *p 给 x,再使 p加 1单元(注意不是 *p 加 1单元);3、先使 i 加 1,再取 *p 给 ai ,再使 p 加 1 单元;4、这里 p是指针的指针,先使 p加 1单元,再使 *p 减 1单元,再使 *(*p) 减 6后赋给 y; 习题 12. 结构的定义和说明在程序中的作用是什么在对结构初始化时应该注意些什么问 题。答: 结构的定义和说明在程序中可以把一组关系密切的变量存放在一个连续的存储空间中, 便于对这些变量的访问。同一个结构中不能存在同名变量名称。可以把具有相同结构的已知结构直接用“ =”对结构进行赋值,或者通过其成员的逐个

14、 引用分别赋值。 在没有赋值前结构成员的值是不确定的, 有可能被编译器启动代码初始化为 0。习题 14. 使用 union 的目的是什么定义 union ,它用于容纳下列数据:int data4;char ch8 ;float f 。答:使用 union 的目的之一是若干个不会同时使用的变量公用存储单元, 以便节省存储空间。 同 一个 union 中不能存在同名变量名称。union data_typeint data4;char ch8;float f;mydata ;习题参考答案习题 1. C 语言中,函数的存储类型和数据类型的意义是什么答:一,函数存储类型有 extern (外部函数)和

15、static (内部函数或静态函数) 。在没有任 何存储类说明的情况下函数都是全程序可见的, 即函数的默认存储类特性为 extern 。Static 存储类使函数对对其所在的文件定义之前的部分和非定义文件是不可见的,不能调用的。 二,数据类型是说明函数的返回值类型。 包括简单类型 ( char,unsigned char,int,unsigned int,long,unsigned long,float,bit),复合型( stuct , union )和无类型( void )习题 3. 作为函数形式参数使用的数组名具有什么特征它们的使用特点是什么1、当用数组作为函数的参数时,应当在调用函数和

16、被调用函数中分别定义数组;2、实参数数组与形式参数数组的类型应当一致;3、实参数数组与形式参数数组的大小可以一致,也可以不同,用户需自行考虑数组的边界 问题。习题 5. 当一个函数需要返回多于一个值时,可以怎么做 可以通过返回指针实现, 先把需要返回的所有数据连续存放在一段存储空间中, 让该指 针指向其首地址,然后返回该指针。? 7. 编写字符串字符替换函数 replchr(s,c1,c2), 把字符串 s 中的 c1 置换为 c2? void replchr(char* s,char c1,char c2)? char i=0,temp;? while(si !=0)? ? if(si=c1

17、) ?temp=c1;?c1=c2;c2=temp;else? s+; 写把十六进制字符串 s 变换成整数值返回的函数 htoi(s ) #include “”#include “”int translat(char c)写函数 itob(n) 。它把整数 n变换成二进制字符串,并返回字符串地址。unsigned char p17;unsigned char* itob(int n) unsigned char i=0;unsigned int m;if(n0) pi+= -;m=-n;else m=n;do? pi+=(m&0x8000) 1 : 0 ;写 把字符串 s 逆转的函数 reve

18、rse(s).void reverse (unsigned char* s)unsigned char i, s , n;for(i=0;i2) reverse(p+1, i-2);习题 12. 设计并初始化一个具有 2 个元素的 2 维数组保存图画 ( 如正方形 ) 的 X-Y 坐标值。 然 后设计一个画图函数。标明怎样调用函数画正方形。用图 11-3 的接口电路,编写由 ADC0809的通道 6 连续/* 设置 ADC0809的通道 6 地址 */* 即 EOC状态 */*A/D 采集函数 */#include unsigned char G12=1,2;采集 20 个数据放在数组中的程序

19、解一:#include #include#define IN6 XBYTE0x7ffe sbit ad_busy=P33;char ad0809(void) uchar i;IN6=0;/*启动转换 */i=i; i=i;/* 延时等待 EOC变低 */while(ad_busy=0); /* 查询等待转换结束 */ return(IN6 ) ;void main(void) static uchar idata ad20;uchar j;for(j=0;j20;i+) adj=ad0809(); /*20次采样 ADC0809通道 6 的值 */ 解二:#include#include#de

20、fine uchar unsigned char#define IN6 XBYTE0xfffe/*设置 ADC0809的通道 6 地址 */sbit ad_busy=P33;/*即 EOC状态 */void ad0809(uchar idata * x)/* 采样结果放指针中的 A/D 采集函数 */ uchar i;uchar xdata * ad_adr;ad_adr=&IN6;for(i=0;i20;i+)/*20 次采集 */ *ad_adr=0;/*启动转换 */i=i;/*延时等待 EOC变低 */i=i;while(ad_busy=0);/* 查询等待转换结束 */xi=*ad_adr;/* 存转换结果 */void main(void)/* 采样 ADC0809通道的值 */static uchar idata ad20;ad0809(ad);4. 对 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论