单片机用C语言编写中断的范例?

如题所述

定时器溢出中断:
#include<reg51.h>

void timer0(void); //函数声明

void main()
{
P1^1 = 0;
TMOD = 0x01; //定时模式
THO = 0xEE;
TL0 = 0xFF; //定时时间
ET0 = 1; //中断允许
EA = 1; //总中断使能
TR0 = 1; //开始计时
while(1); //等待中断
}

void timer0(void) interrupt 1 using 0 //定时器0溢出中断
{
TR0 = 0; //停止计时
P1^1 = ~P1^1; //取反输出
THO = 0xEE;
TL0 = 0xFF; //重载定时时间
TR0 = 1; //开始计时
}

外部中断:
#include<reg51.h>

void it0(void)

void main()
{
P^1.1 = 0;
IT0 = 0; //触发方式
EX0 =1; //中断允许
EA = 1; //中断使能
while(1); //等待中断
}

void it0(void) interrupt 0 using 1 //外部中断0中断处理程序
{
P1^1 = ~P1^1; //取反输出
}

串口中断:
#include<reg51.h>

void suart(void);

void main()
{
P1 = 0xAA;
TMOD = 0x20; //设置定时器1为自动重载模式,作为波特率发生器
TH1 = 0xXX; //由波特率计算出来的定时值
TL1 = 0xXX; //
SCON = 0x50; //串口模式
ES = 1; //开放串口中断
EA = 1; //总中断使能
TR1 = 1; //
while(1) //等待中断
{
if(XXXX)
{
SBUF = 0xAA; //发送
}
}
}

void suart(void) interrupt 4 using 0
{
if(RI) //接受完臂
{
XXXXX;
}
if(TI) //发送完毕
{
XXXXX;
}
}

中断矢量程序入口: void 函数名(形参) interrupt 中断矢量 [using 寄存器]
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-13
#include
sbit
csb_sat=
p1^0;
//定义超声波发生脚
void
delay(void)
//延时25微秒,12t芯片用12m误差
0us
{
unsigned
char
a;
for(a=11;a>0;a--);
}
void
csb_fs(int
dat)
{while(dat--){csb_sat=1;delay();csb_sat=0;delay();}}
//发射
void
main()
{
ea=1;
while(1)
{
csb_fs(10);
delay();delay();delay();delay();delay();delay();delay();delay();delay();
ie=0x83;
//int0允许中断
while(ie);
p1_1=1;delay();p1_1=0;delay();p1_1=1;delay();p1_1=0;delay();p1_1=1;delay();p1_1=0;delay();
}
}
void
int0_chuankou(void)
interrupt
0
using
1
//外部int0中断子程序
{
ie=0;//禁止int0中断
}
第2个回答  2010-04-19
//我用的是AT89S52 ,希望对你有帮助~!!
#include<reg52.h>
unsigned char m;
void main()
{
m=0;
EA=1; //开总中断
ET0=1; //开定时器0中断
TMOD=0x01; //定时器0工作在方式1,
TH0=(65536-50000)/256; //给定时器装初值,初值为:15536,也就是定时器计数50000次,如果你用12M晶振,这里等于50MS
TL0=(65536-50000)%256;
TR0=1; // 打开定时器,开始计时

if(m==20){
//如前面所说,计数器溢出一次为50MS,这里就是50MS*20=1S }

}
void time0() interrupt 1 using 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
}
第3个回答  2010-04-19
#include<reg52.h>
#define unchar unsigned char
unchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
static unchar num;
sbit port=P3^2;
//////////////////////延时
void delay(unchar z)
{int x,y;

for(x=z;x>0;x--)
for(y=100;y>0;y--);

}
/////////////////////
void main()
{EA=1;
EX0=1;
IT0=1;
num=0;
while(1);
}

void enter0() interrupt 0 using 2
{if(port==0)
{delay(500);
P0=table[num];
num++;
if(num==8)
num=0;}
else delay(50);
}
相似回答