本帖最后由 ButIAlwaysTry 于 2012-9-10 21:31 编辑
刚学单片,用PIC12F675编一个方波信号,高电平1ms,低电平19ms,就是频率为50Hz。要用中断来实现,我写了一个程序,但是走到电平取反那里就,失效了,电平完全不会取反。求大神帮忙解答。
程序如下:
LIST P=PIC12F675,N=8
__CONFIG 044H ;B'00000000000001';LOWEST BANDGAP VOLTAGE & UNIMPLEMENTED&DATA MEMORY CODE PROTECTION
;IS ENABLED&PROGRAM MEMORY CODE PROTECTION IS ENABLED&BOD DISABLED &MCLR INTERNALLY
;TIED TO VDD&PWRT ENABLED& EDT DISABLED
;INTOSC OSCILLATOR
INCLUDE"P12F675.INC"
W_TEMP EQU 5EH ;定义W的临时寄存器
STATUS_TEMP EQU 5DH ;定义STATUS的临时寄存器
ORG 00H;程序起始地址,复位向量
GOTO MAIN;跳转代码区
ORG 04H;中断向量入口
INT
MOVWF W_TEMP
SWAPF STATUS,W
BCF STATUS,RP0
MOVWF STATUS_TEMP;现场保护
BTFSC PIR1,0
CALL INT_TMR1
SWAPF STATUS_TEMP;恢复现场
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
RETFIE
INT_TMR1
BCF PIR1,0 ;清TMR1状态标志位
BCF STATUS,5;设置文件寄存器储存体0
MOVLW 0x01
XORWF GPIO,1 ;GP0电平取反
MOVLW 0xFC
MOVWF TMR1H
MOVLW 0x17
MOVWF TMR1L ;装入1MS初值
BTFSS GPIO,0
CALL DDP
RETURN
DDP
MOVLW 0xB5
MOVWF TMR1H
MOVLW 0xC7
MOVWF TMR1L ;装入19MS初值
RETURN
MAIN
BCF STATUS,5;设置文件寄存器储存体0
CLRF GPIO
BSF STATUS,5;设置文件寄存器储存体1
MOVLW B'111110'
MOVWF TRISIO ;设引脚GP0为输出
BCF STATUS,5;设置文件寄存器储存体0
MOVLW B'00000001'
MOVWF T1CON
BSF STATUS,5;设置文件寄存器储存体1
MOVLW B'00000001'
MOVWF PIE1
MOVLW B'11000000'
MOVWF INTCON ;使能INTCON中所有未屏蔽中断和外设中断
BCF STATUS,5;设置文件寄存器储存体0
BsF GPIO,0 ;设GP0为低电平
MOVLW 0xFC
MOVWF TMR1H
MOVLW 0x17
MOVWF TMR1L ;装入1MS初值
WAIT GOTO WAIT ;等待中断
END |