单片机习题模板.docx

上传人:b****8 文档编号:23672826 上传时间:2023-05-19 格式:DOCX 页数:14 大小:17.51KB
下载 相关 举报
单片机习题模板.docx_第1页
第1页 / 共14页
单片机习题模板.docx_第2页
第2页 / 共14页
单片机习题模板.docx_第3页
第3页 / 共14页
单片机习题模板.docx_第4页
第4页 / 共14页
单片机习题模板.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机习题模板.docx

《单片机习题模板.docx》由会员分享,可在线阅读,更多相关《单片机习题模板.docx(14页珍藏版)》请在冰豆网上搜索。

单片机习题模板.docx

单片机习题模板

通信错误:

电源,通信电缆,端口设置

仿真器设置

仿真器:

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码。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1