笔记:8051中断源

在Keil上写了段C程序,搞清楚中断的实现。记下笔记:

    1.8051的五个中断源

 编号 中断源 入口地址
  0 /INT0 0x0003
  1 TIMER0 0x000b
  2 /INT1 0x0013
  3 TIMER1 0x001b
  4 UART 0x0023

    默认优先级按编号已排好序。(0最高,4最低)

    2.中断函数写法

返回值 函数名 interrupt n { …… }

    n对应中断源编号。

    3.中断触发控制寄存器IE (当然,左边是高位)
  

 EA -- ET2 ES

 ET1

 EX1 ET0 EX0

    EX0:响应外部/INT0的中断
    ET0:响应TIMER0的中断
    EX1、ET1:对应/INT1与TIMER1
    ES:对应UART
    ET2:响应TIMER2溢出或捕捉的中断(仅对8052)
    EA:中断使能。EA=1时才允许中断。

    4.中断优先级控制寄存器IP

 -- -- PT2 PS

 PT1

 PX1 PT0 PX0

    分别对应各中断的优先级。仅分0(低)、1(高)两级,同级的中断还是看中断源编号进行优先级排序。

    5.TIMER控制寄存器TCON

 TF1 TR1 TF0 TR0

 IE1

 IT1 IE0 IT0

    TF1与TF0分别是硬件去置位的,当Timer1/Counter1溢出时,TF1会被置为1,而当处理器去执行中断服务时,它又被硬件置0。(当然TF0管的就是Timer0/Counter0了) 
    TR1与TR0由软件置位,管的是Timer/Counter的激活。(如在程序里写TR0=1,就是说Counter0开始计数,当然如果这个Timer/Counter被设置为Counter的工作方式的话)
    IE1与IE0由硬件置位,与TF1、TF0等同,只是IE1与IE0管的是外部中断。
    IT1与IT0由软件置位,设为1时,对应的外部中断为负缘触发,设0时为低准位触发。

     6.KeilC程序段
 
    下面一段代码可测试中断/INT0:
 

/*-------------------------------------------------------------
/* Filename: external_0.c 
/* 
/* Description: Test the external interrupt 0. 
/* 
/* Author: Long Hengyu
/* 
/* Date: 10-26-2007
/*
/*-------------------------------------------------------------

#include <REG51.H>
#include <stdio.h>

const char design[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

main()
{    
    unsigned int i,j;    
    EA = 1;        // Set CPU status: interrupt enable
    EX0 = 1;    // Set external interrupt enable
    P2 = 0x80;
    for( ; ; )
    {
        for(j=0; j<; j++)
        {
            for(i=0; i<50000; i++);
            P2 = design[j];
        }
    }
}

void EX0_int(void) interrupt 0
{
    unsigned int i;
    int j;
    for( ; ; )
    {
        for(j=7; j>=; j--)
        {
            for(i=0; i<50000; i++);
            P2 = design[j];
        }
        return;
    }
}

    P2连上一排8个灯,可以看到一个被点亮的灯在移动,没有中断时右移,有中断时左移。


转自:http://blog.chinaunix.net/uid-20629402-id-1608165.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值