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

thiết kế bộ điều khiển pid số trên nền vi điều khiển pic

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 (1.96 MB, 111 trang )




Tr−êng ®¹i häc b¸ch khoa hμ néi
Khoa ®iÖn
Bé m«n ®iÒu khiÓn tù ®éng
X\[]^W






ĐỒ ÁN TỐT NGHIỆP
Đề tài:Thiết kế bộ điều khiển PID số trên nền
vi điều khiển PIC


Giáo viên hng dn : PGS.TS Phan Xuân Minh
Sinh viên thc hin : Phm Vn Cng
Hoàng Vn Quân
Lp : KT1
Khoá : 49





Hà Ni 5 - 2009

Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49


1
Mục lục
Li m u 5
Li cm n 6
Chng 1 : H vi iu khin PIC và vi iu khin PIC18F4520 7
1.1 Gii thiu chung 7
1.2 . Vi iu khin Pic18F4520 8
1.2.1. T chc b nh (Memory Organization) 13
1.2.2. 8 x 8 HARDWARE MULTIPLIER 22
1.2.3. Ngt (Interrupts) 23
1.2.4. Cng vào ra (I/O Port) 32
1.2.5. B nh thi (Timer) 33
1.2.6. B truyn nhn d liu ng b (EUSART-Enhanced Universal
Synchronous Asynchronous Receiver Transmitter)
37
1.2.7. Module chuyn i tong t sang s 10 bit (A/D) 50
Chng 2 : Thit k b iu khin PID s 57
2.1 Thit k mô hình phn cng mch iu khin 57
2.1.1. Yêu cu thit k 57
2.1.2. Các khi chc nng trên kit iu khin 58
a) Khi vi iu khin trung tâm 58
b) Khi giao tip máy tính qua cng ni tip 59
c) Khi bàn phím 60
d) Khi hin th LCD 2x16(2 dòng, 16ct) 61
e) Khi mch ng lc iu khin 62
f) Khi ngun 12V/5V 62
g) Các khi khác 63
2.2 Thit k phn mm trên nn vi iu khin PIC 64
2.2.1. Yêu cu phn mm 64
2.2.2. Gii thut chng trình 65

a) Loop iu khin 65
b) Thut toán PID s 66
2.2.3. Thit k phn mm iu khin và giám sát trên máy tính 69
2.3 Kit iu khin 71
Chng 3 : ng dng b iu khin PID s iu khin ng c mt chiu 72
3.1 i tng iu khin 72
3.1.1. Thông s k thut 72
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
2
3.1.2. Nhn dng mô hình ng hc ca ng c in mt chiu 72
3.1.3. Thu thp d liu vào/ra ca ng c in mt chiu t thcnghim. 72
3.1.4. Nhn dng ng c iên mt chiu bng Toolbox Identification cu
Matlab
74
3.1.5. ánh giá cht lng mô hình 76
3.2 Thit k lut iu khin PID 77
3.2.1. Phng pháp Ziegler-Nichols1 77
3.2.2. Phng pháp IMC 77
3.2.3. Mô phng và ánh giá cht lng b iu khin 78
3.3 Thit b chp hành(IC L298) 78
3.4 Cm bin (Encoder) 81
3.5 H thng iu khin 84
3.6 Mt s hình nh v Kit iu khin ng c s dng vi iu khin PIC 86
3.7 :Kt qu thc nghim 87
3.8 So sánh kt qu mô phng và thc t 88
Kt lun 89
Tài liu tham kho 91
Ph lc Code phn mm 92











Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
3
MỤC LỤC HÌNH VẼ

Hình 1.1 S  khi kin trúc vi iu khin PIC18F4520 9
Hình 1.2 S  chân vi iu khin Pic18F4520 10
Hình 1.3: T chc b nh chng trình 13
Hình 1.5: Clock/Instruction Cycle 15
Hình 1.6 Instruction Pipeline Flow 15
Hình 1.7 Instruction In Program Memory 16
Hình 1.8 S  cu trúc b nh d liu Pic18F4520 16
Hình 1.9 S  cu trúc thanh ghi ca Pic18F4520 17
Hình 1.10 Pic 18 Interrup logic 23
Hình 2.1 Mô hình khi mch iu khin 57
Hinh 2.2.S  khi vi iu khin trung tâm 58
Hinh 2.3 Mch np cho vi iu khin trung tâm 58
Hinh 2.4 Khi giao tip máy tính Max232 59
Hình 2.5 : Cu to cng COM 59
Hinh 2.6 Modul bàn phím 60
Bng s lc chc nng LCD 2x16 61
Hình 2.7 Khi hin th LCD 62
Hinh 2.8 Khi thit b chp hành 62

Hình 2.9 S  khi ngun 62
S  nguyên lý kit iu khin 63
S  mch in hai lp 64
Hình 2.10 Lu  loop iu khin 65
Hình 2.11 Lu  hàm ngt dùng to chu lì trích mu 66
Hình 2.12 S  b iu khin PID s 67
Hình 2.13 Chng bão hào tích phân 68
Hình 2.14. Giao din giao tip PC 69
Hình 3.1 ng c s dng trong  án 72
Hinh 3.2 S  thu thp d liu nhn dng 72
Hình 3.2 c tính thu thp d liu nhn dng 73
Hình 3.3Chn u vào và mô hình nhn dng ca i tng 75
Hình 3.4Phng thc nhn dng và ánh giá mô hình thu c 75
Hình 3.5 c tính quá  i tng sau khi nhn dang 76
Hình 3.6 Sai lch mô hình nhn dng 76
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
4
Hình 3.7 Mô phng trên Simulink các phng pháp iu khin 78
Hình 3.9 c tính mô phng 78
Hình 3.10 S  chân L298 79
Hình 3.11: Các ch  ca L298 80
Hình 3.12 : S  gii pháp 81
Hình 3.13 : Mô hình1 - En coder quang tng i 81
Hình 3.14 : Phng thc hot ng Encoder quang tng i 82
Hình 3.15 : Mô hình 2 -En coder quang tng i 82
Hình 3.16 : S  xung ca En coder quang tng i(mô hình 2) 83
Hình 3.17 S  h thngiu khin ng c 84
Hình 3.18 Cu trúc h thng iu khin 84
Hình 3.19 Cu trúc khi iu khin ng c 85
Mt s hình nh mch iu khin ng c mt chiu 86

Hình 3.20 c tính vi b iu khin PI 87
Hình 3.21 c tính vi b ièu khin PID 87
Hình 3.22 H thng khi có nhiu 88
Hình 3.23 c tính khi h thng có thay i giá tr t 88


















Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
5
Lời mở đầu
Khoa hc công ngh hin i ã có nhng bc tin nhanh và xa i theo ó là
nhng thành tu ng dng trong mi lnh vc di sng, công nghip. K thut iu
khin trong tin trình hoàn thin lý thuyt cng to cho mình nhiu phát trin có ý
ngha. Bây gi khi nhc ti iu khin con ngi dòng nh hình dung n s chính
xác, tc  x lý và thut toán thông minh

ng ngha là lng cht xám cao hn.
Có th nói trong lnh vc iu khin và trong công nghip thì b iu khin PID
có ng dng kha rng rãi, mt gi pháp a nng chocác ng dng c Analog cng nh
Digital. Thng kê cho thy có ti hn 90% các b iu khin s dng trong thc t là
PID. Rõ ràng nu có thit k và chn la các thông s hp lý cho b 
iu khin PID
thì vic t c các ch tiêu cht lng mong mun là kh thi B iu khin PID
cng giúp ngi s dng d dàng tích hp cng nh chn các lut iu khin nh : t
l(P), tích phân(I), t l tích phân(PI), t l vi phân(PD)… sao cho phù hp i vi các
i tng iu khin. Nhiu quá trình trong công nghip vic s dng b 
iu khin
PID là không th thay th nh khng ch nhit , mc, tc …? Ngay c nhng lý
thuyt iu khin hin i cng không cho ta nhng hiu qu cao nh b iu khin
PID mang li.Ngoài ra b iu khin PID còn ng dng nhiu trong iu khin thích
nghi,bn vng vn mang li hiu qu cao trong các c cu ch
nh nh.
Bài toán thit k và iu khin ng c mt chiu là bài toán c bn và quen thuc
trong ngành iu khin t ng. Có th thit k iu khin cho i tng ngc in
mt chiu theo nhiu phng pháp nh :dùng PLC & bin tn, in t công sut, vi
iu khin… Mi phng pháp có u và nhc
im khác nhau nhng u có mc
ích n nh và iu khin c tc  ng c. Ngày nay vi iu khin phát trin sâu
rng và ngày càng ng dng nhiu trong cài t thit k b iu khin cho các i
tng công nghip. Trên c s mun tìm hiu v lnh vc vi iu khin chúng em
chn  tài: Thiết kế bộ
điều khiển PID số trên nền vi điều khiểnPIC. Vì kh nng
và thi gian có hn nên không th tránh khi nhng thiu sót trong  án. Do vy
chúng em rt mong c thy cô và bn bè óng góp xây dng   án ca chúng em
c hoàn thin hn.
Hà Ni, ngày tháng nm 2009

Sinh viên
Phm Vn Cng
Hoàng Vn Quân
Lp KT1 - K49

Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
6
Lời cảm ơn
u tiên chúng em xin chân thành gi li cm n ti nhà trung, khoa in, b
môn KT, các thy cô ã dy d và dìu dt chúng em trong sut 5 nm hc va qua
 có c nhng kin thc chuyên môn c s sau này chúng em có th vào i làm
vic, s dng có ích cho xã hi.
 thc hin thành công  án là s hng dn, ch bo tn tình ca PGS.TS Phan
Xuân Minh, Ngi ã hng dn t
n tình , giúp chúng em nh hng, góp ý và cung
cp ý tng cng nh ch dn tài liu và các tin trình thc hin  án .S hng dn
ca cô là mt yu t quan trng  chúng em có th hoàn thành  án này .
Cui cùng chúng em xin chân thành gi nhng li cm n sâu sc n cha m và
gia ình, nhng ngi luôn sát cánh cùng chúng em, nuôi dng chm sóc chúng em
to iu kin tt nht cho chúng em hc tp  có k
t qu nh ngày hôm nay.
Chúng em xin chân thành cm n






















Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
7
Chương 1: Họ vi điều khiển PIC và vi điều
khiển PIC18F4520
1.1 Giới thiệu chung
Ngày nay, nhng ng dng ca vi iu khin ã i sâu vào i sng sinh hot và
sn xut ca con ngi. Thc t hin nay là hu ht các thit b in hin nay u có
s góp mt ca vi iu khin và vi x lí. ng dng vi iu khin trong thit k h
thng làm gim chi phí thit k và h giá thành sn ph
m ng thi nâng cao tính n
nh ca thit b và h thng.
Trên th trng hin nay có nhiu h vi iu khin  la chn nh: 8051,
Motola68HC, AVR, ARM, Pic…và có l 8051 là dòng mà chúng ta c làm quen
nhiu nht trong môi trng i hc nhng ti sao chúng ta chn dòng vi iu khin
Pic  thc hin ng dng và phát trin không ngoài nhng nguyên nhân sau:
- H vi iu khin Pic phát trin và s

dng ph bin  nc ta => vic tìm
mua và trao i kinh nghim là ht sc thun li.
- Giá thành các dòng Pic là không quá mc.
- Các dòng Pic có y  tính nng  hot ng c lp.
- Là s b sung hp lý v kin thc cng nh ng dng cho h vi iu khin
8051
- Có s h tr cao ca nhà sn xut v các công c l
p trình, trình biên dch,
mch np Pic t n gin ti phc tp. Không nhng vy các tính nng a
dng ca các òng Pic không ngng c phát trin.
- Có nhiu b phn ngoi vi ngay trên chip, bao gm: Cng và/ra s, b bin
i ADC, b nh EEFROM, b nh thi, b iu ch  rng xung
(PWM)…
- B nh chng trình và b nh d
 liu c tích hp ngay trên chip.
ây là h VK c ch to theo kin trúc RISC (Reduced Intruction Set
Computer) có cu trúc khá phc tp. Ngoài các tính nng nh các h VK khác, nó
còn tích hp nhiu tính nng mi rt tin li cho ngi thit k và lp trình.
Pic18F4520 nm trong dòng sn phm PIC18F2420/2520/4420/4520 ca nhà sn
xut Microchip vi c im 28/40/44 -Pin Enhanced Flash Microcontrollers with 10-
Bit A/D and nanoWatt Technology. Dòng sn phm này có nhiu ci tin áng k v
tính n
ng so các dòng Pic trc ó nh :
- B nh chng trình c tng cng (16Kbytes for PIC18F2420/4420
devices and 32Kbytes for PIC18F2520/4520 devices).
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
8
- I/O ports (3 bidirectional ports on 28-pin devices, 5 bidirectional ports on
40/44-pin devices).

- Tng cng modul CCP.
- S dng công ngh nanoWatl
Dòng sn phm này nói chung có nhiu s tng ng v tính nng nhng có th
chia làm hai nhóm Pic18F2420/2520 vi 28 chân và Pic 18F4420/4520 vi 40 hoc 44
chân ghép ni. Phn này ch yu chúng ta tìm hiu Pic18F4520 nhng nhng c
im các Pic khác thuc dòng này s hoàn toàn tng t vi các kí hiu tng ng.
Trong  án chúng ta quan tâm ch yu Pic18F4520 loi PDIP s dng trong m
ch
thit k.
1.2 . Vi điều khiển Pic18F4520
Vi iu khin Pic18F4520 có các c im c bn:
- S dng công ngh nanoWatl: Hiu nng cao, tiêu th nng lng ít
- Kin trúc RISC
¾ 75 lnh mnh, hu ht các lnh thc hin trong bn chu kì xung.
¾ Tc  thc hin lên ti 10 triu lnh trong 1s vi tn s 40Mhz
¾ Có b nhân cng .
- Các b nh chng trình và d liu c
 nh
¾ 32 Kbytes b nh flash có kh nng t lp trình trong h thng có
th thc hin c 100.000 ln ghi/xóa
¾ 256 bytes EEPROM có th thc hin c 1.000.000 ln ghi/xóa-
¾ 256 bytes SRAM
- Nhng ngoi vi tiêu biu
¾ 4 b nh thi/b m 8 bit vi các ch  t l t trc và ch 
so sánh.
¾ B m thi gian thc v
i b to dao ng riêng bit
¾ 2 kênh PWM
¾ 13 kênh ADC 10 bit
¾ B truyn tin ni tip USART kh trình

¾ Watchdog Timer kh trình vi b to dao ng bên trong riêng bit
¾ B so sánh tng t
- Các c im c bit khác
¾ Power on Reset và dò Brown out kh trình
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
9
¾ B to dao ng RC c nh c bên trong
¾ Các ngun ngt bên trong và bên ngoài
- I/O và các kiu óng gói
¾ 32 ng I/O kh trình
¾ óng gói 40-pin PDIP, 44-lead TQFP, và 44-pad MLF

Hình 1.1 Sơ đồ khối kiến trúc vi điều khiển PIC18F4520
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
10
S  chân ca các vi iu khin Pic18F4420/4520

Hình 1.2 Sơ đồ chân vi điều khiển Pic18F4520
Sau ây là gii thiu cu to chân loi 40 chân (40 Pin PDIP):
• Chân 1( MCLR /V
PP
/RE3) :
- MCLR là u vào Master Clear (reset) hot ng  mc thp d reset toàn b
thit b.
- V
PP
dùng  thay i in áp u vào.
- RE3 u vào s.

Các chân thuc cng vào ra Port A
• Chân 2(RA0/AN0):vi RA0 là cng vào ra s, AN0 là u vào tng t Input0.
• Chân 3(RA1/AN1): RA1 là cng vào ra s, AN1 là u vào tng t Input1.
• Chân 4(RA2/AN2/V
REF+
): RA2 là cng vào ra s, AN2 là u vào tng t
Input2. V
REF+
u vào tng t chuyn i A/D in áp tham chiu(mc thp),
còn CV
REF
là u ra tng t  so sánh in áp chun.
• Chân 5(RA3/AN3/V
REF-
/CV
REF
): RA3 là cng vào ra s, AN3 là u vào tng
t Input3. V
REF-
u vào tng t chuyn i A/D in áp tham chiu(mc cao).
• Chân 6(RA4/T0CKI/C1OUT): RA4 là u vào ra s,T0CKI du vào xung bên
ngoài ca Timer0, C1OUT là u ra b so sánh 1.
• Chân 7(RA5/AN4/
SS /HLVDIN/C2OUT): trong ó RA5 là cng vào ra só, AN4
là u vào tng t Input 4,
SS chn u vào ph thuc SPI, HLVDINu vào
tng t  dò in áp, C2OUT u ra b so sánh 2.
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
11

• Chân 13(OSC1/CLKI/RA7): vi OSC1là u vào b dao ng thch anh hoc là
u vào ngun xung t bên ngoài, khi ta ni dây vi các thit b tng t thì u
vào này dng ST( Schmitt Trigger input ith CMOS levels).CLKI là u vào
CMOS cho ngun xung bên ngoài và luôn c ghép ni vi chân OSC1. Còn
RA7 là chân vào ra s dng chung .
• Chân 14(OSC2/CLKO/RA6): OSC2 là u ra b dao ng thch anh c ni
vi thch anh hoc b công hng d la chn dng b dao ng thch anh.
CLK0 có tn s b
ng ¼ tn s ca OSC1  rng chu kì lnh, RA6 là u vào ra
chung.
Các chân cng vào ra hai chièu Port B. Port B có th lp trình bng phn mm khi
cho kéo u vào bên trong yu lên trên toàn b u vào.
• Chân 33(RB0/INT0/FLT0/AN12): Vi RB0 là cng vào ra s, INT0 là u vào
ngt ngoài Interrup 0, FLT0 là u vào báo li PWM c tng cng CCP1,
AN12 u vào tng t Input 12.
• Chân 34(RB1/INT1/AN10): RB1 là u vào ra s, INT1 u vào ngt ngoài
Interrup1, AN10 u tng t Input 10.
• Chân 35(RB2/INT2/AN8): RB2 là u vào ra s, INT2 u vào ngt ngoài
Interrup2, AN8 
u tng t Input 8.
• Chân 36 (RB3/AN9/ccp2): RB3 là u vào ra s, AN9 u tng t Input 9,
CCP2 ( Capture 2 input/Compare 2 output/PWM2 output.)
• Chân 37(RB4/KBI0/AN11):): RB4 là u vào ra s, KBI0 thay i m ngt,
AN11 u tng t Input 9.
• Chân 38(RB5/KBI1/PGM): RB5 u vào ra s, KBI1 thay i m ngt, PGM
cho phép có th lp trình ISCP
TM
 in áp thp.
• Chân 39(RB6/KBI2/PGC): RB6 là u vào ra s, KBI2 thay i m ngt, PGC
chân dùng trong mch chy và xung lp trình ICSP.

• Chân 40(RB7/KBI3/PGD): RB7 u vào ra s, KBI3 thay i m ngt, PGD
chân dùng trong mch chy và xung lp trình ICSP.
Các chân công Port C
• Chân 15(RC0/T1OSO/T13CKI):RC0 u vào ra s, T1OSO u ra b dao ng
Timer1, T13CKI u vào xung bên ngoài Timer1/Timer3.
• Chân 16(RC1/T1OSI/CCP2): RC1 u vào ra s, T1OSI u vào b dao ng
Timer1, CCP2(Capture 2 input/Compare 2 output/PWM2 output.).
• Chân 17(RC2/CCP1/P1A): RC2 l u vào ra s, CCP1(Capture1 input/Compare
1 output/PWM1 output.), P1A u ra tng cng CCP1.
• Chân 18(RC3/SCK/SCL): RC3 là
u vào ra s, SCK u vào ra  chui xung
vào ra cho SPI la chn, SCL u vào ra a chui xung vào ra cho I
2
C
TM
la
chn.
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
12
• Chân 23(RC4/SDI/SDA): RC4 là u vào ra s, SDI u vào d liu API, SDA
u vào ra d liu cho I
2
C.
• Chân 24(RC5/SDO): RC5 u vào ra s, SDO u ra d liu SPI.
• Chân 25(RC6/TX/CK): RC6 u vào ra s, TX u ra chuyn i d b
EUSARRT, CK du vào ra xung ng b EUSART.
• Chân 26(RC7/RX/DT): RC7 u vào ra s, RX u vào nhn d b EUSART, DT
u vào ra d liu ng b EUSART.
Các chân cng Port D( Port D có th vào ra hai hng hoc cng song song ph

thuc(PSP) cho giao diên vi x lý và khi ó các u vào phi là TTL
• Chân 19(RD0/PSP0): RD0 u vào ra s, PSP0 cng d liu song song ph

thuc.
• Chân 20(RD1/PSP1): RD1 u vào ra s, PSP1cng d liu song song ph thuc
• Chân 21(RD2/PSP2): RD2u vào ra s, PSP2 cng d liu song song ph thuc
• Chân 22(RD3/PSP3): RD3 u vào ra s, PSP3 cng d liu song song ph thuc
• Chân 27(RD4/PSP4): RD4 u vào ra s, PSP4 cng d liu song song ph thuc
• Chân 28(RD5/PSP5/P1B): RD5 u vào ra s, PSP5 cng d liu song song ph
thuc, P1B u ra c tng cng CCP1.
• Chân 29(RD6/PSP6/P1C): RD6
u vào ra s, PSP6 cng d liu song song ph
thuc, P1C u ra c tng cng CCP1.
• Chân 30(RD7/PSP7/P1D): RD7 u vào ra s, PSP7 cng d liu song song ph
thuc, P1D u ra c tng cng CCP1.
Các chân cng Port E
• Chân 8(RE0/
R
D
/AN5): RE0 u vào ra s,
R
D
u vào iu khin c cho cng
PSP, AN5 u vào tng t Input5.
• Chân 9(RE1/
WR
/AN6): RE1 u vào ra s,
WR
u vào iu khin vit d liu
cng PSP, AN6 u vào tng t Input6.

• Chân 10(RE2/
CS /AN7): RE2 u vào ra s, CS iu khin chn Chip cho cng
PSP, AN7 u vào tng t Input7.
- u RE3 nm  chân 1
Các chân khác
• Chân 12,31(V
SS
): ni t chun cho I/O và logic.
• Chân 11,32(V
DD
): cungcp ngun dng cho I/O và logic.
Loi 44 chân có thêm mt s chân ph khác khi cn thit ta có th d dàng tra
trong DataSheet. Chi tit hn chúng ta có th thy qua s  khi ca
Pic18F4420/4520 trong tài liu do microchip cung cp s có hoàn toàn y  thông
tin. c im cu to.
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
13
1.2.1. Tổ chức bộ nhớ (Memory Organization)
Dòng Pic18Fxxxx c t chc b nh thành ba loi:
• B nh chng trình (Program Memory).
• B n d liu RAM (Data RAM).
• B nh d liu EEPROM (Data EEPROM ).
T chc các b nh chng trình theo kin trúc Harvard c sp xp theo s :

Hình 1.3: Tổ chức bộ nhớ chương trình
Tổ chức bộ nhớ chương trình(Program Memory Organization)
Dòng vi iu khin Pic18xxxx là thit b vi 21bit b m chng trinh PC
(Program counter) có th qun lý 2Mbyte b nh chng trình. Vi Pic18F4520 có
32Kbytes b nh Flash có th lu tr lên ti 16,384 câu lnh n, dòng Pic này có

hai vector ngt: Reset vector có a ch 0000h và Interrupt vector  a ch 0008h
và 0018h.
• Bộ đếm chương trình – PC (Program Counter)
PC có  rng 21 bits phân chia trên 3 thanh ghi 8 bits: thanh ghi PCL, thanh ghi
PCH, thanh ghi PCU. D liu bytes a ch ca PC
c lu trong b nh chng
trình. Khi s dung cn lu ý ti cu trúc lnh có làm thay i giá tr PC hay không.
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
14
• Khôi phục dịa chỉ ngăn xếp (RETURN ADDRESS STACK)
 ây ta có th cho phép lu tr gi 31 chng trình và các ngt xy ra. Trong
thc thi ngn xp cu trúc lnh CALL và RCALL là c quan tâm. S  ngn
xp dng:

Hình 1.4: Sơ đồ địa chỉ ngăn xếp
Trong vùng ngn xp này cn quan tâm ti::
- Top-of-Stack Access
- Return Stack Pointer (STKPTR)
- Stack Full and Underflow Resets
Khi chúng ta lp trình cn thit chính xác khi gi chng trình qua lnh Call và
Rcall nên khi tác ng cn quan tâm s thay i các ngn xp cng nh qun lý
con tr (Pointer). Ta có th dùng các lnh Push và Pop  iu khin con tr. Mt
quan tâm khác na ó là Stack Pointer Register (STKPTR) - thanh ghi con tr
ngn xp:

Bit 7 (STKFUL): bit c báo ngn xp y
− Giá tri 1 có ngha là ngn xp ã y hoc tràn
− Giá tr 0 thì ngn xp vn cha b y hoc tràn
Bit 6 (STKUNF): bit c báo tràn di

− Giá tr 1: xy ra tràn di
− Giá tr 0: không có tràn di
Bit 5 (Unimplementad): mang giá tr “0”
Bit 4-0 (SP<4:0>:Các bit xác nh con tr ngn xp
Chúng ta có th xóa bit 6 và bit 7 nh phn mm hoc bi mt POR
• FAST REGISTER STACK
Nhóm thanh ghi này gm có các thanh ghi: Status, WREG, BSR giúp vic khôi
ph
c nhanh lu chn cho các ngt. Ví d mt chng trình:
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
15

Vic qun lý tt b nh chng trình s giúp ta thc hin chng trình tt hn
cng nh ti u câu lnh.
• Chu kì lệnh Pic 18Fxxx
Bt kì mt vi iu khin Pic nào khi nhn mt xung t bên trong hay bên ngoài
u x lý theo mt chu kì gm 4 bc. H 18Fxxxx cng vy chu kì lnh c x
lý song song (Pipelining) qua 4 bc Q1,Q2,Q3,Q4.

Hình 1.5: Clock/Instruction Cycle

Hình 1.6 Instruction Pipeline Flow

Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
16
Hình 1.7 Instruction In Program Memory
Tổ chức dữ liệu bộ nhớ(Data Memory Organization)
Pic18Fxxxx là h Statis Ram mi thanh ghi b nh d liu có 12 bit a ch,

cho phép truy nhp ti 4096 bytes d liu b nh. Không gian b nh chia làm
16 bank gm 256 byte mi bank Pic18F4520 nh s  phía sau.
B nh d liu bao gm : thanh ghi chc nng c bit (SFRs), thanh ghi mc
ích chung (GPRs). Thanh ghi SFR dùng  iu khin trng thái và chc nng
thit b
ngoi vi, trong khi thanh ghi GPR dùng  lu tr hoc làm vùng nh tm
thi ang hot ng ca các ng dng.

Hình 1.8 Sơ đồ cấu trúc bộ nhớ dữ liệu Pic18F4520
Theo cu trúc lnh và kin trúc dòng Pic18Fxxxx cho phép các bank hot ng
ng thi. Toàn b b nh d liu có th cho phép truy nhp có hng, vô hng hay
a ch có ch s, c im chung ca các thanh ghi là cho phép x lý trong mt chu kì
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
17
n. Pic 18Fxxxx cung cp mt AccesBank gm 256 byte b nh cho phép truy cp
nhanh ti SFRs và phn Bank0 ca GPR nu không s dng BSR.
Chi tit các bank thanh ghi và chc nng ta có th theo dõi k hn trong
dataSheet
Sau ây là mt s cu trúc các thanh ghi in hình:

Hình 1.9 Sơ đồ cấu trúc thanh ghi của Pic18F4520
Thanh ghi Status (Status Register)

Bit 7-5 (Unimplemented): mang giá tr “0”
Bit 4 (N): bit xác nh du(Negative bit) dc s dng cho s có du(s bù 2), nó
c xác dnh khi kt qu mang du âm(ALU MSB=1)
− Giá tr 1: kt qu là âm
− Giá tr 0: kt qu là dng
Bit 3 (OV): bít báo tràn(overflow bit) c s dng cho s có du (s bù 2), nó

xác nh báo tràn cho  dài 7 bit cái là nguyên nhân thayi trng
thái và du bit 7.
− Giá tr 1: xy ra tràn
− Giá tr 0 : không xáy ra tràn
Bit 2 (Z): bít không (Zero bit)
− Giá tr 1: kt qu các phép toán s h
c và logic là bng “0”
− Giá tr 0 : kt qu các phép toán khác “0”
Bit 1 (DC): Digit Carry/
borrow
bit. S dng cho các lnh ADDWF, ADDLW,
SUBLW và SUBWF
− Giá tr 1: xy ra vic thao tác 4 bit thp.
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
18
− Giá tr 0 : không xy ra vic thao tác 4 bit thp.
Bit 1 (DC): Carry/
borrow bit. S dng cho các lnh ADDWF, ADDLW,
SUBLW và SUBWF
− Giá tr 1: xy ra vic thao tác bit quan trng.
− Giá tr 0 : không xy ra vic thao tác vi bit quan trng.
• Các kiểu địa chỉ dữ liệu(Data Addressing Modes)
Có bn kiu  ch nh sau:
• a ch có sn (Inherent addressing)
• a ch bng ch (Literal addressing)
• a ch có hng (Direct addressing)
• a ch vô hng (Indirect addressing)
Các ch  này có ch  a ch theo hng khi s dng có liên h thanh ghi
FSR


• Bộ nhớ dữ liệu và cấu trúc lệnh được mở rộng(Data Memory and the
Extended Instruction Set)
Pic 18 có kh nng cho ta m rng cu trúc lnh nh Access Bank và cho ta gp
dôi lnh khi la chon a ch không gian b nh. Nó có th mang li nhiu ý ngha v
kích thc b nh. Vi ch  này ch yu thay i cu trúc kiu a ch có hng và
vô hng còn hai ch  a ch
 bàng ch và có sn là không thay i, c th ta có th
theo õi nh hình v

Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
19
Bộ nhớ chương trình Flash (Flash Program Memory)
c im b nh Flash là có kh nng c vit và xoá trong thi gian hot ng
da vào khong in áp V
DD
mt cách d dàng.
Ti mt thi im chúng ta có th thc hin c mt byte, Vit mt khi 32 byte,
xoá mt khi 64 byte. Hot ng xoá mt khi ln không có kh nng t mã ngi
s dng.
Khi ta xoá hoc vit vào b nh chng trình s ngng ch dn cho khi hoàn
thành hot ng.Và không có s truy nhp trong sut quá trình vit hoc xoá d
liu. S có m
t b m thi gian khi có hot ng xoá hoc vit.
Sau ây chúng ta s tìm hiu mt s thuc tính c bn khi thao tác b nh Flash.
• Table Reads and Table Writes
Theo th t c và vit d liu cho phép vi x lý di chuyn các byte gia không
gian b nh chng trình và d liu trong RAM thông qua: Table Reads and Table
Writes. Nhng do b nh chng trình có  rông 16bit còn b nh Ram ch là 8

bit nên  di chuyn d liu gia chúng cn thanh ghi 8bit (TABLAT):
Bng c hot ng ly ra d liu t b nh chng trình a chúng ti khong
nh ca RAM.:

Bng vit hot ng lu tr d liu t b nh d liu htông qua ó gi trong b
nh chng trình:

Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
20
• Control Registers
Có bn thanh ghi iu khin:
• EECON1 register
• EECON2 register
• TABLAT (TABLE LATCH ) register
• TBLPTR(TABLE POINTER) registers
Ta a ra thanh ghi EECON1 ví d:

Bit 7 (EEPGD): bit la chn b nh Flash và b nh d liu EEPROM
− Giá tr 1:Cng vào cho b nh Flash.
− Giá tr 0: Cng vào cho b nh EEPROM.
Bit 6 (CFGS): bit la chn b nh Flash , b nh d liu EEPROM hoc thanh
ghi cu hình (Configuration register):
− Giá tr 1:Cng vào cho thanh ghi cu hình.
− Giá tr 0: Cng vào cho b nh EEPROM hoc b nh Flash .
Bit 5 (Unimplemented): mang giá tr “0”
Bit 4 (FREE): bit cho phép xóa b nh Flash theo hàng:
− Giá tr 1: Xoá b
 nh chng trình theo a ch hàng bi
TBLPTR trên c s lnh WR k tip.

− Giá tr 0: Ch thc hin hot ng vit.
Bit 3 (WRERR): bit c  báo li trren b nh Flash và b nh d liu
EEPROM.
− Giá tr 1: Mt hot ng vit kt thúc sm.
− Giá tr 0: Hot ng vit c hoàn tt.
Bit 2 (WREN): bít cho phép hot ng vit trên b nh
 Flash và b nh d liu
EEPROM.
− Giá tr 1: Cho phép vit theo chu k trên b nh Flash và b nh
d liu EEPROM.
− Giá tr 1: Ngn cn vit theo chu k trên b nh Flash và b nh
d liu EEPROM.
Bit 1 (WR): bit iu khin hot ng vit.
− Giá tr 1: Bt u chu k xóa/vit d liu trên b nh d liu
EEPROM hoc b
nh chng trình.
− Giá tr 0: Chu k vit trên b nh EEPROM hoàn tt.
Bit 0 (RD): Bit iu khin hot ng c.
− Giá tr 1: Bt u hot ng c d liu EEPROM.
− Giá tr 0: Cha bt u hot ng c d liu.
Ta có th xác nh hoc iu khin các bit 0 và bit 1 nh phn mm.
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
21
• Reading the Flash Program Memory
Khi c d liu chúng ta s dng cu trúc lnh TBLRD  ly d liu t b nh
ti b nh RAM. Hot ng theo hình sau:

• Erasing Flash Program Memory
Vic thc hin xoá d liu có th thông qua ngi lp trình hoc thông qua iu

khin ISCP. Chúng ta có th xoá khi nh nht 32 t ti 64 byte, có kh nng cho
ta xoá khi ln nhng thông qua cng iu khin. Hot ông này c h tr t
thanh ghi EECON1.
• Writing to Flash Program Memory
Ta có th thc hin vit d liu t bên trong  ti d liu c
n thit ti b nh.
kh nng vit có th t 16 t ti 32 byte và thông qua bng vit vi h tr khong
32 thanh ghi cho lp trình.

• Flash Program Operation During Code Protection
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
22
Bộ nhớ dữ liệu EEPROM (Data EEPROM Memory)
D liu EEPROM là mt mng b nh bt bin c phân chia t b nh RAM
và b nh chng trình, dc dùng  lu tr lâu dài d liu chng trình. Nó coi là
ánh x có hng ti không gian b nh chng trình nhng li là a ch vô hng
thong qua thanh ghi SFRs. B nh EEPROM có kh nng c và vit trong quá trình
hot ông thông qua khong iên áp V
DD
.
Nm thanh ghi SFRs c s dng  c và vit d liu b nh EEPROM gm:
EECON1, EECON2, EEDATA, EEADR.
Khi có giao din ti khi d liu b nh thì EEDATA nhim v gi d liu 8bit 
c vit còn thanh ghi EEADR là  cht a ch EEPROM cho phép truy nhp
Mt byte c vit ngay lp tc xoá tai v trí ó và vit d liu mi, quá trình này
c iu khin bi b
 m thi gian on-Chip.
• Thanh ghi EEADR (EEADR Register)
Chc nng thanh ghi này dùng d a a ch d liu trong hot ng c/vit.

Thanh ghi này  rng 8 bit có kh nng qun lý bnh rng 256byte(00h-FFh).
• EECON1 and EECON2 Registers
C hai thanh ghi này dùng  iu khin truy nhp d liu EEPROM, hot ng
thanh ghi này hoàn toàn tng t nh các thanh gi iu khin truy nhp b nh
chng trình nhng 
ây là  iu khin truy nhp d liu EEPROM. Chúng có
cu trúc tng t nhau, cu trúc thanh ghi EECON1 chúng ta có phn b nh Flash.
• Reading the Data EEPROM Memory
Quá trình c d liu nh thanh ghi EEDATA, thanh ghi này s gi giá tr cn c
ti khi nó c vit bi ngi s dng. Nhng  c dc d liu ngi s dng
phi vit d liu lên thanh ghi EEADR, xoá bit i
u khin EEPGD Thuc thanh gi
EECON1<7>, sau dó set bit iu khin EECON<0>.
• Writing to the Data EEPROM Memory
Quá trình vit d liu vào b nh EEPROM trc tiên là np a ch vào thanh ghi
EEADR, sau ó vit d liu lên thanh ghi EEDATA.
• Kiểm tra lại quá trình viết dữ liệu (Write Verify)
Hot ông này ph thuc vào tng ng dng và nó m bo ta có bài lp trình tt.
• Operation During Code-Protect
• Protection Against Spurious Write
• Using the Data EEPROM
1.2.2. 8 x 8 HARDWARE MULTIPLIER
Tt c các thit b Pic 18Fxxxx u có b nhân phn cng ging nh mt phn ALU.
B nhân có hình thc nhân không u và cho kt qu 16 bit lu tr trong thanh ghi kt
qu PRODH:PRODL. Hot ng b nhân không nh hng gì ti các c ca thanh ghi
trng thái STATUS.
Hot ng b nhân cho phép trong mt chu kì lnh góp phn nâng cao tc  tính
toán và gim bt kích thc thut toán giúp Pic18 s dng nhiu ng dng h
n trong
phn cng và phn mm.

Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
23
1.2.3. Ngắt (Interrupts)
Dòng Pic18Fxxxx này cung cp cho ngi s dng nhiu ngun ngt và mt c
trng u tiên ngt là hu ht các ngt u có c mc u tiên cao và thp. Ngt u tiên
cao  a ch 0008h, ngt u tiên thp  a ch 0018h. Nhng ngt u tiên cao thc
hin ngt còn các ngt u tiên thp phi c gi trong chng trình.
Có tt c mi thanh ghi s d
ng d iu khin hot dng ngt gm:
• RCON
• INTCON
• INTCON2
• INTCON3
• PIR1, PIR2
• PIE1, PIE2
• IPR1, IPR2
Nói chung các ngun ngt có 3 bit d iu khin hot ng ngt;
• Flag bit :  xác nh s kin ngt xy ra.
• Enable bit : Cho phép thc hin ngt ti a ch Flag bit tr ti.
• Priority bit :  chn mc u tiên cho ngt
Ngoài ra  các thanh ghi chc nng c th phc v cho các ngt thì có các bit riêng
vi các ch
c nng giúp ngi lp trình có th qun lý và s dng các ngt hiu qu.
S  trng thái Logic các ngt có th mô t :

Hình 1.10 Pic 18 Interrup logic
Vi điều khiển Pic
Phm Vn Cng - Hoàng Vn Quân. Lp KT1-K49
24

Bây gi chúng ta s tìm hiu cu trúc mt s thanh ghi in hình s dng phc v
hot ng ngt:
• INTCON Registers
Thanh ghi này cho phép dc ghi các ngt và cho phép u tiên ngt có c Flag bit.
INTCON 1 Registers

bit 7 (GIE/GIEH): bit cho phép ngt toàn cc.
• Khi IPEN = 0:
− Giá tr 1: Cho phép toàn b hot ng ngt.
− Giá tr 0: Không thc hin toàn b hot ng ngt.
• Khi IPEN = 1:
− Giá tr 1: Cho phép toàn b hot ng ngt vi mc u tiên
cao.
− Giá tr 0: Không thc hin toàn b hot ng ngt t ngoi vi.
bit 6 (PEIE/GIEL): bit cho phép các ngt t ngoi vi thc hin.
• Khi IPEN = 0:
− Giá tr
1: Cho phép toàn b hot ng ngt t ngoi vi.
− Giá tr 0: Không thc hin toàn b hot ng ngt t ngoi vi.
• Khi IPEN = 1:
− Giá tr 1: Cho phép toàn b hot ng ngt t ngoi vi vi
mc u tiên thp.
− Giá tr 0: Không thc hin toàn b hot ng ngt t ngoi vi
vi mc u tiên thp.
bit 5 (TMR0IE): bit cho phép ngt báo tràn TMR0
− Giá tr 1: Cho phép ng
t báo tràn TMR0.
− Giá tr 0: Không cho phép ngt báo tràn TMR0.
bit 4 (INT0IE): bit cho phép ngt ngoài INT0
− Giá tr 1: Cho phép ngt ngoài INT0 .

− Giá tr 0: Không cho phép ngt ngoài INT0
bit 3 (RBIE): bit cho phép thay i RB Port
− Giá tr 1: Cho phép ngt thay i RB Port .
− Giá tr 0: Không cho phép ngt thay i RB Port .
bit 2 (TMR0IF): bit c ngt báo trànTMR0
− Giá tr 1: thanh ghi TMR0 xy ra tràn (có th xoá bng phn
mm).
− Giá tr 0: Không xy ra tràn thanh ghi TMR0.
bit 1 (INT0IF): bit c báo ngt ngoài INT0

×