英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
关于PIC中断标志位利用的问题
[打印本页]
作者:
winnie
时间:
2009-5-23 11:56
标题:
关于PIC中断标志位利用的问题
本人做了一个程序,用到电平变化中断,不知道为什么中断标志位就是不能置位,我用的是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
作者:
winnie
时间:
2009-5-23 11:56
问题解决了,
GP0,GP1不能得到同样的信号,主要是因为他们默认不是作为I/O口,而是作为其他一些特殊功能来使用的。要在相关寄存器里设置一下。
电平变化引脚,确实是被设置成输入状态,我用的是GP4脚,单片机加电至正常状态,该引脚空载电压为5伏多。
不起作用,主要是我在TICON寄存器里设置T1CON<3>为“1”。这样设置,GP4读出的总是为“0”,当然不可能产生电平变化中断。
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2