re:4楼<br />以下是我的程序,硬件也很简单,使用内部复位、内部RC振荡。<br /> LIST P=12C509<br /> #include <p12c509.inc><br /><br />msec equ 10h<br />sec equ 11h<br />min equ 12h<br /><br /> org 00h<br /> <br />start1<br /> btfss STATUS,NOT_PD ;检测是否上电复位<br /> goto loop<br /> btfss STATUS,NOT_TO<br /> goto loop<br />int<br /> movlw 0x07 ;上电复位,清07H~1FHRAM<br /> movwf FSR<br />int0<br /> clrf INDF<br /> incf FSR,1<br /> movlw 0x1f<br /> subwf FSR,0<br /> btfss STATUS,C<br /> goto int0 <br /><br />loop<br /> movlw 0x03 ;设置option<br /> option<br /> clrf TMR0 ;开始计时<br />loop0 <br /> movlw 0xf9 ;250<br /> subwf TMR0,0<br /> btfss STATUS,C<br /> goto loop0 ;不到4ms,等待<br /> <br /> movlw 0x03<br /> nop<br /> nop<br /> nop<br /> nop<br /> nop<br /> nop<br /> option<br /> clrf TMR0<br /> clrwdt<br /> <br /> incf msec,1<br /> movlw 0xfa<br /> subwf msec,0<br /> btfss STATUS,C<br /> goto loop0 ;不到1S(250个4ms)<br /> clrf msec<br /> incf sec,1 ;到1S,sec加1<br /> movlw 0x3c<br /> subwf sec,0<br /> btfss STATUS,C<br /> goto pdout<br /> clrf sec<br /> incf min,1 ;够60S,min加1<br />pdout<br /> movlw 0x0f<br /> subwf min,0<br /> btfss STATUS,C<br /> goto no_15min ;不到15min<br /> movlw 0x0f ;到15min,<br /> movwf min<br /><br /> clrw <br /> tris 6<br /> <br /> bsf GPIO,1<br /> bcf GPIO,2<br /> <br /> btfss GPIO,0 <br /> goto zhi1<br /> bcf GPIO,0<br /> goto to_loop0<br />zhi1<br /> bsf GPIO,0<br /> goto to_loop0<br /><br />no_15min<br /> clrw <br /> tris 6<br /> <br /> bcf GPIO,1<br /> bsf GPIO,2<br /> <br /> btfss GPIO,0 <br /> goto zhi1_1<br /> bcf GPIO,0<br /> goto to_loop0 <br />zhi1_1<br /> bsf GPIO,0 <br /><br />to_loop0<br /> goto loop0<br /> end<br /><br />re5楼:<br /><br />你说的现象我也遇到过,就是用软件仿真上面的程序时,在goto loop0处总是转到start1,后来把movlw 0x03 option改为movlw 0x83 option就没问题了,我也不知道为什么会这样.<br /><br />
|