单片机习题模板.docx
《单片机习题模板.docx》由会员分享,可在线阅读,更多相关《单片机习题模板.docx(14页珍藏版)》请在冰豆网上搜索。
单片机习题模板
通信错误:
电源,通信电缆,端口设置
仿真器设置
仿真器:
lab6000通用微控制mcs51
通信设置:
com1测试串行口
保存(名称.asm),新建项目(加入模块文件,保存项目),编译,运行(F8单步运行),关闭项目
关闭项目,打开项目,编译,运行,
实验一:
MCS51单片机开发环境的应用
org0000h
ljmpstart
org0100h
start:
movr0,#40h
mova,#00h
movr1,#10h
ll:
mov@r0,a
incr0
inca
djnzr1,ll
sjmp$
1.1将数据存储器的40H~4FH的内容赋值成00H~0FH,并将40H~4FH的内容整体复制到50H~5FH。
ORG0000H
LJMPSTART
ORG0100H
START:
MOVR0,#40H
MOVA,#0H
MOVB,#10H
L:
MOV@R0,A
INCR0
INCA
DJNZB,L
MOVR0,#40H
MOVR1,#50H
MOVB,#08H
L1:
MOVA,@R0
INCR0
ADDA,@R0
MOV@R1,A
INCR0
INCR1
DJNZB,L1
END
1.2将数据存储器的40H~4FH的内容赋值成00H~0FH,并将两两相加之和送到50H~57H的数据空间中。
ORG0000h
AJMPSTART
ORG0100H
MOVR2,n
MOVA,R0
MOVR1,A
DECR2
MOVA,@R1
LOOP:
MOVR3,A
INCR1
CLRC
SUBBA,@R1
JNCLOOP1
MOVA,R1
JNCLOOP1
MOVA,@R1
SJMPLOOP2
LOOP1:
MOVA,@R3
LOOP2:
DJNCR2,LOOP
MOV@R0,A
RET
RET
END
实验二MCS-51汇编语言典型算法程序设计
2.1将从40~4F发出的16个杂乱无序的数进行从大到小的排序
ORG0000H
LJMPSTART
ORG0100H
START:
MOVA,#40H立即数传送到累加器
MOVR1,A累加器传送到寄存器
MOVA,#10H
MOVR5,A
CLRF0CLRA累加器清零
DECR5DECA累加器减1
MOVA,@R1间接寻址传送到累加器
LOOP:
MOVR3,A
INCR1寄存器加1
CLRC清进位位
MOVA,@R1
SUBBA,R3累加器内容减去寄存器内容
JCLOOP1JCrel转移
SETBF0SETBC进位位置'1'
MOVA,R3
XCHA,@R1 间接寻址和累加器交换
DECR1 寄存器减1
XCHA,@R1
INCR1
LOOP1:
MOVA,@R1
DJNZR5,LOOP 寄存器减1,不为零则转移
JBF0,START 若直接寻址位为1则转移
RET
END
RET
RET
END
实验三单片机I/O实验(2学时)
3.1P1口作输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
ORG0000H
LJMPSTART
ORG0100H
START:
MOVP1,#00H
MOVA,#01H
LOOP:
MOVP1,A
ACALLDELAY
RLA
AJMPLOOP
SJMP$
DELAY:
MOVR0,#00H
MOVR1,#00H
LL:
DJNZR0,LL
DJNZR1,LL
RET
3.2P1.0,P1.1作为输入口接两个拨动开关,P1.2,P1.3作输出口接两个发光二极管,编写程序读取开关状态,将此状态在发光二极管上显示出来。
LOOP:
MOVP1,#03H
MOVA,P1
RLA
RLA
MOVP1,A
AJMPLOOP
END
实验四单片机定时器实验(2学时)
用CPU内部定时器方式计时,实现每秒钟输出状态发生一次翻转。
ORG0000H
AJMPSTART
ORG0100H
START:
MOVTMOD,#01H
MOVB,#0AH
LOOP:
SETBTR0
JNBTF0,LOOP
CLRTF0
CLRTR0
MOVTH0,#3CH
MOVTL0,#0B0H
DJNZB,LOOP
CPLP1.0
SJMPSTART
END
实验五单片机中断实验(2学时)
5.1用单次脉冲申请中断,在中断处理程序中对输出信号进行翻转。
ORG0000H
LJMPMAIN
ORG0003H
LJMPITOP
ORG1000H
MAIN:
SETBEA
SETBEX0
SETBIT0
HERE:
SJMPHERE
ITOP:
CPLP1.0
RETI
END
5.2用单次脉冲申请中断,要求程序中对每次中断进行计数,并将计数结果显示在发光二极管上。
ORG0000H
LJMPMAIN
ORG0003H
LJMPITOP
ORG1000H
MAIN:
SETBEA
SETBEX0
SETBIT0
MOVA,00H
ITOP:
INCA
MOVP1,A
RETI
END
实验六单片机综合实验(4学时)
本实验模拟交通信号灯控制,一般情况下正常显示,当有急救车到达时,两个方向交通信号灯全红,以便让急救车通过。
设急救车通过路口时间为10秒。
急救车通过后,交通恢复正常。
本实验需用另一台PC机上的串口调试助手(或超级终端)发送“1”,表示有急救车通过。
;程序功能是利用另一台PC机通过串口发送任意字符表示有急救车到来,当有急救车到来时,路口的4个等都亮5秒,
;然后继续两个灯亮两个灯灭的路口的正常状态,正常状态是每3秒钟信号切换一次;R7为1代表有急救车通过,为0表示正常状态
;需要的硬件连线有P1.0~P1.4连发光二极管,单片机的P3.0与P3.1连EXB51仿真板旁边的RXD与TXD
;实验中的波特率是2400,需要将TH1,TL1设置为0F3H,PCON=80H。
;(实验中的波特率是110,所以TH1,TL1设置为72H,PCON=00H。
波特率越小,误差越小)
ORG0000H
LJMPSTART
ORG000BH
LJMPTIME0
ORG0023H
LJMPINT
ORG1000H
START:
SETBP1.0
SETBP1.1
CLRP1.2
CLRP1.3
MOVSP,#60H
MOVTMOD,#21H
MOVTL0,#0B0H
MOVTH0,#03CH
MOVR0,#30
MOVR2,#50
SETBEA
SETBET0
SETBPS
SETBES
SETBTR0
MOVR7,#0H
ACALLRECV
AJMP$
TIME0:
PUSHPSW
CJNER7,#0H,SOS
DJNZR0,TIMEOUT
MOVR0,#30
CPLP1.0
CPLP1.1
CPLP1.2
CPLP1.3
MOVB,P1
TIMEOUT:
MOVTL0,#0B0H
MOVTH0,#03CH
SETBTR0
POPPSW
RETI
SOS:
DJNZR2,TIMEOUT
MOVR2,#50
MOVP1,B
MOVR7,#0H
POPPSW
RETI
RECV:
;MOVTH1,#0FAH
;MOVTL1,#0FAH
MOVTH1,#0F3H
MOVTL1,#0F3H
MOVPCON,#80H
SETBTR1
MOVSCON,#50H
MOVIE,#92H
RET
INT:
PUSHPSW
PUSHACC
CLRTR0
MOVA,SBUF
JNBRI,$
CLRRI
MOVSBUF,A
JNBTI,$
CLRTI
MOVP1,#0FH
MOVR7,#01H
SETBTR0
POPACC
POPPSW
RETI
实验七单片机C语言实验(2学时)
7.1利用INT0中断对P1.0引脚做翻转,使小灯循环亮、灭。
#include
sbitLED=P1^0;
bitLEDBuf;//定一个位
voidExtInt0()interrupt0//定义函数ExtInt使用外中断
{
LEDBuf=!
LEDBuf;//取反
LED=LEDBuf;
}
voidmain()
{
LEDBuf=0;
LED=0;
TCON=0x01;//外部中断0下降沿触发
IE=0x81;//打开外部中断允许位(EX0)及总中断允许位(EA)
while
(1);
}
7.2对INT0中断次数进行计数,将计数结果通过P1口送到发光二极管上显示
#include
chara;
voidExtInt0()interrupt0
{
a=1+a;
P1=a;
}
voidmain()
{
a=0;
TCON=0x01;//外部中断0下降沿触发
IE=0x81;//打开外部中断允许位(EX0)及总中断允许位(EA)
while
(1);
}
变成外部中断1:
#include
chara;
voidExtInt0()interrupt2
{
a=1+a;
P1=a;
}
voidmain()
{
a=0;
TCON=0x04;//外部中断0下降沿触发
IE=0x84;//打开外部中断允许位(EX0)及总中断允许位(EA)
while
(1);
}
设十位数的ASCII码为X,个位数的ASCII码为Y,
MOVA,#Y;将个位数的ASCII码送A
CLRC;减法运算前清借位标志
SUBBA,#30H;将个位数的ASCII码减去0的ACCII码30H,得个位数字
MOVR0,A;将个位数送R0暂存
MOVA,#X;将十位数的ASCII码送A
CLRC;减法运算前清借位标志
SUBBA,#30H;将十位数的ASCII码减去0的ACCII码30H,得十位数字
SWAPA;将A的高4位与低4位交换,使A的高4位为压缩BCD码表示的十位数
ANLA,#F0H;将A的低4位清零(加入这条指令是为了便于阅读,亦可省略)
ORLA,R0;将个位数合并到A,使A的低4位为压缩BCD码表示的个位数
;;以上程序运行结果,累加器A中保存的是两位十进数的压缩BCD码。