1. 几种单片机c语言的中断程序写法
关于c的中断使用一般是,定义函数的时候在后面加上interrupt
n
其中
n
对应中断源的编号,其值从
0
开始,以
80c51
单片机为例,编号从
0~4,分别对应外中断
0.
定时器0
中断.外部中断
1
.定时器1
中断.和串行口中断
.
void
xxxx(void)interrupt
n//中断服务函数
{
要写的中断服务程序.
}
2. 单片机用C语言编写中断的范例
#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中断
}
3. 单片机用C语言编写中断的范例,顺便简述电路
#include <reg52.h> //包括一个52标准内核的头文件
sbit P10 = P1^0;
void main(void)// 主程序
{
IT0=1; //外中断跳变产生中断
EX0=1;
EA=1; //打开总中断
while(1) //主程序循环
{
;
}
}
//interrupt 0 代表0号中断,也就是外部中断0
int0() interrupt 0
{
P10=~P10; //在中断里取反P1.0,翻转LED灯状态
}
电路很简单,一LED加限流电阻,正极+5V,负极连P1.0。再用一按钮,一端接地,另一端接P3.2。
4. 51单片机简单中断C语言程序
首先你这问题不难,现在回答你这问题的难点在于你妹给出电路图。
在此给出你程序的大体思路,
1、写两个子函数,一个是实现8个LED顺序点亮的函数1,俗称的流水灯,另一个是数码管显示“sos”的函数2
2、在主程序中去调用函数1,完了跟着检测按键是否按下,检测到按键后,调用函数1,完了多循环几次函数2的调用来实现你的“显示一段时间后返回LED顺序点亮”
注意:按键检测需要考虑去抖动的问题,写的高大上一点,可以加入定时器,实现你的点亮一段时间。
望采纳,有问题在追加,还不会写可以发电路图出来再说
5. 单片机定时器中断程序,C语言程序设计
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar keyval;
uchar led1=0xfe,led2=0x55,led3=0x0f;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
switch(keyval)
{
case 1:
P0=led1;
led1=_crol_(led1,1)
break;
case 2:
P0=led2;
led2=~led2;
break;
case 3:
P0=led3;
led3=~led3;
break;
default:break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
keyval++;
keyval%=4;
}
}
}
6. 51单片机定时中断C语言的写法步骤,可追加分数
程序说明:51单片机定时器0工作于方式一,定时50ms中断一次
晶振为12M
#include
void
main
{
TOMD
=
0X01;
//配置定时器0工作于方式一
TH1
=
(65536-50000)/256;
//高八位装入初值
TL1
=
(65536-50000)%256;
//低八位装入初值
ET0
=
1;
//开定时器0中断
EA
=
1;
//开总中断
TR0
=
1;
//启动定时器0
while(1)
{
;
}
}
void
Timer0_int()
interrupt
1
{
//重新装初值
TH1
=
(65536-50000)/256;
//高八位装入初值
TL1
=
(65536-50000)%256;
//低八位装入初值
}
/***************************************************************************************************************/
上面是比较好理解的。如果实在要求简洁的话,看下面的,跟上面功能一样
#include
void
main
{
TOMD
=
0X01;
//配置定时器0工作于方式一
TH1
=
0x3c;
//高八位装入初值
TL1
=
0xb0;
//低八位装入初值
IE
=
0x82;//开总中断并开定时器0中断
TR0
=
1;
//启动定时器0
while(1)
{
;
}
}
void
Timer0_int()
interrupt
1
{
//重新装初值
TH1
=
0x3c;
//高八位装入初值
TL1
=
0xb0;
//低八位装入初值}
7. c语言怎么编写单片机的中断
标准c语言没有中断调用机制,但是不同编译器都有相应的中断处理方式,可以使用户实现中断功能。
解决方案:
1、采取轮询的方式解决,就是每10毫秒检查一下是否有键盘请求,总的来说,这样基本上可以解决问题,而且简单易行,但每10毫秒都要检查,系统消耗太大。
2、采取中断的方式:
(1)用高级语言调用中断来处理问题。中断是cpu响应一个中断外围设备8259A的一个过程,当键盘敲击,cpu保存断点暂停执行并且跳到相应的中断处理程序继续执行,结束后根据断点再跳回来。通过这种方式可以轻松+愉快地解决这个问题。但是需要用到高级语言调用汇编,根据编译器的不同而有所差别。
(2)自己模拟中断。可以另外建立一个线程专门响应键盘的敲击,如果有敲击则打断主线程。这样做实现起来很复杂,而且涉及到不少复杂的关键技术,比如信号量之类的东西。
3、强大的vc
vc采取了消息映射的机制来处理外部设备的请求,比如时钟中断、键盘中断等等。通过此可以灰常灰常容易的处理外部中断。
8. c语言怎么编写单片机的中断
外部中断(INT0):
I0(void)
interrupt
0//interrupt
0用于外部中断INT0
{//中断执行的内容}
定时器/计数器中断(T0):
T0(void)
interrupt
1//interrupt
1用于定时器/计数器T0
{//中断执行的内容}
外部中断(INT1):
I1(void)
interrupt
2//interrupt
2用于外部中断INT1
{//中断执行的内容}
定时器/计数器中断(T1):
T1(void)
interrupt
3//interrupt
3用于定时器/计数器T1
{//中断执行的内容}
9. 单片机中断c语言编程
单片机上电后,引脚默认是高点平!所以你在引脚初始化时就要把 fmq清零
在主函数开始执行 fmq = 0;再做就不会自动响了
10. 单片机中断C语言
#include<reg51.h>
#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0-9
ucharscanled;
ucharflag=0;
uchardisdat[6];
voiddelay(unsignedintx)
{
unsignedinti,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
voiddischg()
{
uchari;
for(i=0;i<6;i++)
disdat[i]=10;
}
voidext0()interrupt0
{
flag=1;
}
voidext1()interrupt2
{
flag=2;
}
voidt1isr()interrupt3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x02;
P0=~ledtab[disdat[4]];
break;
case2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x08;
P0=~ledtab[disdat[2]];
break;
case4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
uchari,j;
TMOD=0x10;
TH1=0xec;
TL1=0x78;
TR1=1;
ET1=1;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
EA=1;
scanled=0;
dischg();
while(1)
{
i=0;
switch(flag)
{
case1:
for(j=0;j<3;j++)
for(i=0;i<10;i++)
{
disdat[5]=disdat[4];
disdat[4]=disdat[3];
disdat[3]=disdat[2];
disdat[2]=disdat[1];
disdat[1]=disdat[0];
disdat[0]=i;
delay(200);
}
dischg();
flag=0;
break;
case2:
for(j=0;j<3;j++)
for(i=0;i<10;i++)
{
disdat[0]=disdat[1];
disdat[1]=disdat[2];
disdat[2]=disdat[3];
disdat[3]=disdat[4];
disdat[4]=disdat[5];
disdat[5]=i;
delay(200);
}
dischg();
flag=0;
break;
default:break;
}
}
}