单片机第4章习题参考答案.doc_第1页
单片机第4章习题参考答案.doc_第2页
单片机第4章习题参考答案.doc_第3页
单片机第4章习题参考答案.doc_第4页
单片机第4章习题参考答案.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

第4章部分习题答案- 7 -作业:7、8、9、10、11、15、17、19、204.7 设内部RAM 20H单元有两个非零的BCD数,编写求两个BCD数的积并把积送入21H单元的程序。ORG 1000HMOV A, 20HMOV B, A ; 保存SWAP AANL A, #0FH ; 取高4位ANL B, #0FH ; 取低4位MUL ABMOV B, #0AHDIV AB ; 转换成BCD码的形式SWAP AORL A, BMOV 21H, ASJMP $END4.8 已知从内部RAM BLOCK单元开始存放有一组带符号数,数的个数存放在LEN单元。编写可以统计正数和负数个数并分别存入NUM和NUM+1单元的程序。org 1000hnum data 30hlen data 20hblock data 40hmov r0, #blockmov num, #00h ; 保存正数个数mov b, #00h ; 保存负数个数loop: mov a, r0inc r0jb acc.7, neginc numsjmp nextneg: inc bnext: djnz len, loopmov num+1, bsjmp $end4.9 设X为一无符号数,存放在内部RAM的VAX单元, Y存放在FUNC单元。编写满足如下关系的程序:org 2000hvax data 20hfunc data 30hmov a, vaxcjne a, #32h, comp1comp1: jc next1mov func, asjmp donenext1: cjne a, #14h, comp2comp2: jc next2mov b, #05hmul abmov func, asjmp donenext2: clr crlc amov func, adone: sjmp $end4.10 在例4.6的128分支程序中,若用LJMP指令代替AJMP指令,以便分支程序可以放在64KB地址范围的任何位置。修改原程序,修改后的程序最多可以实现多少分支。LJMP是三字节指令,最大分支数N应满足条件:N3 256(即不超过A的存储范围),所以N = 85。修改后的程序:ORG 2100HMOV A, R3RL AADD A, R3MOV DPTR, #BRTABJMP A + DPTRBRTAB: LJMP ROUT00 LJMP ROUT01 LJMP ROUT02 LJMP ROUT85ROUT00: ROUT85: END4.11 从外部RAM的SOURCE(二进制8位)开始有一数据块,该数据块以 $ 字符结尾,编写程序,把它们传送到以内部RAM的DIST为起始地址的区域($ 字符也要传送) org 2000hsource data 10hdist data 20h mov p2, #00h mov r0, #source mov r1, #distnext: movx a, r0 inc r0 mov r1, a inc r1 cjne a, #24h, nextdone: sjmp $ end4.12 将习题4.11中的Source改为16位的,则将程序中的 r0 改成 dptr 即可。4.13 在外部RAM的低256地址单元区,有起始地址为SOUCE且长度在LEN单元的数据块。编写能对它们进行奇偶校验的程序。凡满足奇校验(奇数个1)的数据均送到内部RAM起始地址为DIST的存储区。 org 2000hlen data 10hsource data 20hdist data 50h mov r0, #source mov r1, #dist mov r2, #len mov p2, #00hloop: movx a, r0 inc r0 jnb psw.0, next mov r1, a inc r1next: djnz r2, loop sjmp $ end4.14 将习题4.13中的Source改为16位的,则将原来程序中的 r0 改成 dptr 即可。4.15 外部RAM从2000H到2100H有一数据块,编写程序将它们传送到从3000H到3100H区域。 ORG 0HMOV DPTR, #2000HNEXT: MOVX A, DPTR ORL DPH, #10H ; 将DPH从20H变成30H MOVX DPTR, A ANL DPH, #0EFH ; 将DPH从30H变成20H INC DPTR MOV A, DPH CJNE A, #21H, NEXT MOVX A, DPTR MOV DPH, #31H MOVX DPTR, A ;传送2100H单元中的内容到3100H SJMP $ END4.16 片内RAM中有一数据块起始地址为FIRST+1,长度存放在FIRST中且不为0,统计数据块中正偶数和负奇数的个数,分别存放在PAPE单元和NAOE单元。 ORG 0HPAPE DATA 20HNAOE DATA 21HFIRST DATA 30H MOV PAPE, #00H MOV NAOE, #00H MOV R0, #FIRST INC R0 ; 数据块的起始地址LOOP: MOV A, R0 INC R0 JB ACC.7, NEXT ; 负数 JB ACC.0, PP ; 如果是正奇数,则取下一个数 INC PAPE SJMP PPNEXT: JNB ACC.0, PP ; 如果是负偶数,则取下一个数 INC NAOEPP: DJNZ FIRST, LOOP SJMP $ END 4.17 从内部RAM的BLOCK为起始地址的100个无符号数中找出最小值并把它送入MIN单元。 ORG 0HBLOCK DATA 20HMIN DATA 10H MOV R0, #BLOCK MOV R2, #64H MOV MIN, #0FFHLOOP: MOV A, R0 CJNE A, MIN, NEXTNEXT: JNC NEXT1 MOV MIN, ANEXT1: INC R0 DJNZ R2, LOOP SJMP $ END4.18 内部RAM区,6组无符号4字节被加数和加数分别存放在以FIRST和SECOND为起始地址的区域(低字节在前,高字节在后), 编程求和(设和也为4字节)并把和存于以SUM开始的区域。 ORG 0HFIRST DATA 20HSECOND DATA 40HSUM DATA 60H MOV R0, #FIRST MOV R1, #SECOND MOV R2, #06HLOOP: MOV R3, #04H CLR CLOOP1: MOV A, R0 ADDC A, R1 MOV R0, A ; 将和存放在以FIRST开始的区域 INC R0 INC R1 DJNZ R3, LOOP1 DJNZ R2, LOOP MOV R0, #FIRST MOV R1, #SUM MOV R2, #24LOOP2: MOV A, R0 MOV R1, A INC R0 INC R1 DJNZ R2, LOOP2 SJMP $ END4.19 内部RAM中,数据块以BLOCK为起始地址,块长放在LEN单元。用查表指令编写程序,先检查它们是否是十六进制中的A-F,若是,则把它们变成ASCII码,若不是,则把它们变为00H。 ORG 0HLEN DATA 10HBLOCK DATA 20H MOV R0, # BLOCK MOV DPTR, # ASCTABLOOP: MOV A, R0 CJNE A, #0AH, NE1NE1: JNC NE2 ; 若大于等于A,则去与F比较 SJMP CHZERO ; 若小于A,则变成0NE2: CJNE A, #0FH, NE3 ;与F比较 SJMP CHASC ; 若等于F,则转成 ASCII 码NE3: JC CHASC ; 若小于F,则转成 ASCII 码CHZERO: CLR A ; 若大于F,则变成0 SJMP NEXTCHASC: ADD A, #07H ; 查表求ASCII码 CLR C SUBB A, # 0AH MOVC A, A+PCNEXT: MOV R0, A INC R0 DJNZ LEN, LOOP SJMP $ASCTAB: DB A, B, C, D, E, F END4.20 在片内RAM的20H单元中有一个数,其值范围为0-100,要求利用查表法求此值的平方值并把结果存入片外RAM的20H(低字节)和21H。 ORG 00H MOV P2, #00H MOV R0, #21H MOV A, 20H CLR C RLC A MOV B, A MOV DPTR, #DTATAB MOVC A, A+DPTR MOVX R0, A DEC R0 MOV A, B INC A MOVC A, A+DPTR MOVX R0, A SJMP $DTATAB: DW 0, 1, 4, 9, 16, 25, 36, 49 DW 64, 81, 100, 11*11, 12*12 DW 13*13, 14*14, 15*15, 16*16 . DW 100*100 END 4.21 内部RAM中,从BLOCK开始的存储区有10个单字节十进制数(每字节有两个BCD数),编程求BCD数之和(和为3位BCD数),并把它们存于SUM和SUM+1单元(低字节在SUM单元)。 ORG 00HBLOCK DATA 20HSUM DATA 10H MOV R0, #BLOCK MOV R2, #0AH MOV A, #00H MOV R1, #SUM INC R1 ; SUM+1单元中存放累加和的高位 MOV R1, #00HLOOP: ADD A, R0 DA A INC R0 JNC NEXT INC R1 ; 将进位送到累加和的高位NEXT: DJNZ R2, LOOP MOV SUM, A SJMP $ END 4.22 将例4.21中,改为10个双字节十进制求和(和为4位BCD数),结果仍送到SUM开始的连续单元(低字节先存) ORG 00HBLOCK DATA 20HSUM DATA 10H MOV R0, #BLOCK MOV R2, #0AH MOV SUM, #00H MOV SUM+1, #00H MOV B, #00H ; 存放累加和的最高位 LOOP: MOV A, SUM ADD A, R0 DA A MOV SUM, A INC R0 MOV A, SUM+1 ADDC A, R0 DA A MOV SUM+1, A INC R0 JNC NEXT INC B ;将进位送到累加和的高位NEXT: DJNZ R2, LOOP MOV SUM+2, B SJMP $ END 4.23 已知MDA 和 MDB 内分别存有两个小于10的整数,用查表子程序实现c = a*a +2ab + b*b,并把和存于MDC和MDC+1单元(MDC中放低字节) ORG 00HMDA DATA 10HMDB DATA 20HMDC DATA 30H MOV MDC+1, #00H MOV A, MDA ACALL SQR MOV MDC, A MOV A, MDA MOV B, MDB MUL AB RL A ; 因为2ab 255,送到A ADD A, MDC MOV MDC, A JNC NEXT INC MDC+1 NEXT: MOV A, MDB ACALL SQR ADD A, MDC MOV MDC, A JNC NEXT1 INC MDC+1 NEXT1: SJMP $SQR: ADD A, #01H MOVC A, A+PC RETSQRTAB: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END 4.24 已知外部RAM起始地址为STR的数据块中有一以回车符CR断尾的十六进制ASCII。编写程序将它们变为二进制代码,放在起始地址为BDATA的内部RAM存储区中。 ORG 0HSTR DATA 10HBDATA DATA 50H MOV P2, #00H MOV R0, #STR MOV R1, #BDATALOOP: MOVX A, R0 INC R0 CJNE A, #0DH, NEXT SJMP DONENEXT: CJNE A, #40H, NEXT1NEXT1: JNC NEXT2 ; A - F ANL A, #0FH SJMP DONENEXT2: CLR C SUBB A, #37HDONE: MOV R1, A INC R1 SJMP LOOP SJMP $ END程序流程图如下:R0 STRR1 BDADA开 始A (R0)R0 R0+1A (R1)A 40 ?A是09的值A A0FHA是AF的值A A-37H结 束A = CR ?YNYR1 R1+1N4.25 设晶振频率为6MHz,试编写能延时20ms的子程序。因为晶振频率为6MHz,则一个机器周期为:s延时20ms,则需要10000个机器周期。即:按下面的程序有如下的关系式:1 + R2 * ( 1+R3*(1+2)+2 ) = 10000通过计算,设R2 =101, R3 = 32。 ORG 0H MOV R2, #101; 1LOOP: MOV R3, #32; 1LOOP1: NOP; 1DJNZ R3, LOOP1; 2DJNZ R2, LOOP; 2SJMP $ END 4.26 已知内部RAM的MA(被减数)和MB(减数)中分别有两个带符号数。编写减法子程序,并把差存入RESULT和RESULT+1单元中。 ORG 0HMA DATA 20HMB DATA 30HRESULT DATA 40H CLR C MOV R0, #MA

温馨提示

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

评论

0/150

提交评论