您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 山东大学微机原理试题
试卷11、分析程序的执行结果,将结果填写到空格中。(10分)ORG0000HMOV30H,#50HMOVR0,#30HMOVA,@R0;(A=)MOVA,#79HMOVB,#20H;(A=B=)DIVAB;(A=B=)PUSHBMOVB,#0AHMULAB;(A=B=)POPBADDA,B;(A=B=)MOV30H,A;(30H单元的内容=)LOOP:AJMPLOOP2、将MCS51内部RAM50H~55H单元存放的12个16进制数变为ASCII码,放到2800H单元开始的外部RAM中。(20分)3、编制四个十六进制单字节数相加后求平均的程序。(10分)4、用8031的T0定时/计数器,设计程序,实现在P1.0输出50ms的方波,输出100个方波后停止输出。(20分)5、甲单片机利用方式1将内部RAM30H~37H单元的ASCII码发送到乙机。编制甲机发送和乙机接收的程序(加奇校验)。(20分)6、利用8031和8位A/D(ADC0809)构成数据采集系统。每隔20ms采集通道0的一次数据,将采集的数据存放在30H的内部RAM中。画出原理示意图,写出较完整的程序清单。(提示:需要用定时器和外部中断)。(20分)7、【附加题】试用8031和8155实现键盘和LED动态显示。画出原理示意图并编制键盘扫描程序和LED动态显示程序(16个键的键盘扫描和6位LED显示)。答案11、ORG0000HMOV30H,#50HMOVR0,#30HMOVA,@R0;(A=50H)MOVA,79HMOVB,#20H;(A=79HB=20H)DIVAB;(A=03HB=19H)PUSHBMOVB,#0AHMULAB;(A=1EHB=00H)POPBADDA,B;(A=37HB=19H)MOV30H,A;(30H单元的内容=37H)LOOP:AJMPLOOP2、ORG0000HLJMPMAINORG0100HMAIN:CLRCMOVR2,#00HMOVR0,#50HMOVR1,#06HMOVDPTR,#2800HLOOP0:MOVA,@R0PUSHACCANLA,#0FHLOOP1:CJNEA,#09H,NEXTLJMPASC1NEXT:SUBBA,#09HMOV00H,CADDCA,#09HMOVC,00HJCASC1LJMPASC2ASC1:ADDA,#30HMOVX@DPTR,AINCDPTRLJMPLOOP2ASC2:ADDA,#37HMOVX@DPTR,AINCDPTRLJMPLOOP2LOOP2:CJNER2,#00H,ENDPINCR2POPACCANLA,#0F0HSWAPALJMPLOOP1ENDP:POPACCMOVR2,#00HINCR0DJNZR1,LOOP0END3、CLRCCLRR1//R1用于存放有可能产生的第八和第九位MOVR2,#03HMOVA,@R0LOOP1:INCR0ADDA,@R0JNCLOOP2//如果有进位,就使R1加1ADDR1,#01HCLRCLOOP2:DJNZR2,LOOP1RRA//使A的内容右移两位,高RRA//两位用R1的低两位补齐MOVC,P1。0MOVA。6,CMOVC,P1。1MOVA。7,C4、ORG2000HAJMPMAINORG200AHMOVTL0,0D4H//定时器0重设初值CPLP1。0DJNZR0,ENDRETIMAIN:MOVR0,#0C8H//产生100个方波MOVTMOD,#01H//T0初始化MOVTL0,#0D4HMOVTH0,#03HSETBTR0//启动T0SETBET0//T0开中断SETBEA//CPU开中断SJMP$//等待END:END5、甲机主程序:ORG2000HMOVTMOD,#20HMOVTH1,#0E8HMOVTL1,#0E8HMOVSCON,#40H//串行口工作方式1SETBTR1MOVR0,#30HMOVR1,#08HLOOP:MOVA,@R0LCALLOUT1INCR0DJNZR1,LOOP串行口发送子程序:OUT1:MOVC,P//产生奇校验CPLCMOVACC。7,CMOVSBUF,AJNBTI,$CLRTIRET乙机主程序:ORG2000HMOVTMOD,#20HMOVTH1,#0E8HMOVTL1,#0E8HSETBTR1MOVR0,#30HMOVR1,#08HLOOP:LCALLIN1JCERRORMOV@R0,ALOOP1:INCR0DJNZR1,LOOP串行口接收子程序:IN1:MOVSCON,#52HJNBRI,$CLRRIMOVA,SBUFMOVC,P//判断奇校验CPLCANLA,#7FHRETERROR:MOV@R0,#0FFHSJMPLOOP16、主程序:MAIN:MOVTMOD,#01H//定时器0初始化MOVTL0,#10HMOVTH0,#27HMOVR0,#30HSETBTR0SETBET0SETBEX0SETBEASJMP$定时器0中断服务子程序:ORG000BHMOVDPTR,#7EF8H//启动ADC,对IN0通//道进行AD转换CLRTR0MOVTL0,#10HMOVTH0,#27HSETBTR0RETI外部中断(INT0)子程序:ORG0003HMOVXA,@DPTRMOV@R0,AINCR0RETI键盘扫描子程序:KEY1:ACALLKS1;调用判断有无键按下子程序JNZLK1AJMPKEY1LK1:ACALLTM12s;调用12ms延时子程序ACALLKS1JNZLK2AJMPKEY1LK2:MOVR2,#0FEH;首列扫描字入R2MOVR4,#00H;首列号入R4LK4:MOVDPTR,#0FD01H;列扫描字送8155PA口MOVA,R2MOVX@DPTR,AINCDPTR;指向8155PC口INCDPTRMOVXA,@DPTRJBACC.0,LONE;第0行无键按下,查第1行MOVA,#00H;有键按下,该行首键号送AAJMPLKPLONE:JBACC.1,NEXTMOVA,#08HLKP:ADDA,R4;键号=行键号+列号PUSHACCLK3:ACALLKS1;等待键释放JNZLK3POPACC;键释放,键号放入ARETNEXT:INCR4;指向下一列,列号加1MOVA,R2;判断8列是否全扫描完JNBACC.7,KNDRLA;求得下一列的扫描字MOVR2,AAJMPLK4KND:AJMPKEY1KS1:MOVDPTR,#0FD01H;指向PA口MOVA,#00H;全扫描字MOVX@DPTR,AINCDPTR;指向PB口INCDPTRMOVXA,@DPTRCPLANLA,#03H;屏蔽高6位RETTM12ms:MOVR7,#18H;延迟12ms子程序TM:MOVR6,#0FFHTM6:DJNZR6,TM6DJNZR7,TMRETLED显示子程序:MOVR0,#30H;设显示缓冲区首地址为30HMOVR3,#02H;扫描数位初值为00000010BLD0:MOVA,R3;扫描数位送PA口MOVDPTR,#0FD01HMOVX@DPTR,AINCDPTR;得到B口地址MOVA,@R0;加偏移值,得到相应的显示代码ADDA,#0DHMOVCA,@A+PCMOVX@DPTR,AACALLLD1;调用延时1ms的子程序INCR0MOVA,R3;如果6个显示器都扫描一遍,返回主程序ADDA,#01H;使最高位是否为1判断扫描是完毕JBACC。7,LD1RLA;修改扫描行MOVR3,AAJMPLD0LD1:RETSEG1:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDL1:MOVR7,#02H;延时1ms子程序DL:MOVR6,#0FFHDL6:DJNZR6,DL6DJNZR7,DLRET
本文标题:山东大学微机原理试题
链接地址:https://www.777doc.com/doc-4456124 .html