单片机C语言程序设计实训100例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 外部中断、定时/计数器及串口应用

使用C语言开发8051单片机程序时,除了要控制4个双向I/O端口外,还要掌握8051外部中断、定时/计数器及串口的中断程序设计。当然,在应用定时/计数器及串口时,它们既可以工作于中断方式,又可以工作于非中断方式,读者在本书中可找到它们工作于不同方式的案例。

8051的5个中断源分别是:

(1)外部中断请求0,由INT0(P3.2)输入;

(2)外部中断请求1,由INT1(P3.3)输入;

(3)片内定时/计数器0溢出中断请求;

(4)片内定时/计数器1溢出中断请求;

(5)片内串行口接收/发送中断请求。

这5个中断源的中断号分别是0、2、1、3、4,用C语言编写中断程序时,中断函数后要添加interrupt n,其中n为中断号。

在设计中断程序时需要用到的字节SFR和位SFR(sbit)如表1-2所示。

表1-2 8051中断控制、定时/计数器及串口控制寄存器

由于这些SFR都是可以位寻址的,因此在程序设计中,既可以直接给字节SFR赋值,也可以对SFR中的相应位赋值,例如,某程序同时允许外部0中断和定时器0中断,读者可编写代码:

        IE = 0x83;  //IE被设为10000011.

或者写成:

        EX0 = 1;
        ET0 = 1;
        EA = 1;

和1.3节中的PSW一样,这些SFR中的位也定义在reg51.h中,下面给出了reg51.h中的部分定义:

        /*  IE   */
        sbit EA  = 0xAF;
        sbit ES  = 0xAC;
        sbit ET1 = 0xAB;
        sbit EX1 = 0xAA;
        sbit ET0 = 0xA9;
        sbit EX0 = 0xA8;

这些位定义中的大多数会在本书大量案例中使用,读者需要熟练掌握它们各自的含义和用途。更完整的定义可在at89x52.h文件中找到,读者可根据需要选择reg51.h或at89x52.h。