由于初学PIC希望朋友们帮偶看看下面的程序问题在哪里。该程序让10F200产生一个开机延时后电平变化。故障现象为开机有时正常延时后电平能翻转,有时延时过长电平才翻转,有时电平不翻转。 ; 1.采用PIC10F200(SOT-23) ; 2.内部时钟 ; 3.说明: ; 1.无论上电时刻在负半周或正半周的任意时刻,要保证有三个完整的正半周延时. ; 在第三个正半周的160~180度之间确保转换输出。 ; 2.为保证采样输入电压的安全,拟在输入脚加4.2V稳压管,保护输入安全。 ; 4.由于PIC10F200上电有18ms的复位延时所以检测2个正弦波。 ;========================================================================== ;引脚功能说明: ; GP2:输入电平检测端口 ; GP0:输出电平端口(1),上电低电平,延时三个完整的正半周后,翻转为高电位。 ; GP1:输出电平端口(2),上电高电平,延时三个完整的正半周后,翻转为低电位。 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ERRORLEVEL -302 ;将302号提示信息屏蔽掉 ;赋值设定 ERRORLEVEL -306 ;将306号提示信息屏蔽掉 LIST P=10F200 #include p10f200.inc __CONFIG _CP_ON & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC ;============================== 变量定义 ==================================
DL1 EQU 10H ;延时变量 DL2 EQU 11H ;延时变量
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ORG 0000H ;复位入口 NOP START ANDLW 0xFE ; clear Fosc/4 output enable MOVWF OSCCAL ;--------IO口初始化(重要) MOVLW B'11111111' OPTION CLRF GPIO NOP MOVLW B'00001100' ;GP2为输入 TRIS GPIO ;其它端口为输出 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ MAIN ;主程序 ; BCF GPIO,0 ; BSF GPIO,1 MOVLW B'00000010' MOVWF GPIO ;第一个正弦波。 NOP NOP CALL DELAY500US ;防抖动 BTFSC GPIO,2 GOTO $-3 NOP CALL DELAY500US ;防抖动 BTFSS GPIO,2 GOTO $-3 ;第二个正弦波。 NOP CALL DELAY500US ;防抖动 BTFSC GPIO,2 GOTO $-3 NOP CALL DELAY500US ;防抖动 BTFSS GPIO,2 GOTO $-3 ;检测正弦波的下降沿。 CALL DELAY500US ;防抖动 NOP CALL DELAY50US ;防抖动 BTFSC GPIO,2 GOTO $-3 LOOP BSF GPIO,0 BCF GPIO,1 GOTO LOOP ;=============================================================================================== ;====================== DELAY 50us@4MHz ========================;子程序 DELAY50US ; MOVLW D'1' ; MOVWF DL1 ; DEL2 ;
MOVLW D'16' ; MOVWF DL2 ; DEL1 ; DECFSZ DL2,F ; GOTO DEL1 ; DECFSZ DL1,F ; GOTO DEL2 ; RETLW 0 ; ;====================== DELAY 500us@4MHz ========================; DELAY500US ; MOVLW D'5' ; MOVWF DL1 ; DELAY2 ;
MOVLW D'32' ; MOVWF DL2 ; DELAY1 ; DECFSZ DL2,F ; GOTO DELAY1 ; DECFSZ DL1,F ; GOTO DELAY2 ; RETLW 0 ; ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ END
|