《单片机原理与嵌入式设计》实验讲义Word文件下载.docx
- 文档编号:18923966
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:41
- 大小:138.33KB
《单片机原理与嵌入式设计》实验讲义Word文件下载.docx
《《单片机原理与嵌入式设计》实验讲义Word文件下载.docx》由会员分享,可在线阅读,更多相关《《单片机原理与嵌入式设计》实验讲义Word文件下载.docx(41页珍藏版)》请在冰豆网上搜索。
MOVXA,@DPTR
MOV@R0,A
INCR0
INCDPTR
DJNZR7,LOOP
HERE:
SJMPHERE
END
实训步骤
(1)按照所给存储地址,将机器语言程序存入单片机开发系统。
(2)检查存入的程序是否正确。
(3)分析每条指令的结果。
(4)用单步执行键执行每条指令,并与分析结果相比较,二者一致后,将最后结果填入表中,并注明指令中源操作数的寻址方式。
(5)注意:
以.ASM为扩展名保存文件。
在单步运行前一定要在外部寄存器既DATA、XDATA、CPU的相应的单元地址内预先键入数据。
提示:
上机前,应熟悉指令的格式,要求看到指令助记符就能说出指令的功能。
1)弄清汇编语言指令与机器语言指令的关系。
2)牢固掌握MCS-51单片机内部寄存器和存储器结构。
实验二、加法及十进制调整、乘法和除法指令
MOV20H,#11H
MOVR0,#0ABH
MOVR0,A
ADDA,R0
ADDA,20H
ADDA,#0CDH
ADDCA,R0
ADDCA,20H
INCR0
INCA
ADDCA,@R0
INC20H
INC@R0
ADDCA,#0B2H
ADDA,@R0
MOVDPTR,#4000H
INCDPTR
MOVX@DPTR,A
END
MOVA,#75H
ADDA,#99H
DAA
MOVR0,#70H
END
(1)检查存入的程序是否正确。
(2)分析每条指令的结果。
思考与讨论
如何实现BCD码减2或减3的操作?
写出指令段并上机调试。
实验三、逻辑操作、位操作指令
1)、逻辑操作
MOVA,#98H
MOVR1,#20H
MOV20H,#0AAH
MOV50H,#19H
ANLA,R1
ORLA,R1
CPLA
ANLA,#66H
ORLA,50H
XRL50H,A
RLA
ANL50H,#99H
ANLA,@R1
INCR0
ORLA,@R1
XRLA,@R1
使用逻辑操作指令实现图组合逻辑电路的功能,并上机调试。
图组合逻辑电路
逻辑操作指令实际上是按位操作指令,只对相应位操作,对其它位不影响。
弄清二进制加法运算和逻辑“或”运算的区别。
要实现某一种逻辑操作,是在对应位之间实现的。
要掌握逻辑指令的功能,首先应掌握各种逻辑运算规则。
2)、位操作指令
源程序
ORG3000H
MOVP1,#5BH
MOV40H,#29H
CLRA
MOV60H,A
MOVA,#55H
A1:
INC40H
CLRC
ADDCA,#26H
JNCA1
CPLC
ORLC,/ACC.4
XRLP1,#0FFH
JBCP1.7,A2
A3:
INC60H
A2:
ANLC,/ACC.3
ADDA,#58H
CPLP1.6
JNBACC.6,A3
SETBC
实验四、顺序程序设计
1)多字节加法实训程序
MOVA,30H
ADDA,40H
MOV50H,A
MOVA,31H
ADDCA,41H
MOV51H,A
MOVA,32H
ADDCA,42H
MOV52H,A
MOVA,33H
ADDCA,43H
MOV53H,A
MOV00H,C
ANL20H,#01H
MOV54H,20H
2)双字节乘法实验程序
MOVA,R3
MOVB,R7
MULAB
MOVR4,B
MOVR5,A
MOVB,R6
ADDA,R4
MOVR4,A
CLRA
ADDCA,B
MOVR3,A
MOVA,R2
RLCA
XCHA,R2
ADDA,R3
MOVR2,A
END
(1)阅读并理解程序,并画出两个程序的流程图。
(2)将机器码送入单片机系统中,并检查是否正确。
(3)对于多字节加法实训程序,运行程序前,将两个四字节数据分别送入30H和40H开始的单元中。
(4)单步执行程序,并将运行结果记录在表3-3中。
12345678H+23456789H=?
ABCDEF01H+94398271H=?
2A3B4C5DH+3F4E5D6CH=?
(5)对于双字节乘法实训程序,运行程序前,将被乘数和乘数分别送入工作寄存器R2、R3和R6、R7中,执行程序,并记录结果。
程序运行结果表格请读者自行设计。
实验五、循环程序设计
1.编制将片内RAM从30H开始的五十个单元置数据88H的程序。
2.编制数组排序程序:
将片内RAM50H单元开始的十个单元内数据从小到大排序。
源程序:
1.将片内RAM30H开始的五十个单元置数据88H程序
MOVR7,#50
MOVR0,#30H
MOVA,#88H
A1:
MOV@R0,A
DJNZR7,A1
2.将片内RAM50H单元开始的十个单元内数据从小到大排序。
STA:
CLRF0
MOVR3,#9
MOVR0,#50H
INCR0
SUBBA,@R0
MOVA,R1
JCA2
SETBF0
XCHA,@R0
DECR0
MOVA,@R0
DJNZR3,A1
JBF0,STA
AJMP$
实验六、闪烁灯控制
1、实验目的:
1)熟悉炜煌单片机实验板的结构和用法
2)利用P1口输出控制LED灯亮
3)熟悉伟福和炜煌实验设备的连接使用。
2、实验设备:
装有伟福仿真软件的计算机、伟福、炜煌实验设备各一台。
插座排一个。
3、实验步骤:
1)不通电,检查设备的完好性
2)无误,用专用导线将炜煌实验板上的S1—S8与L1—L8连接
3)连接计算机与伟福、伟福与炜煌实验设备
4)接通实验板电源,打开炜黄煌的电源开关。
5)分别拨动S1-S8开关,观察L1—L8的亮灭情况
6)断开炜煌电源,将S1—S8接线拔下,换接在P1.0—P1.7脚。
7)重新打开炜煌电源,在伟福软件环境中调试程序,观察程序运行情况,各状态正常后,再进行硬件仿真。
8)打开计算机进入伟福硬件仿真环境,选择CPU型号8031、仿真头型号选E51/L,并去掉软件仿真复选框中的“对号”,进入硬件仿真工作状态。
实验参考程序
ORG00H
AJMPSTART
ORG30H
MOVSP,#60H
MOVA,#0FEH
MOVP1,A
ACALLDELAY
RLA
LJMPLOOP
DELAY:
MOVR1,#10
DEL1:
MOVR2,#200
DEL2:
MOVR3,#248
DEL3:
DJNZR3,DEL3
DJNZR2,DEL2
DJNZR1,DEL1
RET
注意:
该程序内用到延时程序,左移,循环,P1口控制。
不能带电拔插接线。
通电状态不要用手摸芯片,以防静电击穿,损坏设备。
注意保证正确接线方式。
实验七、闪烁灯控制
8个发光二极管LED0~LED1经限流电阻R0~R7分别接至P1口8个引脚,阴极共同接地。
编程实现发光二极管按走马灯点亮,即按照LED0→LED1…→LED7的顺序,每次点亮一个发光二极管,一段时间后熄灭该发光二极管,然后点亮下一个发光二级管,重复循环。
/*
#include“reg51.h”//头文件
#defineLedportP1//宏定义P1口为Ledport
voiddelay(unsignedinti)//延时函数
{
while(i--);
}
main()//主函数
unsignedcharPortData=0x01;
//初始化寄存器数值
while
(1)
{
Ledport=PortData;
//将数据送到P1口,点亮二极管
delay(60000);
//调延时
PortData=PortData<
<
1;
//左移一位
if(PortData==0x00)
{PortData=0x01;
实验八、用中断控制P1口使LED循环亮程序
一.实验目的:
1.进一步熟悉MCS—51单片机软硬件仿真调试方法。
2.了解中断控制过程。
3.进一步掌握P1口输出控制方法。
二.实验设备:
装有伟福仿真软件的计算机、仿真仿真器、炜煌实验板各一个。
插座排一个,导线若干。
三、实验要求
自编程序,使用单脉冲做中断源,每按一次按钮,点亮的发光二极管向右移动一位。
L1L
P1.0
INT1
L8L
P1.7
三.试验步骤:
1.在不通电时检查设备完好性。
2.用导线将S1—S8和L1—L8一一对应连接。
3.接通炜煌实验板的电源,并打开电源开关。
4.分别拨动S1—S8开关,观察LED1—LED8的亮灭情况。
5.关掉上述电源开关。
将S1—S8接线拿下来,接在P0.0—P0.7上。
L1—L8端不动。
6.在用一根导线将S1引脚与P3.3(INT1)引脚连接。
7.连接计算机与仿真器,仿真器与实验板。
8.接通电源,进入伟福软件仿真环境。
编辑录入实验程序,进行软件仿真,并观察记录现象。
(此时,实验板电源不要打开)
9.接通实验板电源,进入伟福硬件仿真环境。
运行编译好的目标程序并观察记录实验结果和现象。
四.试验程序
ORG00H
ORG13H
AJMPINTP
MOVSP,#60H
MOVA,#0FEH
SETBIT1
MOVIE,#84H
MOVP1,#0FEH
HERE:
NOP
SJMPHERE
INTP:
MOVP1,A
RLA
CLRIE
RETI
五.试验注意:
1.不能带电拔插。
2.不能在通电时用手摸芯片。
3.保证正确接线。
4.一.ASM存源程序。
编译后调入,连续执行。
实验九、用中断控制P1口使LED循环亮程序
若规定外部中断1为边沿触发方式,低优先级,在中断服务程序中将寄存器B的内容左循环移一位,B的初值设为01H。
试编写主程序与中断服务程序。
*/
#include“reg51.h”//51寄存器头文件
#include“intrins.h”//内部函数,包括循环函数和_nop_()函数和_testbit_()
unsignedcharB;
//B寄存器
voidInt1_Function()intterrupt2//外部中断1服务子程序
_crol_(B,1);
//循环左移1位。
voidmain()//主程序
EA=1;
//开中断
EX1=1;
//允许外中断1中断
PX1=0;
//设为低优先级
IT1=1;
//边沿触发
B=0x01;
//设B的初值
while
(1);
//循环等待中断
实验十、用定时器控制LED灯亮灭实验
一.试验目的:
1.了解掌握定时器的编程及应用方法,理解根据需要开放定时器中断。
2.调试用定时器控制LED灯亮灭程序。
3.进一步了解软、硬件仿真调试方法。
二.实验设备
1.装有伟福仿真软件的计算机、伟福仿真器、炜煌实验板各一台。
2.插座排版一个。
导线若干。
三.实验项目内容
利用MCS—51单片机内可编程的定时器/计数器工作于定时方式,利用P1口输出给LED发光二极管,一个发光二级管的点亮时间表示一次定时时间,当完成一次定时后,P1口点亮的发光二极管由左向右依次发亮。
循环不止。
要求:
使用定时器1,按方式1工作,本试验的时钟频率为12MHz,延时1秒.
提示:
可采用定时器定时0.05秒,cpu响应中断后R0中计数值减一,令(R0)=14H,即可实现1秒的延时.请自编程序。
四、实验步骤
1.将P1.0—P1.7与L1—L8依次相联。
2.先用软件仿真调试程序,检查各语句执行情况。
3.在用硬件仿真运行并观察灯的亮灭状态。
并记录现象。
五、思考题
1.欲将发光顺序改为由右向左依次发亮应采用何种办法?
2.将发光顺序改为两个一组一次发亮又如何改动?
3.与改动灯的发光时间应改动程序何处?
4.欲改循环发光的速度又应如何做?
六、实验程序
ORG00H
AJMPSTART
ORG1BH
AJMPTI
ORG30H
START:
MOVIE,#00H
MOVSP,#60H
MOVP0,#0FFH
MOVR0,#0FEH
MOVR1,#14H
ANLTMOD,#0FH
ORLTMOD,#10H
MOVTH1,#3CH
MOVTL1,#0B0H
ORLIE,#88H
SETBTR1
LOOP:
CJNER1,#00,DISP
MOVA,R0
RLCA
MOVR0,A
DISP:
MOVP1,R0
AJMPLOOP
TI:
CLRTR1
DECR1
MOVTH1,3CH
MOVTL1,0B0H
RETI
END
实验十一、用定时器控制LED灯亮灭实验
1)、已知晶振12MHz,要求利用定时器T0使图中发光二极管LED进行秒闪烁.采用查询方式编程*/
#include“reg51.h”//51寄存器头文件
sbitOutPort=P1^7;
//设定波形输出口
unsignedcharTimerTime=0;
//开辟RAM空间
voidTimer1_function()interrupt1//T0中断服务子程序
TimerTime++;
if(TimerTime==10)//中断10次否?
中断已经10次,即延时500ms
{
OutPort=!
OutPort;
//取反输出波形
TimerTime=0;
}
}
voidmain()
TMOD=0x01;
//设工作方式,T0方式1定时
TL0=0xB0;
//置定时初值
TH0=0x3C;
TR0=1;
//启动T0
for(;
;
)
{
if(TF0)
TF0=0;
2)、已知晶振12MHz,要求利用定时器T1实现50ms延时的流水灯方案.采用查询方式编程*/
#include”reg51.h”//51寄存器头文件
P1=0x01;
TMOD=0x10;
//设工作方式,T1方式1定时
TR1=1;
//启动T1
for(;
{TL1=0xB0;
//置定时初值
TH1=0x3C;
do{}while(!
TF1);
//查询等待TF1置位
P1<
=1;
//定时时间到,下一只LED点亮
TF1=0;
//软件清TF1
实验十二、运算器电路
1、要求
借助P1口上连接的发光二极管显示8032内部运算器的运算过程,以便完成两个8位二进制数各种运算,并将参加运算的操作数、运算结果和标志位的状态在发光二极管上以二进数的形式显示出来。
2、硬件电路原理图
3、程序设计思路
实现两个8位二进制数运算,例如做加法,可设置四个时间段,间隔30秒。
第一个时间段显示被加数,以二进制数形式在发光二极管上显示出来;
第二时间段显示加数;
第三时间段显示二者之和;
最后显示标志寄存器PSW的值。
之后,8个发光二极管同时闪动2次后从头开始
4、源程序:
ORG2000H
ST:
MOVA,70H
CPLA
MOVP1,A
LCALLDELY
MOVA,71H
ADDA,71H
MOVA,PSW
LCALLSA
LJMPST
ORG2050H
DELY:
MOV22H,#8
L3:
MOV21H,#250
L2:
MOV20H,#100
L1:
DJNZ20H,L1
DJNZ21H,L2
DJNZ22H,L3
ORG20A0H
SA:
MOVP1,#00H
LCALLDEL1
MOVP1,#0FFH
DEL1:
MOV32H,#2
L33:
MOV31H,#60
L22:
MOV30H,#100
L11:
DJNZ30H,L11
DJNZ31H,L22
DJNZ32H,L33
5、步骤
(1)按实训硬件电路图连接电路。
发光二极管接成共阳极型,连接到P1口。
(2)仔细阅读并理解程序,画出程序流程图,并为每条指令加注释。
(3)将程序机器码输入单片机中,并检查程序是否正确。
(4)将参加运算的被加数和加数分别送入片内RAM70H和71H单元。
(5)输入程序首地址2000H,用连续执行命令执行程序。
观察发光二极管的亮灭变化,是否符合二进制转换要求。
(6)明确程序状态寄存器PSW的各位含义及各标志位的位置,观察是否与发光二极管显示相一致。
6、思考与讨论
如何将程序修改成减法运算、乘除法运算或逻辑运算?
编程并上机调试。
要顺利完成运算电路实训,必须对二~十进制数制转换非常熟悉,一看便知。
对标志寄存器PSW各标志位非常清楚,且各标志位在PSW中位置记忆准确。
对各种运算要先计算后验证。
实验十三、8255流水灯
要求8255的A口、B口均为输出口,各接8个LED,查询PC7为1则控制A口LED做走马灯,查询PC6为1则控制B口LED做流水灯。
#include"
reg51.h"
absacc.h"
voiddelay()
unsignedintj=5000;
while(j--);
voidZoumadeng()
unsignedchari;
unsignedchark=0x01;
for(i=0;
i<
8;
i++)
XBYTE[0x7C00]=k;
k=k<
delay();
voidLiushuideng()
XBYTE[0x7D00]=k;
1+1;
main()
unsignedchard
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机原理与嵌入式设计 单片机 原理 嵌入式 设计 实验 讲义