单片机原理实验报告Word文档格式.docx
《单片机原理实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机原理实验报告Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
![单片机原理实验报告Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/30/75eb6620-cf4d-48ff-825f-9e35b7c96499/75eb6620-cf4d-48ff-825f-9e35b7c964991.gif)
MOVR0,A
INCR1
DJNZR7,AGAIN
SJMP$
END
程序调试与运行结果
实验结论
通过本实验,我对冒泡排序法的原理有了更深入的理解,同时在掌握此算法思想的基础上能够用汇编语言进行编程,并学会在KeilμVersion4调试界面的Memory窗口中查看内存地址的内容,从而验证设计的源程序的正确性,提高了自己解决问题的能力。
实验报告02_外部中断实验
学会使用KeilμVersion4和Proteus软件进行单片机汇编语言和C语言程序设计与开发;
了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。
单片机的P1.0引脚连接LED指示灯D0;
单片机的P3.2引脚〔INT0〕连接按键开关K,作为中断源,每次按键都会触发INT0中断;
在INT0中断服务程序中将P1.0端口的信号取反,使LED指示灯D0在点亮和熄灭两种状态间切换,产生LED指示灯按键开关K控制的效果。
本实验采用外部中断0。
中断请求信号由按键BUTTON来实现,由引脚INT0(P3.2)引入;
通过按键可以控制P1.0所接的LED灯的点亮熄灭。
其中中断请求信号设置为边沿触发方式。
当按键按下,INT0出现负跳变,发出中断请求信号。
CPU响应中断,停止其他工作,跳转到INT0中断入口地址0003H单元,转入EX_INT0执行中断服务程序,当执行到中断返回指令RETI时,使CPU返回断点处,继续处理其他工作。
中断处理流程图示:
主程序框图INT0中断处理程序框图
实验电路原理图
实验程序与调试仿真
ORG0000H
AJMPMAIN
ORG0003H
AJMPEX_INT0
ORG0100H
MAIN:
MOVSP,#40H
SETBIT0
SETBEA
SETBEX0
HERE:
SJMPHERE
ORG0200H
EX_INT0:
CPLP1.0
RETI
END
Proteus仿真
按键为按下时:
按键按下后
本实验通过KeilμVersion4的中断程序汇编语言设计和Proteus软件的仿真,成功实现了按键对信号灯的熄灭点亮控制。
通过实验,也加深了我对51单片机中断系统的认识。
实验03_定时器实验
了解MCS-51单片机中定时器、计数器的基本结构、工作原理和工作方式,掌握工作在定时器模式下的编程方法。
设单片机的晶振频率fosc=12MHZ,使用T0定时100ms,在P1.2引脚产生周期为200ms的方波信号,并通过示波器观察P1.2输出的波形。
定时器/计数器是单片机应用系统中经常使用的部件之一。
根据工作要求与实际需要,选择合适的工作方式。
如果有定时要求,就选择定时功能;
如果要求检测外部脉冲信号个数,就选择计数功能。
对定时器工作方式选择一般考虑定时时间和计数值的长度。
若定时时间长则选用方式1,;
若定时时间短则选择方式2.门控选择主要考虑是否要求外部信号来控制定时器/计数器的启动。
要实现更长时间的定时,一般有两种方式:
一是采用两个定时/计数器串联使用,一个定时并输出定时脉冲,另一个计数定时脉冲;
二是采用一个定时/计数器定时工作,再加一个软件计数器记录溢出的次数。
实验设计
按定时要求,可选择T0为定时功能并工作在方式1,用定时器T0定时100ms,则计数初值X计算如下:
X=216-〔t*fosc〕/12=216-〔100*103*12*106〕/12=10000H-100000
由于X小于0,说明定时时间过长,因此需要采用实验原理中所述的两种方法之一实现实验要求。
本实验采用方法二,即采用一个定时/计数器定时工作,再加一个软件计数器记录溢出的次数。
具体实现为:
用T0定时50ms,工作在工作方式1,然后在定时器中断服务子程序中由软件计数器〔寄存器R2〕对定时中断的次数进行统计,达到2次即输出周期为200ms的方波,此时模式字是01H。
程序框图
实验程序:
AJMPSTART
ORG000BH
AJMPINT_T0
ORG0100H
START:
MOVSP,#60H
MOVTMOD,#01H
MOVTL0,#0B0H
MOVTH0,#3CH
MOVR2,#02H
SETBET0
SETBTR0
INT_T0:
MOVTL0,#0B0H
MOVTH0,#3CH
DJNZR2,LOOP
CPLP1.2
LOOP:
END
Proteus仿真电路
示波器显示周期为200ms的方波:
通过本实验,我对51单片机中定时器、计数器的基本结构、工作方式以与工作原理有了更深入的认识,同时发现可以运用定时器和计数器来产生方波。
不仅如此,本实验的给定参数还使我意识到当定时时间过长使初值为负超出范围时,需要使用计数器来帮助实现功能。
本实验巩固了我所学的理论知识,在设计实验时又使我注意到了许多细节,增强了我设计实验、排查错误的能力。
实验04_两个单片机之间双向通信实验
了解MCS-51单片机串行口〔UART〕的结构、工作方式,了解串行通信的原理和数据交换过程,掌握单片机之间进行串行通信的编程方法。
将甲、乙两台MCS-51单片机串行口连接,即甲机的TXD与乙机的RXD相连;
甲机的RXD与乙机的TXD相连;
并实现双机共地。
整个系统实现双向通信。
具体是:
(1)甲机的K1按键可通过串行口分别控制乙机的LED1点亮;
LED2点亮;
LED1和LED2全亮或全灭。
(2)乙机的K2按键可通过串行口向甲机发送数字,甲机将接收到的数字显示在其P0端口的LED数码管显示器上。
CPU与外界的信息交换称为通信。
当数据的各位同时传送时,称为并行通信;
当数据一位接一位顺序传送时,则称为串行通信。
其中,串行数据通信分为同步通信和异步通信两种形式。
MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器〔SBUF〕,这两个在物理上独立的接受发送器,既可以接受数据也可以发送数据。
但接收缓冲器只能读出不能写入,而发送缓冲器只能写入不能读出,它们的地址为99H。
串行通信控制寄存器〔SCON〕是一个8位的专用寄存器,用于串行数据的通信控制,电源管理寄存器PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,可以设置波特率。
串行工作口有四种工作方式,分别为工作方式0,工作方式1,工作方式2,工作方式3。
串行通信只使用方式1、2、3。
发送数据时,TI位置0,发送完毕时TI置位。
接收数据时,RI位置0,接收完毕时置位RI。
实验设计
题〔1〕:
按键接甲机P1.1口,通过计数按键次数发送不同指令。
乙机的P1.0,P1.1分别接两盏灯,接受甲机的指令从而实现乙机的灯的亮暗。
甲机的按键接地,因此按下时P1.1应赋值为0。
没按下一次,计数值加1,因为题目中两灯共出现四种情况,四种状态可设置分别为01,02,03,04,通过在四种状态下分别给乙机P1.0和P1.1口置1或置0〔通过SETB和CLR实现〕,可以实现甲机对乙机灯的控制。
本实验可采用查询方式也可采用中断方式。
题〔2〕:
按键接乙机的P3.2口,即INT0口,LED数码管接甲机的P0端口,程序采用中断方式。
乙机发送指令,通过按键次数控制甲机数码管上显示的数字,具体控制情况为,乙机按键按一次,甲机数码管显示“1〞,按键按两下,数码管显示“2〞,按键按三下,数码管显示“3〞,按键按四下,数码管显示“4〞。
只需通过计数按键按下次数,没按下一次,计数值加1,同时启动一次发送即可。
甲机没启动一次接受,子程序中就将需要显示的数字所对应的相应值传送给P0端口的数码管即可。
实验程序
题〔1〕采用查询方式:
甲机〔按键控制〕
LJMPMAIN
ORG0030H
MOVSCON,#40H
MOVPCON,#00H
MOVTMOD,#20H
MOVTL1,#0F4H
MOVTH1,#0F4H
SETBTR1
NEXT:
JNBP1.1,L1
SJMPNEXT
NEXT1:
JNBP1.1,L2
SJMPNEXT1
NEXT2:
JNBP1.1,L3
SJMPNEXT2
NEXT3:
JNBP1.1,L4
SJMPNEXT3
L1:
MOVA,#00H
MOVSBUF,A
WAIT1:
CTI,NEXT1
SJMPWAIT1
L2:
MOVA,#01H
WAIT2:
CTI,NEXT2
SJMPWAIT2
L3:
MOVA,#02H
WAIT3:
CTI,NEXT3
SJMPWAIT3
L4:
MOVA,#03H
WAIT4:
CTI,NEXT
SJMPWAIT4
乙机〔接受程序,实现灯的亮暗〕
ORG0080H
MOVSCON,#50H
WAIT:
CRI,NEXT
SJMPWAIT
MOVA,SBUF
CJNEA,#00H,L2
SETBP1.0
CLRP1.1
SJMPWAIT
CJNEA,#01H,L3
SETBP1.1
CLRP1.0
CJNEA,#02H,L4
CJNEA,#03H,WAIT
END
题〔1〕采用中断方式
LJMPMAIN
LJMPL1
ORG0030H
MOVSCON,#40H
MOVTH1,#0F4H
MOVTL1,#0F4H
MOVSP,#40H
SETBEA
SETBEX0
SJMPL2
MOVA,P1
MOVSBUF,A
CTI,NEXT
END
MOVSCON,#50H
MOVR1,#00H
MOVP1,#0FFH
CRI,NEXT
MOVA,SBUF
INCR1
SJMPL1
SUBBA,#01H
JZL2
MOVA,R1
SUBBA,#02H
JZL3
SUBBA,#03H
JZL4
MOVA,R1
SUBBA,#04H
JZL5
CLRP1.0
SETBP1.1
CLRRI
CLRP1.1
SETBP1.0
L5:
题〔1〕采用查询程序的仿真
甲机P1.1口按键按下第一次,亮灯全亮
甲机按键按下第二次,两灯全灭:
甲机按键按下第三次,D1灯灭,D2灯亮:
甲机按键按下第四次,D1灯亮,D2灯灭:
可以看出,甲机通过按键实现了对乙机所接的两灯亮灭的控制。
题
(2)采用中断程序设计的程序
乙机按键控制甲机数码管程序〔采用中断方式〕
org0000h
ajmpsend
org0003h
ajmpe_int
org0023h
ajmptrani
org0030h
send:
movscon,#090h
movpcon,#80h
setbea
setbes
setbex0
setbit0
mova,#0fh
adda,#01h
movc,p
movtb8,c
movsbuf,a
sjmp$
trani:
cti,loop2
cri,loop3
loop3:
mova,sbuf
cjnea,#10h,loop5
movr0,#00h
loop5:
cjnea,#11h,loop6
movr0,#01h
loop6:
cjnea,#12h,loop7
movr0,#02h
loop7:
cjnea,#13h,loop4
movr0,#03h
loop4:
movP1,r0
reti
e_int:
cjnea,#13h,loop1
loop1:
movc,p
loop2:
reti
end
甲机接收程序
movscon,#090h
movp0,#0ffh
movp2,#01h
setbea
setbex0
setbit0
movp0,r0
sjmploop4
movr0,#0f9h
movr0,#0a4h
movr0,#0b0h
cjnea,#13h,loop8
movr0,#099h
loop8:
loop1:
reti
题〔2〕仿真结果
按下按键第一次,甲机数码管显示’1’
按下按键第二次,数码管显示‘2’
按键按下第三次,数码管显示‘3’
按键按下第四次,数码管显示‘4’
可以看出,乙机通过按键实现了对甲机LED数码管上数字的控制。
本实验通过对甲、乙两台51单片机的发送、接收程序的汇编语言编写,以与在Proteus中电路仿真,将甲、乙机的串行口相连,并进行电路的连接,最终仿真实现了双机的串口通信,即甲机通过按键实现了对乙机两端口所接LED灯亮暗的控制,而乙机通过按键实现了对甲机LED数码管显示数字的控制。
通过本实验,我学会了串口通信发送、接受程序的编写,并且掌握了查询、中断方式编写改程序的不同思路,加深了对理论内容的学习。
实验05_数码管显示4x4键盘矩阵按键实验
熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法;
熟悉和掌握矩阵式键盘的行扫描法和行反转法两种键盘扫描识别方法;
掌握键盘延时消抖的软件方法;
掌握LED静态扫描显示方式。
4x4键盘矩阵的行线连接单片机的P1.0~P1.3端口,列线连接P1.4~P1.7端口;
一位LED数码管连接单片机的P0口。
编程实现:
当按下任意一个按键时,LED数码管显示它在4x4键盘矩阵上的序号0~F。
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。
这样键盘中按键的个数是4×
4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
确定矩阵式键盘上何键被按下主要有两种方法,分别为行扫描法和行反转法。
行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,介绍过程如下:
1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
另一种方法是高低电平翻转法。
过程如下:
首先让P1口高四位为1,低四位为0,。
若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置;
然后让P1口高四位为0,低四位为1,。
若有按键按下,则低四位中会有一个1翻转为0,高四位不会变,此时即可确定被按下的键的列位置。
最后将上述两者进行或运算即可确定被按下的键的位置。
实验流程图
LJMPSTART
KEY0:
MOVP1,#0EFH
JNBP1.0,K0
JNBP1.1,K4
JNBP1.2,K8
P1.3,NEXT1
LJMPK12
MOVP1,#0DFH
JNBP1.0,K1
JNBP1.1,K5
JNBP1.2,K9
P1.3,NEXT2
LJMPK13
MOVP1,#0BFH
JNBP1.0,K2
JNBP1.1,K6
JNBP1.2,K10
P1.3,NEXT3
LJMPK14
MOVP1,#07FH
JNBP1.0,K3
JNBP1.1,K7
JNBP1.2,K11
JNBP1.3,K15
LJMPKEY0
K0:
MOVP0,#0C0H
LCALLDELAY
JMPKEY0
K1:
MOVP0,#0F9H
K2:
MOVP0,#0A4H
K3:
MOVP0,#0B0H
K4:
MOVP0,#99H
K5:
MOVP0,#92H
K6:
MOVP0,#82H
K7:
MOVP0,#0F8H
K8:
MOVP0,#80H
K9:
MOVP0,#90H
K10:
MOVP0,#88H
K11:
MOVP0,#83H
K12:
MOVP0,#0C6H
K13:
MOVP0,#0A1H
K14:
MOVP0,#86H
K15:
MOVP0,#8EH
DELAY:
MOVR3,#06H
LP:
MOVR4,#0A8H
LP1:
MOVR5,#0A8H
LP2:
DJNZR5,LP2
DJNZR4,LP1
DJNZR3,LP
RET
PROTEUS仿真
当按下相应按键,LED数码管显示它在4x4键盘矩阵上的序号0-F。
下图列出一些仿真结果
本实验通过对数码管显示矩阵键盘按键的源程序编写与Proteus仿真,我掌握了:
1〕矩阵键盘行扫描法和行反转法两种键盘扫描识别方法,以与实现该算法的汇编语言;
2〕键盘延时消抖的软件方法;
3〕LED静态扫描显示方式。
矩阵式键盘是大型系统设计中不可或缺的一部分,因此,掌握它的原理与其重要。