单片机实验讲义.docx

上传人:b****6 文档编号:7757969 上传时间:2023-01-26 格式:DOCX 页数:48 大小:344.49KB
下载 相关 举报
单片机实验讲义.docx_第1页
第1页 / 共48页
单片机实验讲义.docx_第2页
第2页 / 共48页
单片机实验讲义.docx_第3页
第3页 / 共48页
单片机实验讲义.docx_第4页
第4页 / 共48页
单片机实验讲义.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

单片机实验讲义.docx

《单片机实验讲义.docx》由会员分享,可在线阅读,更多相关《单片机实验讲义.docx(48页珍藏版)》请在冰豆网上搜索。

单片机实验讲义.docx

单片机实验讲义

单片机实验讲义

电信学院

第一章单片机软件实验

实验一存储器块清零

一、实验目的

1.掌握存储器读写方法

2.了解存储器块的操作方法

二、实验说明

本实验指定某块存储器的起始地址和长度,要求能将其内容清零。

通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。

三、实验内容及步骤

1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。

2.启动PC机,打开KEIL软件(KEIL软件使用见附录一),软件设置为模拟调试状态。

在所建的Project文件中添加TH1.ASM源程序进行编译,编译无误后,打开数据窗口,选择外部数据存储器窗口XDATA,观察8000H(MEMORY#2窗口输入X:

8000H后回车)起始的256个字节单元的内容,若全为0,则点击各单元,用键盘输入不为0的值。

按程序提示设置断点,执行程序,点击全速执行快捷按钮,点击暂停按钮,观察存储块数据变化情况,256个字节全部清零(红色)。

点击复位按钮,可再次运行程序。

3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.源程序

ORG0000H

STARTEQU8000H

MOVDPTR,#START;起始地址

MOVR0,#0;设置256字节计数值

CLRA

Loop:

MOVX@DPTR,A

INCDPTR;指向下一个地址

DJNZR0,Loop;计数值减一

NOP

LJMP$

END

 

2.流程图

 

 

五、思考题

如何将存储器块的内容置成某固定值(例全填充为0FFH)?

请用户修改程序,完成此操作。

实验二二进制BCD码转换

一、实验目的

1.掌握简单的数值转换算法

2.基本了解数值的各种表达方法

二、实验说明

单片机中的数值有各种表达方式,这是单片机的基础。

掌握各种数制之间的转换是一种基本功。

我们将给定的一字节二进制数,转换成二十进制(BCD)码。

将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。

三、实验内容及步骤

1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。

2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA)(在MEMORY#1中输入D:

30H回车),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。

用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。

修改源程序中给累加器A的赋值,重复实验,观察实验效果。

3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.源程序

RESULTEQU30H

ORG0000H

LJMPSTART

BINTOBCD:

MOVB,#100

DIVAB

MOVRESULT,A;除以100得百位数

MOVA,B

MOVB,#10

DIVAB

MOVRESULT+1,A;余数除以10得十位数

MOVRESULT+2,B;余数为个位数

RET

START:

MOVSP,#40H

MOVA,#123

CALLBINTOBCD

LJMP$

END

2.流程图

 

实验三二进制ASCII码转换

一、实验目的

1.了解BCD值和ASCII值的区别

2.掌握用查表的方法将BCD值转换成ASCII值

二、实验说明

此实验主要让学生了解数值的BCD码和ASCII码的区别,利用查表方法可以快速地进行数值转换。

进一步掌握数值的各种表达方式。

现在我们给出一个BCD数,将其转换成ASCII值。

如下:

将累加器A的值拆为二个ASCII码,并存入Result开始的二个单元,例程A赋值#1AH。

三、实验内容及步骤

1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。

2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH3.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA)(在MEMORY#1中输入D:

30H回车),点击暂停按钮,观察地址30H、31H的数据变化,30H更新为31,31H更新为41。

用键盘输入改变地址30H、31H的值,点击复位按钮后,可再次运行程序,观察其实验效果。

修改源程序中给累加器A的赋值,重复实验,观察实验效果。

3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.源程序

RESULTEQU30H

ORG0

LJMPSTART

ASCIITAB:

DB‘0123456789ABCDEF';定义数字对应的ASCII表

BINTOHEX:

MOVDPTR,#ASCIITAB

MOVB,A;暂存A

SWAPA

ANLA,#0FH;取高四位

MOVCA,@A+DPTR;查ASCII表

MOVRESULT,A

MOVA,B;恢复A

ANLA,#0FH;取低四位

MOVCA,@A+DPTR;查ASCII表

MOVRESULT+1,A

RET

START:

MOVSP,#40H

MOVA,#1AH

CALLBINTOHEX

LJMP$

END

2.流程图

 

实验四程序跳转表

一、实验目的

1.了解程序的多分支结构

2.掌握多分支结构程序的编程方法

二、实验说明

多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。

若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。

三、实验内容及步骤

1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。

2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH4.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA)(在MEMORY#1中输入D:

30H回车),点击暂停按钮,观察地址30H、31H、32H、33H的数据变化,30H更新为0,31H更新为1,32H更新为2,33H更新为3。

用键盘输入改变地址30H、31H、32H、33H的值,点击复位按钮后,可再次运行程序,观察其实验效果。

修改源程序中给30H~33H的赋值,重复实验,观察实验效果。

3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.流程图

 

2.源程序

ORG0

LJMPSTART

FUNC0:

MOV30H,#0

RET

FUNC1:

MOV31H,#1

RET

FUNC2:

MOV32H,#2

RET

FUNC3:

MOV33H,#3

RET

FUNCENTER:

ADDA,ACC;AJMP为二字节指令,调用号×2

MOVDPTR,#FUNCTAB

JMP@A+DPTR

FUNCTAB:

AJMPFUNC0

AJMPFUNC1

AJMPFUNC2

AJMPFUNC3

START:

MOVA,#0

CALLFUNCENTER

MOVA,#1

CALLFUNCENTER

MOVA,#2

CALLFUNCENTER

MOVA,#3

CALLFUNCENTER

LJMP$

END

实验五内存块移动

一、实验目的

1.了解内存块的移动方法

2.加深对存储器读写的认识

二、实验说明

块移动是单片机常用操作之一,多用于大量的数据复制和图象操作。

本程序是给出起始地址,用地址加一方法移动块,将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。

移动3000H-->4000H,256字节。

三、实验内容及步骤

1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。

2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加“TH5.ASM”源程序进行编译,编译无误后,打开数据窗口(XDATA),观察地址3000H(MEMORY#2窗口输入X:

3000H难后回车),起始256个字节存储块和4000H(MEMORY#2窗口输入X:

4000H难后回车),起始的256个字节存储块,若各单元内数据对应相同,则用键盘输入改变其中一块的数据,全速运行程序。

点击暂停按钮,观察两个存储块的数据,可以看到两块数据已相同,说明存储块已移动。

3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)

1.源程序

ORG0

MOVR0,#30H

MOVR1,#00H

MOVR2,#40H

MOVR3,#00H

MOVR7,#0

LOOP:

MOVDPH,R0

MOVDPL,R1

MOVXA,@DPTR

MOVDPH,R2

MOVDPL,R3

MOVX@DPTR,A

INCR1

INCR3

DJNZR7,LOOP

LJMP$

END

 

2.流程图

 

 

五、思考题

1.若源块地址和目标块地址有重叠,该如何避免?

2.请思考给出块结束地址,用地址减一方法移动块的算法。

实验六数据排序

一、实验目的

掌握排序程序的设计方法。

二、实验内容

本例程采用交换排序法将内部RAM中的50~59H单元中的10个单字节无符号二进制数按从小到大的次序排列,并将这一列排序后的数据从小到大依次存贮到外部RAM1000H开始处。

三、实验步骤

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH6.ASM文件,打开TH6.ASM文件,阅读、分析、理解程序,编译程序进行调试。

2.在VIEW菜单中打开MEMORYWINDOW数据窗口,分别观察50H(在MEMORY#1中输入D:

50H)、1000H(MEMORY#2窗口输入X:

1000H)。

3.可在程序指令NOP处设置断点,在第一个断点处可观察50~59H单元内容是否为10个任意排列原始数据。

4.在第二个断点处可观察每次排序的结果。

5.可单步执行程序观察排序过程。

四、实验参考程序(见光盘中的程序文件夹)

ORG0000H

JMPMAIN

ORG0100H

MAIN:

MOVR0,#50H

MOV@R0,#5FH

INCR0

MOV@R0,#56H

INCR0

MOV@R0,#5AH

INCR0

MOV@R0,#5EH

INCR0

MOV@R0,#51H

INCR0

MOV@R0,#5BH

INCR0

MOV@R0,#53H

INCR0

MOV@R0,#58H

INCR0

MOV@R0,#57H

INCR0

MOV@R0,#55H;将10个随机数送入内部RAM的50~59H单元

NOP;可在此处设置断点

ACALLQUE;调用排序子程序

OUT:

MOVR0,#50H

MOVDPTR,#1000H

MOVR7,#10

OUT1:

MOVA,@R0

MOVX@DPTR,A

INCR0

INCDPTR

DJNZR7,OUT1

HERE:

AJMPHERE

NOP;可在此处设置断点,观察每次排序结果

QUE:

CLR00H;清交换标志

MOVR1,#50H

MOVR6,#09H

I3:

MOVA,R6

MOVR7,A

MOVA,R1

MOVR0,A

MOVA,@R0

I2:

INCR0

MOVR2,A

SUBBA,@R0

MOVA,R2

JCI1

SETB00H

XCHA,@R0

I1:

DJNZR7,I2

JNB00H,STOP

MOV@R1,A

INCR1

DJNZR6,I3

RET

END

实验七拆字/拼字实验

一、实验目的:

掌握汇编语言设计和调试方法。

二、实验内容:

1、将片外RAM中地址为7000H中的内容拆开,高位送7001H低位,低位送7002H低位。

2、将片外RAM中地址为7000H、7001H中的内容拼入7002H(7000H低位送7002H高位,7001H低位送7002H低位)。

三、实验程序流程图及参考程序:

org0000h

ajmpstart

org0040h

start:

movdptr,#7000h

movxa,@dptr

anla,#0fh

swapa

movr2,a

incdptr

movxa,@dptr

anla,#0fh

adda,r2

incdptr

movx@dptr,a

sjmp$

end

4、拆字

org0000h

ajmpstart

org0040h

start:

movdptr,#7000h

movxa,@dptr

movr2,a

anla,#0f0h

swapa

incdptr

movx@dptr,a

mova,r2

anla,#0fh

incdptr

movx@dptr,a

sjmp$

end

四、实验步骤:

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH7.ASM文件,打开TH7.ASM文件,阅读、分析、理解程序,编译程序进行调试。

2.在VIEW菜单中打开MEMORYWINDOW数据窗口,分别观察7000H、7001H、7002H(在MEMORY#1中输入X:

7000H)。

3.察看拼字/拆字结果。

4.可单步执行程序观察每个过程。

 

实验八数据排序

一、实验目的:

熟悉80C51单片机的指令系统和程序设计方法。

二、实验内容:

编写并调试一个排序程序,其功能为用起泡排序将内部RAM中首地址为30H中的10个无符号数,按从小到大的顺序排列。

三、实验程序流程图:

 

四、实验步骤:

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH8.ASM文件,打开TH8.ASM文件,阅读、分析、理解程序,编译程序进行调试。

2.在VIEW菜单中打开MEMORYWINDOW数据窗口,分别观察30H~3FH(在MEMORY#1中输入D:

30H)。

3.察看排序结果。

4.可单步执行程序观察排序过程。

 

排序

org0000h

ajmpstart

org0040h

start:

acallchushi

movr6,#09h

ss0:

mova,r6

movr7,a

setbf0

movr0,#30h

movr1,#31h

ss1:

mova,@r0

clrc

subba,@r1

jcnext

clrf0

mova,@r0

xcha,@r1

mov@r0,a

next:

incr0

incr1

djnzr7,ss1

jbf0,exit

djnzr6,ss0

exit:

sjmp$

chushi:

movr0,#30h

movdptr,#array

movr7,#0ah

ss2:

clra

movca,@a+dptr

mov@r0,a

incr0

incdptr

djnzr7,ss2

ret

array:

db2,8,4,7,5,1,0,9,3,6

end

 

实验九数据查找

一、实验目的:

熟悉汇编程序设计。

二、实验内容:

在7000H~700FH中查出有几个字节为零,并统计零的个数放到内部RAM的30H单元中。

三、实验程序流程图:

四、实验步骤:

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH9.ASM文件,打开TH9.ASM文件,阅读、分析、理解程序,编译程序进行调试。

2.在VIEW菜单中打开MEMORYWINDOW数据窗口,分别观察30H(在MEMORY#1中输入D:

30H)。

3.察看“0”的个数。

4.可单步执行程序观察查找过程。

数据查找

org0000h

ajmpmain

org0040h

main:

acallchushi

mov30h,#00h

movdptr,#7000h

movr7,#10h

ss1:

movxa,@dptr

jnzss2

inc30h

ss2:

incdptr

djnzr7,ss1

sjmp$

chushi:

movdptr,#7000h

movr7,#10h

clra

next:

movx@dptr,a

cpla

incdptr

djnzr7,next

ret

end

 

实验十无符号双字节乘法

一、实验目的:

掌握80C51单片机汇编程序设计方法。

二、实验内容:

编写程序利用单字节乘法指令,实现双字节乘法运算(R2R3)*(R6R7)—〉(30H~33H)。

三、实验程序流程图:

四、实验步骤:

1.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH10.ASM文件,打开TH10.ASM文件,阅读、分析、理解程序,编译程序进行调试。

2.在VIEW菜单中打开MEMORYWINDOW数据窗口,分别观察30H~33H(在MEMORY#1中输入D:

30H)。

3.察看“0”的个数。

4.可单步执行程序观察每个过程。

16位无符号乘法:

org0000h

ajmpmain

org0040h

main:

acallchushi

mov30h,#00h

mov31h,#00h

mov32h,#00h

mov33h,#00h

mova,r3

movb,r7

mulab

mov33h,a

mov32h,b

mova,r2

movb,r7

mulab

adda,32h

mov32h,a

mova,b

addca,31h

mov31h,a

mova,r3

movb,r6

mulab

adda,32h

mov32h,a

mova,b

addca,31h

mov31h,a

clra

addca,30h

mov30h,a

mova,r2

movb,r6

mulab

adda,31h

mov31h,a

mova,b

addca,30h

mov30h,a

sjmp$

chushi:

movr2,#12h

movr3,#34h

movr6,#56h

movr7,#78h

ret

end

 

第二章单片机基础实验

实验一P1口输入、输出实验

一、实验目的

1.学习P1口的使用方法

2.学习延时子程序的编写和使用

二、实验说明

P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。

三、实验内容及步骤

实验

(一):

本实验需要用到单片机最小应用系统(F1区)和十六位逻辑电平显示模块(I4区)。

用P1口做输出口,接十六位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。

1.使用单片机最小应用系统。

用扁平数据线连接单片机P1口JD1F与十六位逻辑电平显示模块JD2I,打开相关模块电源。

2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

3.打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“TH7_P1A.ASM”源程序,进行编译,直到编译无误。

4.进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

5.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序,观察发光二极管显示情况。

发光二极管单只从右到左轮流循环点亮。

实验

(二):

本实验需要用到单片机最小应用系统(F1区)、十六位逻辑电平显示模块(I4区)以及八位逻辑电平输出模块(B1区)。

用P1.0、P1.1作输入接两个拨断开关,P1.2、P1.3作输出接两个发光二极管。

程序读取开关状态,并在发光二极管上显示出来。

1.用导线分别把单片机最小应用系统的P1.0、P1.1连接到两个拨断开关(B1区)K0、K1,P1.2、P1.3连接到两个发光二极管(I4区)L0、L1。

2.打开“TH7_P1B.ASM”源程序,编译无误后,全速运行程序,拨动拨断开关,观察发光二极管的亮灭情况。

向上拨为熄灭,向下拨为点亮。

3.也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。

(ISP烧录器的使用查看附录二)

注:

在做完实验时记得养成一个好习惯:

把相应单元的短路帽和电源开关还原到原来的位置!

以下将不再重述。

四、流程图及源程序

 

1.流程图

 

(B)P1口输入输出程序框图

(A)P1口循环点灯程序框图

2.实验参考程序(见光盘中的程序文件夹)

五、思考题

(1)对于本实验延时子程序

Delay:

MOVR6,0

MOVR7,0

DelayLoop:

DJNZR6,DelayLoop

DJNZR7,DelayLoop

RET

本模块使用12MHz晶振,粗略计算此程序的执行时间为多少?

六、电路图

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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