《单片机原理----C51编程及Proteus仿真习题答案 (金宁治) 习题3答案.docx》由会员分享,可在线阅读,更多相关《单片机原理----C51编程及Proteus仿真习题答案 (金宁治) 习题3答案.docx(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、思考题及习题31 .访问内部RAM单元可以使用哪些寻址方式? 答:直接寻址、寄存器寻址、位寻址、寄存器间接寻址。2 .访问外部RAM单元可以使用哪些寻址方式? 答:寄存器间接寻址。3 .访问特殊功能寄存器可以使用哪些寻址方式? 答:直接寻址。4 .编写程序,分别执行以下各个数据传送操作。(1)将内部RAM 30H单元的内容传送至内部RAM 40H单元中; MOV 40H, 30H(2)将内部RAM 30H单元的内容传送至R0中;MOV RO, 30H(3)将R。的内容传送至R1中; MOVA, ROMOVRI, A(4)将内部RAM 30H单元的内容传送至外部RAM 1000H单元中;MOV
2、A, 30HMOV DPTR, #1000H MOVX DPTR, A (5)将外部RAM 1000H单元的内容传送至外部RAM 2000H单元中。MOV DPTR, #1000H MOVX A, DPTR MOV DPTR, #2000H MOVX DPTR, A5 .假设(A) = E8H, (RO) = 40H, (Rl) = 20H, (R4) = 3AH, (40H) = 2CH, (20H) = OFH,写 出以下各指令单独执行后相关单元和标志位CY、AC、OV的内容。X)/ 1 2 3 4 5 z( z/l z(x z( fMOVA,R0XCHA,20HADDA,R4INCR1A
3、NL 40H, #0FH;(40H) = E8H;(A) = 0FH, (20H) = E8H;(A) = 22H, (CY) = 1, (AC) = 1, (OV) = 0;(20H) = 1 OH;(40H) = OCH6 ,编写程序,求两个数中的大数,这两个数分别存放于内部RAM 60H、61H单元中,求出的大数送往内部RAM 62H单元。MOV A, 60H;将60H的内容送入累加器中CJNE A, 61H, L00P1 ;两数不等那么转至L00P1AJMP L00P2;两数相等那么转至L00P2L00P1: JCMOV A, 61HLOOP2: MOV 62H, A;(60H) (6
4、1H)那么转至 LOOP2;将61H的内容送入累加器中;累加器中保存的大数送入62H中7 .源数据区存放于从30H开始的内部RAM单元中,目的数据区存放于从60H开始的 内部RAM单元中,每隔1个单元从源数据区读数,每隔2个单元向目的数据区写数,直至 遇回车(0DH)结束传送。MOV RO, #30H;指向源单元首址8.编写多字节减法运算程序,其中被减数存放于从1000H开始的10个外部RAM单元MOVR0, #60H;指向目标单元首址LOOP: MOVXA, R0;将源单元的内容读入MOVRl, A;送至目标单元INCR0INCR0;每隔1个单元读数INCRI9INCRI9INCRI;每隔2
5、个单元写数CJNEA, #0DH,LOOP;遇到回车符跳出中,减数存放于从2000H开始的10个外部RAM单元中,高字节对应高地址,差数送入被减数单元中。MOV SETC MOV CLR MOV CLRLOOP: MOVX SETC SUBB MOVX INCCLR INC DJNZR2, #10 DPSDPTR, #2000H DPSDPTR, #1000H CA, DPTR DPSA, DPTR DPTR, A DPTRDPSDPTRR2, LOOP;设置循环次数;选择DPTR 1;指向目的单元首址;选择DPTR0;指向源单元首址;进位标志清零;将源单元的内容读入;选择DPTR 1;执行减
6、法运算;将差数送至目标单元;指向下一目的单元;选择DPTR。;指向下一源单元;是否到循环次数9 .假设晶振为12MHz,编写延时2ms子程序。DEL2: MOVR3,#4(l|is)LOOP1: MOVR2,#124(1网LOOP2: NOP(l|is)NOP(1 |is)DJNZR2,LOOP2(2|is)DJNZR3,LOOP1(2网NOP(1同RET(2曲)10 .假设8个数存放于从TABLE开始的字节数据表中,求这8个数的平均值并存于R0中。;设置循环次数;表中数据序号初始化为。;累加结果初始化为。;DPTR指向表首址;将数据序号送至A中;执行查表操作MOV MOV MOV MOVLOOP: MOV MOVCR7, #8R6, #0R0, #0DPTR, #TABLEA, R6A, A+DPTRADD A, R0MOV R0, A;将累加结果保存至R0中INC R6DJNZ R7, LOOPMOVB, #8DIV ABMOV RO, ATABLE: DB ;指向表格中下一数据;判断是否已到循环次数*;求平均值