![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Oct 2009
Bài gửi: 5
: |
[Help]code RFID
Mình có 1 đoạn code được thày cho :
; ; PIC16C84 running at 4MHz, Ti=1us ; /////////////////////////////////////////////////////////////////////////// ; Revision history ; /////////////////////////////////////////////////////////////////////////// ; ; Ver Date Comment ; ; 0.01 29 Dec 97 Copied from MChip\Reader\FSK ; 0.03 28 Jan 98 TRANSMIT TAB (h’09’) REGULARLY ; 20 Aug 98 Modified to correct FSK comments ; ; Tbit=50Tcy=400Ti ; Ttag=96Tbit ; Header=h’802A’ ; processor pic16c84 #include “p16c84.inc” __config b’11111111101001’ ; Code Protect on, power-up timer on, WDT off, XT oscillator #define _CARRY STATUS,0 #define _ZERO STATUS,2 #define _TO STATUS,4 #define _RP0 STATUS,5 #define _BUZZ1 PORTA,0 #define _BUZZ2 PORTA,1 #define _RS232TX PORTA,2 #define _RS232RX PORTA,3 #define _T0CKI PORTA,4 StartPORTA = b’01100’ StartTRISA = b’11000’ BeepPort = PORTA Beep0 = StartPORTA Beep1 = StartPORTA | b’00001’ Beep2 = StartPORTA | b’00010’ #define _DATA_IN PORTB,0 #define _UNUSED1 PORTB,1 #define _LED1 PORTB,2 #define _LED2 PORTB,3 #define _UNUSED2 PORTB,4 #define _UNUSED3 PORTB,5 #define _UNUSED4 PORTB,6 #define _UNUSED5 PORTB,7 StartPORTB = b’00000000’ StartTRISB = b’00000001’ StartOPTION = b’00001111’ ; TMR0 internal, prescaler off BO3 = h’0C’ DelayReg = h’0C’ BitCtr = h’0D’ BeepCtrHi = h’0D’ TxByte = h’0E’ BeepCtrLo = h’0E’ 1998 Microchip Technology Inc. DS51137B-page 105 FSK Reader Reference Design Buffer0 = h’10’ ; --- IMMOBILE --- IMMOBILE --- IMMOBILE --- IMMOBILE Buffer1 = h’11’ ; | Buffer2 = h’12’ ; | Buffer3 = h’13’ ; | Buffer4 = h’14’ ; | Buffer5 = h’15’ ; | Buffer6 = h’16’ ; | Buffer7 = h’17’ ; | Buffer8 = h’18’ ; | Buffer9 = h’19’ ; | BufferA = h’1A’ ; | BufferB = h’1B’ ; | ;BufferC = h’1C’ ; | ;BufferD = h’1D’ ; | ;BufferE = h’1E’ ; | ;BufferF = h’1F’ ; | Old0 = h’20’ ; | Old1 = h’21’ ; | Old2 = h’22’ ; | Old3 = h’23’ ; | Old4 = h’24’ ; | Old5 = h’25’ ; | Old6 = h’26’ ; | Old7 = h’27’ ; | Old8 = h’28’ ; | Old9 = h’29’ ; | OldA = h’2A’ ; | OldB = h’2B’ ; | ;OldC = h’2C’ ; | ;OldD = h’2D’ ; | ;OldE = h’2E’ ; | ;OldF = h’2F’ ; | SKIP macro BTFSC PCLATH,7 endm org h’0000’ ; *#*#*#* RESET VECTOR *#*#*#* CLRF PCLATH CLRF INTCON CLRF STATUS GOTO RESET_A org h’0004’ ; *#*#*#* INTERRUPT VECTOR *#*#*#* CLRF PCLATH CLRF INTCON CLRF STATUS GOTO RESET_A ; ***** Subroutines, Page 0 Delay07 ;[0] Delay 7Ti NOP ; | Delay06 ;[0] Delay 6Ti NOP ; | Delay05 ;[0] Delay 5Ti NOP ; | Delay04 ;[0] Delay 4Ti RETLW 0 ; | RS232CR ;[1] Transmit CR on RS232 MOVLW d’13’ ; | GOTO RS232TxW ; | RS232TxDigit ;[1] Transmit LSnybble of W on RS232 ANDLW h’0F’ ; |microID® 125 kHz Design Guide DS51137B-page 106 1998 Microchip Technology Inc. MOVWF TxByte ; | MOVLW h’0A’ ; | SUBWF TxByte,W ; | BTFSS _CARRY ; | GOTO DigitLT10 ; | DigitGE10 ; | MOVLW ‘A’-’0’-h’0A’ ; | ADDWF TxByte,f ; | DigitLT10 ; | MOVLW ‘0’ ; | ADDWF TxByte,W ; | RS232TxW ;[1] Transmit W on RS232 at 9615 baud MOVWF TxByte ; | TxByte=W RS232Tx ;[1] Transmit TxByte - 104us = 9615.4 baud BSF _RS232TX ; | Stop bit MOVLW d’35’ ; | | MOVLW DelayReg ; | | RS232TxD1 ; | | DECFSZ DelayReg,f ; | | GOTO RS232TxD1 ; | | BCF _RS232TX ; | Start bit NOP ; | | MOVLW d’32’ ; | | MOVWF DelayReg ; | | RS232TxD2 ; | | DECFSZ DelayReg,f ; | | GOTO RS232TxD2 ; | | CLRF BitCtr ; | BitCtr=#8 BSF BitCtr,3 ; | | RS232TxL1 ; | {% -4Ti BTFSC TxByte,0 ; | Transmit TxByte.0, RR TxByte GOTO RS232TxBit1 ; | | NOP ; | | RS232TxBit0 ; | | BCF _RS232TX ; | | BCF _CARRY ; | | GOTO RS232TxBitDone ; | | RS232TxBit1 ; | | BSF _RS232TX ; | | BSF _CARRY ; | | GOTO RS232TxBitDone ; | | RS232TxBitDone ; | | RRF TxByte,f ; | |% 4Ti MOVLW d’30’ ; | delay 1 bit MOVWF DelayReg ; | | GOTO RS232TxD3 ; | | RS232TxD3 ; | | DECFSZ DelayReg,f ; | | GOTO RS232TxD3 ; | | DECFSZ BitCtr,f ; | DEC BitCtr GOTO RS232TxL1 ; | } until (BitCtr==#0) CALL Delay04 ; | delay BSF _RS232TX ; | stop bit RETLW 0 ; end ; ***** End of subroutines, Page 0 RESET_A CLRWDT ; Initialise registers CLRF STATUS ; | Access register page 0 CLRF FSR ; | FSR=#0 MOVLW StartPORTA ; | Initialise PORT and TRIS registers MOVWF PORTA ; | | MOVLW StartPORTB ; | | MOVWF PORTB ; | | 1998 Microchip Technology Inc. DS51137B-page 107 FSK Reader Reference Design BSF _RP0 ;^| | MOVLW StartTRISA ;^| | MOVWF TRISA ;^| | MOVLW StartTRISB ;^| | MOVWF TRISB ;^| | MOVLW StartOPTION ;^| Initialise OPTION register MOVWF OPTION_REG ;^| | BCF _RP0 ; | | CLRF Old0 ; | Clear Old buffer CLRF Old1 ; | | CLRF Old2 ; | | CLRF Old3 ; | | CLRF Old4 ; | | CLRF Old5 ; | | CLRF Old6 ; | | CLRF Old7 ; | | CLRF Old8 ; | | CLRF Old9 ; | | CLRF OldA ; | | CLRF OldB ; | | BigLoop1 ;303-581-1041 BSF _LED1 ; LEDs “reading” CALL Delay07 ; | BCF _LED2 ; | MOVLW h’09’ ; Transmit TAB regularly CALL RS232TxW ; | MOVLW d’96’ ; set BitCtr MOVWF BitCtr ; | GetEdge ; Get an edge on _DATA_IN BTFSC _DATA_IN ; | GOTO PreSync_H ; | NOP ; | PreSync_L ; | BTFSC _DATA_IN ; | GOTO PreSync_H ; | BTFSC _DATA_IN ; | GOTO PreSync_H ; | DoSync_L ; | CLRWDT ; | BTFSS _DATA_IN ; | GOTO DoSync_L ; | BTFSS _DATA_IN ; | GOTO DoSync_L ; | GOTO Sync_Done ; | ; | PreSync_H ; | BTFSS _DATA_IN ; | GOTO PreSync_L ; | BTFSS _DATA_IN ; | GOTO PreSync_L ; | DoSync_H ; | CLRWDT ; | BTFSC _DATA_IN ; | GOTO DoSync_H ; | BTFSC _DATA_IN ; | GOTO DoSync_H ; | GOTO Sync_Done ; | Sync_Done ; |% 6 to (+4) from edge, say 8 from edge ;% -192Ti from sample MOVLW d’62’ MOVWF DelayReg ;% -190Ti from sample ReadBit ; {% -4-DelayReg*3 Ti from samplemicroID® . GOTO ReadBitD1 ; delay ReadBitD1 ; | DECFSZ DelayReg,f ; | GOTO ReadBitD1 ; | CLRF BO3 ; BO3.1=_DATA_IN BTFSC _DATA_IN ; | INCF BO3,f ; |% effective sample time BTFSC _DATA_IN ; | INCF BO3,f ; | BTFSC _DATA_IN ; | INCF BO3,f ; | BCF _CARRY ; _CARRY=BO3.1 BTFSC BO3,1 ; | BSF _CARRY ; | RLF Buffer0,f ; roll in _CARRY RLF Buffer1,f ; | RLF Buffer2,f ; | RLF Buffer3,f ; | RLF Buffer4,f ; | RLF Buffer5,f ; | RLF Buffer6,f ; | RLF Buffer7,f ; | RLF Buffer8,f ; | RLF Buffer9,f ; | RLF BufferA,f ; | RLF BufferB,f ; | ; % 19Ti from sample = -381Ti from sample MOVLW d’124’ ; set bit delay MOVWF DelayReg ; |% -379Ti from sample ;% -7-DelayReg*3 Ti from sample DECFSZ BitCtr,f ; DEC BitCtr GOTO ReadBit ; } until (BitCtr==#0) HeadSearch MOVLW d’96’ ; set BitCtr MOVWF BitCtr ; | HeadSearchL1 ; { MOVLW h’80’ ; if (header found) XORWF BufferB,W ; | BTFSS _ZERO ; | GOTO NotHead0 ; | MOVLW h’2A’ ; | XORWF BufferA,W ; | BTFSS _ZERO ; | GOTO NotHead0 ; { GOTO HeadFound ; goto HeadFound NotHead0 ; } RLF Buffer0,f ; ROL Buffer RLF Buffer1,f ; | RLF Buffer2,f ; | RLF Buffer3,f ; | RLF Buffer4,f ; | RLF Buffer5,f ; | RLF Buffer6,f ; | RLF Buffer7,f ; | RLF Buffer8,f ; | RLF Buffer9,f ; | RLF BufferA,f ; | RLF BufferB,f ; | BCF Buffer0,0 ; | BTFSC _CARRY ; | BSF Buffer0,0 ; | DECFSZ BitCtr,f ; DEC BitCtr GOTO HeadSearchL1 ; } until (BitCtr==#0) GOTO BigLoop1 ; goto BigLoop1 HeadFound CheckSame MOVF Buffer0,W XORWF Old0,W BTFSS _ZERO GOTO NotSame MOVF Buffer1,W XORWF Old1,W BTFSS _ZERO GOTO NotSame MOVF Buffer2,W XORWF Old2,W BTFSS _ZERO GOTO NotSame MOVF Buffer3,W XORWF Old3,W BTFSS _ZERO GOTO NotSame MOVF Buffer4,W XORWF Old4,W BTFSS _ZERO GOTO NotSame MOVF Buffer5,W XORWF Old5,W BTFSS _ZERO GOTO NotSame MOVF Buffer6,W XORWF Old6,W BTFSS _ZERO GOTO NotSame MOVF Buffer7,W XORWF Old7,W BTFSS _ZERO GOTO NotSame MOVF Buffer8,W XORWF Old8,W BTFSS _ZERO GOTO NotSame MOVF Buffer9,W XORWF Old9,W BTFSS _ZERO GOTO NotSame MOVF BufferA,W XORWF OldA,W BTFSS _ZERO GOTO NotSame MOVF BufferB,W XORWF OldB,W BTFSS _ZERO GOTO NotSame GOTO Same NotSame MOVF Buffer0,W MOVWF Old0 MOVF Buffer1,W MOVWF Old1 MOVF Buffer2,W MOVWF Old2 MOVF Buffer3,W MOVWF Old3 MOVF Buffer4,W MOVWF Old4 MOVF Buffer5,W MOVWF Old5microID® 125 kHz Design Guide MOVF Buffer6,W MOVWF Old6 MOVF Buffer7,W MOVWF Old7 MOVF Buffer8,W MOVWF Old8 MOVF Buffer9,W MOVWF Old9 MOVF BufferA,W MOVWF OldA MOVF BufferB,W MOVWF OldB GOTO BigLoop1 Same TxTag ;- Transmit tag BSF _LED2 ; LEDs “Found tag” CALL Delay07 ; | BCF _LED1 ; | MOVLW d’4’ ; Beep at 3597Hz for 1024 cycles MOVWF BeepCtrHi ; | MOVLW d’0’ ; | MOVWF BeepCtrLo ; | BeepLoopJ1 ; | GOTO BeepLoopJ2 ; | BeepLoopJ2 ; | MOVLW Beep1 ; | MOVWF BeepPort ; | MOVLW d’34’ ; | MOVWF DelayReg ; | BeepD1 ; | CLRWDT ; | DECFSZ DelayReg,f ; | GOTO BeepD1 ; | MOVLW Beep2 ; | MOVWF BeepPort ; | MOVLW d’32’ ; | MOVWF DelayReg ; | NOP ; | GOTO BeepD2 ; | BeepD2 ; | CLRWDT ; | DECFSZ DelayReg,f ; | GOTO BeepD2 ; | DECFSZ BeepCtrLo,f ; | GOTO BeepLoopJ1 ; | DECFSZ BeepCtrHi,f ; | GOTO BeepLoopJ2 ; | NOP ; | MOVLW Beep0 ; | MOVWF BeepPort ; | CALL RS232CR ; Transmit tag info MOVLW ‘F’ ; | CALL RS232TxW ; | MOVLW ‘S’ ; | CALL RS232TxW ; | MOVLW ‘K’ ; | CALL RS232TxW ; | MOVLW ‘ ‘ ; | CALL RS232TxW ; | MOVLW ‘/’ ; | CALL RS232TxW ; | MOVLW ‘8’ ; | CALL RS232TxW ; | MOVLW ‘-’ ; CALL RS232TxW ; | MOVLW ‘/’ ; | CALL RS232TxW ; | MOVLW ‘1’ ; | CALL RS232TxW ; | MOVLW ‘0’ ; | CALL RS232TxW ; | CALL RS232CR ; | MOVLW ‘T’ ; | CALL RS232TxW ; | MOVLW ‘b’ ; | CALL RS232TxW ; | MOVLW ‘i’ ; | CALL RS232TxW ; | MOVLW ‘t’ ; | CALL RS232TxW ; | MOVLW ‘=’ ; | CALL RS232TxW ; | MOVLW ‘5’ ; | CALL RS232TxW ; | MOVLW ‘0’ ; | CALL RS232TxW ; | MOVLW ‘T’ ; | CALL RS232TxW ; | MOVLW ‘c’ ; | CALL RS232TxW ; | MOVLW ‘y’ ; | CALL RS232TxW ; | CALL RS232CR ; | MOVLW ‘C’ ; | CALL RS232TxW ; | MOVLW ‘o’ ; | CALL RS232TxW ; | MOVLW ‘n’ ; | CALL RS232TxW ; | MOVLW ‘s’ ; | CALL RS232TxW ; | MOVLW ‘t’ ; | CALL RS232TxW ; | MOVLW ‘a’ ; | CALL RS232TxW ; | MOVLW ‘n’ ; | CALL RS232TxW ; | MOVLW ‘t’ ; | CALL RS232TxW ; | CALL RS232CR ; | MOVLW ‘T’ ; | CALL RS232TxW ; | MOVLW ‘t’ ; | CALL RS232TxW ; | MOVLW ‘a’ ; | CALL RS232TxW ; | MOVLW ‘g’ ; | CALL RS232TxW ; | MOVLW ‘=’ ; | CALL RS232TxW ; | MOVLW ‘9’ ; | CALL RS232TxW ; | MOVLW ‘6’ ; | CALL RS232TxW ; | MOVLW ‘T’ ; | CALL RS232TxW ; | MOVLW ‘b’ ; | CALL RS232TxW ; | MOVLW ‘i’ ; |microID® 125 kHz Design Guide DS51137B-page 112 1998 Microchip Technology Inc. CALL RS232TxW ; | MOVLW ‘t’ ; | CALL RS232TxW ; | CALL RS232CR ; | MOVLW ‘P’ ; | CALL RS232TxW ; | MOVLW ‘o’ ; | CALL RS232TxW ; | MOVLW ‘l’ ; | CALL RS232TxW ; | MOVLW ‘a’ ; | CALL RS232TxW ; | MOVLW ‘r’ ; | CALL RS232TxW ; | MOVLW ‘i’ ; | CALL RS232TxW ; | MOVLW ‘t’ ; | CALL RS232TxW ; | MOVLW ‘y’ ; | CALL RS232TxW ; | MOVLW ‘ ‘ ; | CALL RS232TxW ; | MOVLW ‘0’ ; | CALL RS232TxW ; | CALL RS232CR ; | MOVLW BufferB ; Transmit tag ID MOVWF FSR ; | TxLoop1 ; | SWAPF INDF,W ; | CALL RS232TxDigit ; | MOVF INDF,W ; | CALL RS232TxDigit ; | DECF FSR,f ; | BTFSC FSR,4 ; | GOTO TxLoop1 ; | CALL RS232CR ; | GOTO BigLoop1 ; goto BigLoop1 end Ai rành cho mình hỏi cái này đc viết bằng chương trình nào nhé.Mình mới tập tành còn ngu dốt anh em chỉ bảo tận tình nha À anh em nào rành cái mạch nạp PIC Pro3 cho mình hỏi cách kết nối đến chân của PIC 16f84a nhé.Mình cảm ơn nhiều nè |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|