单片机6个必做实验程序.docx
《单片机6个必做实验程序.docx》由会员分享,可在线阅读,更多相关《单片机6个必做实验程序.docx(26页珍藏版)》请在冰豆网上搜索。
单片机6个必做实验程序
第一部分软件实验
实验一二进制到BCD码转换
一、实验目的
1、掌握简单的数值转换算法
2、基本了解数值的各种表达方法
二、实验说明
单片机中的数值有各种表达方式,这是单片机的基础。
掌握各种数制之间的转换是一种基本功。
我们将给定的一个二进制数,转换成二十进制(BCD)码。
将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。
三、实验内容及步骤
1、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,选择使用伟福软件模拟器。
2、打开TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA),点击暂停按钮,观察地址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.流程图
实验四程序跳转表
一、实验目的
1、了解程序的多分支结构
2、掌握多分支结构程序的编程方法
二、实验说明
多分支结构是程序中常见的结构,在多分支结构的程序中,能够按调用号执行相应的功能,完成指定操作。
若给出调用号来调用子程序,一般用查表方法,查到子程序的地址,转到相应子程序。
三、实验内容及步骤
1、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,选择使用伟福软件模拟器。
2、打开TH4.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA),点击暂停按钮,观察地址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
第二部分硬件基础实验
实验七P1口输入、输出实验
一、实验目的
1、学习P1口的使用方法
2、学习延时子程序的编写和使用
二、实验说明
P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。
若不先对它置“1”,读入的数据是不正确的。
三、实验内容及步骤
实验
(一):
用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。
1、使用单片机最小应用系统1模块。
关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
首先进行仿真器的设置,选择仿真器型号、仿真头型号、CPU类型。
选择通信端口,点击测试串行口,通信成功既可退出设置,进行仿真。
4、打开TH7A.ASM源程序,进行编译。
编译无误后,点击全速执行按钮运行程序,观察发光二极管显示情况。
发光二极管单只从右到左轮流循环点亮。
5、把源程序编译成OBJ文件,再烧录到89C51芯片中。
实验
(二):
用P1.0、P1.1作输入接两个拨断开关,P1.2、P1.3作输出接两个发光二极管。
程序读取开关状态,并在发光二极管上显示出来。
1、用导线连接P1.0、P1.1到两个拨断开关,P1.2、P1.3到两个发光二极管。
2、打开TH7B.ASM源程序,编译无误后,全速运行程序,拨动拨断开关,观察发光二极管的亮灭情况。
向上拨为点亮,向下拨为熄灭。
3、把源程序编译成OBJ文件,再烧录到89C51芯片中。
四、流程图及源程序
1.流程图
(A)P1口循环点灯程序框图
(B)P1口输入输出程序框图
2.源程序:
(一)实验一
ORG0
Loop:
mova,#0FEh
movr2,#8
Output:
movP1,a
rla
AcallDelay
djnzr2,Output
LjmpLoop
Delay:
movr6,#0
movr7,#0
DelayLoop:
;延时程序
djnzr6,DelayLoop
djnzr7,DelayLoop
ret
end
(二)实验二
KeyLeftBITP1.0;定义
KeyRightBITP1.1
LedleftBITP1.2
LedRightBITP1.3
ORG0
SETBKeyLeft;欲读先置一
SETBKeyRight
Loop:
Movc,keyleft
MovLEDLeft,c
MOVC,KeyRight
MovLEDRIGHt,c
LJMPLoop
END
五、思考题
(1)对于本实验延时子程序
Delay:
MOVR6,0
MOVR7,0
DelayLoop:
DJNZR6,DelayLoop
DJNZR7,DelayLoop
RET
本模块使用12MHz晶振,粗略计算此程序的执行时间为多少?
六、电路图
实验十8255输入、输出实验
一、实验目的
1、了解8255芯片结构及接口方式
2、掌握8255输入、输出的编程方法
二、实验说明
了解用到的芯片引脚及功能:
8255是可编程的并行输入/输出接口芯片,通用性强且使用灵活。
8255按功能可分为三个部分,即:
总线接口电路,口电路和控制逻辑电路。
1、口电路:
8255共有三个八位口,其中A口和B口是单纯的数据口,供数据I/O口使用。
2、总线接口电路:
它用于实现8255和单片机芯片的信号连接。
(1)CS——片选信号。
(2)RD——读信号。
(3)WR——写信号。
(4)A0、A1——端口选择信号。
8255共有四个可寻址的端口,用二位编码可以实现。
3、控制逻辑电路:
它是控制寄存器,用于存放各口的工作方式控制字。
本实验是利用8255可编程并行口芯片,实现数据的输入、输出。
可编程通用接口芯片8255A有三个八位的并行的I/O口,它有三种工作方式。
本实验采用的方式为0:
PA口输出,PB口输入。
工作方式0是一种基本的输入输出方式。
在这种方式下,三个端口都可以由程序设置为输入或输出,其基本功能可概括如下:
1、可具有两个八位端口(A、B)和两个4位端口(C口的上半部分和下半部)。
2、数据输出时可以锁存,输入时不需锁存。
本实验中,8255的端口地址由单片机的P2.0、P2.1和P2.7决定。
控制口的地址为7FFFH;A口的地址为7CFFH;B口的地址为7DFFH;C口的地址为7CFFH。
三、内容及步骤
本实验分两种情况来进行:
(一)PA口作为输出口。
(二)PA口作为输出口,PB口作为输入口。
(一)PA口作为输出口,接8位发光二极管,程序功能使发光二极管单只从右到左轮流循环点亮。
1、单片机最小应用系统1的P0口接8255的D0~D7口,8255的PA0~PA7接八位逻辑电平显示,单片机最小应用系统1的P2.0、P2.1、P2.7、RD、WR分别接8255的A0、A1、CS、RD、WR,RESET接上复位电路。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。
4、打开TH10A.ASM源程序,编译无误后,全速运行程序。
发光二极管单只从右到左轮流循环点亮。
5、可把源程序编译成OBJ文件,烧录到89C51芯片中。
(二)PA口作为输出口,PB口作为输入口,PA口读入键信号送八位逻辑电平显示模块显示。
1、8255的PA0~PA7接八位逻辑电平显示,PB0~PB7口接查询式键盘模块,单片机最小应用系统1的P2.0、P2.1、P2.7、RD、WR分别接8255的A0、A1、CS、RD、WR,RESET接上复位电路。
2、打开TH10B.ASM源程序,编译无误后,全速运行程序。
按查询式键盘各键,观察发光二极管的亮灭情况,发光二极管与按键相对应,按下为点亮,松开为熄灭。
3、可把源程序编译成OBJ文件,烧录到89C51芯片中。
四、流程图及源程序
源程序如下:
(一)PA口输出:
org0h
portaequ7CFFh;A口
Portbequ7DFFh;B口
Portcequ7EFFh;C口
caddrequ7FFFh;控制字地址
mova,#80h;方式0
movdptr,#caddr
movx@dptr,a
Loop:
mova,#0FEh
movr2,#8
Output:
movdptr,#porta
movx@dptr,a
callDelay
rla
djnzr2,Output
ljmpLoop
Delay:
movr6,#0
movr7,#0
DelayLoop:
djnzr6,DelayLoop
djnzr7,DelayLoop
ret
end
(二)PA口输出,PB口输入
ORG0
PortAequ7CFFh;A口
PortBequ7DFFh;B口
PortCequ7EFFh;C口
CAddrequ7FFFh;控制字地址
SJMPSTART
START:
org30h
mova,#82h;方式0,PA,PC输出,PB输入
movdptr,#caddr
movx@dptr,a
movdptr,#PortB
movxa,@dptr;读入B口
movdptr,#PortA
movx@dptr,a;输出到A口
calldelay
SjmpSTART
end
五、思考题
试用8255PA口作为输出口,PB作为输入口,PC作为输入口完成8255的输入、输出实验(其中PA口LED数码显示,PB接拨断开关,PC接查询式键盘实验模块)。
六、电路图
实验十二5LED静态串行显示
一、实验目的
1、掌握数字、字符转换成显示段码的软件译码方法
2、静态显示的原理和相关程序的编写
二、实验电路
1、静态显示,电路中图所示。
显示器由5个LED数码管组成。
输入只有两个信号,它们是串行数据线DIN和移位信号CLK。
5个串/并移位寄存器芯片74LS164首尾相连。
每片的并行输出作为LED数码管的段码。
74LS164的引脚图如图所示;
74LS164为8位串入并出移位寄存器,1、2为串行输入端,Q0~Q7为并行输出端,CLK为移位时钟脉冲,上升沿移入一位;MR为清零端,低电平时并行输出为零。
三、实验内容及步骤
单片机的P3.0作数据串行输出,P3.1作移位脉冲输出,可参考实验十一串行数转换并行数。
1、使用单片机最小应用系统1模块,用导线连接RXD、TXD到串行静态显示模块的DIN、CLK端。
2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。
3、启动计算机,打开伟福仿真软件,进入仿真环境。
选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。
4、打开TH12.ASM源程序,编译无误后,全速运行程序。
5LED显示“89C51”。
程序停止运行时,显示不变,说明静态显示模块具有数据锁存功能。
5、可把源程序编译成OBJ文件,烧录到89C51芯片中。
四、流程图及源程序
1、流程图
2、源程序
DBUF0EQU30H;置存储区首址
TEMPEQU40H;置缓冲区首址
DINBIT0B0H;;置串行输出口
CLKBIT0B1H;;置时钟输出口
ORG0
MOV30H,#8;存入显示数据
MOV31H,#9
MOV32H,#C
MOV33H,#5
MOV34H,#1
DISP:
MOVR0,#DBUF0
MOVR1,#TEMP
MOVR2,#5
DP10:
MOVDPTR,#SEGTAB;表头地址
MOVA,@R0
MOVCA,@A+DPTR;查表指令
MOV@R1,A
INCR0
INCR1
DJNZR2,DP10
MOVR0,#TEMP;段码地址指针
MOVR1,#5;段码字节数
DP12:
MOVR2,#8;输出子程序
MOVA,@R0;取段码
DP13:
RLCA;段码左移
MOVDIN,C;输出一位段码
CLRCLK;发送移位脉冲一位
SETBCLK
DJNZR2,DP13
INCR0
DJNZR1,DP12
SJMP$
SEGTAB:
DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5
DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,B
DB58H,5EH,7BH,71H,00H,40H;C,D,E,F,,-
DELAY:
MOVR4,#03H;延时子程序
AA1:
MOVR5,#0FFH
AA:
DJNZR5,AA
DJNZR4,AA1
RET
END
五、电路图
实验十四查询式键盘
一、实验目的
1、掌握键盘和显示器的接口方法和编程方法
2、掌握键盘和八段码显示器的工作原理
3、静态显示的原理和相关程序的编写
二、实验说明
本实验提供了8个按钮的小键盘,落如果有键盘按下,则相应输出为低,如果没有键按下,则输出为高。
通过这样可以判断按下什么键。
在有键按下后,要有一定的延时,防止键盘抖动。
三、实验步骤及内容
1、用一根扁平数据线插头连接查询式键盘实验模块与八位逻辑电平显示模块,无键按下时,键盘输出全为“1”发光二极管全部熄灭,有键按下,对应发光二极管点亮。
此种电路的程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。
阵列式键盘的编程同样也有这样的问题要注意。
2、一根扁平8线插头连接查询式键盘实验模块与扫描显示实验模块。
无键按下时,LED数码显示八段全部熄灭,有键按下时,则对应LED段点亮。
3、使用静态串行显示模块显示键值。
单片机最小应用系统1的P1口接查询式键盘输出口,RXD接静态数码显示DIN,TXD接CLK。
4、安装好伟福仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头。
5、启动计算机,打开伟福仿真软件,进入仿真环境。
选择仿真器型号、仿真头型号、CPU类型;选择通信端口,测试串行口。
6、打开TH14.ASM源程序,编译无误后运行程序,在键盘上按下某个键,观察数显是否与按键值一致,键值从左至右为0~7。
7、可把源程序编译成OBJ文件,烧录到89C51芯片中。
五、流程图及源程序
1、流程图
2、源程序
ORG0000H
DBUFEQU30H
TEMPEQU40H
MOV30H,#16
MAIN:
ACALLDISP
ACALLKEY
AJMPMAIN
KEY:
MOVP1,#0FFH;输入前,锁存器置“1”
MOVA,P1;读取键盘状况
CJNEA,#0FFH,K00;有键按下
AJMPKEY;无键按下
K00:
ACALLDELAY;延时去抖动
MOVA,P1
CJNEA,#0FFH,K01;确有键按下
AJMPKEY
K01:
MOVR3,#8;8个键
MOVR2,#0;键码
MOVB,A;暂存键值
MOVDPTR,#K0TAB
K02:
MOVA,R2
MOVCA,@A+DPTR;从键值表中取键值
CJNEA,B,K04;键值比较
K03:
MOVA,P1;相等
CJNEA#0FFH,K03;等键释放
ACALLDELAY;延时去抖动
MOVA,R2;得键码
RET
K04:
INCR2;不相等,到继续访问键值表
DJNZR3,K02
MOVA,#0FFH;键值不在键值中,即多键同时按下
AJMPKEY
K0TAB:
DB0FEH,0FDH,0FBH,0F7H;键值表
DB0EFH,0DFH,0BFH,07FH
DISP:
MOVDBUF,A
MOVDBUF+1,#16
MOVDBUF+2,#16
MOVDBUF+3,#16
MOVDBUF+4,#16
MOVR0,#DBUF
MOVR1,#TEMP
MOVR2,#5
DP10:
MOVDPTR,#SEGTAB
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR2,DP10
MOVR0,#TEMP
MOVR1,#5
DP12:
MOVR2,#8
MOVA,@R0
DP13:
RLCA
MOV0B0H,C
CLR0B1H
SETB0B1H
DJNZR2,DP13
INCR0
DJNZR1,DP12
RET
SEGTAB:
DB3FH,06H,5BH,4FH,66H,6DH
DB7DH,07H,7FH,6FH,77H,7CH
DB58H,5EH,79H,71H,00H,40H
DELAY:
MOVR4,#02H
AA1:
MOVR5,#0F8H
AA:
DJNZR5,AA
DJNZR4,AA1
RET
END
五、思考题
1、程序如何确保每按一次键,只处理一次。
六、原理图
左移一位
开始