#include<reg52.h>
unsigned char a;
sbit lcden = P3^4;
void main()
{
lcden=0;
EA=1;
EX0=1;
IT0=0;
a=0xF0; //点亮4位小灯
while(1)
{
P1=a;
}
}
//中断服务程序
void ext0() interrupt 0 // 0 表示的是外部中断源0
{
a=0x0f; // 中断处理完,再返回主程序
}
void ext0() interrupt 0: 这是一个外部中断源0的中断服务程序。中断源0对应的是单片机上的P3的2端口,也就是P3.2。
如果写的是1,则对应的是定时器/计数器0。
一旦产生中断,就是执行中断服务程序。
那如何开中断呢?
IT0=0:IT0是低电平触发方式选择位,表示的是低电平触发。P3.2变为低电平,就触发中断。
这句话很重要,这是触发的起点。
然后按照这个图,在红框中按从左到右的顺序执行,设置相应的值即可。
EA=1;
EX0=1;
另外,这些位都已经在头文件中声明好了。
LCDEN网络标号是连到:
代码中LCDEN赋值了一个低电平。那么CSDA就得到了一个低电平,也就是单片机P3.2得到了一个低电平,那么就触发了中断服务程序。
中断服务程序将a的值改成了0x0F,那么LED的灯的点亮就发生了变化。
LCDEN网络标号接到的是单片机上的P3.4上,所以需要进行下声明:
sbit lcden=P3^4;
更改下晶振频率:
中断响应的过程演示。