原创 第十四课 LED数码管之五 简单程序助你理解中断显示

2009-5-25 10:49 4499 9 9 分类: MCU/ 嵌入式

第十四课 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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /3 下一条