325#——单片机原理及应用_第1页
325#——单片机原理及应用_第2页
325#——单片机原理及应用_第3页
325#——单片机原理及应用_第4页
325#——单片机原理及应用_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、年级_;层次_;专业_;姓名_复习资料,仅供参考,补充整理打印,试后上交 单片机原理及应用模拟卷 除非特别声明,编程题可以使用汇编语言编写,也可以使用C语言编写1、 分析程序的执行结果,将结果填写到空格中。ORG0000HMOV30H,#50HMOVR0,#30HMOVA,R0;(A= 50H )MOVA,#79HMOVB,#20H ;(A= 79H B= 20H )DIVAB;(A= 03H B= 19H )PUSHBMOVB,#0AHMULAB;(A= 1EH B= 00H )POPBADDA,B ;(A= 37H B= 19H )MOV30H,A;(30H单元的内容= 37H )MOV2

2、0H,30HCLR01H;(20H单元的内容= 37H )MOVA,20H;(PSW中P的内容= 1 )CPLARRA;( PSW中C的内容= 0 )SWAPA;(A= 46H )ADDCA,#0F0H;(A= 36H );(PSW中P的内容= 0 );( PSW中C的内容= 1 )RLA;(A= 6CH );(PSW中P的内容= 0 );( PSW中C的内容= 0 )LOOP:AJMPLOOP2、 将MCS51内部RAM60H65H单元存放的12个16进制数变为ASCII码,放到0090H单元开始的外部RAM中。使用汇编语言编写 MAIN:MOV R0,#60HMOV R2,#6MOV DP

3、TR, #0090HHASC:MOV A,R0ANL A,#0FH;屏蔽高四位ADD A,#0DH MOVC A,A+PC ;查表低四位转换为ASCII码MOVX DPTR,A;送如外部RAMINC DPTRMOV A,R0ANL A,#0F0HSWAP AADD A,#6MOVC,A+PC;高四位转换为ASCII码MOVX DPTR,AINC R0INC DPTRDJNZ R2,HASCENDASCTAB:DB 30H 31H 32H 33H 34 H 35H 36H 37H 38H 39H DB41H 42H 43H 44H 45H 46H3、 某一故障检测系统,当出现故障1时,线路1上出

4、现上升沿;当出现故障2时,线路2上出现下降沿。没有故障时,线路1为低电平,线路2为高电平。出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用MSC1211为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。4、 用MSC1211的T0定时/计数器,设计程序,实现在P1.0输出周期为200ms的占空比为1:1的方波,输出500个方波后停止输出。参考答案:ORG0000HLJMPMAINORG000BH;T0口中断服务程序入口地址LJMPINT_T0MAIN:MOVTMOD,#00H;T0工作于方式0定时MOVTL0,#0CHMOVTH0,#1EH;设定秒中断周期为1msMOVA,

5、200;设定输出周期为200 msMOVR2,1000;输出500个方波SETBTR0SETBET0SETBEASETBP1.0SJMP$INT_T0:MOVTL0,#0CHMOVTH0,#1EH;T0重装时间常数CPLP1.0P1.0位取反DECR2JZENDP;若R2为0,则结束程序,否则返主程序继续输出RETI;返主程序ENDP:END5、 利用MSC1211的A/D构成数据采集系统。使用模拟通道0进行连续数据采集,采集8次后取得平均值,存放到预先分配好的100个内存单元中,这100个单元存满后,再从第一个单元进行覆盖保存。写出完整的程序清单(应在适当的地方加程序注释)。参考答案:#in

6、clude<REG1211.H>#include<stdio.h>extern void autobaud(void);/声明外部函数extern void bipolar(void);float a100=0,w8=0;int out=0;long result,temp;int j;int AUXinterrupts(void)interrupt6 using1/中断服务程序if(PAI=6)/处理AD中断 wout+=bipolar();temp=wout;SUMR0=temp&0xff;SUMR1=(temp>>8)&0xff;SUM

7、R2=(temp>>16)&0xff;SUMR3=(temp>>24)&0xff;if(out=8)SUM=SUMR3<<24+SUMR2<<16+SUMR1<<8+SUMR0;SUM/=8;aj+=SUM;if(j>=100)j=0;min(void)float dummy;int decimation;decimationg=1440;/抽取因子PDCON&=0x77;/打开ADCACLK=9;/模拟采样频率ADMUX=0;/使用通道0ADCON0=0x30;/内部基准2.5V,缓冲器关,BOD关,P

8、GA=0ADCON1=0x01;/双极性,自动稳定模式,偏移增益自校准ADCON2=decimation&0xff;/写入抽取因子低字节ADCON3=(decimation>>8)&0x07;/写入抽取因子高字节AIE=&0x20;autobaud();/等待校准for(i=0;i<4;i+)while(!(AIE&0X20)dummy=ADRESL;SSCON=0;/清除求和寄存器EAI=1;While(1);6、 变量k从0变到150,变化步长为10。对于每一个值,使用整形数算术运算计算8*k,k*k*k和(40*k/150)3。这三个值通

9、过MSC1211的D/A转换后同步输出(均使用电压输出模式)。试编写程序实现。参考答案:include<Reg1211.h>data unsignedint k,j,i;void main(void)PDCON&=0X48;ADCON0=0X30;DACSEL=6;DACSEL=4;DACL=0X24;DACSEL=5;DACH=0x24;while(1)DACSEL=0;DAC=0x8000;for(j=0;j<100;j+)DAC=0;for(k=0;k<151;k+=10)DACSEL=1;DAC=8*k;DACSEL=2;DAC=k*k*k;DACSEL

10、=3;i=40*k/150;DAC=i*i*i;DACSEL=6;DACL=0Xfc;单片机原理及应用模拟卷 1、 分析程序的执行结果,将结果填写到空格中。ORG0000HMOV30H,#50HMOVR0,#30HMOVA,R0;(A= 50H )MOVA,#79HMOVB,#20H ;(A= 79H B= 20H )DIVAB;(A= 03H B= 19H )PUSHBMOVB,#0AHMULAB;(A= 1E B= 00H )POPBADDA,B ;(A= 37H B= 19H )MOV30H,A;(30H单元的内容= 37H )LOOP:AJMPLOOP2、 将MCS51内部RAM50H

11、55H单元存放的12个16进制数变为ASCII码,放到2800H单元开始的外部RAM中。参考答案: ORG0000HLJMPMAINMAIN:MOVDPTR,#70HMOVR1,#1120HMOVR0,#06TOP:MOVA,DPTRPUSHACCANLA,#0FH;取出四位二进制数PUSHACCCLRCSUBBA,#0AHPOPACC;弹回A中JCLOOP;该数10去LOOPADDA,#07H;否则加07HLOOP:ADDA,#30H;加30HMOVR2,APOPACCANL#0F0H;取出下一个四位二进制数PUSHACCCLRCSUBBA,#0AHPOPACC;弹回A中JCLOOP;该数1

12、0去LOOP1ADDA,#07H;否则加07HLOOP1:ADDA,#30H;加30HSWAPAORLA,R2MOVXR1,A;将结果存到RAM中INCDPTRINCR1DECR0JNZTOP;判断转换完没有,未转换完则转TOP3、 编制四个十六进制单字节数相加后求平均的程序。假设4个16进制的单字节分别为a,b,c,d,计算结果方到e中#include <reg51.h>#define uchar unsigned charvoid main(void)uchar a,b,c,d,e;e=(a+b+c+d)/4;while(1);4、 用8031的T0定时/计数器,设计程序,实现

13、在P1.0输出50ms的方波,输出100个方波后停止输出。参考答案:MSC1211的T0定时/计数器,设计程序,实现在P2.0输出周期为400ms的占空比为1:1的方波,输出1000个方波后停止输出。(20分)(12MHz,一个时间周期为2uS)ORG0000HLJMPMAINORG000BH;T0口中断服务程序入口地址LJMPINT_T0MAIN:MOVTMOD,#00H;T0工作于方式0定时MOVTL0,#0CHMOVTH0,#1EH;设定秒中断周期为1msMOVA,400;设定输出周期为400 msMOVR2,2000;输出1000个方波SETBTR0SETBET0SETBEASETBP

14、1.0SJMP$INT_T0:MOVTL0,#0CHMOVTH0,#1EH;T0重装时间常数CPLP1.0P1.0位取反DECR2JZENDP;若R2为0,则结束程序,否则返主程序继续输出RETI;返主程序ENDP:END5、 甲单片机利用方式1将内部RAM30H37H单元的ASCII码发送到乙机。编制甲机发送和乙机接收的程序(加奇校验)。参考答案:利用MSC1211或8051设计应答方式下的通讯程序。通讯参数:晶振为11.0592MHz,每帧为11位,第九位数据为奇偶校验用的补偶位。通讯过程如下:甲机首先发送一帧信息、乙机对接收的数据进行奇偶校验,若补偶正确则乙机向甲机发出“00”作为回答信

15、号,甲机接收到乙机的此信息后再发送下一个字节。若奇偶校验错,则乙机发出“0FFH”作为回答信号,要求甲机再次发送原数据,直至数据发送正确。甲机发送200个字节后才停止发送。甲机发送数据的首址为ADDRT,乙机接收数据的首址为ADDRR。(应在适当的地方加程序注释)(20分)主程序(甲机):ORG0000HLJMPMAINTORG0023HLJMPINTSE1MAIN:MOVPCON,#80H;波特率加倍MOVSCON,#90H;置工作方式2,并允许接收MOVDPTR,#ADDRT;设置数据块首址指针MOVR0,#00H;设置发送字节初值SETBEA;CPU开中断SETBESMOVXA,DPTR

16、;取第一个发送数据MOVC,P;数据补偶MOVTB8,CMOVSBUF,A;启动串行口,发送数据SJMP$;中断服务程序INTSE1:JBRI,LOOP;检测是否是接收中断?若RI1,转入接收程序CLRTI;因RI0,表明是甲机发送数据中断LJMPENDT;甲机发送一数据完毕跳至中断返回程序LOOP:CLRRIMOVA,SBUF;取乙机的应答数据SUBBA,#01H;若乙机应答信息为00H,数据传送正确,转LOOP3JCLOOP3MOVXA,DPTR;若乙机应答信息为0FFH,数据传送不正确MOVC,PMOVTB8,CMOVSBUF,A;启动串行口,重新发送一次数据LJMPENDT;跳至中断返

17、回程序LOOP3:INCDPTR;修改地址指针INCR0MOVXA,DPTR;下一个数据补偶MOVC,PMOVTB8,CMOVSBUF,A;启动串行口,发送信的数据CJNER0,#0C8H,ENDT;判断200个字节是否发送完毕CLRES;全部发送完毕,禁止串行口中断ENDT:RETIEND主程序(乙机):ORG0000HLJMPMAINRORG0023HLJMPINTSE2ORG0100HMAIN:MOVPCON,#80H;波特率加倍MOVSCON,#90H;置工作方式2,并允许接收MOVDPTR,#ADDRR;设置数据块首址指针MOVR0,#00H;设置发送字节初值SETBEA;CPU开中

18、断SETBESSJMP$;中断服务程序INTSE2:JBRI,LOOP;检测是否是接收中断?若RI1,转入接收程序CLRTI;因RI0,表明是乙机发送中断LJMPENDT;乙机发送完毕跳至中断返回程序LOOP:CLRRIMOVA,SBUF;取甲机发送的数据MOVC,P;奇偶校验JCLOOP1;如8位数为奇,则转LOOP1再检测RB8位,RB8=1,则9位数据位奇,补偶JCLOOP2;错,转LOOP2LJMPLOOP3;补偶正确,转LOOP3LOOP1:ANLC,RB8;8位数为奇,再检测RB8JCLOOP3;RB8=1,补偶正确,转LOOP3LOOP2:MOVA,#0FFH;本机发出0FFH,

19、表明传送不正确。MOVSBUF,ALJMPENDTLOOP3:MOVXDTPR,A;将接收的正确信息送数据缓冲区MOVA,#00H;本机发出应答信息给甲机,表明数据传送正确MOVSBUF,AINCR0;修改指针INCDPTRCJNER0,#0C8H,ENDT;判断200个字节是否接收完毕CLRESENDT:RETIEND6、 试用8031和8155实现键盘和LED动态显示。画出原理示意图并编制键盘扫描程序和LED动态显示程序(16个键的键盘扫描和6位LED显示)。参考答案:变量k从0变到300,变化步长为20。对于每一个值,使用整形数算术运算计算40*k,k*k*k和(50*k/120+60)

20、3。这三个值通过MSC1211的D/A转换后同步输出(均使用电压输出模式)。试编写程序实现。(5分) include<Reg1211.h>data unsignedint k,j,i;void main(void)PDCON&=0X48;ADCON0=0X30;DACSEL=6;DACSEL=4;DACL=0X24;DACSEL=5;DACH=0x24;while(1)DACSEL=0;DAC=0x8000;for(j=0;j<100;j+)DAC=0;for(k=0;k<301;k+=20)DACSEL=1;DAC=40*k;DACSEL=2;DAC=k*k*

21、k;DACSEL=3;i=50*k/1200+60;DAC=i*i*i;DACSEL=6;DACL=0Xfc;单片机原理及应用模拟卷 一、 分析程序的执行结果,将结果填写到空格中。1)、 MOV40H,#80HMOVR0,#40HMOVA,R0;(A= 80H ) MOVB,#20H DIVAB;(A= 04H B= 00H )MOVR0,A ;最终结果存于内存单元 40H 中。 2)、 MOVA,#2AH RR A MOV B,A MULAB;(A= B9H B= 01H ) (OV= 1 CY= 0 ) 3)、 MOV A,#0B2H MOVR1,#055HANL A,R1 ;(A= 10

22、H )ORL A,R1 ;(A= 55H ) XRL A,R1 ;(A= 00H ) SWAP A ;(A= 00H ) 4)、 设内存20H的内容为30H,30H的内容为46H,46H的内容为57H MOV R0,#30H MOV A,R0;(PSW中P的内容= 1 ) XCH A,R0 ADD A,#0DBH SUBB A,#74H;(A= 96H );(PSW中P的内容= 0 );( PSW中C的内容= 0 )5)、 MOV 25H,#39H CLR 2AH ;(25H)=( 00111001 B) CPL 2CH ;(25H)=( 00101001 B) SETB 2EH ;(25H)

23、=( 01101001 B) MOV C,28H ;( PSW中C的内容= 1 )二、 程序设计1、 MCS51内部RAM 40H60H单元存放着有符号16进制数,将其中能被2整除的数,存放到0090H单元开始的外部RAM中。使用汇编语言编写 参考答案: ORG0000H JMPSTART START:MOV SP,#60H MOV DPTR,#0090HMOV R0,#40H MOV R1, #21LOOP0: MOV A,R0 MOV B, #2 DIV AB MOV R2, B CJNZ R2, #0, LOOP1 ;余数为0则继续,不为0则转移 MOV A,R0 MOV DPTR,A

24、INC DPTRLOOP1: INC R0DJNZ R1, LOOP0 END2、 用MSC1211的T1定时/计数器,定时0.1S中断,使P1口的8个发光二极管每隔1S 循环点亮。设系统主频为6MHZ。参考答案:ORG0000HLJMPMAIN;转主程序ORG001BH;T1中断服务程序入口地址LJMPT1-ISRORG0100HMAIN:MOVSP,#60H;设置堆栈指针MOV P1,#01H;设置P1.1发光MOVTMOD,#10H;T1初始化MOVTL1,#B0HMOVTH1,#3CHSETBTR1;启动T0计数SETBET1;允许T0中断SETBEA;CPU开中断SJMP$;等待T1_ISR:MOVT

温馨提示

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

评论

0/150

提交评论