英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4255|回复: 1
打印 上一主题 下一主题

关于PIC中断标志位利用的问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-5-23 11:56:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人做了一个程序,用到电平变化中断,不知道为什么中断标志位就是不能置位,我用的是PIC12F675,而且相关的IOC寄存器也被设置了,程序是长了一点,主要是做A/D转化,转化的结果,放在TMR1H:TMR1L。我只取高8位,做8位精度,处理后放入F2:F1,F2:F1是在0到600之间的数。它和确定的值运算放如TMR1H:TMR1L使之定时,在定时期间在GP0和GP1上输出相同的脉冲。但有另个问题:就是GP1可以实现功能,但GP0没有任何信号,不知道为什么?GP0和GP1都是进行相同的操作啊!这是个循环程序,我想通过GP4电压变化置中断标志位,跳出该段程序,就是实现不了。不知道是不是电压变化标志位处理的问题,还是外围电路有什么特殊的要求。不知道是输入电压发生变化引起置标志位,还是输出电压发生变化置标志位,或者两者皆有!
该程序A/D无问题

程序如下:
INTCON      EQU   H'0B'
STATUS       EQU   H'03'
TRISO          EQU   H'85'
ANSEL         EQU   H'9F'
ADCON0     EQU    H'1F'
ADRESH      EQU    H'1E'
F1                 EQU    H'30'
F2                 EQU    H'31'
F3                 EQU    H'32'
F4                 EQU    H'33'
OPTION_REG   EQU    81H  
TMR1L         EQU     H'0E'
TMR1H         EQU     H'0F'   
T1CON         EQU     H'10'
GPIO             EQU     H'05'
PIR1              EQU     H'0C'
OSCCAL      EQU      H'90'
IOC               EQU      H'96'
WPU              EQU     H'95'
;----------------- 4MHZ ---------------------------------------------
         ORG   H'05'
         NOP
         BCF   INTCON,7             ;清全局中断使能
         BSF   STATUS,5             ;选体“1”
         MOVLW B'00010000'          ;使电平变化中断标志有效
         MOVWF IOC
         MOVLW B'00111100'          ;设置端口方向
         MOVWF TRISO
         MOVLW B'00110100'
         MOVWF WPU
         MOVLW B'00001111'          ;设置PRESCALAR->WDT,1:128
         MOVWF OPTION_REG
         BCF   STATUS,5
;----------初始化---------------------------------
START1  BCF   INTCON,0             ;清电平变化中断标志位
   SUB1  MOVF  F2,0
              SUBLW B'11111100'          ;立即数-F2->TMR1H
              MOVWF TMR1H               
              MOVF  F1,0                        
              SUBLW B'00011000'         
              MOVWF TMR1L               
              BTFSS STATUS,0
              DECF  TMR1H,1
              MOVLW B'00001001'           
              MOVWF T1CON
              BSF   GPIO,0               
              BSF   GPIO,1
   YC1   BTFSS PIR1,0               ;检测Timer1是否溢出
             GOTO  YC1
             BCF   PIR1,0               ;溢出清溢出中断标志
             BCF   GPIO,0               ;置端口输出GP0,GP1为"0"
             BCF   GPIO,1
             MOVLW B'00101000'          ;立即数+F1->TMR1L
             ADDWF F1,0                 
             MOVWF TMR1L               
             BTFSC STATUS ,0            
             INCF  F2,1
             MOVLW B'10111111'          ;立即数+F2->TMR1H
             ADDWF F2,0
             MOVWF TMR1H
             MOVLW B'00001001'           ;Timer1控制字->T1CON
             MOVWF T1CON
             CALL  ATOD                         ;调用A/D转化子程序
  YC2    BTFSS PIR1,0               ;检测Timer1是否溢出
             GOTO  YC2        
             BCF   PIR1,0               ;清Timer1溢出中断标志位
             BTFSC INTCON,0       ;实现程序跳转
             GOTO  START2
            
CLRWDT
             GOTO  SUB1                 ;当没有电平变化中断,循环执行以上程序
;----------------------------------------------------------------------------------------
ATOD   BSF   STATUS,5
              MOVLW B'00010100'          ;初始化ANSEL(4MHZ-8TOSC-2.0US001)  
               MOVWF ANSEL        
               BCF   STATUS,5             ;体选 "0"
               MOVLW B'00001001'          ;初始化ADCON0 打开A/D转换器
               MOVWF ADCON0
               NOP
               NOP
               NOP
               NOP
               BSF   ADCON0,1             ;开始A/D转换
SATD    BTFSC ADCON0,1             ;等待A/D转换完成
               GOTO  SATD
               BCF   PIR1,6               ;清A/D转换完成中断标志位
;-----------------------------------------------------------------
               CLRF  F1                   ;2ADRESH+ADRESH/4+ADRESH/8---->F2F1
               CLRF  F2                  
               CLRF  F3
               MOVF  ADRESH,0             ;A/D转换结果ADRESH-->F1
               MOVWF F1
               RLF   F1,1
               BTFSC STATUS,0
               INCF  F2,1
               MOVF  ADRESH,0
               MOVWF F3
               BCF   STATUS,0
               RRF   F3,1
               BCF   STATUS,0
               RRF   F3,1
               MOVF  F3,0
               ADDWF F1,1
               BTFSC STATUS,0
               INCF  F2,1
               BCF   STATUS,0
               RRF   F3,1
               MOVF  F3,0
               ADDWF F1,1
               BTFSC STATUS,0
               INCF F2,1
             RETURN
2#
 楼主| 发表于 2009-5-23 11:56:19 | 只看该作者
问题解决了,

GP0,GP1不能得到同样的信号,主要是因为他们默认不是作为I/O口,而是作为其他一些特殊功能来使用的。要在相关寄存器里设置一下。



电平变化引脚,确实是被设置成输入状态,我用的是GP4脚,单片机加电至正常状态,该引脚空载电压为5伏多。

不起作用,主要是我在TICON寄存器里设置T1CON<3>为“1”。这样设置,GP4读出的总是为“0”,当然不可能产生电平变化中断。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-11-1 09:25 , Processed in 0.056049 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表