中断函数不用进行函数声明,可以写在MAIN函数前面也可以写在MAIN函数后面。
一、中断服务程序,处理器处理“急件”,可理解为是一种服务,是通过执行事先编好的某个特定的程序来完成的,这种处理“急件”的程序被称为——中断服务程序。
二、当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。
三、实现这一功能的部件称为中断系统,申请CPU中断的请求源称为中断源,单片机的中断系统一般允许多个中断源,当多个中断源同时向CPU请求中断时,就存在一个中断优先权的问题。通常根据中断源的优先级别,优先处理最紧急事件的中断请求源,即最先响应级别最高的中断请求。
四、保护被中断进程现场。为了在中断处理结束后能够使进程准确地返回到中断点,系统必须保存当前处理机程序状态字PSW和程序计数器PC等的值。
五、分析中断原因,转去执行相应的中断处理程序。在多个中断请求同时发生时,处理优先级最高的中断源发出的中断请求。恢复被中断进程的现场,CPU继续执行原来被中断的进程。
格式是固定的void
中断名(void)
interrupt
n
这个中断名你可以随意取只要不是保留字就可以
n=0对应外部中断0
n=1对应定时器0
n=2对应外部中断1
n=3对应定时器1
n=4对应串口
.......
比如定时器0中断服务程序
void
isr_timer0()
interrupt
1
{
TH0=(65536-10000)/256
TL0=(65536-10000)%256
P0=~P0
}
首先可以肯定,中断服务函数可以写在其他文件中,并不一定要放在main.c中。中断服务函数如果有特定的关键字修饰,比如keil c51用interrupt,不仅可以放在任意文件中,甚至可以用static 把中断函数定义成局部的函数都没问题。
其他的,一般需要自己定义入口调用,比如某系统的定时中断入口放在0x0008地址,则在0x0008地址放一条长跳转指令,或者直接把函数的地址放在0x0008地址,这个根据系统不同,可能有不同的要求。
另外,有的c把引导程序会有一个默认的中断服务地址表,用户只需要根据系统的要求,按照一定的格式、名称定义好中断服务程序,系统就会自动调用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)