机电一体化《单片机原理与应用》山东大学网络教育考试模拟题与问题详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机原理及应用》
除非特别声明,编程题可以使用汇编语言编写,也可以使用 C 语言编写1、分析程序的执行结果,将结果填写到空格中。
ORG 0000H
MOV 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= 00H )
POP B
ADD A,B ;(A= 37H B= 19H )
MOV 30H,A ;(30H 单元的内容= 37H ) MOV
20H,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 LOOP
2、将MCS51 内部RAM60H ~65H 单元存放的12 个16 进制数变为ASCII 码,
放到0090H单元开始的外部RAM 中。[使用汇编语言编写]
MAIN :
MOV R0,#60H
MOV R2,#6
MOV DPTR, #0090H
HASC: 标准
MOV A,@R0
ANL A,#0FH ;屏蔽高四位
ADD A,#0DH
MOVC A,@A+PC ;查表低四位转换为ASCII 码
MOVX @DPTR,A ;送如外部RAM
INC DPTR MOV
A,@R0
ANL A,#0F0H SWAP
A ADD A,#6
MOVC,@A+PC ;高四位转换为ASCII 码
MOVX @DPTR,A
INC R0
INC DPTR DJNZ
R2,HASC
END
ASCTAB:DB 30H 31H 32H 33H 34 H 35H 36H 37H 38H 39H
DB41H 42H 43H 44H 45H 46H
3、某一故障检测系统,当出现故障 1 时,线路1 上出现上升沿;当出现故障 2
时,线路2 上出现下降沿。没有故障时,线路1 为低电平,线路2 为高电平。
出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用MSC1211 为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。
4、用MSC1211 的T0 定时/计数器,设计程序,实现在P1.0 输出周期为200ms
的占空比为1:1 的方波,输出500 个方波后停止输出。
解:ORG 0000H
LJMP MAIN
ORG 000BH ;T0 口中断服务程序入口地址
LJMP INT_T0
MAIN :MOV TMOD ,#00H ;T0 工作于方式0 定时
MOV TL0 ,#0CH
MOV TH0 ,#1EH ;设定秒中断周期为1ms
MOV A ,200 ;设定输出周期为200 ms
MOV R2,1000 ;输出500 个方波
SETB TR0
标准
SETB ET0
SETB EA
SETB P1.0
SJMP $
INT_T0 :MOV TL0 ,#0CH
MOV TH0 ,#1EH ;T0 重装时间常数
CPL P1.0 P1.0 位取反
DEC R2
JZ ENDP ;若R2 为0,则结束程序,否则返主程序继续输出
RETI ;返主程序
ENDP:END
5、利用MSC1211的A/D 构成数据采集系统。使用模拟通道0 进行连续数据采
集,采集8 次后取得平均值,存放到预先分配好的100 个内存单元中,这100 个单元存满后,再从第一个单元进行覆盖保存。写出完整的程序清单(应在适当的地方加程序注释)。
解:#include
#include
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;