当前位置:文档之家› 机电一体化《单片机原理与应用》山东大学网络教育考试模拟题与问题详解

机电一体化《单片机原理与应用》山东大学网络教育考试模拟题与问题详解

《单片机原理及应用》除非特别声明,编程题可以使用汇编语言编写,也可以使用 C 语言编写1、分析程序的执行结果,将结果填写到空格中。

ORG 0000HMOV 30H,#50HMOV R0,#30HMOV A,@R0 ;(A= 50H )MOV A,#79HMOV B,#20H ;(A= 79H B= 20H )DIV AB ;(A= 03H B= 19H )PUSH BMOV B,#0AHMUL AB ;(A= 1EH B= 00H )POP BADD A,B ;(A= 37H B= 19H )MOV 30H,A ;(30H 单元的内容= 37H ) MOV20H,30HCLR 01H ;(20H 单元的内容= 37H )MOV A,20H ;(PSW 中P的内容= 1 )CPL ARR 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 内部RAM60H ~65H 单元存放的12 个16 进制数变为ASCII 码,放到0090H单元开始的外部RAM 中。

[使用汇编语言编写]MAIN :MOV R0,#60HMOV R2,#6MOV DPTR, #0090HHASC: 标准MOV A,@R0ANL A,#0FH ;屏蔽高四位ADD A,#0DHMOVC A,@A+PC ;查表低四位转换为ASCII 码MOVX @DPTR,A ;送如外部RAMINC DPTR MOVA,@R0ANL A,#0F0H SWAPA ADD A,#6MOVC,@A+PC ;高四位转换为ASCII 码MOVX @DPTR,AINC R0INC DPTR DJNZR2,HASCENDASCTAB:DB 30H 31H 32H 33H 34 H 35H 36H 37H 38H 39HDB41H 42H 43H 44H 45H 46H3、某一故障检测系统,当出现故障 1 时,线路1 上出现上升沿;当出现故障 2时,线路2 上出现下降沿。

没有故障时,线路1 为低电平,线路2 为高电平。

出现故障时,相应的指示灯变亮。

故障消失后,指示灯熄灭。

试用MSC1211 为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。

4、用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 ;输出500 个方波SETB TR0标准SETB ET0SETB EASETB P1.0SJMP $INT_T0 :MOV TL0 ,#0CHMOV TH0 ,#1EH ;T0 重装时间常数CPL P1.0 P1.0 位取反DEC R2JZ ENDP ;若R2 为0,则结束程序,否则返主程序继续输出RETI ;返主程序ENDP:END5、利用MSC1211的A/D 构成数据采集系统。

使用模拟通道0 进行连续数据采集,采集8 次后取得平均值,存放到预先分配好的100 个内存单元中,这100 个单元存满后,再从第一个单元进行覆盖保存。

写出完整的程序清单(应在适当的地方加程序注释)。

解:#include<REG1211.H>#include<stdio.h>extern void autobaud(void);// 声明外部函数extern void bipolar(void);float a[100]={0},w[8]={0};int out=0;long result,temp;int j;int AUXinterrupts(void)interrupt6 using1// 中断服务程序{if(PAI==6) //处理AD 中断{w[out++]=bipolar();temp=w[out];SUMR0=temp&0xff;SUMR1=(temp>>8)&0xff;SUMR2=(temp>>16)&0xff;SUMR3=(temp>>24)&0xff;if(out==8){SUM=SUMR3<<24+SUMR2<<16+SUMR1<<8+SUMR0;}SUM/=8;a[j++]=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 关,PGA=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。

这三个值通过MSC1211 的D/A 转换后同步输出(均使用电压输出模式)。

试编写程序实现。

解:include<Reg1211.h>data unsigned int 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=3;i=40*k/150;DAC=i*i*i;DACSEL=6;DACL=0Xfc;}}}7、利用MSC1211 或8051 设计应答方式下的多机通讯程序。

通讯参数:晶振为11.0592MHz,9600,n,8,1。

通讯过程如下:主机首先发送从机地址,从机收到地址后进行比较,如果地址相符,则将从机地址回发给主机作为应答信号。

主机收到从机的地址应答信号后,将内存单元中的120 个数据发送给从机,并进行数据块校验(将各个数据进行异或),若校验正确,则从机发送00H 给主机,否则发送0FFH 给主机,主机重新发送数据。

(应在适当的地方加程序注释)解:主机程序如下:ORG 0000HLJMP MAINT ;跳至主程序入口地址ORG 0023H ;串行口中断服务程序入口LJMP INTSTMAINT :MOV SCON,#90H ;置工作方式2,并允许接收MOV TMOD ,#20H ;置T1 工作方式 2MOV TH1 ,#0FDHMOV TL1 ,#0FDHMOV DPTR,#ADDR ;设置数据块首址ADDR 的地址指针MOV R0,#120 ;设置发送字节数MOV R1,#00H ;设置校验和的初值MOV R2,#NAMESETB TB8 ;置位TB8 位,作为发送地址桢信息特征SETB TR1SETB EA ;CPU 开中断SETB ES ;允许串行口中断MOV A ,R2 ;发送地址桢信息MOV SBUF,ASJMP $;中断服务程序INTST :MOV A ,TB8 ;判断是发送地址还是数据,若为数据则转LOOP0 CJNE A ,01H,LOOP0CLR TI ;地址桢信息发送完后清发送中断LOOP0:JB RI,LOOP1 ;检查是否是接受中断?若RI=1 则转入接受乙机发送应答信息CLR TI ;因RI=0 ,表明是甲机发送中断数据的中断请求。

CPU 响应中断,在中断服务程序中应清中断标志MOV A ,TB8;CJNE A ,#01H,LOO3 ;若为发送数据中断则转LOOP3 继续发送数据LJMP ENDT ;甲机发送一数据完毕跳至中断返回程序LOOP1 :CLR RI ;清接受中断标志MOV A ,TB8 ;判断是发送地址还是数据,若为数据则转LOOP2CJNE A ,#01H,LOOP4;若TB8 为0 则接受的为乙机数据校验应答MOV A ,SBUF ;取乙机的应答数据CJNE A ,@R2,LOOP2 ;若乙机应答信息不是从机地址,则地址传送不正确,则转LOOP2 程序重新发送地址信息,否则清TB8,发送数据CLR TB8LOOP3 :MOVX A ,@DPTR ;取下一个数MOV SBUF,A ;启动串行口,发送新的数据XRL A ,@R1MOV @R1,AINC DPTR ;修改地址指针DEC R0 ;修改发送字节数记数值CJNE R0,#00H,ENDT ;判别120 个字节数据都发送完没有。

如果没有发送完则跳至中断返回程序。

继续发送MOV A ,@R1MOV SBUF,A ;数据全部发送完毕则发送校验和LJMP ENDTLOOP4 :MOV A ,SBUF ;取乙机的应答数据CJNE A ,#00H,LOOP5 ;若数据发送不正确,则转LOOP5 重新发送CLR ES ;全部发送完毕,禁止串行口中断LOOP5:MOV DPTR,#ADDR ;设置数据块首址ADDR 的地址指针MOV R0,#120 ;设置发送字节数MOV R1,#00H ;设置校验和的初值LJMP LOOP2LOOP2 :MOV A ,R2 ;发送地址桢信息MOV SBUF,ARETIENDT :RETIEND从机程序如下:ORG 0000HLJMP MAINR ;跳至主程序入口地址ORG 0023H ;串行口中断服务程序入口LJMP INTSRMAINR :MOV SCON,#0B0H ;置工作方式2,并允许接收MOV TMOD ,#20H ;置T1 工作方式 2MOV TH1 ,#0FDHMOV TL1 ,#0FDHMOV DPTR,#ADDR ;设置数据块接收首址为ADDRMOV R0,#120 ;设置接收字节数MOV R2,#NAMEMOV R1,#00H ;设置校验和的初值SETB RB8 ;置位RB8 位,作为接受地址信息特征SETB TR1SETB EA ;CPU 开中断SETB ES ;允许串行口中断SJMP $;中断服务程序INTSR :MOV A ,RB8 ;判断是接收地址还是数据,若为数据则转LOOP0 CJNE A ,01H,LOOP0CLR RI ;地址桢信息接受完后清接收中断MOV A ,SBUFXRL A ,@R2JZ LOOP ;若地址相符则转LOOP,否则中断返回LJMP ENDRLOOP:CLR SM2CLR RB8MOV A ,@R2MOV SBUF,A ;想主机发送从机地址LJMP ENDRLOOP0:JB RI,LOOP1 ;检查是否是接受中断?若RI=1 则转入接受甲机发送的数据CLR TI ;因RI=0 ,表明是乙机发送中断数据的中断请求。

相关主题