发新帖我要提问
12
返回列表
打印

问大家外部中断的一个问题.

[复制链接]
楼主: zifeiyuuuu
手机看帖
扫描二维码
随时随地手机跟帖
21
diannaoza| | 2007-7-24 00:19 | 只看该作者 回帖奖励 |倒序浏览

问大家外部中断的一个问题

 a,b,c,d 4个子程序,现在INT1==0了,跳转到 0X13 去执行对应的 子程序,比如 到0013H  

;;就是去执行子程序 a ,这个是如何 去写呢?
即然是013即是外部中断int1.
首先你的a,b,c,d;;4个子程序是完成什么功能??。
若你的A子程序相完成计数则这么写:
org 0h
ajmp beg
org 013h
ajmp int1a

org 30h
beg:
...
mov 30h,#00h

loop:
.ll
ajmp loop

..
(这int1a:相当于计数.当相对“嗵”一声到A,2声“嗵”到B..“嗵”完4声。
重头再听“嗵”一声到A,.“嗵”一声到b.“嗵”一声到c.“嗵”一声到d....
接着你再重头听“嗵”....哈....

int1a:
inc 30h
cjne a,#01,inbb
子程序(a)
“嗵”1声

inbb:
cjne a,#02,incc
子程序(B)
“嗵”2声

incc:cjne a,#03,indd
子程序(C)
“嗵”3声

indd:cjne a,#04,inexit
子程序(D)
“嗵”4声
 mov 30h,#00h(准备重头听)要不然得嗵256声才能听到嗵一声。

inexit:
reti

end






使用特权

评论回复
22
太阳之母| | 2007-7-24 01:30 | 只看该作者

嘿嘿

zifeiyuuuu这孩子脾气好,让你们给逗的成什么样了啊!呵呵
我给你一个框架吧,记得有机会请我喝酒,要啤的

//首先文件开头要包含必要的头文件,以及必要的标识符的定义
... ...

//然后是一些可能需要用到的函数,这里都简写了,具体需要什么写什么
void func1()
{
   ... ...
}

void func2()
{
   ... ...
}

... ...

void funcN()
{
   ... ...
}

//下面是主函数,C语言程序里必须有的
void main()
{
  ... ...
  EX0 = 1;//使能外部中断0
  EA  = 1;//使能中断总控制位

  while(1)  //注意这个死循环是必要的,否则程序执行到头了,PC继续往大里变,就不知道跑哪儿去了!
  {
      ... ...          //需要写什么写什么
  }//在这个死循环里,外部中断随时都可能发生,你不用在上面打... ...的地方写任何代码来往中断处理函数里跳,下面的中断处理函数是自动的跳进跳出的
}

//下面这个就是外部中断0的中断函数!看见“interrupt  1”了吧?这是告诉C51编译器,这是外部中断0的中断处理函数。
//你想在中断处理函数里做什么就写什么好了!不过,你最好别去管什么SP,PSW,ACC等等等等的保护,该保护的C编译器已经给自动处理好了,你就当它是一个普通函数好了,只是要注意,一般要求中断处理函数的执行时间要尽量短为好,至于为什么,你应该找书看看就知道了
void EX0_ISR()   interrupt  1      
{
    ... ...
}//中断函数结束的时候会自动跳回去的,你不用在上面打... ...的地方写任何代码往回跳(你也不知道该回到哪儿去,嘿嘿)

//最后再提醒一下:外部中断最好用边沿触发为好,用电平触发可能导致不应该的重复中断

使用特权

评论回复
23
gyt| | 2007-7-24 11:38 | 只看该作者

有趣有趣

使用特权

评论回复
24
zifeiyuuuu|  楼主 | 2007-7-24 19:30 | 只看该作者

问大家外部中断的一个问题.

太阳之母 说的非常清楚明白,谢谢了.....

我今天和同学讨论了半天得到的也是这个结论

我想应该是 在类似"AT89C2051.H" 之类的头文件,所以可以这么做吧??

最后还是非常谢谢 所有的跟贴的大哥门,你们的帮忙会鼓励我一直前进的,谢谢了.

使用特权

评论回复
25
zifeiyuuuu|  楼主 | 2007-7-24 20:16 | 只看该作者

问大家外部中断的一个问题.

忘了太阳之母的酒了,不好意思 ,自罚3杯先,,哈哈

使用特权

评论回复
26
mxinfa| | 2007-7-24 22:04 | 只看该作者

interrupt

我觉得只有“太阳之母”跟我看懂了楼主想说啥,其实楼主就是想问中断函数怎么写,怎么表明这是一个中断函数,不知道我说的的对不对,其实就是这样
void EX0_ISR()   interrupt  1 
{
......
}
不同的中断后面的中断号不一样(传统51,0-4),堆栈压栈现场保护之类的事情编译器帮你做了

使用特权

评论回复
27
zifeiyuuuu|  楼主 | 2007-7-24 23:27 | 只看该作者

问大家外部中断的一个问题.

不错不错,我就是要说这个意思,,
呵呵
谢谢了......

使用特权

评论回复
28
微风| | 2007-7-25 09:48 | 只看该作者

据说中断的c51是这样写的

void EX0_ISR()   interrupt 1 using  1      
{
    ... ...
}

使用特权

评论回复
29
qingqiu647| | 2007-7-25 11:21 | 只看该作者

"嗵",挺形象的,呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则