论坛风格切换切换到宽版
  • 3527阅读
  • 5回复

pic的一个怪问题 [复制链接]

上一主题 下一主题
离线XLDZZ
 
发帖
443
只看楼主 倒序阅读 0楼 发表于: 2008-07-25
最近在玩8条腿的12f675,发现一个怪问题。
具体如下:


list       p=12f675
#include "p12f675.inc"
__config b�'
          org     000h
          nop              
          goto main
          org 0004h
          goto intt0
          ;--------前处理------------
          tmr0r equ option_reg
          tmr0 equ 0x01
          int   equ 0x0b
          figt0 equ 0x30
          wtemp equ 0x31
          timeh equ 0x25
          timel equ 0x26
         
          ;---------i/o初始化----------
          main
          bsf     status,rp0
          clrf   ansel
          movlw   b�'
          movwf   trisio
          bcf     status,rp0
          clrf   cmcon;
        ;--------点灯程序---------
            movlw 05h
            movwf timeh
            movlw 0ah
            movwf timel
           
            clrf figt0
            bcf gpio,gp4
            bsf figt0,0
           
            loop
            movlw 00h
            movwf 0x40
            goto loop
               
        ;--------初始化tmr0------
        bsf status,rp0
        movlw b�'
        movwf tmr0r
        bcf status,rp0
        movlw b�'
        movwf int
        movlw timeh
        movwf tmr0
       
       
       
      ;---------中断执行程序-----
       
        intt0
        movwf wtemp
        bcf   int,t0if
        bcf status,rp0
        movlw timel
        movwf tmr0
        btfss gpio,gp4
        bsf gpio,gp4
        bcf gpio,gp4
       
        movlw wtemp
        retfie
       
        end

运行此程序后,gp4始终低电平。
如果把   btfss gpio,gp4 改成btfss gpio,gp4   gp4就为高电平
      bsf gpio,gp4       bsf gpio,gp4
        bcf gpio,gp4       bsf gpio,gp4

如果gp4能输出高电平,那就说明中断响应了。可改回来就变死低了???
离线xjl
发帖
1244
只看该作者 1楼 发表于: 2008-07-26
楼主再仔细研究研究pic的io口特点.我也是一知半解.
离线BG7TBL
发帖
2965
只看该作者 2楼 发表于: 2008-07-26
还和外部电路有关!记得pic的io操作是写,读,写,锁存的!
在线BG2WAH
发帖
608
只看该作者 3楼 发表于: 2008-07-26
若在指令后加上注释,是不是这样:

  btfss gpio,gp4     ; 判断,gp4=1?
  bsf   gpio,gp4     ; 否,置1
  bcf   gpio,gp4     ; 是,清零

btfss:如果寄存器“f”的位“b”为1,则跳过下一条指令。
如果位“b”为0,那么下一条指令,执行指令后的结果是:
若初始状态gp4=0,那么,执行bsf gpio,gp4;
但接着就会执行bcf gpio,gp4,也就是说:gp4只输出一个很窄的高电平脉冲。

如果你必须使用面向位操作指令,你可以这么做:

    btfss gpio,gp4     ; 判断,gp4=1?
    goto to_01       ; 否,到置1
    bcf   gpio,gp4     ; 是,清零
    retfie
to_01 bsf   gpio,gp4     ; gp4=1
    retfie

本人也是pic单片机的初学者,仅供参考。
你也可以到这里:http://wcrsa.zhan.cn.yahoo.com
离线XLDZZ
发帖
443
只看该作者 4楼 发表于: 2008-07-26
请问楼主
btfss gpio,gp4
goto to_01
其中goto to_01是啥意思
to_01不会是标号吧??

bcf gpio,gp4
retfie
to_01 bsf gpio,gp4 ; gp4=1
retfie
根据我不太内行的理解上面两句的意思是否为
清gp4中断返回
标号to-01
gp4置一中断返回

以上是猜测
离线bellstudio
发帖
2820
只看该作者 5楼 发表于: 2008-07-26
楼上喜欢自问自答?
上次的帖子就是这样。。。