PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

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
Prev Previous Post   Next Post Next
Old 28-11-2010, 10:43 AM   #1
langtu_vt1809
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è
langtu_vt1809 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:22 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam