
上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。