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