Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
1/9
Tutorialn
o
03.02
Gửiđến:
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ách
thứclậptrìnhgiaotiếpnối
tiếpUARTtrênPIC:
1. GiaotiếpnốitiếpdùngUART
ViếttắtcủaUniversalAsynchronousReceiver – Transmitter –thườnglà một mạ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ệu bằ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ải
quantâ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ạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
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:đồng bộ,=0:
khôngđồngbộ)
BRGH :chọnchếdộtruyềncaohaythấp(=1HIGH,=0:LOW)
TRMT :bítbáotrạngtháicủabộđệm:=1:TSR rỗ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ạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
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ạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
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ều chếđộtruyềnnhậnkhácnhau:chếđộtruyềnnhậndùng
bit9đểđịnhchẵnlẻ,haychomạngVĐK1mastervànhiềuslave.Vàchếđộchuyền
đồngbộứngdụngchoviệcgiao
tiếpvớiA/D,D/A hayvớ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ận biếtđược dữ liệu truyền tới người ta dùng bit cờ 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ạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
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
MOVWF PORTB ;DuadulieuraPORTB
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
6/9
2.2.2.Quátrìnhtruyềndữliệu
Trongquá trìnhtruyềndữliệucũngcóhai chế độsửdụngngắtvàPolling,tuy
nhiênquátrìnhtruyềndữliệulênPCkhôngphảilàthờidiểmbất
kỳmàdặtdướisự
kiểmsoátc ủachươngtrìnhchonênngườitathưòngsửdụngkiểupollingkhicầntruyền
thìtruyềnđi.
Nhưvậycácbướcchoquátrìnhthiếtlập
ngắt:
‐ 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éptruyềndữliệubằngcáchthiếtlậpbítTXEN=1;
‐ 4.KhicầntruyềndữliệuchỉcầnLoaddữliệuđólênTXREG
VD:
BSF TXSTA,BRGH ;ChoBRGH=1
MOVLW Dʹ25ʹ ;Chon chedo9.600
MOVWF SPBRG
BSF RCSTA,SPEN;
BCF TXSTA,SYNC ;
BSF TXSTA,TXEN;TXEN=1
MOVFDATA,W ;ChuyendulieutuDATAquaW
MOVWF TXREG
;TruyendulieubangcachloaddulieulenTXREG
Lưuý:trưkhichoquátrìnhtruyềnvànhậndữliệutaphảithiếtlậptrạngtháichân
củaRC7,RC6chohợplý.ChoRC7làdạngin,RC6làdạngout
3.Mộtvidụđơngiản
ĐâylàmộtVDvềquátrìnhtruyềnvànhậndữliệutừPC.PICnhậndữliệutùPC
chuyểnquaPORTB(hiểnthịqualed)rồitruyềntrởlạiPC
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
7/9
list p=16f877A
#include <p16f877A.inc>
__CONFIG 0x393A
errorlevel ‐302
w_temp EQU0x71
status_temp EQU0x72
pclath_tempEQU0x73
ACC EQU0x74
R2 EQU0x7A
R3 EQU0x7B
R4 EQU0x7C
;**********************************************************************
ORG 0x000 ;processorresetvector
goto main ;gotobeginningofprogram
ORG 0x004 ;interruptvectorlocation
movwf w_temp ;saveoffcurrentWregistercontents
movfSTATUS,w ;moveSTATUSregisterintoWregister
movwf status_temp ;saveoffcontentsofSTATUSregister
movfPCLATH,W ;movePCLATHregisterintoWregister
movwf pclath_temp ;saveoffcontentsofPCLATHregister
;=============================================================================
BANKSEL
RCREG
MOVF RCREG,W ; Nhan du lieu tu RCREG chuyen cho thanh
ghiW
MOVWF PORTB ;DuadulieuraPORTB
BANKSEL TXREG
MOVWF TXREG ;TruyendulieudolenPC
;==============================================================================
movf pclath_temp,w ;retrievecopyofPCLATHregister
movwf PCLATH ;restorepre‐isr
PCLATHregistercontents
movf status_temp,w ;retrievecopyofSTATUSregister
movwf STATUS ;restorepre‐isrSTATUSregistercontents
swapf w_temp,f
swapf w_temp,w ;restorepre‐isrWregistercontents
retfie
main
BANKSEL ADCON1
MOVLW 0x06
MOVWF ADCON1 ;ChọnchếđộDigitalởcacchan
CALL Init_serialport
BANKSEL TRISB
CLRF TRISB ;ChodangPORTBladangout
BSF INTCON,GIE ;Chophepngat
BSF INTCON,PEIE
GOTO $
Init_serialport
BANKSEL TXSTA
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
8/9
BSF TRISC,7 ;Chonchanrb2ladangin
BCF TRISC,6
MOVLW Bʹ00100100ʹ ;Chonchedo8bit,Hightbaudrate
MOVWF TXSTA
MOVLW Dʹ25ʹ ;Chonchedo9.600
MOVWF SPBRG
BSF PIE1,RCIE;Chophepngat(receive)
BANKSEL RCSTA
MOVLW Bʹ
10010000ʹ ;
MOVWF RCSTA
RETURN
END
Vớisơđồkêtnốinhưhìnhvẽ:
+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
MachTESTUSARTdungPIC16F877A
Hình3:Mạchtest USART dung PIC16F877A
Lưuý
:ởsơđồtrênsửdụngMax232kếtnốimáytínhvìmứcđiệnápcủaPCvàPIClàkhác
nhauvàMax232ởđâycótácdụnglàmbộchuyểnđổitrunggiangiữaPCvàPIC
‐ Cáchthức
test
Ngườibáocáo:
PhạmĐứcMạnh
Tàiliệu:
TUT03.01
Ngày:
2/9/2006
Trang:
9/9
‐ Sửdụngchươngtrìnhgiaotiếpmáytínhbấtkỳcóchếđộtruyềnvànhậndữliệu.(
dùngchươngtrìnhMSCOMcủaNgohaibac)
‐ SoạnthảocodechươngtrìnhnhưtrêntạofileHex
rồinạpvàoPIC16F877A.
‐ Thiếtlậpphầncứngnhưtronghìnhvẽ.
‐ KếtnốiPICvớicổngcomcủamáytínhnhưsơđồtrên.
‐ Mởchươngtrìnhgiaotiếpmáytínhquacổng
Comrồichọnchếđộtruyền8bit,tốc
độBAUD9600.
‐ Chọnconnectrồichuyềndữliệu.Cácbạnsẽthấydữliệunhậnđượcsẽnhưkhita
nốitắthaichân2,3củacổngcomvàbạnsẽthấydữliệuhiểnthịquaLED>VD
truyềnchữʺTʺứngvới0x54hay01010100cácbạnsẽthấycóbaledsáng:led6và
led4,led2sángcòncácLedcònlạitối
‐ (lưuýlàdữliệuhiểnthịraledlàdữliệucuốicùngcủađoạntext,vìcácdữliệukia
chỉxuấthiệntrongthờigianrấtngắnnênkhôngthểnhậnrađược)
Hình4:Giaodiệnmẫu
4.Kếtluận
Trongtutorialnàychỉhướngdãnvềcáchthứctruyềnvànhậndữliệukhôngđồngbộ
quaPCcơchếsửdụng8bit.ĐểtìmhiểuthêmvềcơchếUSARTtrongPICcácbạncóthể
thamkhảoDatasheetc
ủaPIC16F877A(trang111)
Quatutorialnàycácbạnsẽbiếtđượccáchlậptrìnhtruyềnnhậndữliệumộtcáchđơn
giản,cáchsửdungchươngtrìnhkếtnốimáytínhhaysơđôsửdụ
ngMax232kếtnốimáy
tính.