初級會員
Joined
: 2008/2/15 13:35 最後登入時間
: 2020/12/4 14:57
From 台灣 桃園
Group:
註冊會員
Level : 5 HP : 0 / 102 MP : 13 / 4992 EXP : 11
|
各位大大,附件是我用PIC12F629寫的程式,用來控制MCP41010;但是我試了好久,不知為什麼MCP41010都沒有變化,不知可否請大大協助我處理!!還有程式中若有什麼地方寫的不好!!也請不吝指導!!謝謝!!(不好意思檔案上傳不上來,只好用貼的) LIST P=12F629 PROCESSOR 12F629 INCLUDE <P12F629.INC> __IDLOCS H'0531' __CONFIG _CPD_ON & _CP_ON & _BODEN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT CBLOCK 0X20 DATA_R COMMAND_WR COMMAND_SD SHIFT_CONT LOOP_I LOOP_J ENDC
NOTCS EQU 0 SCK EQU 1 SI EQU 2 KEY EQU 5
ORG 0X00 GOTO START_PROGRAM ORG 0X04 GOTO INT_PROGRAM
START_PROGRAM: BSF STATUS,RP0 CALL 0X3FF MOVWF OSCCAL BCF STATUS,RP0
CALL SET_PORT
CALL SET_START
;*************************************************************************** ;MAIN PROGRAM ;*************************************************************************** MAIN_LOOP: BTFSS GPIO,KEY GOTO MAIN_END CALL DELAY_10M BTFSS GPIO,KEY GOTO MAIN_END BCF GPIO,NOTCS MOVLW D'192' MOVWF DATA_R CALL WRITE_DATA BSF GPIO,NOTCS MAIN_END: ; GOTO MAIN_END GOTO MAIN_LOOP
;*************************************************************************** ;WRITE_DATA -> COMMAND:XX01XXX1 DATA:POTM_R ;*************************************************************************** WRITE_DATA: ;INPUT WRITE COMMAND TO POTENTIOMETER WR_COMM_LOOP: RRF COMMAND_WR,F BTFSC STATUS,C GOTO WR_COMM_SET BCF GPIO,SI GOTO WR_COMM_END WR_COMM_SET: BSF GPIO,SI WR_COMM_END: CALL CLK_SCK DECFSZ SHIFT_CONT,F GOTO WR_COMM_LOOP RRF COMMAND_WR,F MOVLW D'8' MOVWF SHIFT_CONT ;INPUT DATA TO POTENTIOMETER WR_DATA_LOOP: RRF DATA_R,F BTFSC STATUS,C GOTO WR_DATA_SET BCF GPIO,SI GOTO WR_DATA_END WR_DATA_SET: BSF GPIO,SI WR_DATA_END: CALL CLK_SCK DECFSZ SHIFT_CONT,F GOTO WR_DATA_LOOP RRF DATA_R,F MOVLW D'8' MOVWF SHIFT_CONT RETURN
;*************************************************************************** ;CLK ACTION ;*************************************************************************** CLK_SCK: BSF GPIO,SCK NOP BCF GPIO,SCK RETURN
;*************************************************************************** ;SET ALL USER DATA ;*************************************************************************** INT_PROGRAM: RETFIE
;*************************************************************************** ;SET ALL USER DATA ;*************************************************************************** SET_START: MOVLW B'00010001' MOVWF COMMAND_WR MOVLW D'128' MOVWF DATA_R MOVLW D'8' MOVWF SHIFT_CONT RETURN
;*************************************************************************** ;DELAY FOR KEY 100*100 ;*************************************************************************** DELAY_10M: MOVLW D'100' MOVWF LOOP_J DELAY_J: MOVLW D'100' MOVWF LOOP_I DELAY_I: DECFSZ LOOP_I,F GOTO DELAY_I DECFSZ LOOP_J,F GOTO DELAY_J RETURN
;*************************************************************************** ;SET I/O PORT ;*************************************************************************** SET_PORT: CLRF GPIO MOVLW B'00000111' MOVWF CMCON BSF STATUS,RP0 MOVLW B'00100000' MOVWF TRISIO BCF OPTION_REG,7 MOVLW B'11111111' MOVWF WPU BCF STATUS,RP0 ;Set potentiometer I/O BSF GPIO,NOTCS BCF GPIO,SCK BCF GPIO,SI RETURN
END
發表於: 2009/8/26 21:56
|