打印
[国产单片机]

义隆进不了中断?

[复制链接]
3162|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuyan8401|  楼主 | 2008-4-28 18:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     PORT6==0X06 ;定义
     CNT0==0X10
     CNT1==0X11
     CNT2==0X12
     CNT3==0X13
     IOCE==0X0E
     IOCF==0X0F
     IOCD==0X0D
     ORG 00
     DISI   ;关总断
     MOV A,@00001110B ;预分频器给WDT
     CONTW
     WDTC             ;清预分频器及看门狗定时器
     MOV A,@0
     IOW IOCE          ;关狗 
     JMP MAIN
     ORG 8
ZD:    ;中断
    MOV PORT6,PORT6   ;读P6口
    DISI             ;关总中断
    CLR IOCF          ;清除中断标志位
    MOV A,@0          ;关闭中断使能位
    IOW IOCF     
    MOV A,@01000001B ORT6。6点亮,作为感应成功的指示灯
    MOV PORT6,A
    ;延时500MS
     MOV A,@00000001B   ;指示灯关闭
     MOV PORT6,A
     ;延时1S
     MOV A,@0           ;让电机转动
     MOV PORT6,A
     ;延时500MS
      MOV A,@00000001       ;关闭电机
      MOV PORT6,A
      RETI           ;中断返回
MAIN:

     MOV A,@0          6口上拉使能
     IOW IOCD
     MOV A,@00111110B  6。5--P6。1为输入,其余输出
     IOW PORT6
     MOV A,@5
     MOV CNT3,A
ZHIS:MOV A,@01000001B  ;上电指示
     MOV PORT6,A
    ;延时1S
     MOV A,@00000001B
     MOV PORT6,A
     ;延时1S
      DJZ CNT3
      JMP ZHIS
     CLR IOCF          ;清除中断标志位
     MOV PORT6,PORT6   ;读P6端口值
     MOV A,@00000010B ;P6口变化中断使能
     IOW IOCF
     ENI               ;开总中断
LOOP:
     MOV A,@10000001B ;P6。7发送高电平
     MOV PORT6,A
    ;延时125MS
     MOV A,@00000001    ;P6。7发送低电平
     MOV PORT6,A 
     ;延时约1S
     JMP LOOP
     延时程序
       EOP
各位大师,使能P6口变化中断,对输入到检测端的高低电平的宽度有什么样的要求吗?
我用上面的程序,测到输入到检测端口有高低电平出现(低电平小于1V,高的大于3V),但就进不了中断,麻烦各位老师帮帮忙,谢谢.

相关帖子

沙发
xuyan8401|  楼主 | 2008-4-28 18:35 | 只看该作者

RE

是一个红外对射的玩意.P67发送电平,P61接收检测电平

使用特权

评论回复
板凳
谈的元| | 2008-4-28 20:01 | 只看该作者

中断中用DISI就是关闭了中断呀

还有端口6好象有一个电平变化都会进入中断。

你的程序好象能中断一次

使用特权

评论回复
地板
tracyf| | 2008-4-29 08:09 | 只看该作者

RE

谢谢哦.
我主程序MAIN中有把中断打开的哦;
另外,我是用P61去检测电平变化的,我用示波器测过,进入P61脚的电平确实有变化,但就进不了中断,所以有疑问,还请帮帮忙!
如果要求同步,应该怎么实现呢?谢谢.

使用特权

评论回复
5
ybtthaxiq| | 2008-4-29 14:05 | 只看该作者

MOV A,@0          6口上拉使能
     IOW IOCD
这样可以上拉吗?  我怎么记得我以前做EMC的时候不是这样的啊  应该是输入位置1才表示上拉的
你的程序结构混乱   
以前没写过汇编程序吗
ORG 00H、
PAGE  0
JMP   MAIN

ORG 03H
PAGE  0
JMP   TCC_INT

还有记数器中断2个



使用特权

评论回复
6
xuyan8401|  楼主 | 2008-4-29 16:06 | 只看该作者

re

啊?我这程序都不到1K,还要分页啊,应该不用的吧?
另外,义隆上电后不是所有上拉,下拉,开漏都禁止的吗?楼上意思是不是说要先置口为输入,才能再开上拉功能呢?不懂,还请继续讲解,谢谢.

我是用P61去检测电平变化的,我用示波器测过,进入P61脚的电平确实有变化,但就进不了中断,所以有疑问,还请帮帮忙,我这程是哪里错了.

谈的元大师说我这程序只能时入一次不断,不知是怎么叛断的?谢谢.

使用特权

评论回复
7
ybtthaxiq| | 2008-4-29 17:58 | 只看该作者

我以前用EMC468的

按我以前的经验是 先设置相应的输入位,对应的输入位使用上拉功能,1K的ROM就不存在分页了  

你用的芯片有按键中断的?有的话应该是下降沿中断  是上拉没有处理好 试试 

使用特权

评论回复
8
谈的元| | 2008-4-29 20:37 | 只看该作者

LOOP是一个死循环

LOOP:
     MOV A,@10000001B ;P6。7发送高电平
     MOV PORT6,A
    ;延时125MS
     MOV A,@00000001    ;P6。7发送低电平
     MOV PORT6,A 
     ;延时约1S
     JMP LOOP
程序一旦进入该循环,假如中断发生,返回时还是在该循环中,相当执行了DISI,而ENI 就没机会执行。故不会再中断。
可以到群里具体讨论24815378

使用特权

评论回复
9
xuyan8401|  楼主 | 2008-4-30 08:23 | 只看该作者

RE

谢谢两位大师帮忙!用的是EM78P153SP 
这是我自己搞的一个小产品.我思路是:用P6.7发送高低电平,送给红外发射管,发射信号;然后接收管收到信号后,经一个放大电路,然后把输出送给P6.1检测,如果P6.1检测到高低变化的信号后,就进入中断;

ybtthaxiq大师,谢谢,我去试试你的建议!

谈的元大师,我记得资料上说RETI指令除了中断返回后,还有开起总中断,即指行ENI的作用哦;我加那个群了,谢谢.


使用特权

评论回复
10
ybtthaxiq| | 2008-4-30 08:44 | 只看该作者

我来说一下

正常情况下DISI是在系统上时为了初始化端口,然后ENI。
中断程序只需要清相应的中断标志,不用关DISI的,不然其他的中断源有可能会在你执行中断程序的时候被忽略,比如定时和外中断的标志位得不到置位,DISI不能用在中断里的。
  进中断第一件事就是清标志位。
  有个建议电机的转动时间最好用记数和定时中断做,可以提高程序运行效率。

使用特权

评论回复
11
谈的元| | 2008-4-30 18:48 | 只看该作者

中断要保存数据的

使用特权

评论回复
12
quan8310| | 2008-5-19 22:51 | 只看该作者

只能进入一次中断

进入中断后
   MOV A,@0          ;关闭中断使能位
    IOW IOCF     
被关掉了。
就不会在打开。

使用特权

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

本版积分规则

24

主题

102

帖子

0

粉丝