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

tai lieu PIC - Bài 3: KĨ THUẬT BẢNG - vuson.tk ppsx

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 (338.37 KB, 14 trang )

Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
1/14

Tutorial03.02

Gửiđến:

Nộidung:
Bài3:KĨTHUẬTBẢNG
 MICROSOFTWORD

Tómtắt:
Tutorialpostlênpicvietnam,topic“PIC16F877ATỪDỄTỚIKHÓ”thuộcluồng“CƠBẢNVỀ
VIĐIỀUKHIỂN VÀPIC”vớinộidung:
‐ PhântíchgiảithuậtkĩthuậtbảngvàmộtsốứngdụnghiểnthịvớiLED.

1. Đặtvấnđề
Trướckhiphântíchgiảithuậtcủakĩthuậtbảngtathựchiệnmộtứngdụngnhỏ,coinhư
vừaônlạibàicũ,vừadặtracácvấnđềchobàimới.Ứngdụngnàysửdụngmạchnguyênlíđã
đượcxâydựngởbài1.
Ứngdụng1:ChomộtLEDchạytừtráisangphảisaumỗikhoảngthờigiandelay100ms.
TađãxâydựngmộtmạchứngdụngbaogồmcácLEDđượcgắnvàoPORTBcủaviđiều
khiểnPICthôngquacácđiệntrở,vàmuốnLEDnàosáng,cầnxuấtgiátrịlogic1rachân
tươngứngcủaPORTB.Đểthuậntiệnchoviệctheodõi,sơđồm ạchsẽđươcđưalạitronghình
dướiđây.


R5
D2
4 MHz
HI
R6
D7
D5
D4
0
R2
R1
0
R9
D3
HI
SW1
1 2
0
R7
D8
0
D1
0
R3
HI
R4
PIC16F877A
8
9
10

12
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
13
2
3
4
5
6
7 33
34
35
36

37
38
39
40
11
32
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
GND
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
GND
MCLR/VPP
OSC1/CLKIN

RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI/C1OUT
RA5/AN4/SS/C2OUT
RBO/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
VDD
VDD
R8
C1
30 pF
D6
C2
30 pF

Hình 1: Sơ đồ nguyên lí mạch ứng dụng.
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006

Trang:
2/14

TađãbiếtđượccáchthiếtlậpgiátrịchocácchânI/Ocủaviđiềukhiển(bài1),cáchviết
chươngtrìnhdelay(bài2),vàmuốncácLEDdịchtừtráisangphải,tasửdụngmộttronghai
lệnhsau:
LệnhRLF
Cúpháp: RLF thanh_ghi,noi_den
Tácdụng:dịchtráicácbittrongthanhghi“thanh_ghi”thôngquacờcarryC
(thanhghichứcnăngSTATUS).Kếtquảsaukhidịchđượclưuvàothanhghi
”thanh_ghi”nếuthamsố“noi_den”manggiatrị1hoặcthanhghiWnếutham
số“noi_den”manggiátrị0.Cóthểhìnhdungcáchdịchcủalệnhnàytheo
hìnhdưới.

LệnhRRF
 Cúpháp: RRF thanh_ghi,noi_den
Tácdụng:dịchphảicácbittrongthanhghi“thanh_ghi”thôngquacờcarry
C(thanhghichứcnăngSTATUS).Kếtquảsaukhidịchđượclưuvàothanhghi
”thanh_ghi”nếuthamsố
“noi_den”manggiatrị1hoặcthanhghiWnếutham
số“noi_den”manggiátrị0.Cóthểhìnhdungcáchdịchcủalệnhnàytheo
hìnhdưới.


Đếnđâyxemnhưtađãcóđầyđủcácthôngtinđểviếtchươngtrình.Giảithuậtcũng
kháđơngiản,cácbướctiếnhànhlầnlượtnhưsau:
‐ ĐưavàothanhghiPORTBgiátrị10000000b(choLEDđầu
tiênsáng).
‐ DịchphảigiátrịtrongthanhghiPORTB(LEDsángcũngđượcdịchtươngứng).
‐ Delay100ms.

‐ Lặplạibước2.
Vàđây,chươngtrìnhcủaứngdụng:
Chươngtrình3.1:
;=============================================================================
;WWW.PICVIETNAM.COM
;Laptrinh:  NGUYENTRUNGCHINH
;Ngaybatdau:  23thang01nam2006
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
3/14

;Ngayhoanthanh: 23thang01nam2006
;Kiemtrachuongtrinh: 
;Ngaykiemtra: 
;SudungvidieukhienMicrochip: PIC16F877A
title “chuongtrinh3‐1.asm”
processor 16f877a
include <p16f877a.inc>
__CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&_XT_OSC&
_WRT_OFF&_LVP_OFF&_CPD_OFF
;Capnhatvabosung:
;Motachuongtrinh: ChuongtrinhdungdedieukhienmộtLEDsangdịchsangphaisau
;moikhoangthoigian100ms.
;Motaphancung: 8LEDduocganvaoPORTBthongquacacdientro,cac
;thanhphandikembaogomthachanh,machresetvanguon

;================================================================================
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Khoitaocacbien
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
count1 EQU 0x20 ;cacbiendungchodoanchuongtrinhdelay
counta EQU 0x21
countb EQU 0x22
;=============================================================================
;CHƯƠNGTRÌNHCHÍNH
;=============================================================================
ORG 0x000
GOTO start
start;chươngtrìnhchínhbắtđầutạiđây
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;KhởitạoPORTB
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
4/14

BCF  STATUS,RP1
BSF STATUS,RP0 ;chọnBANK1
CLRF TRISB  ;PORTB<‐outputs
BCF STATUS,RP0 ;chọnBANK0
MOVLW b’10000000’ ;bậtLEDđầutiênsánglên

MOVWF PORTB ;PORTB<‐b‘10000000’
 ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
 ;Vònglặpchínhcủachươngtrình

 ;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
loop
CALL delay100ms ;gọichươngtrìnhcondelay100ms
RRF PORTB,1 ;dịchphảithanhghiPORTB
;kếtquảsaukhidịchlưuvàothanhghiPORTB
GOTO loop  ;vònglặpvôhạn
;================================================================================
;CHƯƠ
NGTRÌNHCON
;================================================================================
delay100ms;chươngtrìnhcondelay100ms
MOVLW d’100’
MOVWF count1
d1
MOVLW 0xC7
MOVWF counta
MOVLW 0x01
MOVWF countb
delay_0 
DECFSZ counta,1
GOTO $+2
DECFSZ countb,1
GOTO delay_0
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:

TUT03.02
Ngày:
3/6/2006
Trang:
5/14

DECFSZ count1,1
GOTO d1
RETURN;trởvềchươngtrìnhchính
END;kếtthúcchươngtrình
;================================================================================
Xong!Đếnđâytacóthểcảmnhậnđượcrằngdườngnhưviệcpháttriểncácứngdụng
đãtrởnêndễdànghơntrước.TươngtựtacóthểđiềukhiểncácLEDdịchtừphảisangtrái
(thaylệnhRRFbằnglênhRLF).
Bâygiờ,giảsửyêucầucủaứngdụngkhôngphảilàdịchtráihaydịchphải,màlàdịch
theomộtquiluậtphứctạpnàođóhoặcchẳngcầnquiluậtdịchnàocả.Rõràngcáclệnh
RLFhayRRFkhôngđủkhảnănggiảiquyếtđượcvấnđề,hoặcnếucóthìgiảithuậtcho
chươngtrìnhsẽrấtphứctạpvìphảitìmraquiluậtdịchLEDmàyêucầuđặtra.Tuynhiên
mọikhókhăndườngnhưđềucócáchgiảiquyếtriêngcủanó,vàtậplệnhcủaPICcung
cấpchotamộtcôngcụđểgiảiquyếtkhókhăntrên:lệnhRETLW.Cóthểchorằngđâylà
mộtlệnhrấtquantrọngtrongviệcpháttriểncácứngdụngvàgiảithuậtchoviđiềukhiển
PIC.Kĩthuậtbảngcũngđượcxâydựngdựatrênlệnhnày.Phầntiếptheosẽphântíchgiải
thuậtcủakĩthuậtnày.

2. Kĩthuậtbảng
2.1. Cácthôngtincơsởđểxâydựngkĩthuậtbảng
2.1.1 Cáclệnhhỗtrợchokĩthuậtbảng.
TrongbàitrướctatừngbiếtđếnlệnhRETLWvớivaitrònhưlệnhRETURN(trởvề
chươngtrìnhchínhtừchươngtrìnhcon),tacũngđãbiếtđượ
ccáchsửdụnglệnhnày

nhưthếnào.Đểthuậntiệnchoviệctheodõi,lệnhRETLWcũngsẽđượcnhăclạiởđây
cùngvớimộtsốlệnhđượcsửdụngchoviệcpháttriểnk
ĩthuậtbảng.
LệnhRETLW
Cúpháp:RETLW k (0≤k≤255)
Tácdụng:trởvềchươngtrìnhchínhtừchươngtrìnhconvớigiátrịkđược
chứatrongthanhghiW.
LệnhADDLW
Cúpháp:ADDLW k (0≤k≤255)
Tácdụng:cộnggiátrịkvàogiátrịchứatrongthanhghiW,kếtquảchứa
trongthanhghiW.
Lệnh nàyđược hỗ trợ bởi các bit trạng thái C, DC, Z trong thanh ghi
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
6/14

STATUS.Chứcnăngcáclệnhnàysẽđượcbànđếnkĩhơnkhicầnpháttriển
cácứngdụngliênquanđếncácbittrạngtháinày.
LệnhADDWF
Cúpháp: ADDWF thanh_ghi,noi_den
Tácdụng:CộnggiátrịchứatrongthanhghiWvàothanhghi“thanh_ghi”.
Kếtquảđượcchứatrongthanhghi“thanh_ghi”nếuthamsố“noi_den”mang 
giátrị1hoặcthanhghiWnếuthamsố“noi_den”manggiátrị0.
LệnhnàycũngđượchỗtrợbởicácbittrạngtháiC,DC,Ztrongthanhghi
STATUS.

LệnhBTFSS
Cúpháp:
BTFSS thanh_ghi,bit (0≤bit≤7)
Lệnh1
Lệnh2
……… 
Tác dụng: kiểm tra bitđược chỉ định bởi tham số “bit” trong thanh ghi
“thanh_ghi”.Nếubitđóbằng0,lệnh1đượcthựcthi.Nếubitđókhác0,lệnh1
đượcbỏquavàthayvàođólàlệnhNOP.
LệnhBTFSC
Cúpháp: 
BTFSC thanh_ghi,bit (0≤bit≤7)
Lệnh1
Lệnh2
…………….
Tác dụng: kiểm tra bitđược chỉ định bởi tham số “bit” trong thanh ghi
“thanh_ghi”.Nếubitđób ằng1,lệnh1đượcthựcthi.
Nếubitđóbằng0,Lệnh
tiếptheođượcbỏquavàthayvàođóbằnglệnhNOP.
Leänh INCF
Cúpháp:INCF thanh_ghi,noi_den 
Tácdụng:tanggiátrịthanhghi“thanh_ghi”len1đơnvị.Kếtquảđượclưu
vàothanhghiWnếuthamsố“noi_den”bằng0hoặcthanhghi“thanh_ghi”
nếuthamsố“noi_den”bằng1.
LệnhnàyđượchỗtrợbởibitZtrongthanhghiSTATUS.



Ngườibáocáo:
NguyễnTrungChính

Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
7/14

LệnhDECF
Cúpháp:DECFthanh_ghi,noi_den
Tácdụng:giảmgiátrịthanhghi“thanh_ghi”1đơnvị.Kếtquảđượcchứa
trongthanhghiWnếu“noi_den”bằng0hoặcthanhghi“thanh_ghi”nếu
“noi_den”bằng1.
LệnhnàyđượchỗtrợbởibitZtrongthanhghiSTATUS.
LệnhMOVF
Cúpháp:MOVF thanh_ghi,noi_den
Tácdụng:đưagiátrịtrongthanhghi“thanh_ghi”vàothanhghiWnếu
thamsố“noi_den”bằng0hoặcthanhghi“thanh_ghi”nếuthamsố“noi_den”
bằng1.
Việcđưagiátrịtrongthanhghi“thanh_ghi”vàothanhghi“thanh_ghi”có
vẻvônghĩa.ThôngthườngcôngviệcnàydùngđểthiếtlậpcácgiátrịchobitZ
(thanhghiSTATUS).Tasẽbànđếnkĩhơnthaotácnàykhixâydựngcácứng
dụngliênquanđếnnó.

LệnhXORLW
Cúpháp:XORLW k (0≤k≤255)
Tácdụng:thựchiệnphéptoánXORgiữagiátrịkvảgiátrịtrongthanhghi
W.KếtquảđượcchứatrongthanhghiW.Nếukếtquảphéptoánbằng0,bitZ
(thanhghiSTATUS)sẽmanggiátrị1.Nếukếtquảphéptoánkhác0,bitZsẽ
manggiátrị0.
XembảngsauđểbiếtđượckếtquảlogickhithựchiệnphéptoánXOR

giữahai
thamsốAvàB:
A B Kếtquả
0 0 0
0 1 1
1 0 1
1 1 0

Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
8/14


LệnhXORWF
Cúpháp:XORWF thanh_ghi,noi_den
Tácdụng:thựchiệnphéptoánXORgiữacácgiátrịchứatrongthanhghiW
vàthanhghithanh_ghi.KếtquảđượcchứatrongthanhghiWnếuthamsố
«noi_den»manggiátrị0hoặcthanhghi«thanh_ghi»nếuthamsố
«noi_den»manggiátrị1.
LệnhnàycũngđượchỗtrợbởibitZtrongthanhghiSTATUS.

 TacómộtsốnhậnxétvềphéptoánXORnhưsau:
‐KhihaibiếnAvàBmanggiátrịgiốngnhau,kếtquảcủaphéptoánlà0
‐KhihaibiếnAvàBmanggiátrịkhácnhau,kếtcủaquảphéptoánbằng1
Nhưvậy,giảsửAvàBbằngnhau,thìkếtquảphéptoán(AXORB)sẽbằng0,khi

đó,trongtrườnghợpcấutạophầncứngcủaviđiềukhiểnPIC,bitZsẽmangmứclogic
1.CầnchúýlàtậplệnhPICkhôngcóphéptoánsosánh,nênlệnhXORLWvàbitZcủa
thanhghiSTATUSđượcsửdụngđểxâydựnggiảithuậtthựchiệnviệcsosánhgiữa
haisố.

2.1.2 ThanhghiPC.
Tađãbiếtkhôngnhưvixửlíhayvihọđiềukhiển8051,doPICđượcthiếtkếtheo
lốikiếntrúcHavardnênbộnhớchươngtrìnhvàbộnhớdữliệuđượctáchriêng.Vàđể
thaotácđượcvớibộnhớchươngtrìnhtrongviđiềukhiểnPIC,thanhghiPCđượcđưa
vàođểdùngchoviệctruyxuấtbộnhớchươngtrình.Đâylàthanhghichứađịachỉcác
lệnhtiếptheosẽđượcthựcthitrongbộnhơchươngtrình.
ĐốivớiviđiềukhiểnPIC16F877A,thanhghiPClàthanhghi13bit,baogồmhai
thanhghiPCL(chứa8bitthấp)vàthanhghiPCH(chứacácbit
caocònlại).Tạisaolà
13bit??Câutrảlờilàphảidùng13bitđểmãhóahếtđượcđịachỉcủabộnhớchương
trìnhcódunglượnglà8KwordcủaPIC16F877A(8Kword=2
3
x2
10
word=2
13
word).
Nhưvậymớibảođảmcóthểtruyxuấtđếnbấtkìônhớnàotrongbộnhớchươngtrình
củaviđiềukhiển.
TrướcmắttasẽkhôngcầnquantâmtớithanhghiPCH(vìthanhghinàykhông
nằmtrongbộnhớdữliệu)màchỉquantâmtớithanhghiPCL.Thanhghinàycótrong
bộnhớdữliệu,diềuđócónghĩanóchophépcácthaotácnhưmộtthanhghithông
thường(ghi,xóa,truyxuất, ).ThayđổigiátrịtrongthanhghiPCLsẽlàmthayđổi
quátrìnhtruyxuấtbộnhớchươngtrìnhcủaviđiềukhiển.Việcthaotáctrênthanhghi
PCLcầnhếtsứccẩntrọngvìnósẽlàmthayđổiquátrìnhthựcthilệnhvàlàmảnh

Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
9/14

hưởngnghiêmtrọngđếngiảithuậtcũngnhưtácdụngcủachươngtrình.Tuynhiên
nếukiểmsátđược,tacóthểđiềukhiểnmộtcáchlinhđộngdòngchảycủachươngtrình
khi
viđiềukhiểnhoạtđộng.Cầnkiểmsoátmộtcáchchặtchẽviệcthaotáctrênthanh
ghiPCL,đócũnglàyêucầuquantrọngcủakĩthuậtbảng.
Cóthểtìmhiểuthêmthông
tinvềthanhghinàytrongdatasheetcủanhàsảnxuất.
Tacũngnêntìmhiểucácđểbiếtthêmvàđểkiếmchứnglạicácthôngtintrongbai,
đồngthờigiúptacóthêmđượcmộtsốkĩnăngtrongviệckhaithácthôngtintrong
datasheetcủamộtsảnphẩmđiệntử.Trongbàinàytachỉcầntìmhiểucácthôngtinđủ
đểphụcvụchobài.

2.2. Phântíchgiảithuậtkĩthuậtbảng
Tasẽphântíchkĩthuậtnàythôngquamộtứngdụng.Yêucầucủaứngdụngnhưứng
dụng1màtađãthựchiệnthànhcôngởphần1,đólàchomộtLEDchạytừtráisangphải,
nhưnglầnnàythayvìsửdụnglệnhRLFhayRRF,tasẽsửdụngkĩthuậtbảng.Việcứng
dụngkĩthuậtbảngtrongtrườnghợpnàykhôngmangtínhchấttốiưu hóagiảithuật,mà
chỉmangtínhchấttìmhiểumộtkĩthuậtviếtchươngtìnhmới.
Chươngtrìnhtrongvídụ1đượcviếtlạinhưsau:
 Chươngtrình3.2:


;=============================================================================
;WWW.PICVIETNAM.COM
;Laptrinh:  NGUYENTRUNGCHINH
;Ngaybatdau: 23thang01nam2006
;Ngayhoanthanh: 23thang01nam2006
;Kiemtrachuongtrinh:
;Ngaykiemtra: 
;SudungvidieukhienMicrochip: PIC16F877A
 title “chuongtrinh3‐2.asm”
processor 16f877a
 include <p16f877a.inc>
 __CONFIG _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&
_XT_OSC&_WRT_OFF&_LVP_OFF&_CPD_OFF
;Capnhatvabosung:
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
10/14

;Motachuongtrinh: ChuongtrinhdungdedieukhiencacLEDganvao
;PORTBlầnlượtchạytừtráisangphảisaumoikhoangthoi
;gian100ms.
;   Sudungkithuatbang
;Motaphancung: 8LEDduocganvaoPORTBthongquacacdientro,cac
;thanhphandikembaogomthachanh,machresetvanguon
;=============================================================================

;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Khoitaocacbien
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
count1 EQU 0x20  ;Dùngchochươngtrìnhdelay
counta EQU 0x21  ;Dùngchochươngtrìnhdelay
countb EQU 0x22  ;Dùngchochươngtrìnhdelay
count EQU 0x23  ;dùngđểtrabảngdữliệu
;=============================================================================
;CHUONGTRINHCHINH
;=============================================================================
 ORG 0x000
 GOTO start
start
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;KhởitạoPORTB
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
 BCF  STATUS,RP1
 BSF STATUS,RP0
 ;chọnBANK1
 CLRF TRISB  ;PORTB<‐outputs
 BCF STATUS,RP0 ;chọnBANK0
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Vònglặpchínhcủachươngtrình
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006

Trang:
11/14

Loop1
 CLRF count  ;resetthanhghi
Loop2
 MOVF count,0 ;đưagiátrịthanhghi“count”vàothanhghiW
 CALL table  ;gọichươngtrìnhcon“table”
 MOVWF PORTB ;xuấtgiátrịchứatrongthanhghiWraPORTB
 CALL delay100ms 
 INCFcount,0 ;tănggiátrịthanhghi“count”
;kếtquảchứatrongthanhghiW
 XORLW d’8’  ;thựchiệnphéptoánXORgiữathanhghiWvà
;giátrị8,kếtquảchứatrongthanhghiW
 BTFSC STATUS,Z ;kiểmtrabitZ(Zero)
 GOTO Loop1  ;nhảyvềlabelLoop1nếuZ=1
 INCF count,1 ;thựcthilệnhnàynếuZ=0
 GOTO Loop2
;===========================================================================
;Cácchươngtrìnhcon
;===========================================================================
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Chươngtrìnhconchokĩthuậtbảng
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
table
 ADDWFPCL,1  ;cộnggiátrịtrongthanhghiWvàothanhghi
;PCL,kếtquảchứatrongthanhghiPCL
 RETLW b’10000000’ ;dữliệucủa
bảng
 RETLW b’01000000’

 RETLW b’00100000’
 RETLW b’00010000’
 RETLW b’00001000’
 RETLW b’00000100’
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
12/14

 RETLW b’00000010’
 RETLW b’00000001’
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
;Chươngtrìnhcondelay100ms
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
delay100ms
 MOVLW d’100’
 MOVWF count1
d1
 MOVLW 0xC7
 MOVWF counta
 MOVLW 0x01
 MOVWF countb
delay_0 
 DECFSZ counta,1
 GOTO $+2
 DECFSZ countb,1

 GOTO delay_0
 DECFSZ count1,1
 GOTO
d1
 RETURN
 END
;=============================================================================
Tacùngphântíchgiảithuậtcủachươngtrìnhdựatrêncácthôngtinđãđượccungcấp
ởphần2.1.Saumỗilầnlệnh“CALLtable”đuợcgọi,lệnhRETLWtrongchươngtrìnhcon
“table”sẽmanggiátrịtừbảngdữliệuchứatrongthanhghiWtrởvềchươngtrìnhchính.
DữliệunàyđượcxuấtrathanhghiPORTBđểđiềukhiểnviệcbậttắtcácLEDgắnvào
PORTB.Saumỗilầnnhưvậy,giátrịtrongthanhghicountsẽđượctănglên1đơnvịthông
qualệnh“INCFcount,1”.Giátrịtrongthanhghi“count”lạiđượcđưavàothanhghiW
thôngqualệnh
“MOVFcount,0”đểcộngvàothanhghiPCLthôngqualệnh“ADDWF
count,1”ởchươngtrìnhcon“table”đểđiềukhiểnchươngtrìnhnhảytớiđúngđịachỉcần
lấydữliệutrởvềchươngtrìnhchínhthôngqualệnh“RETLW
…”.
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
13/14

Đểđềphòngtrườnghợpgiátrịbiến“count”cộngvàothanhghiPCLvượtquávítrí
củabảngdữliệu(trườnghợpnàyxảyrakhibiến“count”manggiátrịlớnhơn8,vìbảng
dữliệuchỉchứa8giátrị),khiđódòngchươngtrìnhthựcthisẽkhôngcònđúngnhưta

mongmuốn,biếncountsaumỗilầntăngsẽđượcsosánhvớigiátrị“8”thôngqualệnh
“XORLW”vàbittrạngtháiZđượckiểmtrathôngqualệnh“BTFSCSTATUS,Z”(giái
thuậtchoviệcsosánhđãđượcđềcậpởphầntrên).Nếugiátrịtrongthanhghicountchưa
bằng8,bitZchưamanggiátrị0,lệnh“GOTOLoop1”đượcbỏquavàquátrìnhlấydữ
liệulaiđượctiếptụcthôngquacáclệnhtiếptheosauđó.Nếuthanhghicountđãbằng8,
bitZsẽmanggiátrị1,lệnh“GOTOLoop1”sẽđượcthựcthi,biếncountkhiđóđượcreset
về0thôngqualệnh“CLRFcount”vàquátrìnhlấydữliệuxuấtraPORTBcủaviđiều
khiểntiếptụcđượcthựcthi.Quátrìnhnàyđượcbảođảmthựcthikhôngngừngchừngnào
viđiềukhiểncònhoạtđộng.
Cầnchúýđếnviệcsắpxếpcácgiátrịtrongbảngdữliệum ộtcáchphùhợpvớimục
đíchđiềukhiển.Trongtrườnghợpnày,dotamuốnLEDchạytừtráisangphảinêntrong
bảngdữliệu,giátrị1cũngđượcdichuyểndầntừtráisangphải.
Bâygiờ,tacóthểđiềukhiểnLEDchạytheobấtcứyêucầunàothôngquamộtthaotác
đơngiản:thayđổicácgiátrịtrongbảngdữliệu.Đócũnglàưuthếrõrệtcủaphươngpháp
bảngdữliệusovớicáclệnhRLFhayRRF.Tuynhiên,tùytrườnghợpcụthểmàtacóthể
chọnđượcgiảipháphiệuquảnhấttươngứng.
ĐãđếnlúccácbạnpháthuytínhsángtạocủamìnhđểđiềukhiểnmấyconLEDnhảy
múatheoýmuốn.Nhịpđiệuđểnhảysẽđượcquyếtđịnhbởithờigiandelay,vàhình
tượngcủađiệunhảysẽđượcthểhiệnthôngquaviệcchớptắtmấyconLED.Đâycũnglà
thaotácnênthựchiệnđểgiúplàmquenvớikĩthuậtmớinày.
Nhưthườnglệ,sauđ
âysẽlàmộtsốkếtluậnchobài3.

3. Kếtluận
KĩthuậtbảngđượcxâydựngdựatrêncácthôngtinvềcấutạoviđiềukhiểnPIC,đólàcác
thôngtinvềthanhghiPC(ProgramCounter)vànguyêntăchoạtđộngcủanó.Bêncạnhđó
là
thôngtinvềlệnhRETLWvàcáchứngdụngcủanó.
Sửdụngkĩthuậtbảngchophépđiềukhiểnmộtcáchlinhhoạtviệcthayđổidữliệutrong
thanhghiWvàthôngquađó,

cácdữliệusửdụngtrongchươngtrìnhcũngsẽđượctruyxuất
mộtcáchlinhhoạthơn.
Giảithuậtkĩthuậtbảngcũngđòihỏiviệcsắpxếpvàtổchứcchươngtrìnhởmộtcấpđộ
caohơn,bằngchứnglàyêucầukhắtkhetrongviệckiểmsoátviệcthựcthicáclệnhtrong
chươngtrìnhvàcáclệnhhỗtrợchokĩthuậtnàycũ
ngkhánhiều.Bêncạnhđólàyêucầutrong
việctổchứcvàsắpxếpmộtcáchhợplídữliệutrongbảng.
Ngườibáocáo:
NguyễnTrungChính
Tàiliệu:
TUT03.02
Ngày:
3/6/2006
Trang:
14/14

Ứngdụngcủakĩthuậtbảngtrongviệcxâydựngcácgiảithuậtchochươngtrìnhviếtchovi
điềukhiểnPICcũngrấtđadạngvàthườngxuyên.Nhậnđịnhnàysẽđượcthểhiệnrõràng
hơntrongcácbàisau.Cóthểnóiđâylàmộtkĩthuậtquantrọng.
Thôngquabàinày,tacũngcảmnhậnđượcmộtnhượcđiểmcủahọviđiềukhiểnPIC
cũngnhưcácviđiềukhiểnRISC,đólàcáclệnhhỗtrợchoviđiềukhiểnkhôngnhiều,dẫnđến
sốlượngcáccôngcụhỗtrợbanđầucũngkhôngnhiềuvàgâynhiềukhókhănchoviệclập
trìnhứngdụng.TuynhiêncáclệnhcủaviđiềukhiểnRISChoàntoàncóđủkhảnăngđểxây
dựngcácứngdụngtrênviđiềukhiển,vấnđềlàphảitìmracácphươngphápgiảiquyếtthích
hợpdựatrêncáccôngcụbanđầuđó.

×