新會員
Joined
: 2009/7/9 20:17 最後登入時間
: 2009/11/26 20:18
Group:
註冊會員
Level : 1 HP : 0 / 0 MP : 0 / 0 EXP : 0
|
LIST P=16F877, R=DEC #INCLUDE P16F877.INC CBLOCK 0X20 ENDC
CBLOCK TEMP0 AAH AAL DR OLD_DR TEMPH TEMPL CARRY ; TEMP01 AAH1 AAL1 DR1 OLD_DR1 TEMPH1 TEMPL1 CARRY1 AH1 AL1 ENDC
CBLOCK R0_DLY5mS, R1_DLY5mS ENDC
CBLOCK R0_DLY0_1S, R1_DLY0_1S, R2_DLY0_1S ENDC
ORG 0 NOP MAIN: BANKSEL TEMP0 MOVLW D'0' MOVWF TEMP0 BANKSEL AAH MOVLW D'0' MOVWF AAH BANKSEL AAL MOVLW D'0' MOVWF AAL
;BANKSEL OLD_DR ;MOVLW D'0' ;MOVWF OLD_DR
BANKSEL TRISD MOVLW B'11111101' MOVWF TRISD
BANKSEL ADCON1 MOVLW B'00001001' MOVWF ADCON1 BANKSEL ADCON0 MOVLW B'10001001' MOVWF ADCON0 BANKSEL PR2 MOVLW H'FF' MOVWF PR2 BCF TRISC,2 BANKSEL CCP1CON MOVLW B'00001111' MOVWF CCP1CON MOVLW B'00000101' MOVWF T2CON CALL DLY5mS
MAIN1: BSF ADCON0,GO ; start a/d converting MAIN2: BTFSC ADCON0,GO ; a/d convertion finished? GOTO MAIN2 MOVF ADRESH,W ;LEFT-JUSTFIED READ AD MOVWF AAH MOVF ADRESL,W MOVWF AAL BTFSC AAH,7 GOTO CW GOTO CCW CW: BANKSEL CCPR1L MOVLW B'11111111' MOVWF CCPR1L BSF CCP1CON,5 BSF CCP1CON,4 MOVLW B'11111111' MOVWF TEMPH MOVLW B'11000000' MOVWF TEMPL MOVF AAL,W ;(AAH,AAL)=(10000000,00000000)-(AAH,AAL) SUBWF TEMPL,1 RLF TEMP0,W SUBWF TEMPH,1 MOVF AAH,W SUBWF TEMPH,1 MOVF TEMPL,W ;(AAH,AAL)=(TEMPH,TEMPL) MOVWF AAL MOVF TEMPH,W MOVWF AAH MOVF AAL,W ADDWF AAL,1 RLF TEMP0,W MOVWF CARRY MOVF AAH,W ADDWF AAH,W ADDWF CARRY,W MOVWF AAH BCF TRISD,1
GOTO CONT2 CCW: MOVLW B'10000000' MOVWF TEMPH MOVLW B'00000000' MOVWF TEMPL MOVF AAL,W ;(AAH,AAL)=(10000000,00000000)-(AAH,AAL) SUBWF TEMPL,1 RLF TEMP0,W SUBWF TEMPH,1 MOVF AAH,W SUBWF TEMPH,1 MOVF TEMPL,W ;(AAH,AAL)=(TEMPH,TEMPL) MOVWF AAL MOVF TEMPH,W MOVWF AAH MOVF AAH,W ADDWF AAH,1 BCF TRISD,1 CALL DLY0_1S BANKSEL OLD_DR ;測試是否有進入CCW MOVLW D'50' MOVWF OLD_DR
CONT2: MOVF DR,W ;MOVWF OLD_DR MOVF AAH,W MOVWF CCPR1L BCF CCP1CON,5 BCF CCP1CON,4 BTFSC AAL,7 BSF CCP1CON,5 BTFSC AAL,6 BSF CCP1CON,4
MAIN_1: BANKSEL TEMP01 MOVLW D'0' MOVWF TEMP01 BANKSEL AAH1 MOVLW D'0' MOVWF AAH1 BANKSEL AAL1 MOVLW D'0' MOVWF AAL1
BANKSEL OLD_DR1 MOVLW D'0' MOVWF OLD_DR1
BANKSEL TRISD MOVLW B'11111110' MOVWF TRISD
BANKSEL ADCON1 MOVLW B'00001001' MOVWF ADCON1 BANKSEL ADCON0 MOVLW B'10010001' MOVWF ADCON0 BANKSEL PR2 MOVLW H'FF' MOVWF PR2 BCF TRISC,1 BANKSEL CCP2CON MOVLW B'00001111' MOVWF CCP2CON MOVLW B'00000101' MOVWF T2CON CALL DLY5mS
MAIN1_1: BSF ADCON0,GO ; start a/d converting MAIN2_1: BTFSC ADCON0,GO ; a/d convertion finished? GOTO MAIN2_1 MOVF ADRESH,W ;LEFT-JUSTFIED READ AD MOVWF AAH1 MOVF ADRESL,W MOVWF AAL1 BTFSC AAH1,7 GOTO CW1 GOTO CCW1 CW1: BANKSEL CCPR2L MOVLW B'11111111' MOVWF CCPR2L BSF CCP2CON,5 BSF CCP2CON,4 MOVLW B'11111111' MOVWF TEMPH1 MOVLW B'11000000' MOVWF TEMPL1 MOVF AAL1,W SUBWF TEMPL1,1 RLF TEMP01,W SUBWF TEMPH1,1 MOVF AAH1,W SUBWF TEMPH1,1 MOVF TEMPL1,W MOVWF AAL1 MOVF TEMPH1,W MOVWF AAH1 MOVF AAL1,W ADDWF AAL1,1 RLF TEMP01,W MOVWF CARRY1 MOVF AAH1,W ADDWF AAH1,W ADDWF CARRY1,W MOVWF AAH1 BSF TRISD,0
GOTO CONT2_1 CCW1: MOVLW B'10000000' MOVWF TEMPH1
MOVLW B'00000000' MOVWF TEMPL1 MOVF AAL1,W ;(AAH,AAL)=(10000000,00000000)-(AAH,AAL) SUBWF TEMPL1,1 RLF TEMP01,W SUBWF TEMPH1,1 MOVF AAH1,W SUBWF TEMPH1,1 MOVF TEMPL1,W ;(AAH,AAL)=(TEMPH,TEMPL) MOVWF AAL1 MOVF TEMPH1,W MOVWF AAH1 MOVF AAH1,W ADDWF AAH1,1 BCF TRISD,0 CALL DLY0_1S
CONT2_1:MOVF DR1,W MOVWF OLD_DR1 MOVF AAH1,W MOVWF CCPR2L BCF CCP2CON,5 BCF CCP2CON,4 BTFSC AAL1,7 BSF CCP2CON,5 BTFSC AAL1,6 BSF CCP2CON,4 GOTO MAIN
DLY5mS: MOVLW 20 MOVWF R1_DLY5mS DLY5m1: MOVLW 50 MOVWF R0_DLY5mS DLY5m2: NOP DECFSZ R0_DLY5mS GOTO DLY5m2
DECFSZ R1_DLY5mS GOTO DLY5m1 RETURN
; DLY0_1S: MOVLW 10 ; 1*10mS=0.01S MOVWF R2_DLY0_1S DLY0_1S3: MOVLW 10 ; 10*0.1mS=1mS MOVWF R1_DLY0_1S DLY0_1S2: MOVLW 100 ; 100*1uS=0.1mS MOVWF R0_DLY0_1S DLY0_1S1: NOP ; 1ck DECFSZ R0_DLY0_1S ; 1ck GOTO DLY0_1S1 ; 2ck(totaly 4 ck=1uS) ; DECFSZ R1_DLY0_1S GOTO DLY0_1S2 ; DECFSZ R2_DLY0_1S GOTO DLY0_1S3 RETURN END
這個程式我接LED之後 我把可變電組接到RA0上
轉了之後發現RC1和RC2都有輸出PWM
可變R從0轉到底變化是
RC1是大約到2.5V左右就跳回0V左右在跳到2.5V RC2是轉到某個值之後閃爍閃爍 這樣程式要改變這個燈的閃爍方式要從哪邊改呢??
發表於: 2009/11/26 20:30
|