单片机实训报告Word文档格式.docx

上传人:b****5 文档编号:19245581 上传时间:2023-01-04 格式:DOCX 页数:36 大小:40.82KB
下载 相关 举报
单片机实训报告Word文档格式.docx_第1页
第1页 / 共36页
单片机实训报告Word文档格式.docx_第2页
第2页 / 共36页
单片机实训报告Word文档格式.docx_第3页
第3页 / 共36页
单片机实训报告Word文档格式.docx_第4页
第4页 / 共36页
单片机实训报告Word文档格式.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

单片机实训报告Word文档格式.docx

《单片机实训报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机实训报告Word文档格式.docx(36页珍藏版)》请在冰豆网上搜索。

单片机实训报告Word文档格式.docx

结束

1.3、程序

ORG0100H

MOVDPTR,#7000H

MOVXA,@DPTR;

7000H中的内容送入A

ANLA,#0FH;

屏蔽高四位

SWAPA;

高低四位互换

MOVR0,A;

A中内容送入R0

INCDPTR;

修改地址指针

7001H中的内容送入A

ADDA,R0;

A和R0中内容相加

MOVX@DPTR,A;

A中内容送入7002H

SJMP$

END;

2、拆字程序

2.1、实训内容

把片外7000H单元中的内容拆开,高四位送入7000H中,低四位送入7001H中。

2.2、程序框图

把A中内容高低位互换后屏蔽高四位送入7001H中

A中的内容屏蔽高四位后送入7002H中

2.3、程序

ORG0000H

A中内容送入7001H

INCDPTR

3、数据传送程序

3.1、实训内容

(1)把片内RAM起始地址为30H的数据块中的内容分别送到片外RAM起始地址为7000H的数据块中,直到遇到内容为0DH时停止传送。

(2)把片内RAM起始地址为30H的数据块中的内容分别与片外RAM起始地址为7000H的数据块中的内容相交换,直到遇到内容为0DH时停止互换。

3.2、程序

(1)传送程序

ORG1000H

MOVR0,#30H;

起始地址送入R0

MOVDPTR,#7000H;

起始地址送入DPTR

LOOP1:

MOVA,@R0;

R0所指地址中的内容送入A

CJNEA,#0DH,LOOP;

A中内容与0D比较,不等转移,相等结束

SJMP$

LOOP:

MOVX@DPTR,A;

A中内容送入DPTR所指地址中

INCR0;

INCDPTR

SJMPLOOP1;

循环取数

END;

(2)互换程序

①程序一

MOVR0,#30H;

CJNE@R0,#0DH,LOOP;

内容与0D比较,不等转移,相等结束

片外RAM取出的数送入A

MOV20H,@R0;

片内RAM中取出的数送入20H暂存

MOV@R0,A;

A中内容送入R0所指地址单元中

MOVA,20H;

20H中的内容送入A

MOVX@DPTR,A;

A中内容送入DPTR所指地址单元中

INCR0;

END;

②程序二

MOV20H,@R0;

片内RAM中取出的数送入20H

MOVR1,20H;

20H中的数送入R1

MOVXA,@DPTR;

CJNER1,#0DH,LOOP;

R1中内容与0D比较,不等转移,相等结束

LOOP:

MOV@R0,A;

A中内容送入R0所指地址

MOVA,R1;

R1中内容送入A

A中内容送入DPTR所指地址

分析比较:

程序一是先比较和0D相等与否,然后判断是否互换;

而程序二是先把数取出分别寄存到不同的单元中,然后在和0D比较。

虽然两个程序都能实现互换要求,但从程序优化角度来看,程序一比较好。

4、数据排序程序

4.1、实训内容

编写并调试一个排序程序,用冒泡法将内部RAM中30H--39H中无符号数的正整数,按照从小到大的次序重新排列。

4.2、程序框图

R7-1=0?

交换标志位7FH置“1”

20H和21H中的内容交换

A≥(21H)?

R0所指地址中内容送21H

修改数据块指针

R0所指地址中内容送20H和A

R030H,R7块长-1

交换标志位7FH清零

N

Y

7FH=1?

Y

N

4.3、程序

MAIN:

MOVR0,#30H;

起始地址送数据块指针R0

MOVR7,#09H;

块长-1送R7

CLR7FH;

交换标志位清零

LOOP2:

R0所指地址中内容送20H

20H中内容送A

MOV21H,@R0;

CJNEA,21H,LOOP;

(20H)和(21H)比较

JCLOOP1;

若(20H)<

(21H),则LOOP1

若(20H)≥(21H),则两者交换

DECR0

MOV@R0,21H

SETB7FH;

交换标志位置“1”

DJNZR7,LOOP2;

若一次冒泡未完,则LOOP2

JB7FH,MAIN;

若交换标志位为1,则MAIN

SJMP$;

END

5、多分支程序

5.1、实训内容

编写一个程序,实现散转片内ROM20H中的内容(00H或01H或02H)。

5.2、分析

ROM

TAB

ROUT0

TAB+2ROUT1

TAB+4ROUT2

5.3、程序

20H送入A

RLA;

A中内容乘2

MOVDPTR,#TAB;

表头送DPTR

JMP@A+DPTR;

散转指令查表

TAB:

AJMPROUT0

AJMPROUT1

AJMPROUT2

ROUT0:

MOVA,#00H

ROUT1:

MOVA,#01H

ROUT2:

MOVA,#02H

6、多字节加法程序

6.1、实训内容

编写一个程序实现两个16进制数的加法,假设加数和被加数都是三字节,被加数在起始地址为内部RAM30H的数据块中,加数在起始地址为内部RAM40H的数据块中,且被加数的高位在30H,加数的高位在40H。

相加后的结果放入起始地址为30H的数据块中。

6.2、程序

MOVR0,#32H;

被加数低位送R0

MOVR1,#42H;

加数低位送R1

MOVR7,#03H;

字节数送R7

CLRC;

进位清零

被加数送A

ADDCA,@R1;

带进位相加

结果送到R0所指地址中

DECR0;

DECR1

DJNZR7,LOOP;

循环

MOV7FH,C;

进位送7FH中

若要进行十进制加法,需要用到十进制调整指令:

DAA。

程序如下:

MOVR0,#32H

MOVR1,#42H

MOVR7,#03H

CLRC

MOVA,@R0

ADDCA,@R1

DAA

MOV@R0,A

DJNZR7,LOOP

MOV7FH,C

7、十六进制数转为ASCII码

7.1、实训内容

16进制数0-9对应的ASCII码为30H-39H,A-F对应的ASCII码为41H-46H。

起始地址为30H的数据块中有三个16进制数,编写一个程序把它们转换成对应的ASCII码,结果放入起始地址为40H的数据块中。

7.2、程序

MOVR0,#30H;

转换前起始地址送R0

MOVR1,#40H;

转换后起始地址送R1

转换个数送R7

转换值送A

ANLA,#0FH;

CJNEA,#10,LOOP;

A和10比较

JNCLOOP2;

若A≥10,则LOOP2

ADDA,#30H;

若A<

10,则AA+30H

MOV@R1,A;

结果送到R1所指地址中

AJMPLOOP3;

转LOOP3

ADDA,#37H;

AA+37H

MOV@R1,A

AJMPLOOP3

LOOP3:

INCR0;

INCR1

DJNZR7,LOOP1;

8、P1口、P3口的应用

8.1、实训内容

从P3.3引脚每输入一个脉冲,P1口按16进制加一的方式点亮发光二极管。

P3.3用插针连至SP,P1.0--P1.7用插针连至L8--L1。

8.2、程序框图

P3.3=0?

P3.3=1?

A+1A

P1A

8.3、程序

MOVA,#00H;

00H送入A

MOVP1,A;

A中内容送P1

JBP3.3,$;

P3.3=1,则等待,否则继续

JNBP3.3,$;

P3.3=0,则等待,否则继续

INCA;

AA+1

AJMPLOOP;

9、工业顺序控制

9.1、实训内容

P1.0-P1.6控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,高电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,低电平启动。

P3.2为外故障输入模拟开关,P3.2为0时不断报警。

P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。

(1)P3.4连K1,P3.2连K2,P1.0-P1.6分别连到L1-L7,P1.7连SIN(电子音响输入端)。

(2)K1开关拔在上面,K2开关拔在上面。

(3)用连续方式从起始地址0580H开始运行程序,此时应等待开工状态。

(4)K1拔至下面(低电平),各道工序应正常运行。

(5)K2拔至下面(低电平),应有声音报警(人为设置故障)。

(6)K2拔至上面(高电平),即故障排除,程序应从刚才开始报警的那道工序继续执行。

9.2、程序框图

中断、P1口、P3口初始化

P1口全低

等开工

工序1延时

工序2延时

工序7延时

主程序框图

关输出

返回

恢复现场

故障清除了吗?

报警

保护现场

中断服务子程序框图

9.3、程序

ORG0000H

LJMPHA2S

ORG0013H

LJMPHA2S3

ORG0580H

HA2S:

MOVP1,#00H;

关各道工序

ORLP3,#00H

HA2S1:

JNBP3.4,HA2S1;

开始工作否

ORLIE,#84H;

初始化中断寄存器

ORLIP,#04H

MOVPSW,#00H

MOVSP,#53H

HA2S2:

MOVP1,#01H;

第一道工序

ACALLHA2S7

MOVP1,#02H;

第二道工序

MOVP1,#04H;

第三道工序

MOVP1,#08H;

第四道工序

MOVP1,#10H;

第五道工序

MOVP1,#20H;

第六道工序

MOVP1,#40H;

第七道工序

SJMPHA2S2;

HA2S3:

MOVB,R2;

外部中断服务程序

HA2S4:

MOV20H,#0A0H

HA2S5:

SETBP1.7;

声音报警

ACALLHA2S6

CLRP1.7

DJNZ20H,HA2S5

JNBP3.3,HA2S4;

判断故障排除否

MOVR2,B

RETI;

排除后中断返回

HA2S6:

MOVR2,#06H;

延时子程序1

ACALLDELAY

RET

HA2S7:

MOVR2,#30H;

延时子程序2

DELAY:

PUSH02H;

延时子程序

DELAY1:

PUSH02H

DELAY2:

DELAY3:

DJNZR2,DELAY3

POP02H

DJNZR2,DELAY2

DJNZR2,DELAY1

DJNZR2,DELAY

10、交通灯控制

10.1、实训内容

(1)8255A工作方式控制字

D7

D6

D5

D4

D3

D2

D1

D0

设置A口C口高B组B口C口低

方式A组方式四位方式四位

(2)发光二极管分配

L1:

南绿灯L4:

东绿灯L7:

北绿灯L10:

西绿灯

L2:

南黄灯L5:

东黄灯L8:

北黄灯L11:

西黄灯

L3:

南红灯L6:

东红灯L9:

北红灯L12:

西绿灯

(3)发光二极管对应的16进制数

L1-L8分别连PC0-PC7,L9-L12分别连PB0-PB3。

灯亮为“1”,灯不亮为“0”。

则交通灯的六种状态对应的16进制数为:

南北绿灯和东西红灯亮时:

B口08H,C口61H。

东西绿灯和南北红灯亮时:

B口03H,C口0CH。

南北绿灯亮和黄灯闪时:

(黄灯亮)B口04H,C口51H。

(黄灯灭)B口00H,C口41H。

东西绿灯亮和黄灯闪时:

(黄灯亮)B口02H,C口8AH。

(黄灯灭)B口02H,C口08H。

10.2、程序

ORG0630H

HA4S:

MOVSP,#60H

MOVDPTR,#0FF2BH

MOVA,#80H

MOVX@DPTR,A

MOVDPTR,#0FF29H

MOVA,#49H

MOVR2,#25H

LCALLDELAY

HA4S3:

MOVA,#08H

INCDPTR

MOVA,#61H

MOVR2,#55H

MOVR7,#05H

HA4S1:

MOVA,#04H

MOVA,#51H

MOVR2,#20H

MOVA,#00H

MOVA,#41H

DJNZR7,HA4S1

MOVA,#03H

MOVA,#0CH

HA4S2:

MOVA,#02H

MOVA,#8AH

DJNZR7,HA4S2

LJMPHA4S3

PUSH02H

DJNZR2,DELAY3

11、定时器中断实验

11.1、实训内容

使用P1口的P1.0--P1.7分别接L8--L1发光二极管,P3.3接T0。

采用51系列单片机内部定时器T0作为16位定时器使用。

要求编程实现L1--L8(L8为低位)发光二极管按照16进制加一的方式点亮。

计算初值

机器周期

则初值

11.2、程序

ORG000BH

LJMPTIP

ORG0100H

MOVR7,#14H;

50ms×

20=1s

MOVP1,A

MOVTMOD,#01H;

令T0为定时器方式1

MOVTH0,#3CH;

装入定时初值

MOVTL0,#0BH

SETBEA;

开中断

SETBET0;

T0中断允许

SETBTR0;

启动T0计数

TIP:

DJNZR7,TIP1;

若未到1s,则跳转到TIP1

若已到1s,则AA+1

MOVR7,#14H;

恢复初值

TIP1:

MOVTH0,#3CH;

重装定时器初值

MOVTL0,#0B0H

RETI

12、串并转换

12.1、实训内容

利用8031串行口和串行输入并行输出移位寄存器74LS164,扩展一个8位输出通道,用于驱动一个数码显示器,在数码显示器上循环显示从8031串行口输出的0--9这10个数字。

(1)将S/P区DATA插孔接BUS3区P3.0(RXD)插孔。

(2)将S/P区CLK插孔接BUS3区P3.1(TXD)插孔。

(3)将S/P区CLR插孔接MP区/SP插孔,上电时对164复位。

(4)在DVCC系统处于仿真1态即“P.”状态下,将地址000B内容改为E1B1,作为定时器0的入口地址。

(5)将状态切换为“P...”状态,从地址0790H开始连续执行程序。

(6)在扩展的一位数码管上循环显示0--9这10个数字。

12.2、程序框图

置初始常数

等待

设置T1参数

置串口模式

中断返回

调整表格指针

送串口显示

判断是否到1秒

置T0定时常数

INT_T0入口

读表格

12.3、程序

TIMEREQU01H

LJMPSTART

AJMPINT_T0

ORG0790H

START:

MOVSP,#53H

MOVTMOD,#01H

MOVTL0,#00H

MOVTH0,#4BH

MOVR0,#0H

MOVTIMER,#20

MOVSCON,#00H

CLRTI

CLRRI

SETBTR0

SETBET0

SETBEA

SJMP$

INT_T0:

PUSHACC

PUSHPSW

CLREA

CLRTR0

MOVTL0,#0H

DJNZTIMER,EXIT

MOVDPTR,#TAB

MOVA,R0

MOVCA,@A+DPT

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

当前位置:首页 > 解决方案 > 解决方案

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

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