您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC单片机玩具车程序 正文
PIC单片机玩具车程序

PIC单片机玩具车程序

点击数:7448 次   录入时间:03-04 11:39:06   整理:http://www.55dianzi.com   PIC单片机
START15 GOTO $+1  ;    15-16
START17 NOP   ;    17
START18 NOP   ;*    18
;.....................................................................
START19 INCF NOADR  ; for IB with M*  19
START20 BTFSS NOADR,7  ; counts if no   20
START21 GOTO START23  ; DCC signal is   21
GOTO INIT  ; readable   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 0x35 ; 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 ************************




WRITE_BYTE
MOV LW B’10000000’ ; PC offset for write byte. EE_OK: bit7 = ’1’
GOTO INIT_WRITE_CONTROL




READ_RANDOM
MOV LW B’10000011’ ; PC offset for read random. EE_OK: bit7 = ’1’




INIT_WRITE_CONTROL
MOV WF PC_OFFSET ; Load PC offset register, value preset in W
MOV LW 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
MOV WF EEBYTE  ; Byte to transfer to EEPROM already in W
MOV LW 8  ; Counter to transfer 8 bits
MOV WF 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 *****




MOV F 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)
MOV F 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
MOV F EEDATA,0 ; Put EEPROM data in W, ready to send to EEPROM
GOTO PREP_TRANSFER_BYTE




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




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

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  下一页


本文关键字:单片机  程序  玩具  PIC单片机单片机-工控设备 - PIC单片机

上一篇:LCD1602显示C语言