
Ngườibáocáo:PhạmĐứcMạnhTàiliệu:TUT03.01
Ngày:2/9/2006Trang:1/9
Tutorialno03.02
Gửiđến:picvietnam@googlegroups.com
Nộidung:KếtnốiPICvớiEEPROM,DS1307dùngI2C
MICROSOFTWORD
Tómtắt:
TrongTutorialcủabạnNgôHảiBắcđãcóphầnhướngdẫnvềcáchlậptrìnhgiaotiếpcổngCom
trongPCdùngVC++6.0.Hômnaymìnhsẽgiớithiệuchocácbạncáchthứclậptrìnhgiaotiếpnối
tiếpUARTtrênPIC:
1. GiaotiếpnốitiếpdùngUART
ViếttắtcủaUniversalAsynchronousReceiver–Transmitter–thườnglàmộtmạch
tíchhợpđượcsửdụngtrongviệctruyềndẫndữliệunốitiếpgiữamáytínhvàthiếtbị
ngoạivithôngquacổngnốitiếp.RấtnhiềuviđiềukhiểnhiệnnayđãtíchhợpUART.Để
bắtđầuviệctruyềndữliệubằngUART,mộtstartbitđượcgửiđi,sauđólà5‐8bitdữ
liệu,sauđólàstopbit.Startbitcótrạngtháingượcvớitrạngtháibìnhthườngcủađường
truyềndữliệu.Stopbitcócùngtrạngtháivớitrạngtháibìnhthườngcủađườngtruyền
dữliệu.TốcđộcủaUARTđượcquyđịnhbởitốcđộbaud.Mộtsốinterfacechuẩncủa
UARTlàEIA,RS232,RS422vàRS485.
NhưvậyđểlàmviệcvớiUARTchúngtaphảiquantâmđếncácthôngsốsau:
• TốcđộBaud:thườnglà9600
• SốbítđượcdùngđểtruyềnData:từ5đến8(thườnglà8)
• BítStop1,hay2thườngchọn1
• Bitchẵnlẻ
2.GiaotiếpUARTtrongPIC16F877A
2.1.CácthanhghiđượcsửdụngtrongPIC16F877A
TrongPIC16F877Acótấtcả5thanhghichoquatrìnhđiềukhiểnUART:Trongđócó
2thanhghichứcnăngTXSTA,RCSTA,2thanhghidữliệuRCREG,TXREG.,vàthanh
ghitốcđộBaud:SPBRG.

Ngườibáocáo:PhạmĐứcMạnhTàiliệu:TUT03.01
Ngày:2/9/2006Trang:2/9
ThanhghiTXSTA
CSRC:
TX9 :chọnchếđộchuyền9bit:(=1:9bit,=0:8bit)
TXEN:Chophéptruyền
SYNC:Chọnchếđộtruyềnđồngbộhaykhôngđồngbộ:(=1:đồngbộ,=0:
khôngđồngbộ)
BRGH:chọnchếdộtruyềncaohaythấp(=1HIGH,=0:LOW)
TRMT:bítbáotrạngtháicủabộđệm:=1:TSRrỗng(dữliệuđãđựoctruyền
xong),=0:TSRđầy(dữliệucòntrongbộđệmcủaUART)
TX9D:giátrịcủabítthứ9trongchếđộtruyền9bit.Bitnàycóthểdùngđể
lưubitParity;
ThanhghiRCSTA
SPEN:chophépsửdụngbộUART
RX9 :chấpnhậnchếđộnhận9bit
SREN:khôngdùngvớitrườnghợpAsychoronous
CREN :tiếptụcnhậndữliệu
ADDEN:dùngtrongchếđộchọn9bit:(master,slave)

Ngườibáocáo:PhạmĐứcMạnhTàiliệu:TUT03.01
Ngày:2/9/2006Trang:3/9
FERR:bítbáohiệulỗiđườngtruyền
OERR :báohiệulỗiđườngtruyền
RX9D:giátrịbítthứ9trongquátrìnhReceiveđượclưutạiđây.
ThanhghiTXREG:dùngđểchứadữliệutruyềnđitrongquátrìnhTransmit
ThanhghiRCREG:dùngđểlưudữliệutừngoàivàotrongquátrìnhReceive
Thanhghi:SPBRGlàthanhghithiếtlậptốcđộbaudcủaPIC
TrongPIC16F877AcóhaichếđộtruyềnHighspeed,vàLowspeedđượcquyđịnhbởi
bitBRGHcủathanhghiTXSTA.Việcphânchiahaimứctốcđộnàyđểcósựchọnlựacho
trườnghợpsaisốvớitốcđộbaudchuẩncủaPC:MàtrongPCcócácmứcchuẩn:300,
2400,9600,19200,28800.Cácbạncóthểthamkhảobảng10‐3ởtrang114đểbiêtđượccác
mứctốcđộ:
Hình1:BAUDRATEFORASYNCHORONOUSMODE(BRGH=0)

Ngườibáocáo:PhạmĐứcMạnhTàiliệu:TUT03.01
Ngày:2/9/2006Trang:4/9
Hình2:BAUDRATEFORASYNCHRONOUSMODE(BRGH=1)
Thôngquabảngtrêntathấyứngvớitầnsốthạchanhlà4Mđểchọnchotốcđộbaud
là9600tacóthểchọnhaigiátrịcủathanhghiSPBRGởhaitrườnghợp:SPBRG=25ứng
vớiBRGH=1cóisaisốlà0.15vàSPBRG=6ứngvớiBRGH=0cósaisố6.99.Rõrànglàta
chọngiatrịnàocósaisốbếnhấtvàứngvớiVDtrêntanênchọnSPBRG=25,BRGH=1
vìnócósaisốnhỏhơntrườnghợpkia.Nhưvậyứngvớitrườnghợpnàocósaisốnhỏ
hơntronghaigiátrịthìtasẽchọncáiđó.
2.2. QuátrìnhtruyềnvànhậncủaPICvớiPC
TrongPIC16F877Acónhiềuchếđộtruyềnnhậnkhácnhau:chếđộtruyềnnhậndùng
bit9đểđịnhchẵnlẻ,haychomạngVĐK1mastervànhiềuslave.Vàchếđộchuyền
đồngbộứngdụngchoviệcgiaotiếpvớiA/D,D/AhayvớicácEEPRO.Vàtấtnhiêncác
chếdộnàysẽđượcthiếtlậpbởicácbittrongthanhghiTXSTA,vàTCSTA.Tuynhiên
trongtutorialnàychỉxingiớithiệuchếđộtruyềnvànhận8bitgiaotiếpvớiPCmột
trongcácchứcnăngcủabộAUSARTcủaPIC
Quátrìnhnhậndữliệu
TrongPIC16F877Ađểnhậnbiếtđượcdữ liệutruyềntớingườitadùngbitcờ RCIF
trongthanhghiPIR1.NhưvậykhithanhghiđệmdữliệuchứadữliệuthìRCIFsẽđược
đưalên1.VàchínhcờnàychophépPIC16F877Acóhaiphươngthứcđểnhậnbiếtlúc
nàocódữliệutruyềntới.SửdụngngắtvàsửdụngkiểuPolling(quayvòng)

Ngườibáocáo:PhạmĐứcMạnhTàiliệu:TUT03.01
Ngày:2/9/2006Trang:5/9
• KiểuPolling:liêntụckiểmtracờRCIFnếu=1thìđọcdữliệu:Phươngthứcnàycóưu
điểmdẽlâptrình,phùhợpvớinhữngứngdụngnhỏ.
• Kiểudùngngăt:đượcthiếtlậpbằngcáchchoRCIE=1đểchophépngắt.Tứclàmỗi
khicódữliệutruyềntớiRCREGthìsinhramộtngắtvàPICsẽtạmdừngchươngtrình
hiệnthờiđểxửlýdữliệuvừanhậnđược.Cáchnàychủyếuđượcsửdụng
NhưvậycácbướcchoquátrìnhnhậndữliệucủaquátrìnhsửdụngINTERUPTbao
gồm:
‐ 1.Khởitạotốcđộbaud:ởthanhghiSPBRG.ChoSPBRG=25,BRGH=1ứngvớitốc
độ9600(thạchanh4M)
‐ 2.ChophépquátrìnhtruyềnkhôngđồngbộbắngcáchthiếtlậpSPEN=1,SYNC=0;
‐ 3.Chophépngắtquátrìnhnhậndữliệu:RCIE=1
‐ 4Chophépnhậndữliệu:CREN=1
‐ 5.ChophépngắttoàncụcbăngviệcGIE=1,PEIE=1(GIE,PEIEtrongthanhghi
INTCON)
‐ 6.Xửlýcácphầnkhácchươngtrìnhkhicóngắtxảyrathìxửlýdữliệu
VD:nhậndữliệutừPCvớitốcđộbaud:96000sửdụngngắt
BSF TXSTA,BRGH;ChoBRGH=1
MOVLW Dʹ25ʹ ;Chonchedo9.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àmngắtxửlýdữliệu:
MOVF RCREG,W;NhandulieutuRCREGchuyenchothanhghiW
MOVWFPORTB ;DuadulieuraPORTB
......................

