一.编程题每小题8分,共16分
1设在内RAM40H开始的存储区有若干个字符和数字,已知最后一个为字符““(并且只有一个,试统计这些字符数字的个数,结果存入30H单元中。参考程序:
ORG0000HSTARTMOVR140HCLRALOOPCJNER124HNEXTSJMPNEXT1NEXTINCAINCR1SJMPLOOPNEXT1INCAMOV30HA
;R1作为地址指针;A作为计数器;与“”号比较,不等转移
;找到““结束循环;计数器加1;指针加1;循环;再加入””这个字符
;存结果
END2试编一程序,分别统计在内部RAM的30H50H单元的数据区中奇数和偶
数的个数,并将奇数和偶数的个数分别存放在51H和52H单元中。参考程序:
ORG0000HMOV51H,0HMOV52,0HMOVR1,30HMOVR0,20HMOVA,R1
INCR1
ANLA01H
JZLOOP1
INC51H
SJMPLOOP2
LOOP1INC52H
LOOP2DJNZR0LOOP3
RET3.用8XX51的P1口接8个LED发光二极管,由INT0接一消抖按键开关,开始P10的LED亮,以后由INT0按键每中断一次,下一个LED亮,顺序下移,且每次只一个LED亮,周而复始。请编制程序。参考程序:
ORG0000H
1
fAJMPMAINORG0003HRLA中断服务MOVP1ARETIMAINMOVA0FFHMOVP1A;第一灯亮SETBEASETBEX0;允许INT0外部中断SETBIT0;中断触发方式为下降沿触发
SJMP;等待中断4设有100个有符号数,连续存放在以2000H为首地址的存储区中,试编程统计其中正数、负数、零的个数并分别存放在30H、31H、32H单元中。
MOV30H0MOV31H0MOV32H0MOVDPTR2000HMOVR1100L4MOVXADPTRINCDPTRCJNEA0L1INC32HSJMPL2L2JCL3INC30HSJMPL2L3INC31HL2DJNZR1L4SJMP5编程将内部数据存储器20H24H单元压缩的BCD码转换成ASCⅡ存放在于25H开始的单元。参考程序:注意压缩的BCD码为一个字节占两位BCD码。
ORG0000HMOVR705H;R7为转换字节数MOVR020H;R0为源操作数地址MOVR125H;R1为目的操作数地址NEMOVAR0
2
fANLA0FH;先取低位BCD码ADDA30H;将BCD码转换成ASCⅡ码MOVR1AINCR1MOVAR0ANLA0F0H;取高位BCD码SWAPA;半字节交换ADDA30H;将高位BCD码转换成ASCⅡ码MOVR1AINCR0INCR1DJNZR7NESJMPEND
编程题,另外加上第4章课件上的例子。
三、程序解释(每小题5分,共10分)1.ORG0200HMOVDPTR1000HMOVR020HLOOPMOVXADPTRMOVR0AINCDPTRINCR0CJNER071HLOOPSJMP
程序功能:把片外数据存储器1000H1050H中的内容传送到片内数据存储器20H70H中。
2.
ORG0200H
MOVA,R0
ANLA,0FH
MOVDPTR,TAB
MOVCA,ADPTR
MOVR0A
SJMP
3
fⅡ码
TABDB30H31H32H33H34H35H36H37H38H39H09的ASCDB41H42H43H44H45H46HAF的ASCⅡ码
程序功能:r