|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
中断函数不能进行参数传递+ N, [# F2 S- G4 `
中断函数没有返回值2 f# \8 |( W; z) y+ a, b5 [
在任何情况下都不能直接用中断函数 X2 m& _& u9 ?- q7 U. g" S
中断函数使用浮点运算要保存浮点寄存器的状态。
4 L9 N0 k p# t/ j1 r0 t* {如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同,被调函数最好设置为可重入的。
7 B, R* O3 [# [/ e1 i o) V: D) _7 H1 n: e1 O8 b$ k$ U; t6 c% c8 X" Q6 F) }- R2 @
C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:) [) g2 c. n3 | M
○ 在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。
( Q2 f' @1 b% x1 o% K' L) U/ P% @ ○ 中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。
9 L# ]# G5 k+ g3 V( U9 ^9 H& E ○ 如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。
; _$ I4 d+ k& U+ ]( v) t0 S" ~
( Y8 _, o: N- RC51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即inerrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。5 I# o+ c/ Q' u( a7 n* H+ k
. W {5 Q8 S( |+ e
中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。. {1 U1 ~; O G' @; y; @+ M5 D8 v0 b
0 H. }2 i4 ^$ N# D
在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。
5 t# @: u1 l X, H6 _ h0 n; j4 [# l
/ O+ J+ Z, [2 i$ M* i: B+ ^首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的。
& @- W {/ V* z9 I. e; c2 X2 j& q( @+ l6 k
其次它可使中断服务程序的结构简单,不容易出错。中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。
8 J; I0 x4 v* I& b* u中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的ISR。
5 |/ g' h' _- n8 n: w4 b3 W2 r6 n9 B- J. H% F0 W* |1 j: V( M: w- J
- j1 }! ~0 }- N- t B' ]( j+ C! u9 e5 A+ _
! W+ J) @# `8 j& p4 H( F
|
|