首先你要写中断函数
创新互联专业为企业提供石棉网站建设、石棉做网站、石棉网站设计、石棉网站制作等企业网站建设、网页设计与制作、石棉企业网站模板建站服务,十年石棉做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
然后在主程序中像调用子函数一样调用就可以了
举个例子吧
#define uchar unsigned char
#define uchar unsigned char
sbit D1=P1^0;
uchar aa;
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if(aa==20)
{
D1=~D1;
aa=0;
}
}
}
void T0time()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
51的C语言中断是函数,那这个中断是否可以调用?如果能,怎么调用?
只从计算机原理来讲,是可以的。
理论上,中断函数也是一个程序的入口,只要把程序指令指针指向这个中断的入口地址,
就可以执行相应的代码,从这个角度来讲,是可操作的。
但在实际问题处理中,通常不行,因为中断是提供给系统处理应急事件的,
并非设计来作为常规函数呼叫。
如果只是想要使用中断处理中的某些功能,可把那些功能封装为独立的函数,
供给中断处理和一般流程来调用。
应用程序直接调用中断,是有违中断设计的初衷的,
不建议这样使用,易导致原本正常的流程的莫名异常,
因为调用中断处理,会占用中断的相关资源,导致正常的中断无法执行,出现异常。
1.void(中断函数返回类型(空型)) Time1 (中断函数名)(void(参数类型) interrupt 3 (中断号)
2: 中断条件发生时执行中断,比如void Time1(void) interrupt 3 是定时器1定时时间到发生中断,中断函数放在那里无所谓
3:void PxInt0(void) interrupt 0 中断名为PxInt0的0号中断
void PxInt1(void) interrupt 2 中断名为PxInt1的2号中断
void time0_int(void) interrupt 1 中断名为time0_int的1号中断
void time1_int(void) interrupt 3 中断名为time1_int的3号中断
4:中断的代码是你想中断执行的工作,中断的代码是根据任务,需要你自己写的
不是C语言中要调用函数,是任何语言都要做的.
函数是对问题描述的最基本的分解方式,最简单的它可以使问题逐层简化,使工作可以分工协作.
的确某些非常简单的操作是没必要再细化成函数,但并不是说该编译系统就只处理非常简单的操作,它还考虑到更复杂情况,所以加上强制使用函数方式编程也是合情合理的。
我现在也在迷惑这个问题,看单片机的程序里,中断程序明明没有被主程序调用,然而中断程序却可以运行……按照C语言的规则,子函数必须要被主函数调用才能发挥作用,然而在52单片机里,主函数并没有调用中断函数
…………然后我查到了这个:
程序中断和调用子程序有何区别:
1.子程序调用是预先安排好的,程序中断是随机发生的;
2.调用子程序,是为主程序服务的,而中断程序与主程序的程序毫无关系;
3.子程序是由调用指令给出目标地址,中断是通过隐指令获得中断服务程序的入口地址
看到这个,大概意思应该是:
中断程序不同于子程序,不需要主函数main调用就能执行。
中断服务程序只需要满足一定条件即可执行,比如定时器/计数器(在写入定时器中断服务程序的前提下)只需要计数“计满”即可触发中断服务程序;外部中断(在写入外部中断的服务程序的前提下)只需要触发外部中断引脚即可自动执行,不需要主函数调用。
子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系
这大概是单片机的特殊之处吧?正常的C语言程序没有这样的吧?我C语言也算新手,这是我的理解
单片机有个中断入口地址,产生中断后CPU自动从中断向量取得入口地址,然后从这个地址执行程序 。如果你用汇编写代码,你会发现main函数其实也是一个中断函数,是个复位中断,和其它中断不同处是main没有返回。要执行中断里面的代码必须让程序指针指到中断里的代码,一是通过触发中断,二是手动改变PC指针(汇编直接用jmp指令跳转.C由于编译器的限制比较难实现,可以嵌入汇编实现)
(void)interrupt n(using m)函数是个中断函数,当这个中断产生后,CPU就会通过中断向量找到这个函数的地址(中断入口),然后执行此函数,结束后返回主函数