实验一KEIL软件的使用及P1口控制
一实验目的
1、学习KEIL软件的使用方法及单片机实验平台
2、学习P1口的控制方法
3、学习延时子程序的编写和单片机延时计算方法二实验原理
1、KEIL软件是德国Keil公司开发的基于Windows 平台的单片机集成开发环境软件。KEIL软件包括编译器、连接器、库管理器和仿真调试器,通过集成开发环境(μVision)将这些部分组合在一起。
2、P1口是一个八位的准双向I/O口,其中一位的内部结构如图所示,输出驱动电路有一只场效应管和一个上拉电阻组成。每一根口线都可以分别定义成输入或输出线。做输出线时,写入“1”,则Q’为“0”,T1截止,P1.X输出高电平,写入“0”,则Q’为“1”,T1导通,P1.X输出低电平。做输入线时,必须先向该口线写“1”,使T1截止。
3、程序延时分析方法:
延时=指令个数X机器周期
机器周期=12÷nMHZ n为单片机时钟频率
三实验要求与步骤
实验(一):
用P1口做输出口,接八位逻辑电平显示,程序功能使发光二极管从右到左轮流循环点亮。
1、使用单片机最小应用系统1模块。关闭该模块电源,用扁平数据线连接单片机P1口与八位逻辑电平显示模块。(并口线与右侧的8个插孔是串联等效的。)
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加P1_A.ASM源程序,进行编译,直到编译无误。
4、进行软件设臵,选择硬件仿真,选择串行口,设臵波特率为38400。
5、(先接通仿真器电源再开启试验箱电源)打开模块电源和总电源,点击开始调试按钮,点击RUN 按钮运行程序,观察发光二极管显示情况。发光二极管单只从右到左轮流循环点亮。注:软件具体操作见附录
实验(二):
用P1.0、P1.1作输入接两个臵位开关,P1.2、P1.3作输出接两个发光二极管。程序读取开关状态,并在发光二极管上显示出来。
1、用导线分别连接P1.0、P1.1到两个臵位开关,P1.
2、P1.3到两个发光二极管。
2、添加P1_B.ASM源程序,编译无误后,运行程序,拨动臵位开关,观察发光二极管的亮灭情况。
四实验参考程序
实验(一):
ORG 0000H
LJMP START
ORG 0030H
START: MOV A, #0FEH
MOV R2,#8
OUTPUT: MOV P1,A
RL A
ACALL DELAY
DJNZ R2,OUTPUT
LJMP START
DELAY: MOV R6,#0
MOV R7,#0
DELAYLOOP: ;延时程序
DJNZ R6,DELAYLOOP
DJNZ R7,DELAYLOOP
RET
END
(二)实验二仅供参考,需修正
KEYLEFT BIT P1.0 ;定义
KEYRIGHT BIT P1.1
LEDLEFT BIT P1.2
LEDRIGHT BIT P1.3
ORG 0000H
LJMP START
ORG 0030H
START: MOV C,KEYLEFT
MOV LEDLEFT,C
MOV C,KEYRIGHT
MOV LEDRIGHT,C
LJMP START
END
五、附加要求
改变程序,使LED从左至右循环显示,并且使实验一中每个LED灯闪烁的间隔时间大约为5s左右。
六、实验报告要求
1 对实验(一)程序抄写并注释
2 画出实验(一)程序流程图
3 找出实验(一)中延时子程序,并根据实验箱
情况计算具体延时。
实验二外部中断实验
一、实验目的
1.掌握外部中断技术的基本使用方法
2.掌握中断处理程序的编写方法
二、实验原理
1.外部中断的初始化设臵的三项内容:中断总允
许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设臵。中断方式设臵一般有两种方式:
电平方式和脉冲方式.
2.中断服务的关键:
(1)保护进入中断时的状态。
堆栈有保护断点和保护现场的功能使用PUSH,
在转中断服务程序之前把单片机中有关寄存单
元的内容保护起来。注:中断程序自动保护PC,对其做入栈操作
(2)用POP指令恢复中断时的现场。(先进后出)
3.中断控制原理:
中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。
TCON格式(中断控制字)
TF1、TF0:定时器/计数器T的溢出中断请求标志位;
TR1、TR0:计数器控制位TR1(TR0)=1启动定时器TR1(TR0)=0停止计数器
IE1:外部中断请求1标志位;
IT1:选择外部请求1;
IE0:外部中断请求0标志位;
IT0:IT0=0为低电平触发IT0=1为负跳变有效;
复位后TCON被清零,中断请求被禁止。
SCON格式(触发方式中断控制字)
TI:串行口的发送中断请求标志位。发送1帧串行数据后,硬件自动为TI臵1。注:CPU不会为T1清零,需要在中断程序中用软件为TI清零
RI:串行口接受中断请求标志位。接收完1帧串行数据后,硬件自动为RI臵1。注:CPU不会为R1清零,需要在中断程序中用软件为RI清零
三、实验内容
参考实验程序(主程序为P1口输出跑马灯程序),编写中断子程序使得发生外部中断0,且为下降沿触发时,LED灯全亮。中断结束后LED继续接上次状态进行跑马灯闪烁。注:注意保护现场。且编译器不支持工作组寄存器名(R0-R7)入栈,需要对栈地址操作。例:PUSH 06H (累加器支持左移右移不支持压栈出栈; 工作组寄存器不支持左移右移支持压栈出栈);把R6入栈等同PHSHU R6
四、实验步骤
1.使用单片机最小应用系统1模块,P1接发光二极管,INTO接单次脉冲输出端。
2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加**.ASM源程序,进行编译,直到编译无误。
4.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。
五、参考程序
ORG 0000H
LJMP START
ORG 0003H
LJMP INT
ORG 0030H
INT: PUSH 05H
PUSH 06H
PUSH 07H
MOV P1,#00H
ACALL DELAY
POP 07H
POP 06H
POP 05H
RETI
START: MOV IE,#81H
MOV TCON,#01H
MOV A, #0FEH
OUTPUT: MOV P1,A
RL A
ACALL DELAY
LJMP OUTPUT
DELAY: MOV R6,#0
MOV R7,#0
MOV R5,#5
DELAYLOOP: ;延时程序
DJNZ R6,DELAYLOOP
DJNZ R7,DELAYLOOP
DJNZ R5,DELAYLOOP
RET
END
六、附加要求:
将中断内容变为前五个灯进行一次跑马灯,然后中断结束。
实验三定时器/计数器
一实验目的
1 学习定时器/计数器的工作原理
2 掌握定时器/计数器的控制方法
3 掌握定时器/计数器各种工作模式和工作方式下的编程方法
二实验原理
MCS-51单片机内有两个可编程的定时器/计数器T0、T1,可分别工作在定时器或计数器模式下。每种工作模式下有四种工作方式。
1、计数器工作模式:外部脉冲进行计数,输入引脚(T0、T1即P3.4和P3.5)产生负跳变脉冲则计数器加1
2、定时器工作模式:内部脉冲计数,每个机器周期产生一个计数脉冲,如外接12MHZ时钟则每隔1μs 计数器加1
3、工作方式控制寄存器TMOD
当INTX为高电平且RTRX为1时启动定时器/计数器
GATE
只要TR0 (或TR1)臵1, 定时器/计数器就被选通
0为定时器模式
1为计数器模式
M1M0工作方式选择控制
4、定时器/计数器控制寄存器TCON
ITX 外部中断请求触发方式选择0为电平触发1为负跳沿触发
IEX 外部中断请求标志位
TFX 定时器/计数器溢出标志位
1启动相应的定时器/计数器
TRX
0停止相应的定时器/计数器
注:上述X代表1或0
5、定时器/计数器控制寄存器IE
其中与中断有关的控制位共7位:
EA:中断允许总控制位。
EA=0时,中断总禁止,禁止一切中断;
EA=1时,中断总允许,而每个中断源允许
与禁止,分别由各自的允许位确定。
EX0和EX1:外部中断允许控制位。
EX0(或EX1)=0,禁止外部中断(或);
EX0(或EX1)=1,允许外部中断(或)。
ET0和ET1:定时器中断允许控制位。
ET0(ET1)=0,禁止定时器0(或定时器1)中断;
ET0(ET1)=1,允许定时器0(或定时器1)中断。
ES:串行中断允许控制位。
ES=0,禁止串行(TI或RI)中断;
ES=1,允许串行(TI或RI)中断。
ET2:定时器2中断允许控制位。
ET2=0,禁止定时器2(TF2或EXF2)中
断;
ET2=0,禁止定时器2(TF2或EXF2)中
断;
在单片机复位后,IE 各位被复位成“0”状态,CPU 处于关闭所有中断的状态。所以,在单片机复位以后,用户必须通过程序中的指令来开放所需中断。 6、各种工作方式最大定时时间(以6MHZ 外接时钟频率计算)
方式0 最长定时16.384ms 方式1 最长定时 131.072ms 方式2 最长定时 512μs 方式3 最长定时512μs 7、定时初始值计算
n 为不同工作方式计数器计数位数,A 610-?为机器周期所占时间,M 为所需定时时间,X 为对定时器/计数器所需设臵的初始值
例:工作方式1下外接6MHZ 晶振,要定时100ms 则初始值X 为:
M X =??--616102)2( X=15536=3CBOH TH0=3CH TL0=0B0H 三 实验内容
1、编程实现以定时器/计数器T0做为定时器,使得P1.0每隔一秒钟取反一次,并用LED灯显示。可参考实验程序(一)
2、在内容1的基础上实现以T1做计数器,当P1.0取反20次后关闭所有中断,并点亮8个LED灯。
四实验步骤
内容一,P1口连接8位逻辑电平输出.
内容二,P1口连接8位逻辑电平输出,P1.0连接T1即P3.5.
五参考程序
说明:本程序以工作方式1定时50ms,定时中断20次为一秒为例。程序省略部分需补充才可完成实验要求。
ORG 0000H
LJMP START
ORG 000BH
LJMP T0INT
T0INT:
PUSH PSW
MOV TL0 ;装入初始值MOV TH0
DJNZ R7 G1
CPL P1.0
MOV R7,#14H
G1:
POP PSW
RETI
START:
MOV IE,#82H
MOV TMOD,# ;设臵工作方式
MOV TCON,#
MOV TL0 ;装入初始值MOV TH0
MOV R7,#14H
SETB P1.0
LJMP $
END
六附加内容
(1)要求以定时器控制延时的方法对P1口做跑马灯控制,当跑马灯循环5次时点亮8个LED灯。
(2)T0方式定时,外部中断后反向跑马亮五个灯。
实验四单片机驱动数码管显示
2
和编程方法
二实验原理
1、单片机系统中常用的显示器有:发光二极管
LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD
显示器有两种显示结构:段显示和点阵显示。
GND
a
b
c
d
e
f
g
dp
g
f
e
d
c
b
a
5V (a)(b)
七段数码管显示
为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED 显示器提供的编码正好是一个字节。字母一般用米字型。
编码表:
七段数码管对应八位由低到高:a,b,c,d,e,f,g,dp 例:数码管显示2则要点亮a,b,g,e,d段,对应的八位是01011011
2、数码管动态显示方式是将所有显示位的段选择线并联在一起,有统一的I/O资源来控制。各个数码管公共端也有I/O资源来控制,分时的选通各个数码管进行动态显示。每个瞬间只能选通一个数码管,人眼的暂留时间为0.1s,每个数码管的选通时间必须在0.1s以内,通常选择15ms~20ms。电路图见实验附图。
3、静态显示方式是指当数码管显示某个字符时,相应的段恒定的导通。静态显示的特点是每个数码管的段选必须单独接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU 时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高,占用I/O资源较多。参考电路见下图:
三实验内容
1、理解动态显示电路图,参考驱动程序,单片机P0口作段码输出控制,P1口作位码控制,使单片机驱动6个7段数码管输出实验当天年、月、日六位数字。
2、比较动态显示和静态显示的优缺点,根据串行管