Tải bản đầy đủ (.pdf) (9 trang)

tai lieu pic- Kết nối PIC với EEPROM, DS1307 dùng I2C - vuson.tk pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (315.62 KB, 9 trang )

Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
1/9

Tutorialn
o
03.02

Gửiđến:

Nộidung:
KếtnốiPICvớiEEPROM,DS1307dùngI2C
 MICROSOFTWORD

Tómtắt:
TrongTutorialcủabạnNgôHảiBắcđãcóphầnhướngdẫnvềcáchlậptrìnhgiaotiếpcổngCom
trongPCdùngVC++6.0.Hômnaymìnhsẽgiớithiệuchocácbạncách 
thứclậptrìnhgiaotiếpnối
tiếpUARTtrênPIC:
1. GiaotiếpnốitiếpdùngUART
ViếttắtcủaUniversalAsynchronousReceiver – Transmitter –thườnglà một mạch
tíchhợpđượcsửdụngtrongviệctruyềndẫndữliệunốitiếpgiữamáytínhvàthiếtbị
ngoạivithôngquacổngnốitiếp.RấtnhiềuviđiềukhiểnhiệnnayđãtíchhợpUART.Để
bắtđầuviệctruyềndữliệu bằngUART,mộtstartbitđượcgửiđi,sauđólà5‐8bitdữ
liệu,sauđólàstopbit.Startbitcótrạngtháingượcvớitrạngtháibìnhthườngcủađường
truyềndữliệu.Stopbitcócùngtrạngtháivớitrạngtháibìnhthườngcủađườngtruyền


dữliệu.TốcđộcủaUARTđượcquyđịnhbởitốcđộbaud.Mộtsốinterfacechuẩncủa
UARTlàEIA,RS232,RS422vàRS485.
NhưvậyđểlàmviệcvớiUARTchúngtaphải
quantâmđếncácthôngsốsau:
• TốcđộBaud:thườnglà9600
• SốbítđượcdùngđểtruyềnData:từ5đến8(thườnglà8)
• BítStop1,hay2thườngchọn1

Bitchẵnlẻ
2.GiaotiếpUARTtrongPIC16F877A
2.1.CácthanhghiđượcsửdụngtrongPIC16F877A
TrongPIC16F877Acótấtcả5thanhghichoquatrìnhđiềukhiểnUART:Trongđócó
2thanhghichứcnăngTXSTA,RCSTA,2thanhghidữliệuRCREG,TXREG.,vàthanh
ghitốcđộBaud:SPBRG.
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
2/9

ThanhghiTXSTA

CSRC:
TX9 :chọnchếđộchuyền9bit:(=1:9bit,=0:8bit)
TXEN :Chophéptruyền
SYNC :Chọnchếđộtruyềnđồngbộhaykhôngđồngbộ:(=1:đồng bộ,=0:
khôngđồngbộ)

BRGH :chọnchếdộtruyềncaohaythấp(=1HIGH,=0:LOW)
TRMT :bítbáotrạngtháicủabộđệm:=1:TSR rỗng(dữliệuđãđựoctruyền
xong),=0:TSRđầy(dữliệucòntrongbộđệmcủaUART)
TX9D :giátrịcủabítthứ9trongchếđộtruyền9bit.Bitnàycóthểdùngđể
lưubitParity;
ThanhghiRCSTA


SPEN  :chophépsửdụngbộUART
RX9 :chấpnhậnchếđộnhận9bit
SREN :khôngdùngvớitrườnghợpAsychoronous
CREN :tiếptụcnhậndữliệu
ADDEN :dùngtrongchếđộchọn9bit:(master,slave)
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
3/9

FERR  :bítbáohiệulỗiđườngtruyền
OERR :báohiệulỗiđườngtruyền
RX9D  :giátrịbítthứ9trongquátrìnhReceiveđượclưutạiđây.
ThanhghiTXREG:dùngđểchứadữliệutruyềnđitrongquátrìnhTransmit
ThanhghiRCREG:dùngđểlưudữliệutừngoàivàotrongquátrìnhReceive
Thanhghi:SPBRGlàthanhghithiếtlậptốcđộbaudcủaPIC
TrongPIC16F877AcóhaichếđộtruyềnHighspeed,vàLowspeedđượcquyđịnhbởi
bitBRGHcủathanhghiTXSTA.Việcphânchiahaimứctốcđộnàyđểcósựchọnlựacho

trườnghợpsaisốvớitốcđộbaudchuẩncủaPC:MàtrongPCcócácmứcchuẩn:300,
2400,9600,19200,28800.Cácbạncóthểthamkhảobảng10‐3ởtrang114đểbiêtđượccác
mứctốcđộ:

 
Hình1:BAUDRATEFORASYNCHORONOUSMODE(BRGH=0)
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
4/9


Hình2:BAUDRATEFORASYNCHRONOUSMODE(BRGH=1)
Thôngquabảngtrêntathấyứngvớitầnsốthạchanhlà4Mđểchọnchotốcđộbaud
là9600tacóthểchọnhaigiátrịcủathanhghiSPBRGởhaitrườnghợp:SPBRG=25ứng
vớiBRGH=1cóisaisốlà0.15vàSPBRG=6ứngvớiBRGH=0cósaisố6.99.Rõrànglàta
chọngiatrịnàocósaisốbếnhấtvàứngvớiVDtrêntanênchọnSPBRG=25,BRGH=1
vìnócósaisốnhỏhơntrườnghợpkia.Nhưvậyứngvớitrườnghợpnàocósaisốnhỏ
hơntronghaigiátrịthìtasẽchọncáiđó.

2.2. QuátrìnhtruyềnvànhậncủaPICvớiPC
TrongPIC16F877Acónhiều chếđộtruyềnnhậnkhácnhau:chếđộtruyềnnhậndùng
bit9đểđịnhchẵnlẻ,haychomạngVĐK1mastervànhiềuslave.Vàchếđộchuyền
đồngbộứngdụngchoviệcgiao
tiếpvớiA/D,D/A hayvớicácEEPRO.Vàtấtnhiêncác
chếdộnàysẽđượcthiếtlậpbởicácbittrongthanhghiTXSTA,vàTCSTA.Tuynhiên

trongtutorialnàychỉxingiớithiệuchếđộtruyềnvành
ận8bitgiaotiếpvớiPCmột
trongcácchứcnăngcủabộAUSARTcủaPIC
Quátrìnhnhậndữliệu
TrongPIC16F877Ađểnhận biếtđược dữ liệu truyền tới người ta dùng bit cờ RCIF
trongthanhghiPIR1.NhưvậykhithanhghiđệmdữliệuchứadữliệuthìRCIFsẽđược
đưalên1.VàchínhcờnàychophépPIC16F877Acóhaiphươngthứcđểnhậnbiếtlúc
nàocódữliệutruyềntới.SửdụngngắtvàsửdụngkiểuPolling(quayvòng)
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
5/9

• KiểuPolling:liêntụckiểmtracờRCIFnếu=1thìđọcdữliệu:Phươngthứcnàycóưu
điểmdẽlâptrình,phùhợpvớinhữngứngdụngnhỏ.
• Kiểudùngngăt:đượcthiếtlậpbằngcáchchoRCIE=1đểchophépngắt.Tứclàmỗi
khicódữliệutruyềntớiRCREGthìsinhramộtngắtvàPICsẽtạmdừngchươngtrình
hiệnthờiđểxửlýdữliệuvừanhậnđược.Cáchnàychủyếuđượcsửdụng
NhưvậycácbướcchoquátrìnhnhậndữliệucủaquátrìnhsửdụngINTERUPTbao
gồm:
‐ 1.Khởitạotốcđộbaud:ởthanhghiSPBRG.ChoSPBRG=25,BRGH=1ứngvớitốc
độ9600(thạchanh4M)
‐ 2.ChophépquátrìnhtruyềnkhôngđồngbộbắngcáchthiếtlậpSPEN=1,SYNC=0;
‐ 3.Chophépngắtquátrìnhnhậndữliệu:RCIE=1
‐ 4Chophépnhậndữliệu:CREN=1
‐ 5.ChophépngắttoàncụcbăngviệcGIE=1,PEIE=1(GIE,PEIEtrongthanhghi

INTCON)
‐ 6.Xửlýcácphầnkhácchươngtrìnhkhicóngắtxảyrathìxửlýdữliệu
VD:nhậndữliệutừPCvớitốcđộbaud:96000sửdụngngắt


BSF TXSTA,BRGH ;ChoBRGH=1
 MOVLW Dʹ25ʹ  ;Chonchedo9.600
 MOVWF SPBRG 
 BSF RCSTA,SPEN;SPEN=1
BCF TXSTA,SYNC ;SYNC=0
 BSF TXSTA,CREN
 BSF PIE,RCIE ;RCIE=1
 BSF INTCON,GIE
 BSF INTCON,
PEIE
 
;Hàmngắtxửlýdữliệu:
 MOVF RCREG,W ;NhandulieutuRCREGchuyenchothanhghiW
 MOVWF PORTB ;DuadulieuraPORTB
 

Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
6/9


2.2.2.Quátrìnhtruyềndữliệu
Trongquá trìnhtruyềndữliệucũngcóhai chế độsửdụngngắtvàPolling,tuy 
nhiênquátrìnhtruyềndữliệulênPCkhôngphảilàthờidiểmbất
kỳmàdặtdướisự
kiểmsoátc ủachươngtrìnhchonênngườitathưòngsửdụngkiểupollingkhicầntruyền
thìtruyềnđi.
Nhưvậycácbướcchoquátrìnhthiếtlập
ngắt:
‐ 1.Khởitạotốcđộbaud:ởthanhghiSPBRG.ChoSPBRG=25,BRGH=1ứngvớitốc
độ9600(thạchanh4M)
‐ 2.ChophépquátrìnhtruyềnkhôngđồngbộbắngcáchthiếtlậpSPEN=1,SYNC=0;
‐ 3.ChophéptruyềndữliệubằngcáchthiếtlậpbítTXEN=1;
‐ 4.KhicầntruyềndữliệuchỉcầnLoaddữliệuđólênTXREG
VD:

BSF TXSTA,BRGH ;ChoBRGH=1
MOVLW Dʹ25ʹ  ;Chon chedo9.600
MOVWF SPBRG 
 BSF RCSTA,SPEN;
 BCF TXSTA,SYNC ;
 BSF TXSTA,TXEN;TXEN=1
 
 MOVFDATA,W ;ChuyendulieutuDATAquaW
 MOVWF TXREG
;TruyendulieubangcachloaddulieulenTXREG
 


Lưuý:trưkhichoquátrìnhtruyềnvànhậndữliệutaphảithiếtlậptrạngtháichân
củaRC7,RC6chohợplý.ChoRC7làdạngin,RC6làdạngout

3.Mộtvidụđơngiản
ĐâylàmộtVDvềquátrìnhtruyềnvànhậndữliệutừPC.PICnhậndữliệutùPC
chuyểnquaPORTB(hiểnthịqualed)rồitruyềntrởlạiPC

Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
7/9

list p=16f877A 
#include <p16f877A.inc> 
__CONFIG 0x393A
errorlevel ‐302
w_temp EQU0x71
status_temp EQU0x72
pclath_tempEQU0x73 
ACC EQU0x74
R2 EQU0x7A
R3 EQU0x7B
R4 EQU0x7C

;**********************************************************************
 ORG 0x000  ;processorresetvector
 goto main  ;gotobeginningofprogram
 ORG 0x004  ;interruptvectorlocation


 movwf w_temp ;saveoffcurrentWregistercontents
 movfSTATUS,w ;moveSTATUSregisterintoWregister
 movwf status_temp ;saveoffcontentsofSTATUSregister
 movfPCLATH,W  ;movePCLATHregisterintoWregister
 movwf pclath_temp ;saveoffcontentsofPCLATHregister
;=============================================================================
 BANKSEL
RCREG
 MOVF RCREG,W ; Nhan du lieu tu RCREG chuyen cho thanh
ghiW
 MOVWF PORTB  ;DuadulieuraPORTB
 BANKSEL TXREG
MOVWF TXREG ;TruyendulieudolenPC
;==============================================================================
 movf pclath_temp,w ;retrievecopyofPCLATHregister
 movwf PCLATH ;restorepre‐isr
PCLATHregistercontents
 movf status_temp,w ;retrievecopyofSTATUSregister
 movwf STATUS ;restorepre‐isrSTATUSregistercontents
 swapf w_temp,f
 swapf w_temp,w ;restorepre‐isrWregistercontents
 retfie
main
 BANKSEL ADCON1
 MOVLW 0x06
 MOVWF ADCON1 ;ChọnchếđộDigitalởcacchan
 CALL Init_serialport
 BANKSEL TRISB
 CLRF TRISB  ;ChodangPORTBladangout
 BSF INTCON,GIE  ;Chophepngat

 BSF INTCON,PEIE
 GOTO $

Init_serialport
 BANKSEL TXSTA
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
8/9

 BSF TRISC,7 ;Chonchanrb2ladangin
 BCF TRISC,6
 MOVLW Bʹ00100100ʹ ;Chonchedo8bit,Hightbaudrate
 MOVWF TXSTA
 MOVLW Dʹ25ʹ  ;Chonchedo9.600
 MOVWF SPBRG
 BSF PIE1,RCIE;Chophepngat(receive)
 BANKSEL RCSTA
 MOVLW Bʹ
10010000ʹ ; 
 MOVWF RCSTA
 RETURN

 END



Vớisơđồkêtnốinhưhìnhvẽ:
+5V
+5V
U5
U8
U7
U9
U6
P1
CONNECTOR DB9
5
9
4
8
3
7
2
6
1
MAX232
1
3
4
5
11
10
12
9
1615
2

6
14
7
13
8
C1+
C1
C2+
C2-
T1in
T2in
R1out
R2out
VCCGND
V+
V-
T1out
T2out
R1in
R2in
U1
PIC16F877A
1
2
3
4
5
6
7
8

9
10
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
33
34
35
36
37
38
39
40
11
32

12
31
MCLR/VPP
RA0/AN0
RA1/AN1
RA2/AN2
RA3/AN3/VREF+
RA4/TOCKI
RA5/AN4
RE0
RE1
RE2
OSC1/CLK1
OSC2/CLK0
RC0
RC1
RC2
RC3/SCL
RD0
RD1
RD2
RD3
RC4/SDA
RC5
RC6/TX
RC7/RX
RD4
RD5
RD6
RD7

RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
VDD
VDD
VSS
VSS
MachTESTUSARTdungPIC16F877A

Hình3:Mạchtest USART dung PIC16F877A
Lưuý
:ởsơđồtrênsửdụngMax232kếtnốimáytínhvìmứcđiệnápcủaPCvàPIClàkhác
nhauvàMax232ởđâycótácdụnglàmbộchuyểnđổitrunggiangiữaPCvàPIC
‐ Cáchthức
test
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
9/9

‐ Sửdụngchươngtrìnhgiaotiếpmáytínhbấtkỳcóchếđộtruyềnvànhậndữliệu.(

dùngchươngtrìnhMSCOMcủaNgohaibac)
‐ SoạnthảocodechươngtrìnhnhưtrêntạofileHex
rồinạpvàoPIC16F877A.
‐ Thiếtlậpphầncứngnhưtronghìnhvẽ.
‐ KếtnốiPICvớicổngcomcủamáytínhnhưsơđồtrên.
‐ Mởchươngtrìnhgiaotiếpmáytínhquacổng
Comrồichọnchếđộtruyền8bit,tốc
độBAUD9600.
‐ Chọnconnectrồichuyềndữliệu.Cácbạnsẽthấydữliệunhậnđượcsẽnhưkhita
nốitắthaichân2,3củacổngcomvàbạnsẽthấydữliệuhiểnthịquaLED>VD
truyềnchữʺTʺứngvới0x54hay01010100cácbạnsẽthấycóbaledsáng:led6và
led4,led2sángcòncácLedcònlạitối
‐ (lưuýlàdữliệuhiểnthịraledlàdữliệucuốicùngcủađoạntext,vìcácdữliệukia
chỉxuấthiệntrongthờigianrấtngắnnênkhôngthểnhậnrađược)


Hình4:Giaodiệnmẫu
4.Kếtluận
Trongtutorialnàychỉhướngdãnvềcáchthứctruyềnvànhậndữliệukhôngđồngbộ
quaPCcơchếsửdụng8bit.ĐểtìmhiểuthêmvềcơchếUSARTtrongPICcácbạncóthể
thamkhảoDatasheetc
ủaPIC16F877A(trang111)
Quatutorialnàycácbạnsẽbiếtđượccáchlậptrìnhtruyềnnhậndữliệumộtcáchđơn
giản,cáchsửdungchươngtrìnhkếtnốimáytínhhaysơđôsửdụ
ngMax232kếtnốimáy
tính. 

×