打印

c52,触发int0就让P1.0输出的值反转,这样程序对吗?

[复制链接]
2408|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cqlouis|  楼主 | 2008-4-14 23:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
89C52的单片机,想每给int0一个触发,就让P1.0的输出反转一下。

下面是我写的程序,不知道有没有错误,请前辈们指教:


SETB EA   ;开放所有的中断
SETB EX0  ;打开外部中断0
SETB PX0  ;设置INT0最高优先级
CLR  IT0  ;电平触发方式,低电平有效

LOOP: SJMP $
      ORG   0003H
      AJMP  BRT0

BRT0: CPL P1.0          ;让P1.0口取反
      RETI

由于还没有搭建硬件电路,所以先问问前辈们,这个程序对不对?
我有个疑惑就是:在这个程序中,是不是应该加上中断请求的撤除呢?如果是,又应该怎么加入相关语句呢?


谢谢各位大哥了!

相关帖子

沙发
xhtxzxw| | 2008-4-15 02:58 | 只看该作者

嘿嘿

应该这样写:
      ORG 0000H
      LJMP  MAIN

      ORG   0003H   ;这一行不写也行,不过不建议不写,建议写
      AJMP  BRT0

MAIN: SETB EA   ;开放所有的中断
      SETB EX0  ;打开外部中断0
      SETB PX0  ;设置INT0最高优先级
      CLR  IT0  ;电平触发方式,低电平有效
LOOP: SJMP $

BRT0: CPL P1.0          ;让P1.0口取反
      RETI
只要你给那个INT0引脚一个低电平,P1.0就会“飞快的”来回反相产生方波,只有用示波器才可以看清楚,51如果使用12MHz的晶体的话,P1.0引脚上的方波频率大概快有100KHz吧?你甭想着给低电平它变一次,再给一次它再变一次,不可能的,因为你幽雅美丽高贵的手没那么快,不管你幽雅美丽高贵的手的动作以你的观点看来是如何的快捷,你给一次低电平的持续时间对于51来说都是极端漫长的!足够51在那个死循环和中断响应代码之间来来回回、来来回回、来来回回... ...,折腾上很多很多次。
把CLR  IT0改成SETB  IT0,边沿触发,就差不多了。

使用特权

评论回复
板凳
cqlouis|  楼主 | 2008-4-15 09:20 | 只看该作者

是因为没有撤除中断吗?

"只要你给那个INT0引脚一个低电平,P1.0就会“飞快的”来回反相产生方波,只有用示波器才可以看清楚,"
造成这样的原因是不是因为在响应中断过后没有撤除中断呢?是不是说我只要加上了撤除中断的指令,就可以避免这个状况?
小弟刚入门,实在是有很多不懂,谢谢了!

使用特权

评论回复
地板
awey| | 2008-4-15 14:20 | 只看该作者

既然是触发,应该是一次高低电平的变化

所以,中断应该设成边沿触发才行。

使用特权

评论回复
5
xhtxzxw| | 2008-4-17 01:20 | 只看该作者

嘿嘿

你无法撤除的,你能撤除的只能是中断标志,而中断源你撤除不了。所谓中断源就是你外面加的那个低电平。你啥时候撤除了这个低电平,中断就不会再发生了,除非你高贵幽雅美丽的手动作速度达到微秒级,否则,肯定还是要来来回回来来回回来来回回来来回回反复中断的。

使用特权

评论回复
6
bit06haozi| | 2008-4-22 17:17 | 只看该作者

进入中断,要CLR EXO,推出出时SETB EX0,有时需要压栈

使用特权

评论回复
7
gx_huang| | 2008-4-22 19:35 | 只看该作者

2楼的程序模板很好!

但是,电平中断无法实现你的功能。

使用特权

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

本版积分规则

8

主题

14

帖子

0

粉丝