单片机按键加减报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机按键加减报告
————————————————————————————————作者:————————————————————————————————日期:
ﻩ
单片机实验报告
一、实验目的
1、学习利用单片机设计简单加减计数,并学会定时/计数器T0/T1的使用。2、学习使用keil和proteus软件。
3、熟悉汇编语言并能利用汇编语言编写程序。
二、实验思路
用T0、T1设计10位以内的按键加减计数:
利用T0/T1计数功能实现每次按键的中断,且采用方式2,可以自动重载初值,较为方便。这里不考虑优先级的问题。再分别对T0、T1编写中断处理的程序。要注意的是,加法时,9加1显示0的情况;减法时,0减1显示9的情况。
三、实验原理
(以下不考虑T2的情况)
1、中断的概念
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。
2、定时/计数器
(1)中断控制寄存器(TCON)
TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下:
TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。
TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。
TR0(TCON.4):T0运行控制位,其功能与TR1类同。
本次试验要用到T0、T1,即TR0、TR1置1。
(2)中断允许控制(IE)
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断1允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA(IE.7),CPU中断允许(总允许)位。
以上都是为1时开启,为0时关闭。本次试验需要开启EA、ET1、ET0,即令IE为8AH。
(3)工作方式寄存器TMOD
GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。
C/T:定时/计数模式选择位。C/T=0为定时模式;C/T=1为计数模式。
M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
这次试验需要计数模式且为方式二,所以,TMOD值设为66H。
3、数码管
在这里我们使用的是7SEG-COM-AN-GRN数码管,由7个发光管组成的8字形构成的,如下图所示,左边接线顺序下来分别命名为ABCDEFG
数码管的接线为共阳接法,即低电平亮,高电平灭。实验中用P0.0-P0.6控制数码管的7段,P0口的八位与发光管的对应关系见下表所示。
显示P0.7P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
HEX ——G F E D C B A
H
1 0 1 1 1 1 0 0 1 79H
2 0 0 1 0 0 1 0 0 24H 30 0 1 10 0 0 0 30H
4 0 0 0 1 1 0 0 1 19H
5 00 0 1 00 1 012H
6 0 0 0 0 0 0 1 0 02H
7 0 1 1 1 10 0 0 78H
8 0 0 00 0 0 0 0 00H
9 0 0 0 1 1 0 0 0 18H
四、设计流程
N
Y
Y
ﻩN ﻩY ﻩ N
(a)主程序 (b)中断响应
五、原理图
存数寄存器
中断初
开始 数码管等待中
按键
R0
是否为加法
R0是否为9
R0是否为0
R0R0R0中断
运行后,初始如上图所示,当按一下第一个键时,数码管显示1,此后每按一次数码管显示数值加1,当数码管显示为9时,按下第一个键,显示为0;初始状态下,当按下第二个键时,数码管显示9,此后每按一次第二个键,数码管显示数值减1。说明实验成功
六、汇编程序
ORG0000H
JMP MAIN
ORG 000BH//T0(加法)中断入口
JMP T0_ADD
ORG 001BH //T1(减法)中断入口
JMP T1_SUB
MAIN: //主程序
MOV TMOD,#66H//设置T1、T0方式2计数
MOVTL1,#0FFH //为T1、T0设置初值
ﻩMOVTH1,#0FFH
ﻩMOV TL0,#0FFH
ﻩMOVTH0,#0FFH
ﻩMOV IE,#8AH//CPU、T0、T1开启中断
SETB TR1 //启动T1计数器
SETB TR0 //启动T0计数器
ﻩ MOVR0,#0//设置显示的初始值及其地址
ﻩMOVDPTR,#TAB
LOOP:
MOV A,R0//输出显示数值
MOVC A,@A+DPTR
MOVP0,A
SJMP LOOP//等待中断
T0_ADD:
ﻩ CJNE R0,#9,T_END0 //是否需要进位