⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pic12ce519

📁 使用PIC12CE519控制步进电机
💻
📖 第 1 页 / 共 5 页
字号:

        GOTO        START                ;
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

;--------------------------------------------------------------------
START1.        NOP                        ;                                1.
START2.        NOP                        ;                                2.
START3.        NOP                        ;                                3.
START4.        NOP                        ;                                4.
START5.        NOP                        ;                                5.
START6.        CALL        STEP                ;                                6.-7.
START1        NOP                        ;                                1
START2        NOP                        ;                                2
START3        NOP                        ;                                3
START4        NOP                        ;                                4
START5        NOP                        ;                                5
START6        NOP                        ;                                6
START7        NOP                        ;                                7
START8        NOP                        ;                                8
START9        NOP                        ;                                9
START10        GOTO        START                ;                                10-11
START11        NOP                        ;                                11
START12        NOP                        ;                                12
START13        NOP                        ;                                13
START14        NOP                        ;                                14
START15        NOP                        ;                                15
START16        NOP                        ;                                16
START17        NOP                        ;                                17
START18        NOP                        ;                                18
START19        NOP                        ;                                19
START20        NOP                        ;                                20
START21        NOP                        ;                                21
START22        NOP                        ;                                22
START23        GOTO        START1.                ;                                23-24

;*******************************************************************
        ORG        0200h

        TITLE "PIC with EEPROM Data Memory Interface"
        LIST        P=12CE519

SCL        EQU        0x07                ; EEPROM Clock, SCL (I/O bit 7)
SDA        EQU        0x06                ; EEPROM Data,  SDA (I/O bit 6)

OK        EQU        1
NO        EQU        0
EE_OK        EQU        7                ; Bit 7 in PC_OFFSET used as OK flag for EE

PC_OFFSET        EQU        0x07        ; PC offset register (low order 4 bits),
                                ; value based on operating mode of EEPROM.
                                ; Also, bit 7 used for EE_OK flag
COUNTER                EQU        0x08        ; Bit counter for serial transfer
EEBYTE                EQU        0x09        ; Byte sent to or received from
                                ; EEPROM (control, address, or data)
EEADDR                EQU        0x0A        ; EEPROM Address
EEDATA                EQU        0x0F        ; EEPROM Data

;********************** Set up EEPROM control bytes ************************

READ_CURRENT
        MOVLW        B'10000100'        ; PC offset for read current addr. EE_OK bit7='1'
        MOVWF        PC_OFFSET        ; Load PC offset
        GOTO        INIT_READ_CONTROL

WRITE_BYTE
        MOVLW        B'10000000'        ; PC offset for write byte. EE_OK: bit7 = '1'
        GOTO        INIT_WRITE_CONTROL

READ_RANDOM
        MOVLW        B'10000011'        ; PC offset for read random. EE_OK: bit7 = '1'

INIT_WRITE_CONTROL
        MOVWF        PC_OFFSET        ; Load PC offset register, value preset in W
        MOVLW        B'10100000'        ; Control byte with write bit, bit 0 = '0'

START_BIT
        BCF        GPIO,SDA        ; Start bit, SDA and SCL preset to '1'

;******* Set up output data (control, address, or data) and counter ********

PREP_TRANSFER_BYTE
        MOVWF        EEBYTE                ; Byte to transfer to EEPROM already in W
        MOVLW        8                ; Counter to transfer 8 bits
        MOVWF        COUNTER

;************ Clock out data (control, address, or data) byte ************

OUTPUT_BYTE
        BCF        GPIO,SCL        ; Set clock low during data set-up
        RLF        EEBYTE,1        ; Rotate left, high order bit into carry bit
        BCF        GPIO,SDA        ; Set data low, if rotated carry bit is
        BTFSC        STATUS,CARRY        ;(SKPNC) a '1', then:
        BSF        GPIO,SDA        ; reset data pin to a one, otherwise leave low
        NOP
        BSF        GPIO,SCL        ; clock data into EEPROM
        DECFSZ        COUNTER,1        ; Repeat until entire byte is sent
        GOTO        OUTPUT_BYTE
        NOP                        ; Needed to meet Timing (Thigh=4000nS)

;************************** Acknowkedge Check *****************************

        BCF        GPIO,SCL        ; Set SCL low, 0.5us < ack valid < 3us
        NOP                        ; Needed to meet Timing (Tlow= 4700nS)
        BSF        GPIO,SDA
        NOP                        ; Necessary for SCL Tlow at low voltage,
        NOP                        ; Tlow=4700nS
        BSF        GPIO,SCL        ; Raise SCL, EEPROM acknowledge still valid
        BTFSC        GPIO,SDA        ; Check SDA for acknowledge (low)
        BCF        PC_OFFSET,EE_OK        ; If SDA not low (no ack), set error flag
        BCF        GPIO,SCL        ; Lower SCL, EEPROM release bus
        BTFSS        PC_OFFSET,EE_OK        ; If no error continue, else stop bit
        GOTO        STOP_BIT

;***** Set up program counter offset, based on EEPROM operating mode *****

        MOVF        PC_OFFSET,0
        ANDLW        B'00001111'
        ADDWF        PC
        GOTO        INIT_ADDRESS                ;PC offset=0, write control done, send address
        GOTO        INIT_WRITE_DATA                ;PC offset=1, write address done, send data
        GOTO        STOP_BIT                ;PC offset=2, write done, send stop bit
        GOTO        INIT_ADDRESS                ;PC offset=3, write control done, send address
        GOTO        INIT_READ_CONTROL        ;PC offset=4, send read control
        GOTO        READ_BIT_COUNTER        ;PC offset=5, set counter and read byte
        GOTO        STOP_BIT                ;PC offset=6, random read done, send stop

;********** Initalize EEPROM data (address, data, or control) bytes ******

INIT_ADDRESS
        INCF        PC_OFFSET,1        ; Increment PC offset to 2 (write) or to 4 (read)
        MOVF        EEADDR,W        ; Put EEPROM address in W, ready to send to EEPROM
        GOTO        PREP_TRANSFER_BYTE

INIT_WRITE_DATA
        INCF        PC_OFFSET,1        ; Increment PC offset to go to STOP_BIT next
        MOVF        EEDATA,0        ; Put EEPROM data in W, ready to send to EEPROM
        GOTO        PREP_TRANSFER_BYTE

INIT_READ_CONTROL
        BSF        GPIO,SCL        ; Raise SCL
        BSF        GPIO,SDA        ; raise SDA
        INCF        PC_OFFSET,1        ; Increment PC offset to go to READ_BIT_COUNTER next
        MOVLW        B'10100001'        ; Set up read control byte, ready to send to EEPROM
        GOTO        START_BIT        ; bit 0 = '1' for read operation

;************************** Read EEPROM data *****************************

READ_BIT_COUNTER
        BSF        GPIO,SDA        ; set data bit to 1 so we're not pulling bus down.
        NOP
        BSF        GPIO,SCL
        MOVLW        8                ; Set counter so 8 bits will be read into EEDATA
        MOVWF        COUNTER

READ_BYTE
        BSF        GPIO,SCL        ; Raise SCL, SDA valid. SDA still input from ack
        SETC                        ; Assume bit to be read = 1
        BTFSS        GPIO,SDA        ; Check if SDA = 1
        BCF        STATUS,CARRY        ;(CLRC) if SDA not = 1 then clear carry bit
        RLF        EEDATA,1        ; rotate carry bit (=SDA) into EEDATA;
        BCF        GPIO,SCL        ; Lower SCL
        bsf        GPIO,SDA        ; reset SDA
        DECFSZ        COUNTER,1        ; Decrement counter
        GOTO        READ_BYTE        ; Read next bit if not finished reading byte
        BSF        GPIO,SCL
        NOP
        BCF        GPIO,SCL

;****************** Generate a STOP bit and RETURN ***********************

STOP_BIT
        BCF        GPIO,SDA        ; SDA=0, on TRIS, to prepare for transition to '1'
        BSF        GPIO,SCL        ; SCL = 1 to prepare for STOP bit
        GOTO        $+1                ; equivalent 4 NOPs neccessary for I2C spec Tsu:sto = 4.7us
        GOTO        $+1
        BSF        GPIO,SDA        ; Stop bit, SDA transition to '1' while SCL high
        BTFSS        PC_OFFSET,EE_OK ; Check for error
        RETLW        NO                ; if error, send back NO
        RETLW        OK                ; if no error, send back OK

;************************ End EEPROM Subroutines **************************
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;
; 0111 1RRR  DDDD DDDD  ->  register mode
;
; 0111 10AA  AAAA AAAA  111K DBBB ; Bit manipulation
;              verify/write^

;....................................................................
CV        BSF        FSR,5                ; rampage to 0x30..
;--------------------------------
        MOVF        BT1,0                ;                                25
        BTFSS        BT1,7                ; >0<AAA AAAA                        26
        GOTO        SHORTA                ; short adress                        27
        XORWF        CV17,0                ;                                28
        BTFSS        STATUS,ZERO        ;                                29
        GOTO        CHKPROG                ;                                30-31
        MOVF        BT2,0                ;                                31
        XORWF        CV18,0                ;                                32
        BTFSS        STATUS,ZERO        ;                                33
        GOTO        CHKPROG                ;                                34
        MOVLW        0x2C                ; BT3                                35
        MOVWF        FSR                ; to 3. byte                        36
        BTFSS        LADRE                ; long adress enabled?                37
        GOTO        CHKPROG                ;                                38
        BTFSC        CONSIST                ;                                39
        GOTO        CHKPROG                ;                                40
;        NOP                        ;                                41
;        NOP                        ;                                42
        GOTO        DECOD                ;                                43-44
;--------------------------------
;BCAST        NOP                        ;                                32
;        NOP                        ;                                33
;        NOP                        ;                                34
;        NOP                        ;                                35
BCAST        GOTO        OVER1                ;                                36-37

OVER        BTFSC        CONSIST                ;                                36
        GOTO        HOPP                ;                                37
;OVER1        NOP                        ;                                38
OVER1        GOTO        BCBCK                ;                                39-40
;--------------------------------
CHKPROG        MOVF        BT1,0                ;
        ANDLW        11110000b        ; untere 3bit ausblenden
        XORLW        01110000b        ; >= 120 (120=CV1 121=CV2 ...)
        BTFSC        STATUS,ZERO        ;
        GOTO        PROG                ; register mode (CV1-CV8)
        GOTO        HOPP                ;
;--------------------------------
SHORTA        BTFSC        STATUS,ZERO        ; address = 0                        29
        GOTO        BCAST                ;                                30-31
        BTFSS        LADRE                ; long Adress enabled?                31
        XORWF        CV1,0                ;                                32

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -