1、单片机原理单片机原理及应用模拟卷A 除非特别声明,编程题可以使用汇编语言编写,也可以使用C语言编写1、 分析程序的执行结果,将结果填写到空格中。 ORG 0000HMOV 30H,#50H MOV R0,#30H MOV A,R0 ;(A= 50H ) MOV A,#79H MOV B,#20H ;(A= 79H B= 20H ) DIV AB ;(A= 03H B= 19H ) PUSH B MOV B,#0AH MUL AB ;(A= 1EH B= 0 ) POP B ADD A,B ;(A= 37H B= 19H ) MOV 30H,A ;(30H单元的内容= 37H ) MOV 20H
2、,30H CLR 01H ;(20H单元的内容=37H ) MOV A,20H ;(PSW中P的内容= 1 ) CPL A RR A ;( PSW中C的内容= 0 ) SWAP A ;(A= 46H ) ADDC A,#0F0H ;(A= 36H ) ;(PSW中P的内容= 0 ) ;( PSW中C的内容= 1 ) RL A ;(A= 6CH ) ;(PSW中P的内容= 0 ) ;( PSW中C的内容= 0 )LOOP: AJMP LOOP2、 将MCS51内部RAM60H65H单元存放的12个16进制数变为ASCII码,放到0090H单元开始的外部RAM中。使用汇编语言编写 ORG 0000
3、HAJMP MAINORG 0030HMIAN:MOV R0,#50HMOV R1,#06HMOV R2,#02HMOV DPTR,#2800HMOV A,R0MOV B,ACH:ANL A,#0FH PUSH ACCSUB A,#0AHJNC AD37POP ACCADD A,#30HJMP SAVAD37: POP ACC ADD A,#37HSAV: DJNZ R2,LL MOVX DPTR,A INC DPTR SWAP B MOV B,A JMP CHLL:INC R0 DJNZ R1,DONEDONE:HLTEND3、 某一故障检测系统,当出现故障1时,线路1上出现上升沿;当出现故
4、障2时,线路2上出现下降沿。没有故障时,线路1为低电平,线路2为高电平。出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用MSC1211为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。 解答:如下图所示:故障1从P32输入,利用INT0, 故障2从P33输入,利用INT1,使用L1作为故障1的指示灯,L2作为故障2的指示灯。程序清单:ORG 0000H AJMP MIAN ORG 0003H AJMP GU1 ORG 0013H AJMP GU2 ORG 1000HMAIN: MOV TCON,#05H MOV IE,#85HHERE: SETB P1.0 SETB P1.
5、1GU1: CLR P1.0 JB P3.2,GU1 RETIGU2: CLR P1.1 JB P3.3,GU2 RETI END4、 用MSC1211的T0定时/计数器,设计程序,实现在P1.0输出周期为200ms的占空比为1:1的方波,输出500个方波后停止输出。参考答案:ORG 0000HLJMP MAINORG 000BH ;T0口中断服务程序入口地址LJMP INT_T0MAIN: MOV TMOD,#00H ;T0工作于方式0定时MOV TL0,#0CHMOV TH0,#1EH ;设定秒中断周期为1msMOV A,200 ;设定输出周期为200 msMOV R2,1000 ;输出5
6、00个方波SETB TR0SETB ET0SETB EASETB P1.0SJMP $ INT_T0:MOV TL0,#0CH MOV TH0,#1EH ;T0重装时间常数CPL P1.0 P1.0位取反DEC R2JZ ENDP ;若R2为0,则结束程序,否则返主程序继续输出RETI ;返主程序ENDP: END5、 利用MSC1211的A/D构成数据采集系统。使用模拟通道0进行连续数据采集,采集8次后取得平均值,存放到预先分配好的100个内存单元中,这100个单元存满后,再从第一个单元进行覆盖保存。写出完整的程序清单(应在适当的地方加程序注释)。参考答案:#include#includee
7、xtern 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=(temp8)&0xff; SUMR2=(temp16)&0xff; SUMR3=(temp24)&0xff; if(out=8) SUM=SUMR3
8、24+SUMR216+SUMR1=100) j=0;min(void) float dummy; int decimation; decimationg=1440;/抽取因子 PDCON&=0x77;/打开ADC ACLK=9;/模拟采样频率ADMUX=0;/使用通道0ADCON0=0x30;/内部基准2.5V,缓冲器关,BOD关,PGA=0ADCON1=0x01;/双极性,自动稳定模式,偏移增益自校准ADCON2=decimation&0xff;/写入抽取因子低字节ADCON3=(decimation8)&0x07;/写入抽取因子高字节AIE=&0x20;autobaud(); /等待校准
9、for(i=0;i4;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。这三个值通过MSC1211的D/A转换后同步输出(均使用电压输出模式)。试编写程序实现。参考答案:includedata unsigned int k,j,i;void main(void) PDCON&=0X48; ADCON0=0X30; DACSEL=6; DACSEL=4; DACL=0X24; DACSEL=
10、5;DACH=0x24;while(1) DACSEL=0;DAC=0x8000; for(j=0;j100;j+) DAC=0; for(k=0;k151;k+=10) DACSEL=1;DAC=8*k; DACSEL=2;DAC=k*k*k; DACSEL=3;i=40*k/150;DAC=i*i*i; DACSEL=6;DACL=0Xfc; 单片机原理及应用模拟卷B 7、 分析程序的执行结果,将结果填写到空格中。 ORG 0000HMOV 30H,#50H MOV R0,#30H MOV A,R0 ;(A= 50H ) MOV A,#79H MOV B,#20H ;(A= 79H B=
11、20H ) DIV AB ;(A= 03H B= 19H ) PUSH B MOV B,#0AH MUL AB ;(A= 1EH B= 0 ) POP B ADD A,B ;(A= 37H B= 19H ) MOV 30H,A ;(30H单元的内容= 37H )LOOP: AJMP LOOP8、 将MCS51内部RAM50H55H单元存放的12个16进制数变为ASCII码,放到2800H单元开始的外部RAM中。参考答案: ORG 0000HLJMP MAINMAIN: MOV DPTR,#70H MOV R1,#1120H MOV R0,#06TOP: MOV A,DPTR PUSH ACC
12、ANL A,#0FH ;取出四位二进制数 PUSH ACC CLR C SUBB A,#0AH POP ACC ;弹回A中 JC LOOP ;该数10去LOOP ADD A,#07H ;否则加07HLOOP: ADD A,#30H ;加30H MOV R2,A POP ACC ANL #0F0H ;取出下一个四位二进制数 PUSH ACCCLR C SUBB A,#0AH POP ACC ;弹回A中 JC LOOP ;该数10去LOOP1 ADD A,#07H ;否则加07HLOOP1: ADD A,#30H ;加30H SWAP A ORL A,R2 MOVX R1,A ;将结果存到RAM中
13、 INC DPTR INC R1 DEC R0 JNZ TOP ;判断转换完没有,未转换完则转TOP9、 编制四个十六进制单字节数相加后求平均的程序。参考答案:ORG 0000HSJMP MAINORG 0030HMAIN:MOV A,#00HADD A,R0ADDC A,R1ADDC A,R2ADDC A,R3MOV B,#04HDIV ABEND10、 用8031的T0定时/计数器,设计程序,实现在P1.0输出50ms的方波,输出100个方波后停止输出。参考答案:MSC1211的T0定时/计数器,设计程序,实现在P2.0输出周期为400ms的占空比为1:1的方波,输出1000个方波后停止输
14、出。(20分)(12MHz,一个时间周期为2uS)ORG 0000HLJMP MAINORG 000BH ;T0口中断服务程序入口地址LJMP INT_T0MAIN: MOV TMOD,#00H ;T0工作于方式0定时MOV TL0,#0CHMOV TH0,#1EH ;设定秒中断周期为1msMOV A,400 ;设定输出周期为400 msMOV R2,2000 ;输出1000个方波SETB TR0SETB ET0SETB EASETB P1.0SJMP $ INT_T0:MOV TL0,#0CH MOV TH0,#1EH ;T0重装时间常数CPL P1.0 P1.0位取反DEC R2JZ EN
15、DP ;若R2为0,则结束程序,否则返主程序继续输出RETI ;返主程序ENDP: END 11、 甲单片机利用方式1将内部RAM30H37H单元的ASCII码发送到乙机。编制甲机发送和乙机接收的程序(加奇校验)。参考答案:利用MSC1211或8051设计应答方式下的通讯程序。通讯参数:晶振为11.0592MHz,每帧为11位,第九位数据为奇偶校验用的补偶位。通讯过程如下:甲机首先发送一帧信息、乙机对接收的数据进行奇偶校验,若补偶正确则乙机向甲机发出“00”作为回答信号,甲机接收到乙机的此信息后再发送下一个字节。若奇偶校验错,则乙机发出“0FFH”作为回答信号,要求甲机再次发送原数据,直至数据
16、发送正确。甲机发送200个字节后才停止发送。甲机发送数据的首址为ADDRT,乙机接收数据的首址为ADDRR。(应在适当的地方加程序注释)(20分)主程序(甲机):ORG 0000HLJMP MAINT ORG 0023HLJMP INTSE1 MAIN: MOV PCON,#80H ;波特率加倍 MOV SCON,#90H ;置工作方式2,并允许接收 MOV DPTR,#ADDRT ;设置数据块首址指针 MOV R0,#00H ;设置发送字节初值 SETB EA ; CPU开中断 SETB ES MOVX A,DPTR ;取第一个发送数据 MOV C,P ;数据补偶 MOV TB8,C MOV
17、 SBUF,A ;启动串行口,发送数据 SJMP $ ;中断服务程序INTSE1: JB RI,LOOP ;检测是否是接收中断?若RI1,转入接收程序 CLR TI ;因RI0,表明是甲机发送数据中断 LJMP ENDT ;甲机发送一数据完毕跳至中断返回程序LOOP: CLR RI MOV A,SBUF ;取乙机的应答数据 SUBB A,#01H ;若乙机应答信息为00H,数据传送正确,转LOOP3 JC LOOP3 MOVX A,DPTR ;若乙机应答信息为0FFH,数据传送不正确 MOV C,P MOV TB8,C MOV SBUF,A ;启动串行口,重新发送一次数据 LJMP ENDT
18、;跳至中断返回程序LOOP3: INC DPTR ;修改地址指针 INC R0 MOVX A,DPTR ;下一个数据补偶 MOV C,P MOV TB8,C MOV SBUF,A ;启动串行口,发送信的数据 CJNE R0,#0C8H,ENDT ;判断200个字节是否发送完毕 CLR ES ;全部发送完毕,禁止串行口中断ENDT: RETI END主程序(乙机):ORG 0000HLJMP MAINRORG 0023HLJMP INTSE2ORG 0100H MAIN: MOV PCON,#80H ;波特率加倍 MOV SCON,#90H ;置工作方式2,并允许接收 MOV DPTR,#ADD
19、RR ;设置数据块首址指针 MOV R0,#00H ;设置发送字节初值 SETB EA ; CPU开中断 SETB ES SJMP $ ;中断服务程序INTSE2: JB RI,LOOP ;检测是否是接收中断?若RI1,转入接收程序 CLR TI ;因RI0,表明是乙机发送中断 LJMP ENDT ;乙机发送完毕跳至中断返回程序LOOP: CLR RI MOV A,SBUF ;取甲机发送的数据 MOV C,P ;奇偶校验 JC LOOP1 ;如8位数为奇,则转LOOP1再检测RB8位,RB8=1,则9位数据位奇,补偶 JC LOOP2 ;错,转LOOP2 LJMP LOOP3 ;补偶正确,转L
20、OOP3LOOP1: ANL C,RB8 ;8位数为奇,再检测RB8 JC LOOP3 ;RB8=1,补偶正确,转LOOP3LOOP2: MOV A,#0FFH ;本机发出0FFH,表明传送不正确。 MOV SBUF,A LJMP ENDTLOOP3: MOVX DTPR,A ;将接收的正确信息送数据缓冲区 MOV A,#00H ;本机发出应答信息给甲机,表明数据传送正确 MOV SBUF,A INC R0 ;修改指针 INC DPTR CJNE R0,#0C8H,ENDT ;判断200个字节是否接收完毕 CLR ESENDT: RETI END12、 试用8031和8155实现键盘和LED动
21、态显示。画出原理示意图并编制键盘扫描程序和LED动态显示程序(16个键的键盘扫描和6位LED显示)。参考答案:变量k从0变到300,变化步长为20。对于每一个值,使用整形数算术运算计算40*k,k*k*k和(50*k/120+60)3。这三个值通过MSC1211的D/A转换后同步输出(均使用电压输出模式)。试编写程序实现。(5分) includedata unsigned int k,j,i;void main(void) PDCON&=0X48; ADCON0=0X30; DACSEL=6; DACSEL=4; DACL=0X24; DACSEL=5;DACH=0x24;while(1) D
22、ACSEL=0;DAC=0x8000; for(j=0;j100;j+) DAC=0; for(k=0;k301;k+=20) DACSEL=1;DAC=40*k; DACSEL=2;DAC=k*k*k; DACSEL=3;i=50*k/1200+60;DAC=i*i*i; DACSEL=6;DACL=0Xfc; 单片机原理及应用模拟卷 C一、 分析程序的执行结果,将结果填写到空格中。 1、 MOV 40H,#80H MOV R0,#40H MOV A,R0 ;(A= 80H ) MOV B,#20H DIV AB ;(A= 4 B= 0 ) MOV R0,A ;最终结果存于内存单元 40H
23、中。 2、 MOV A,#2AH RR A MOV B,A MUL AB ;(A= B9H B= 01H ) (OV= 1 CY= 0 ) 3、 MOV A,#0B2H MOV R1,#055H ANL A,R1 ;(A= 10H ) ORL A,R1 ;(A= 55H ) XRL A,R1 ;(A= 00H ) SWAP A ;(A= 55H ) 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 ) ;(PS
24、W中P的内容= 0 ) ;( PSW中C的内容= 1 ) 5、 MOV 25H,#39H CLR 2AH ;(25H)=( B) CPL 2CH ;(25H)=( B) SETB 2EH ;(25H)=( B) MOV C,28H ;( PSW中C的内容= )二、 程序设计13、 MCS51内部RAM 40H60H单元存放着有符号16进制数,将其中能被2整除的数,存放到0090H单元开始的外部RAM中。使用汇编语言编写 参考答案: ORG 0000H JMP START START: MOV SP,#60H MOV DPTR,#0090H MOV R0,#40H MOV R1, #21LOOP
25、0: MOV A,R0 MOV B, #2 DIV AB MOV R2, B CJNZ R2, #0, LOOP1 ;余数为0则继续,不为0则转移 MOV A,R0 MOV DPTR,A INC DPTRLOOP1: INC R0DJNZ R1, LOOP0 END14、 用MSC1211的T1定时/计数器,定时0.1S中断,使P1口的8个发光二极管每隔1S 循环点亮。设系统主频为6MHZ。参考答案:ORG 0000HLJMP MAIN ;转主程序ORG 001BH ;T1中断服务程序入口地址LJMP T1-ISRORG 0100HMAIN:MOV SP,#60H ;设置堆栈指针 MOV P1
26、,#01H ;设置P1.1发光 MOV TMOD,#10H ;T1初始化 MOV TL1,#B0H MOV TH1,#3CH SETB TR1 ;启动T0计数 SETB ET1 ;允许T0中断 SETB EA ;CPU开中断 SJMP $ ;等待T1_ISR:MOV TL1,#B0H MOV TH1,#3CH MOV A,P1 ;P1口循环左移 RL A MOV P1,AEXIT: RETI END15、 设有甲、乙两台单片机,以工作方式3进行串行通讯,设晶振为11.0592MHz,波特率为9600,甲机将内存单元中的120个数据作补偶校验后发送给乙机,乙机对接收到的数据进行奇偶校验,若校验正
27、确,则从机发送00H给甲机,甲机继续发送数据,校验不正确,则发送0FFH给甲机,甲机重新发送原数据,编写乙机的接收程序。(应在适当的地方加程序注释)参考答案: ORG 0000HAJMP MAINORG 0023HLJMP SE2_INTMAIN: MOV SP,#60H MOV TMOD #20H MOV TH1,#0FDH ;设置波特率为9600bps MOV TL1,#0FDH MOV SCON,#90H ;串行口工作方式3,允许接收 MOV DPTR,#2000H;接收数据区 MOV R1,#120 SETB TR1 SETB EA SETB ESSJMP $ ;等待接收中断SE2_INT:JB RI,LOOPACLR T1LJMP ENDRLOOPA:CLR RI MOV A,SBUF MOV C,P ;奇偶校验 JC LOOP1 ;如8位数是奇,则转LOOP1再检测RB8位 ORL C,RB8 ; 如8位数为偶,再检测RB8位,RB8=1,则9位数据为奇,补偶 JC LOOP2 ;错,转LOOP2 LJMP LOOP3 ;补偶正确,转LOOP3LOOP1: ANL C, RB8 ;8位数为奇,再检测RB8位 JC LOOP3 ;RB8=1,补偶正确,转LOOP3LOOP
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1