第十四课 LED数码管之五 简单程序助你理解中断显示
程序讲解:
/*--------------------------------------------------------------*/
//LED八位数码滚动显示
//显示部分用中断方式,便于程序的拓展
/*--------------------------------------------------------------*/
//包含头文件
#include <reg52.h>
#include "74HC595.H"
//全局变量定义
unsigned char LED_Pos; //位扫描
unsigned char LED_Seg[8] = {5,2,0,1,3,1,4,0}; //要显示的数据
/*--------------------------------------------------------------*/
//定时器初始化
void T0_init(void)
{
TMOD = 0x01 //定时器的工作方式设定 定时器0工作在方式1
TH0 = 0x00; //赋给定时器高地位初始值
TL0 = 0x06;
IE = 0x82; //中断使能寄存器使EA、ETO有效,这句话可以换成EA=1; ET0=1;
TR0 = 1; //定时器0控制位,允许定时器0工作
}
/*--------------------------------------------------------------*/
//LED显示函数2
volatile void LED_Display2(void)
{
Ser_IN(0x01 << LED_Pos); //位选
Ser_IN(seg[LED_Seg[LED_Pos]]); //段码
Par_OUT(); //上升沿锁存输出
LED_Pos++; //循环扫描
if(LED_Pos == 8) LED_Pos = 0; //8次一循环
}
/*--------------------------------------------------------------*/
//定时器中断服务
void T0_intservice(void) interrupt 1 using 0 //1:为中断号代表定时器 / 计数器0 中断入口地址为000BH 0:表示选取寄存器组 0~3 一共四组
{
TH0 = 0xf8; //赋初值
TL0 = 0x36;
LED_Display2(); //调用显示函数
}
/*-------------------------------------------------------------*/
//主函数
void main(void)
{
T0_init(); //初始化
while(1);
}
本节重点:
1、IE 中断使能寄存器
通过设置中断使能寄存器 IE 的 EA 位 使能所有中断 每个中断源都有单独的使能位
可通过软件设置 IE 中相应的使能位在任何时候使能或禁能中断 中断使能寄存器 IE 的各位如下所示:
中断使能寄存器IE 8位从高到低顺序如下(可位寻址):
EA - ET2 ES ET1 EX1 ET0 EX0
EA 使能标志位 置位则所有中断使能 复位则禁止所有中断
- 保留位
ET2 定时器2 中断使能
ES 串行通信中断使能
ET1 定时器 1 中断使能
EX1 外部中断 1 使能
ET0 定时器0 中断使能
EX0 外部中断 0使能
在上面的程序 IE = 0x82; 这句话的意思就是 使总中断(EA有效)、定时器0 中断有效,因为是可以位寻址的,所以也可写成 EA = 1;ET0 = 1;
2、TMOD 定时器控制寄存器 8位从高到低顺序如下(不可位寻址):
GATE C/T M1 M0 GATE C/T M1 M0
定时器1 (高四位) 定时器0(低四位)
说明:定时器控制寄存器的高四位控制定时器1, 低四位控制定时器0
GATE 当 GATE置位时 定时器仅当 TR="1并且" INT="1" 时才工作 如果 GATE="0" 置位TR 定时器就开始工作
C/T 定时器方式选择 如果 C/T=1 定时器以计数方式工作 C/T=0 时 以定时方式工作
M1 模式选择位高位
M0 模式选择位低位
在上面程序里面TMOD = 0x01 高四位为0表示 没用定时器1 低四位为1,写成4位二进制数即0001 对照上面的表可知 表示 定时器0工作在模式1(最低位为01表示模式1)
3、TCON 定时器控制寄存器 8位从高到低顺序如下( 可位寻址):
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF1 定时器 1溢出中断标志 响应中断后由处理器清零
TR1 定时器 1控制位 置位时定时器 1 工作 复位时定时器 1 停止工作
TF0 定时器0溢出标志位 定时器 0 溢出时置位 处理器响应中断后清除该位
TR0 定时器 0控制位 置位时定时器 0 工作 复位时定时器 0 停止工作
IE1 外部中断1 触发标志位 当检测到 P3.3 有从高到低的跳变电平时置位处 理器响应中断后 由硬件清除该位
IT1 中断1 触发方式控制位 置位时为跳变触发 复位时为低电平触发
IE0 外部中断1 触发标志位 当检测到 P3.3 有从高到低的跳变电平时置位处 理器响应中断后 由硬件清除该位
IT0 中断1 触发方式控制位 置位时为跳变触发 复位时为低电平触发
在程序里面 TR0 = 1; 即表示允许定时器0工作。在上面的TMOD设置里面将定时器0的GATE 设为 0, 即此时只要TR0 = 1定时器0就开始工作。
相关程序:https://static.assets-stash.eet-china.com/album/old-resources/2009/5/25/30da6b0a-b942-43c3-a819-ccf5116f9e70.rar
文章评论(0条评论)
登录后参与讨论