大家好,我是电子设计小杨,上次,小编给大家写了一个液晶显示1602的程序,其实那个程序看起来虽然很长,但是本身是不难的,只要理解了数据手册中的内容,按照数据手册上的时序图还有要求照着写下来,很快可以写出来,不过那仅仅是一个静态显示而已,如果要写一个动态显示的,方法和数码管的写法基本相似,大家可以模仿写数码管动态显示的方法去写。
好了,废话不多说,今天小编给大家讲讲如何来写51单片机的中断功能,51单片机中断源有5个,分别是外部中断0,外部中断1,定时器0,定时器1,串行口中断。 不管是大学里上课的书本,还是参考书也好,在单片机的书里面都是写了一系列密密麻麻的知识点,最后就敲个代码,然后很多初学者从头学到尾,好像知道怎么写,但是又不会写。进来看这篇文章的同伴们,不管您会也好,不会也罢,小编把我当时怎么学中断的经验分享给大家,好让更多的同伴们早日脱离书本,开启自写编程时代!!!
好了,我们进入正题,到底什么是中断??中断这个过程我们程序员需要去做什么??我们带着这两个问题来查找我们当时为什么不会中断的原因。首先:
1、你想使用的中断是哪个?选择相应的序号; 2、你所希望触发的条件是什么? 3、你希望在中断之后干什么?
中断是什么?说白一点就是,比如你正在家里看电视,然后准备用电磁炉煮水来喝茶。水还没有开的时候当然你还在看电视对不对,等到水开了,当然一般水开了都会有个信号让你知道,那么你就要想着要关掉电磁炉。这个关掉电磁炉的动作就是所谓的中断。而关掉电磁炉之后你进而就要喝茶,然后在看电视或者做其它事情,那么中断以后的这个过程就是我们上面问题的第三点:你希望在中断之后干什么?
好了,大家也大概明白了什么是中断了吧?我们不要像书本写的内容那么复杂,我们来说,怎么样来让51单片机执行中断,然后,有需要的我们再去查书本。 那么,我们如何来写一个51单片机的中断呢??
首先,我们在主函数中要有以下代码: 以外部中断0为例子: void main() { EA=1; //打开中断总开关,等于1表示打开,等于0表示关闭 EX0=1; //打开外部中断0,如果是外部中断1则为EX1=1; IT0=0; //选择触发方式,0是表示电平触发,1表示下降沿触发 //如果是外部中断1则为IT1=? } 接着写中断服务函数 void interrupt_0()interrupt 0 //这后面的中断序号千万别写错 { ........................ } 大概就是以上的两个步骤! 接下来我们来看一个程序代码:感受一下中断的魅力!
#include<reg51.h>
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit led=P1^0; //
void Delay(uint del) //10毫秒带参量延时函数
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++);
}
void interrupt_0()interrupt 0 //外部中断0的序号是0
{
led=~led; //将led的状态取反
delay(10); //延时10X10=100ms
}
//现在你试试,按一下P3^2的按键,看看led有没有闪一下,注意噢,这是用外部中断来实现led灯亮灭的噢,虽然也是用按键,但是开头我没有对任何一个按键KEY进行定义噢。
void main()
{
EA=1; //打开总中断
EX0=1; //打开外部中断0
IT0=0; //让外部中断0用电平触发方式
while(1); //让程序就停在这儿
}
好了,我们这一讲就到此结束吧,你们可以把我的程序拷贝回去改一改变成自己想要的中断操作模式,要是有不懂的地方多翻翻书本,如果还不理解的话可以加小编的微信提问。
|