tai lieu PIC-BÀI 4: PARALLEL SLAVE PORT (PSP) VÀ ỨNG DỤNG  - vuson.tk doc - Pdf 16

Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
1/29

Tutorial04.02

Gửiđến:
[email protected]
Nộidung:
BÀI4:PARALLELSLAVEPORT(PSP)VÀỨNGDỤNG
 MICROSOFTWORD

Tómtắt:
Tutorialpostlênluồng“PIC16F877ATỪDỄTỚIKHÓ”thuộcchuyênmục“CƠBẢNVỀVI
ĐIỀUKHIỂNVÀPIC”.Bài4baogồmnộidungsau:
‐ CấutạophầncứngPSPvàcácthanhghiđiềukhiển.
‐ XâydựngmoduleđiềukhiểnPSP(phầncứngvàphầnmềm).

1. SơlượcvềcấutạovàchứcnăngcủaPSP
ParallelslavePort(PSP)làmộtkhốichứcnăngon‐chipđượctíchhợptrongphầncứng
củamộtsốviđiềukhiểnPIC.Bêncạnhcáckhốichứcnăngrấtđadạngdùngchogiaotiếp
nốitiếp(I2C,SPI,CAN,USB,…),PSPlàkhốichứcnăngduynhấttrongviđiềukhiểnPIC
dùngchogiaotiếpsongsong8bit.
VớisựthamgiacủakhốiPSP,cácchứcnănggiaotiếpcủaviđiềukhiểnPICtrởnên
hoànthiệnhơn,giốngnhưmộtmáytính,vớicáccổngnốitiếpvàmộtcổngsongsong.Ta
cóthểtạmsosánhcáckhốigiaotiếpnốitiếpcủaPIC nhưcổngCOMhoặccổngUSBcủa

Dlàcácchândữliệudùngđểtruyềnnhậndữliệusongsong8bit.portElàcácchânđiều
khiểnquátrìnhtruyềnnhận,baogồmcácchânRD*(ReaD,chânRE0),WR*(WRite,chân
RE1)vàCS*(ChipSelect,chânRE2).Lưuýlàcácchânnàytíchcựcởtrạngtháilogic0.
Cónghĩalà,ởtrạngtháikhôngtácđộng,cácchânnàyphảiđượcđưalênmứclogic1,nếu
muốnmộtchânnàođótácđộnglênkhốiPSP,tađiềukhiểnchânđótrởvềtrạngtháilogic
0.
KhiđượcchophéphoạtđộngởchếđộPSP,cácchânđiềukhiểnnêutrênsẽkhôngcòn
đượcchophéphoạtđộngởchếđộI/O(portD)hoặcchếđộI/OAnalog(portE)nữa.Lúc
này,portDvàportEsẽđượcđiềukhiểnbởicácthiếtbịngoạivikhác(mộtviđiềukhiển
khácđóngvaitròlàmộtmasterchẳnghạn)đểtruyềnnhậndữliệusongsong8bit.Vaitrò
cụthểcủachúngnhưsau:
‐ PortDlàngõxuấtnhậpdữliệuvàhoàntoànđượcđiềukhiểnbởikhốiPSP.Vaitrò
củathanhghiTRISDtrongtrườnghợpnàysẽđượcbỏqua.
‐ PortElàcácchânđiềukhiểnvàphảiđượcthiếtlậpcácchếđộhoạtđộngthíchhợp,
đólàchếđộngõvàoDigital.ChếđộnàyđượcđiềukhiểnbởithanhghiTRISEvà
thanhghiADCON1.
Bênc ạnhcácchânđiềukhiển,PSPcònđượchỗtrợngắtPSPvàcácbittrạngtháidùng
đểđiềukhiểnhoạtđộngcủakhối.Cácthànhphầnhỗtrợnàyđượctrìnhbàytrongbảng
sau(tachỉquantâmtớicácbitđiềukhiểnliênquantớiPSP):
Thanh
ghi
Địa
chỉ
Chứcnăng
PORTD 08h
ChứadữliệutruyxuấtlênPSP
PORTE 09h ĐiềukhiểncácchânRE2:RE0củaPORTE
ChứacácbitđiềukhiểnPSPvàcácbitđiềukhiểnhướngtruyxuấtcác
châncủaPORTE.
Bit Chứcnăng

Chứacờngắtcácngắtngoạivi
Bit Chứcnăng
PIR1 0Ch
7

PSPIF:ParallelSlavePortInterruptFlagbit
PSPIF=1:XảyrangắtPSP
PSPIF=0:chưaxảyrangắtPSP

Chứacácbitchophépcácngătngoạivi
Bit Chứcnăng
PIE1



8Ch
7

PSPIE:ParallelSlavePortInterruptEnablebit
PSPIE=1:ChophépngắtngoạiviPSP
PSPIE=0:KhôngchophépngắtngoạiviPSP
ADCON1 9Fh
ChứacácbitđiềukhiểnADC.Cầnthiếtlậpcácgiátrịthíchhợpcho
thanhghinàyđểcáccổngI/OcủaportElàDigitalinput

1.2 QuátrìnhtruyềnnhậndữliệuquaPSP
ỞchếđộPSP,portDđóngvaitròlànơiđọcvàghidữliệuđượcđiềukhiểnbởimột
master.Đểthựchiệnđượccảhaivaitròlàtruyềnvànhậndữliệu,port Dđượcbốtríhai
bộchốtdữliệunhậpvàxuấttáchbiệtvớinhau.Cácchốtdữliệunàyđượcđiềukhỉểntrực
tiếp bởi các chânđiều khiển RD*, WR* và CS*. Tùy theo mứclogictrêncác chânđiều

Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
5/29

GiảnđồxungquátrìnhđọcdữliệutừPSPcóthểphứctạphơnsovớigiảnđồxungcủa
quá trình ghi dữ liệu. Tuy nhiên nếuđểý phân tích kĩ, ta vẫn có thể hình dungđược
phươngthứchoạtđộngcủaquátrìnhnày.Đầutiên,tathấychỉkhinàohaichânCS*và
RD*cùngởmứclogicthấpthìquátrìnhđọcdữliệumớibắtđầu.Khiđó,bitOBFtừmức
logic1sẽchuyểnvềmứclogic0,vàdữliệucầnđọcsẽxuấthiệntạingõracủaport D.Bit
OBFtrởvềmứclogic 0đểchỉthịtrạngtháibộ đệmdữliệurađãrỗng,điềuđócó2 ý
nghĩa:
‐ Thứnhất,dữliệucầnđọcphảiđượcđưavàoPSPtrướcđó.Khicósựtácđộngcủa
haichânCS*vàRD*, PSPchỉlàmmộtcôngviệcđơngiản,đólàmởbufferđệmđể
chophépdữliệudãđượcghivàotrướcđóxuấthiệnởngõraportD.
‐ Thứhai,khidữliệuchưađượcđọc,bufferđệmđãcós ẵndữliệunênbitOBFsẽở
mứclogic1.Khidữliệuđượcđọc,bufferđệmrỗngnênmứclogiccủaOBFsẽbằng
0.MuốnbitOBFtrởvềmứclogic1,tathựchiệnthaotácghidữliệumớicầnđọclên
bufferđệm.
Đếngiaiđoạnnày,việcđọcdữliệuđãhoàntất,côngviệccònlạilàđánhdấukếtthúc
quátrìnhđọcdữliệubằngcáchđưamộttronghaichânRD*hoặc CS*trởvềmứclogic
cao,khiđócờngắtPSPIFđượcsetvàngắtngoạiviPSP(nếuđãđượcchophéptrướcđó)
xảyra.BitPSPIFphảiđượcxóabằngchươngtrìnhđểnhậnbiếtđượctrườnghợpxảyra
ngắttiếptheo.

2. XâydựngcácmoduleứngdụngchoPSP.

Đểkiểmtradữliệuđọcvàocóđúnghaykhông,tasửdụngmộtcôngcụthôngdụnglà
cácLEDđượcnốivàomộtportkháccủamaster.
Bêncạnhđótacũngcầnđếncácthànhphầnhỗtrợchocácviđiềukhiển(mạchreset,
mạchổnđịnhxungdaođộngchothạchanh,…)
Dựatrênmộtvàiýtưởngnhưvậy,tacóthểxâydựngmạchnguyênlíchoứngdụng
nhưhình3.
Trongmạchứngdụngởhình3,PSPcủaPIC16F877Aslavesẽđượcđiềukhiểnbởicác
chânRE2:RE0c ủaPIC16F877Amaster.Cácchândữliệucủaslaveđượcnốivớicácchân
củaportD.NhưvậykhốiPSPcủacả2PICmastervàslaveđềuđượcnốichungvớinhau
(xéttrênquanđi ểmcấutạophầncứngcủaPIC16F877A).TuynhiênvaitròcủamỗiPIClà
hoàntoànkhácbiệt,đólàPICmastersẽđiềukhiểnPSPcủaPICslave.NhưvậyPICslave
đượcchophéphoạtđộngởchếđộPSP,cònPICmastersẽkhôngđượcchophéphoạtđộng
ởchếđộPSP.
Thựcchất tahoàn toàn cóthểsửdụngcácportđiều khiểnkhác củamasterđểđiều
khiểnPSPslave(dùngPortBvàPortAchẳnghạn)màkhôngnhấtthiếtphảilàportDvà
portE.
Ngoàira,tachỉsửdụngmộtPSPslavenênviệcđiềukhiểnchânCS*(ChipSelect)là
khôngcầnthiếtvàcóthểnốitrựctiếpchânCS*củaPSPslavexuốngmass.Trongtrường
hợpnhiềuPSPslaveđượcsửdụng,chânCS*đượcdùngđểlựachọnviệcPSPslavenào
đượcchophéptruyxuất.Ởđây,doyêucầucủaứngdụnglàchỉmangtínhchấttìmhiểu
phươngthứchoạtđộngcủaPSP,vàđểứngdụngmangtínhtổngquátcaohơn,chânCS*
vẫnsẽđượcđiềukhiển.
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
7/29

10 K
4 MHz
PIC16F877A MASTER
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SD0
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
VSS
VDD
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
30 pF
D1
SW1
RD5
R4
RD0
PIC16F877A PSP SLAVE

31
32
33
34
35
36
37
38
39
40
MCLR/VPP
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI/C1OUT
RA5/AN4/SS/C2OUT
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VDD
VSS
OSC1/CLKI
OSC2/CLKO
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1

0
30 pF
RD7
HI
0
R6
HI
0
RE1
RE2
R2
10 K
HI
RD2
RE1

Hình3:SơđồnguyênlíứngdụngđọcdữliệutừPSPsửdụngPIC16F877A.

2.2 Viếtchươngtrìnhđiềukhiểnchoứngdụng
Ởđâytacầnviếtchươngtrìnhchocảhaivi điềukhiểnmastervàslave.Cóthểnóiđây
làmộtcông việckhôngđơngiản.Tasẽgiảiquyết vấnđềbằngcáchlần lượtđứngtrên
phươngthứcđiềukhiểncủamastervàcách«phụcvụ»củaslaveđểhìnhdungracáchoạt 
độngchocảhaiviđiềukhiển.
Trướchếtlàtrongvaitròcủamộtmaster.MastersẽyêucầuPSPslavexuẩtradữliệu
cầnđọcchomasterbằngcáchđiềukhiểncácchânCS*vàRD*củaPSPslavexuốngmức
logicthấp.Sauđóđọcdữliệuvàovàkếtthúctruyxuấtdữliệubằngcáchđưamộttrong
haichânRD*hoặcCS*trởvềmứclogiccao.Nhưvậyhoạtđộngcủamasterkháđơngiản.
BâygiờtasẽđóngvaitròlàmộtPSPslaveđểhìnhdungđượcnhữngthaotáccầnlàm
củaPSPslave.KhihaichânCS*vàRD*cùngởmứclogicthấp,phầncứngcủaPSPsẽlập
tứcđưadữliệutừbufferđệmrathẳngngõracủaPSP(ngõralàportD)vàbitOBFsẽ


#define LEDPORT PORTB
;==========================================================================
;   CHUONGTRINHCHINH
ORG 0x000
CLRF STATUS
MOVLW 0x00
MOVWF PCLATH
GOTOstart
;==========================================================================
start
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Kho*?ita.oca’cPORT
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
BCF STATUS,RP1;BANK1
BSF STATUS,RP0

CLRF TRISB;kho*?ita.oca’cngo~ra
CLRF TRISE
MOVLW 0x06;kho*?ita.oca’cngo~I/Ola`digitalI/O
MOVWF ADCON1

BCF STATUS,RP0

Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006


BCF STATUS,RP0

MOVF PORTD,0;‐do.cdu*~lie^.uva`o

BSF CS;ke^’tthu’c–do.cdu*~lie^.u
BSF READ

RETURN

END
;=========================================================================

Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
10/29

Chươngtrình1S:dùngchoslave
 processor 16f877a
 include <p16f877a.inc>
__CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&
_XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Khaiba’obie^’n

BTFSC TRISE,OBF;du*~lie^.utrongbuffer–da~
;‐duo*.c–do.cchu*a??
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
11/29

GOTOexit_int;ne^’uchu*a–duo*.c–do.c,thoa’tnga*t

BCFSTATUS,RP0

MOVF DATAOUT,0;ne^’u–da~‐duo*.c–do.croi,
;‐du*adu*~lie^.umo*’iva`o
MOVWF PORTD ;buffer–de^.m
exit_int
BCFSTATUS,RP0
MOVF FSR_save,W
MOVWF FSR
MOVF PCLATH_save,W
MOVWF PCLATH
SWAPF STATUS_save,W
MOVWF STATUS
SWAPF W_save,1
SWAPF W_save,0
RETFIE
;========================================================================


MOVWF ADCON1
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Kho*?ita.onga*’tPSP
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
BSF PIE1,PSPIE

BCF STATUS,RP0

BSF INTCON,GIE
BSF INTCON,PEIE
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Kho*?ita.oca’cbie^’n
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
MOVLW bʹ01010101ʹ
MOVWF DATAOUT
MOVWF PORTD
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Vo`ngla*.pchi’nhcu?achuo*ngtri`nh
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
GOTO$

END
;========================================================================

Dodữliệutakhởitạotrongthanhghi“DATAOUT”banđầulàb’01010101’nênkhi
chươngtrìnhđượcthựcthiđúng,cácLEDởportBcủamastersẽsángtắttươngứngvới
dữliệuđọcvào.

2.2 ỨngdụngghidữliệulênPSP

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

RD7/PSP7
VSS
VDD
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
SW1
0
R10
330 X 8
D6
R5
0
R9
0
RD3
RE1
RD6
R7
RE1 RD7
4 MHz
RD3
RE2
RD5
R3

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
MCLR/VPP
RA0/AN0

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RD6
D2
D3
RD1
D1
SW2
D8
RD0
RD2
30 pF
R4
R8
0
RD0
R2
10 K
0
4 MHz
30 pF
D4
30 pF
HI

(thanhghiTRISE).
Cácchươngtrìnhứngdụngnhưvậycóthểđượcviếtnhưsau:
Chươngtrình2M:dùngchomaster
 processor 16f877a
 include <p16f877a.inc>
 __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&
_XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF

;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Khaiba’opha^`ncu*’ng
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
 #define READ PORTE,0
 #define WRITE PORTE,1
 #define CS PORTE,2
;========================================================================
;CHUONGTRINHCHINH
 ORG 0x000
 CLRF STATUS
 MOVLW 0x00
 MOVWF PCLATH
 GOTOstart
;========================================================================
start
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Kho*?ita.oca’cPORT
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
 BCF STATUS,RP1
 BSF STATUS,RP0

 CLRF TRISE

;Du`ng–de^?ghidu*~lie^.ule^nPSPslave
;Ke^’tqua?–do.cve^`chu*’atrongthanhghiW
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
writePSP
 BCF CS
 BCF WRITE

 BSF STATUS,RP0

 CLRF TRISD

 BCF STATUS,RP0

 MOVLW bʹ01010101ʹ;du*~lie^.uca^`nghile^nPSPslave
 MOVWF PORTD

 BSF CS
 BSF WRITE
 RETURN

 END
;========================================================================

Chươngtrình2S:dùngchoslave

 processor 16f877a
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02

 MOVWF FSR_save

 BTFSSPIR1,PSPIF;kie^?mtraco*`nga*’tPSP
 GOTOexit_int
 BCF PIR1,PSPIF

BSFSTATUS,RP0

 BTFSS TRISE,IBF;du*~lie^.u–da~co’o*?trongbuffer
;_de^.mchu*a??
 GOTO exit_int;ne^’uchu*a,thoa’tnga*’t

BCFSTATUS,RP0;ne^’uro^`i,‐du*adu*~lie^.unha^.n
;–duo*.craPORTB
 MOVF PORTD,0
 MOVWF PORTB 
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
17/29

exit_int;thoa’tkho?inga*’t
BCFSTATUS,RP0
 MOVF FSR_save,W
 MOVWF FSR
 MOVF PCLATH_save,W

 MOVWF ADCON1
 CLRF TRISB
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Kho*?ita.onga*’tPSP
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
 BSF PIE1,PSPIE
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
18/29

 BCF STATUS,RP0
 BSF INTCON,GIE
 BSF INTCON,PEIE
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Vo`ngla*.pchi’nhcu?achuo*ngtri`nh
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
 GOTO$

END
;========================================================================

2.3 Ứngdụngtổnghợp
 Trongcácphầntrước,tađãxâydựngđượccácchươngtrìnhphụcvụchocácthaotác
cơbảntrênPSP,baogồmđọcvàghidữliệu.Đểcủngcốlạivànắmvữngcácthaotáctrên,
tasẽthựchiệnmộtứngdụngtổnghợp.Yêucầucủaứngdụngnhưsau:






RD3
RD0
RE2
0
30 pF
0
RD2
RD6
R1
10 K
RD7
10 K
RE1
RD0
RD4
30 pF
10 K
READBUT
0
RD1
RD5
0
330 X 8
30 pF
HI

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
MCLR/VPP
RA0/AN0

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RD1
WRITEBUT
30 pF
SW3
R2
10 K
HI
330 X 8
RE1
0
RD6
RD3
PIC16F877A MASTER
1
2
3
4
5
6
7
8
9

40
MCLR/VPP
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI/C1OUT
RA5/AN4/SS/C2OUT
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VDD
VSS
OSC1/CLKI
OSC2/CLKO
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SD0
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6

TUT04.02
Ngày:
5/24/2006
Trang:
20/29





KHOI TAO
READBUT
DUOC AN??
GOI CHUONG TRINH
CON
readPSP
XUAT DU LIEU
DOC DUOC
RA PORT B
WRITEBUT
DUOC AN??
TANG GIA TRI
THANH GHI
DATAOUT
GOI CHUONG TRINH
CON
writePSP
Y
Y
START

TANG GIA TRI
THANH GHI
DATAOUT
DUA VAO
BUFFER DEM
EXIT INTERRUPT
Y
Y
Y
XOA CO NGAT
PSPIF
N
N
N

Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
22/29

Hình7:LưuđồgiảithuậtchươngtrìnhngắtcủaPSPslave.

TacầnphảikiểmtracảhaibittrạngtháiIBFvàOBFđểxácđịnhthaotáccầnthựcthi
tươngứngvớiyêucầucủamaster.
Sauđâylàchươngtrìnhcụthểcủaứngdụng:
Chươngtrình3M:dùngchomaster

;===========================================================================
start
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT04.02
Ngày:
5/24/2006
Trang:
23/29

;KhoitaocacPORT
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
 BCF STATUS,RP1
 BSF STATUS,RP0

 CLRF TRISE
 MOVLW bʹ00000011ʹ
 MOVWF TRISA
 CLRF TRISB

 MOVLW 0x06
 MOVWF ADCON1

 BCF STATUS,RP0

 BSF READ
 BSF WRITE
 BSF CS

24/29

 GOTO loop
wait2;do*.icho–de^’nkhinu’ta^’n 
 CALLdelay_50ms;‐duo*.c tha? ra
 BTFSSWRITEBUTTON
 GOTOwait2

 INCF DATAOUT,1
 CALLwritePSP
 GOTO loop
;===========================================================================
; CHUONGTRINHCON
;===========================================================================
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Chuo*ngtri`nhconʺwritePSPʺ
;Du`ng–de^?ghidu*~lie^.utu*`masterle^nPSPslave
;Gia’tri.Ca^`nghichu*’atrongthanhghiDATAOUT
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
writePSP
 BCF CS
 BCF WRITE

 BSF STATUS,RP0

 CLRF TRISD

 BCF STATUS,RP0

 MOVF DATAOUT,0


 BSF CS
 BSF READ
 RETURN
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Chuo*ngtri`nhconʺdelay_50msʺ
;Du`ng–de^?ta.otho*`igiandelay50ms
;Chuo*ngtri`nhdu`ng‐^?deho^~tro*.choqua’tri`nhxu*?Li’phi’mnha^’n
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
delay_50ms
 MOVLW dʹ50ʹ
 MOVWF count1
d2
MOVLW 0xC7
 MOVWF counta
 MOVLW 0x01
 MOVWF countb
delay_1
 DECFSZ counta,1
 GOTO$+2
 DECFSZ countb,1
 GOTOdelay_1
 DECFSZ count1,1
 GOTOd2
 RETURN

 END
;===========================================================================

Chươngtrình3S:dùngchoslave


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status