Professional Documents
Culture Documents
Co Ban Ve PIC
Co Ban Ve PIC
Tt nhin, 3 loi vi dng PIC trn y c th tng thch vi nhiu dng PIC c hn, nhng
v th trng PIC Vit Nam ph bin vi 3 loi PIC ny, cho nn chng ti ch cp n 3
loi PIC ny m thi.
Sau khi cc bn c mch np, chng trnh np, MPLAB IDE, CCS C hoc HT PIC, cc bn
lm mch chy ny. K t y khi thit k cch mch test, hoc cc thit b ngoi vi khc,
cn th nghim, cc bn ch vic thit k mch ngoi, sau cm vo cc chn ra v chy
th.
Khi mch chy tt, cc bn mun thit k c hon chnh, cc bn ch vic copy mch chy
t Orcad v dn vo mch nguyn l ca thit b ca bn. Xo cc chn header i, v ni
dy vo trong mch chy PIC. Nh vy, chng ta khng phi tn thi gian thit k cho PIC
na.
Mt vi im lu v mch nh sau:
- Ngun ch dng cho PIC, tuyt i khng dng b ngun ny cho thit b ngoi vi. Nu
Bi tp 1: Bt tt n LED
;================================================= =======
; Ten chuong trinh
: Mach test den LED_1
; Nguoi thuc hien
: Falleaf
; Ngay thuc hien
: 23/05/2005
; Phien ban
: 1.0
; Mo ta phan cung
: Dung PIC16F628A - thach anh 10MHz
;
: LED giao tiep voi PORTB
;
: Cuc am cua LED noi voi GND
;
: RB0 - RB7 la cac chan output
;---------------------------------------------------------------; Ngay hoan thanh
: 23/05/2005
; Ngay kiem tra : 23/05/2005
; Nguoi kiem tra
: Doan Hiep
;---------------------------------------------------------------; Chu thich
: Mo ta cac diem khac nhau cua cac phien ban khac nhau
;
: hoac cac chu thich khac
;
: vd, dung che do Power On Reset, PORTB = 00000000
;
: hoac, chuong trinh viet cho PIC Tutorial
;
: hoac, chuong trinh nay hoan toan mien phi va co the dung cho
;
: moi muc dich khac nhau
;================================================= =======
;================================================= ======
TITLE
"Mach test LED_1"
PROCESSOR
P16F628A
INCLUDE
<P16F628A.inc>
__CONFIG
_CP_OFF & _PWRTE_ON & _WDT_OFF &_HS_OSC
;=================================================
======
NHN
LNH
thamso1,
thamso2
By gi chng ta dnh cht thi gian cho l thuyt, cc bn m datasheet PIC16F628A trang
15, Section 4. Memory Organization
Chng ta s thy rng t chc b nh chng trnh ca PIC c chia ra lm my phn nh
sau:
-
Pointer
Stack
Interrupt vector
Program memory
Code:
;=================================================
ORG
0x0000
GOTO
MAIN
ORG
===================
0x0005
MAIN
.....
END.
;=================================================
===================
;=================================================
==============================
ORG
0x0000
GOTO
MAIN
ORG
0x0005
MAIN
BANKSEL TRISB
CLRF
TRISB
; bank select
; trisb = 00000000
; portb = output
BANKSEL PORTB
BSF
PORTB, 0
; rb0 = 1
; RB0 = 5V
GOTO
$
; dung chuong trinh tai day
; vong lap tai cho^~
; khong bao gio ket thuc
END.
; lenh bat buoc de ket thuc
;=================================================
===============================
Ri, nh vy, chng ta thc hin xong mt chng trnh vit bng MPASM cho
PIC16F628A.
Phn tch chng trnh, chng ta s thy, mi khi ng, chng trnh gp lnh goto main,
n s nhy n nhn MAIN. nhn MAIN, n gp lnh banksel, tc l lnh bank select. C
ngha l n s chuyn sang hot ng bng c cha thanh ghi TRISB.
V sao? Bi v ban u khi ng, PIC lun nm bng 0. Nhng thanh ghi TRISB li nm
bng 1, v th cn phi chuyn sang bng 1 lm vic. Thc ra chng ta cng c cch
yu cu PIC chuyn sang bng 1 mt cch ch danh, ch khng phi l chuyn sang bng
c thanh ghi trisb nh chng ta va lm. Nhng vic ny l khng cn thit, c hai vic lm
u ging nhau. Chnh v vy, chng ta chn cch vit no cho d nh l c.
Sau khi chuyn sang bng 1. Chng ta dng lnh CLRF xo thanh ghi TRISB.
Tc l TRISB = 00000000
Chng ta lu mt iu rng, thanh ghi TRISB c cng dng quy nh PORTB s c nhng
chn no l chn xut, chn no l chn nhp. Chng ta nh thm mt iu na, s 0 ging
ch O, v s 1 ging ch I. Nh vy, khi TRISB = 00000000 tc l PORTB s l OOOOOOOO,
tc c ngha l tt c cc chn ca portB u l Output. Nu TRISB = 01010101 th PORTB
s l OIOIOIOI. C ngha l RB0 s l Input, RB1 l Output, RB2 l Input, RB3 l Output.. c
nh th cho n RB7 l Output. Lu rng RB0 n RB7 c tnh t phi sang tri.
Sau , chng ta li thc hin lnh Banksel portb, tc l chng ta li nhy v bng 0 (bng
cha thanh ghi portb).
Tt c cc lnh lm thay i gi tr ca thanh ghi portb, s lm thay i tn hiu in bn
ngoi chn ca PORT B.
Sau khi chuyn sang bng 0, chng ta thc hin lnh BSF PORTB,0. C ngha l chng ta set
bit v tr 0 ca portb, tc l chng ta cho RB0 = 1.
C ngha l ngoi chn RB0 s mang gi tr in p 5V. Khi , n LED ni vi RB0 s
sng.
Cc bn s thy mach ngoi hot ng nh th ny:
Khi bt in ln, PIC c reset. N lp tc bt sng n LED RB0, ri sau gi nguyn
nh vy, khng lm g c.
Thch anh to dao ng trn cc chn OSC, a vo bn trong PIC. PIC s m 4 nhp trn
dao ng thch anh, v thc hin mt lnh. Nh vy, thi gian thc hin mt lnh chnh
l 4 nhp dao ng ca thch anh.
Chng ta thng gi thi gian thc hin mt lnh ca PIC l mt chu k my (on s 2 trn
hnh). Vy mt chu k my bng bao nhiu, nu chng ta s dng thch anh 10MHz cho
PIC?
Code:
Nh vy, mt lnh my c thc hin trong vng 0.4 micro giy, hay 400 nano giy.
Tng t, khi cc bn dng thch anh 4MHz, chu k my s l 1us, v dng thch anh
20MHz, chu k my s l 200 nano giy.
Quay tr li vi vic nu chng ta cn thc hin mt vic g ging nh nhp nhy n
LED, th chng ta cn PIC phi dng li, khng lm g c ch chng ta. Nu nh lnh NOP
(lnh khng lm g) s gip chng ta ch 0.4 us, m chng ta cn ch 1 giy, th chng ta
vit bao nhiu lnh NOP cho ?
Thay v nh vy, chng ta vit mt vng lp cho vi iu khin lm mt vic v thng v
pht no N ln, v mi ln nh vy n tn T chu k my. Nh vy, sau khi kt thc vic
lm v thng v pht , vi iu khin ch chng ta N * T chu k my.
vit mt vng lp nh vy, trc tin chng ta hc cch t bin.
Mt bin c t trong PIC, thc cht l mt tn gi chung cho mt hoc nhiu thanh ghi
cc gi tr. Trong phn ny, chng ta ch n gin lm t bin c ngha l t tn cho mt
thanh ghi. Thc ra, chng ta hon ton khng cn t tn, m c th gi trc tip a ch
ca thanh ghi, nhng nu lm nh vy, sau ny, khi chng trnh phc tp dn ln, chng ta
s d b ln ln cc bin.
Khi t bin, thanh ghi ny nm u? N s nm trong b nh chng trnh v c th, n
s nm trong vng nh dng chung m chng ta cp trong bi hc trc.
Vy lm th no t bin? C rt nhiu cch t bin, v trong phn ny, ti s hng
dn cc bn cch t bin m ti cho rng r rng nht.
Code:
;=================================================
COUNT_L RES
COUNT_H RES
COUNT_N RES
1
1
3
=================
ORG 0x020
;=================================================
=================
Cc bn va lm g?
Directive ORG dng xc nh a ch vng nh. Cc bn lu rng, khi xc nh a ch
vng nh y, chnh l cc bn xc nh a ch vng nh d liu, ch khng phi a ch
vng nh lp trnh. Nhng g cc bn vit pha bn di, s gip cho trnh dch hiu c
rng cc bn ang lm vic trong vng nh lp trnh, hay vng nh d liu
Directive RES quy nh vic t bin. S 1 pha sau xc nh rng bin c tn COUNT_L
chim 1 thanh ghi 8 bit, tc l 1 byte.
Tip theo, cc bn li t bin tn l COUNT_H. Nh vy, bin COUNT_H cng chim 1 byte.
Cu hi t ra l cc thanh ghi ny nm u?
Cc bn lu , khi cc bn dng directive ORG, l cc bn xc nh ni bt u t bin.
Nh vy, bin COUNT_L s c di 1 byte, v c t a ch 0x020 tc l a ch u
tin ca vng nh d liu dng chung trong bng 0 (20h)
V COUNT_L chim 1 byte. Do , bin COUNT_H s chim byte tip theo, v a ch u
tin ca COUNT_H s l 21h, nhng COUNT_H cng ch c 1 byte, cho nn n chnh l thanh
ghi a ch 21h. n bin COUNT_N, tng t, a ch u tin ca n s l 22h. Bin
COUNT_N chim 3 thanh ghi, nh vy, bin COUNT_N s nm t 22h, 23h n 24h. Nu tip
tc t thm cc bin khc, cc bin s bt u t a ch 25h, c nh th.
Vy mun t bin cc bng khc th lm th no? Cc bn c ly a ch u ca vng
nh d liu dng chung ca bng v vit nh sau:
Code:
;=================================================
ORG
0x0A0h
COUNT_X RES
10
;=================================================
;=================================================
;----------------------------------; Bien nam o Bank0
;----------------------------------ORG
0x020
COUNT_L RES
COUNT_H RES
1
1
======================
ORG
COUNT1_L
RES
0x0A0
=======================
;=================================================
; Phn ch thch ban u
;
;=================================================
; Phn khi to vi iu khin
TITLE
PROCESSOR
INCLUDE
__CONFIG
=======================
;=================================================
; Phn t bin
=======================
=======================
MAIN
;
ORG
========================
0x0005
Nh vy, chng ta bit cch vit mt chng trnh y dnh cho vi iu khin PIC
bng ngn ng MPASM.
Cc bn cn ch thm, nu pha trn ch bin bng 2, cc bn khng t bin g c, th
cc bn c nguyn nh vy, v ngay bn di, cc bn t li a ch 0x0000, n
chng nh hng g n chng trnh.
Cng ging nh, nu bn khng vit g on ORG 0x0000 v GOTO MAIN, m bn ngay
dng ORG 0x0005 th chng trnh vn chy bnh thng. n gin l t on 0x0000 n
0x0004, PIC s khng lm g c. Chng ti ang c gng tng bc hnh thnh cho bn kt
cu chng trnh vit bng MPASM, mi ngy mt hon thin hn, cc bn nm r l do
v sao cc chng trnh c vit nh vy, v chng ta cng thng nht vi nhau im ny
khi vit chng trnh. Nu cc bn tin tng vo vic to ra mt chun vit chng trnh
MPASM cho Vit Nam, th cc bn l ngi ang t nn mng cho n. Ti cng c tham
vng ny, cho nn cc quy cch k hiu ti c gng dng mt chun thng nht, v mong
rng cc bn cng ti lm vic ny, sau ny tt c mi ngi khi lm vic cng vi nhau
c th hiu v truyn ti tng mt cch nhanh nht.
K t nay, cc bn bit cch t bin, bit cch vit phn khi to, chng ta s ch cn
bn ti vic vit phn chng trnh chnh nh th no na m thi.
Code:
;=================================================
===========================
ORG
0x0000
GOTO
MAIN
ORG
MAIN
LOOP
0x0005
BANKSEL TRISB
CLRF
TRISB
MOVLW
MOVWF
D'255'
COUNT_L ; COUNT_L l 1 byte
BANKSEL PORTB
BSF
CALL
BCF
CALL
GOTO
PORTB, 0
DELAY
PORTB, 0
DELAY
LOOP
;=================================================
============================
; Cc chng trnh con
;=================================================
============================
DELAY
DECFSZ
COUNT_L,
GOTO
DELAY
RETURN
;=================================================
============================
GOTO
$
END
; t portb l output
;=================================================
============================
[NHN]
cc cu lnh
RETURN
Lu rng trn, chng ta gi chng trnh con CALL DELAY. Nh vy, vic gi hm c
thc hin bng lnh CALL [NHN].
Con tr chng trnh s nhy v [NHN] c gi. N thc hin cc lnh nm t nhn tr
i. Thc hin cho n khi gp lnh RETURN, n s quay tr v v thc hin lnh tip theo
ngay bn di lnh CALL. y, chng ta gp phi mt vn , l khi nim Top of
Stack. Tuy nhin, chng ta tm gc n li cho bi hc sau, cn by gi cc bn ch cn nm
c vic thc hin lnh CALL bao gi cng i km vi mt nhn. Con tr nhy ti nhn v
thc hin cc lnh bn trong , n khi gp lnh RETURN th n nhy tr v v tr nm sau
lnh CALL v thc hin tip cng vic ang lm.
V b qua khi nim Top of Stack, cho nn ngh cc bn khng t ra cu hi nu trong
cc lnh thc hin, n li c mt lnh CALL gi i ch khc th lm th no? Chng ta s gii
quyt vn ny phn sau.
Th bn trong hm DELAY chng ta lm nhng g?
Lu rng, trn chng trnh chnh, sau khi khi to PORTB l ng output, cc bn
thy chng ta ghi gi tr d'255' vo bin COUNT_L. Cch vit gi tr nh sau:
b'11001010' xc nh s nh phn
d'234' xc nh s thp phn
0xF3 xc nh s thp lc phn
Lu :
S nh phn ch c cc gi tr 0 v 1, v ti a di 8 bit. S thp phn ch c th c gi tr t
0 n 255, v s thp lc phn ch c gi tr t 00 n FF
Quay tr li, bin COUNT_L ang mang gi tr 255.
Khi thc hin hm DELAY, cc bn thc hin lnh DECFSZ (DECrement File, Skip if Zero), c
ngha l n s gim gi tr ca mt thanh ghi no mt n v. Nu sau khi gim xong, m
kt qu l 0, th n s nhy cch ra mt nh trong b nh chng trnh, v thc hin lnh
tip theo . Nu gi tr sau khi gim mt n v cha bng 0, th n s thc hin lnh lin
k vi n.
Nh vy, vng lp c thc hin nh sau:
Code:
Code:
Lnh DECFSZ
[File], F/W
Khi thc hin lnh GOTO, lnh GOTO tn 2 chu k my, vy n cng thc hin 254 ln,
chng ta k hiu (254 x 2 = 506) y.
Khi COUNT_L = 1, n vn thc hin lnh DECFSZ, vy n tn thm 1 chu k my na (1).
Sau khi thc hin lnh ny, kt qu tr v l 0, vy n s thc hin mt lnh NOP (1), v
sau thc hin lnh RETURN, lnh RETURN tn 2 chu k my (2)
Kt qu:
(2) + (254) + (508) + (1) + (1) + (2) = 768 chu k my
Nu chng ta dng thch anh 10MHz, mi chu k my tn 0.4 us, c ngha l lnh CALL
DELAY tn:
768 * 0.4 us tc l khong 1/3000 giy.
Chng ta khoan bn n vic xa hn, vy th chng ta bit cch tnh thi gian hao tn
ca hm DELAY ri. Nhng nu tnh nh th ny th qu mt cng, chng ta c th chuyn
n thnh cng thc c th nh sau:
CALL = 2
DELAY (COUNT_L) = [COUNT_L - 1] * (DECFSZ + GOTO) + 1 + 1
RETURN = 2
Cc bn nn nh cng thc ny sau ny pht trin ln tnh cc cng thc khc.
C l hm nay chng ta tm dng bi hc y
Cc bn lu , ti c tnh sai mt on pha trn, v qung g hay sao , tnh t 255 xung
1 gim ch c 253 ln. ng l phi 254 ln. Nh t 2 gim xung 1 th ch c 1 ln thi. Xin
thnh tht co li vi cc bn.
Tng kt: Cc bn hc c g ngy hm nay?
- Cc bn hiu c khi nim chu k my, dao ng thch anh to ra, PIC s thc hin 1
lnh trong vng 4 dao ng ca thch anh. Nh vy, chu k my ca PIC s l chu k dao
ng ca thch anh nhn vi 4, hay tn s PIC s bng tn s thch anh chia 4.
- Cc bn hc c cch t bin trong mt chng trnh vit bng MPASM, cc bn
c th t bin bt k bng no cc bn mun
- Sau , cc bn b sung phn t bin ny vo trong sn chng trnh ln trc hc,
cc bn hon thin hn sn mt chng trnh vit bng MPASM
- Cc bn li thm vo sn chng trnh phn cc chng trnh con, vy ti thng bo
vi cc bn rng cc bn ch cn thiu 2 phn na l ngt (Interrupt) v bng (Table) na,
l cc bn c th c mt sn chng trnh vit bng MPASM hon chnh. Cc bn s
khng phi i lu hon tt sn chng trnh ny.
- Cc bn hc c cch dng hm CALL v RETURN, n lun lun i km tng cp vi
nhau.
th nh trc rng trong ngt chng ta s lm vic g. Cng nh khi i trn b rung,
chng ta c th b b hc, cng c th b tru hc, cng c th b vp cc , cng c th b
lt g... V nu nh b b hc th chng ta chi ng tri, b tru hc chng ta mng ng
trng, b vp cc chng ta t trch mnh xui xo, v n khi vp g... th chng ta v
nh thng...
Cc ngun ngt trong PIC:
S lng v loi ngun ngt trong PIC rt a dng, v rt khc nhau mi dng PIC. Do vy
khng th lit k ht ra y tt c cc dng PIC v tt c cc loi ngt trong tng dng
c. Chng ta ch a ra y s tng qut ca cc ngun ngt, v i su vo mt s loi
ngt ph bin.
;=================================================
ORG
0x0000
GOTO
MAIN
ORG
0x0004
GOTO
INTERRUPT
ORG
0x0005
MAIN
; y l phn chng trnh chnh ca cc bn
==================
;=================================================
==================
INTERRUPT
RETFIE
;=================================================
; Cc chng trnh con c vit y
;=================================================
GOTO
$
END
;=================================================
==================
==================
==================
Nh vy, mt ln na, chng ta b sung sn chng trnh ca chng ta mt cch chi tit
hn. Chng ta va thm vo mt on chng trnh con INTERRUPT. Thc ra, gi
INTERRUPT l mt chng trnh con cng khng sai, nhng v n kh c bit, nn chng ta
c tch ri n ra.
Khi to v kt thc ngt:
Ti cung cp di y on chng trnh khi to v kt thc ngt y cho PIC, t nay
v sau, khi mun s dng ngt, cc bn ch cn copy v paste on code ny li, hon ton
khng cn sa cha g v c th s dng.
Ti s dnh cho cc bn t cu hi v phn ny t cc cu hi, c th gii thch r hn
v sao chng ta li vit nh vy, tng im mt. Nu khng, ti khng th c thi gian
vit tt c mi vn v ngt ra y c.
Code:
;=================================================
===========================================
INTERRUPT
;------------------------------------------;Doan ma bat buoc de vao ngat
;------------------------------------------MOVWF
W_SAVE
;W_SAVE(bank unknown!) =
SWAPF
CLRF
bank 0 for remainder of handler
MOVWF
swap_nibbles( STATUS )
= 0
STATUS, W
STATUS
STAT_SV
; force
; STAT_SV =
; STATUS
MOVF
MOVWF
CLRF
MOVF
MOVWF
PCLATH, W
PCH_SV
; PCH_SV = PCLATH
PCLATH
; PCLATH = 0
FSR,
W
FSR_SV
; FSR_SV = FSR
; 10 cycles from
interrupt to here!
;----------------------------------;Doan chuong trinh ngat
;----------------------------------; cac ban se viet chuong trinh ngat o day
;-------------------------------------------------;Doan ma bat buoc de ket thuc ngat
;-------------------------------------------------MOVF
MOVWF
STAT_SV )
change Z bit)
SWAPF
FSR_SV, W
FSR
; FSR =
MOVF
PCH_SV,
MOVWF
PCLATH
SWAPF
STAT_SV,
MOVWF STATUS
SWAPF
W_SAVE, W
FSR_SV
W
; PCLATH = PCH_SV
W
; STATUS = swap_nibbles(
W_SAVE, F
; W = swap(swap( W_SAVE )) (no
BSF
INTCON, GIE
RETFIE
;=================================================
==================================================
Theo di hnh trn, chng ta thy. Khi bm nt, c qu trnh i xung ca nt bm, v qu
trnh i ln ca nt bm. Nhng thc t, i vi mch in trong nt bm, n ch c th
nhn c trng thi tip xc hoc khng tip xc, nn tn hiu nhn c s nh ng
mu xanh trong hnh di. Chng ta ch quan tm n trng thi ca ng mu xanh trong
cc ng dng ca nt bm.
Vy, trng thi nt bm li c thm 3 trng thi na l trng thi bm xung, trng thi gi
nt bm, v trng thi nh nt bm ln. Kt hp vi 2 trng thi iu khin trn, chng ta
c 6 trng thi ph bin ca nt bm. Cc bn lu rng, chng ta c 6 trng thi ch
khng phi ch c 4 trng thi, v thc ra rt nhiu ngi cho rng ch c 4 trng thi khi cho
rng trng thi ch trong lc gi nt bm khng phi l trng thi ph bin. Nhng nu cc
bn tng dng in thoi di ng th cc bn thy s ngi dng trng thi ch ca nt
bm cng khng phi l con s nh.
y, ti mun tn dc mt cht rng, khi cc bn lm vic v khoa hc k thut, v n
mt khi cc bn kh c th tm ra ng hng suy ngh gii quyt mt vn khoa hc
k thut, hy tm mi lin h vi n trong khoa hc x hi. Chnh v vy, cc bn thng
thy ti hay a ra nhng v d x hi minh ho cho vn k thut cn c gii quyt.
Ti s dnh vic ng dng tng trng thi nt bm ph bin trong cc ng dng cho cc
bn, cn y, ti ch mun nhn bi hc ny tip tc bi hc v interrupt m chng ta
b d trc .
Vy chng ta ch xt trng thi khi bm nt, lp tc lnh s c thc hin, tc trng thi
tc thi ca nt bm.
Cng dng ca in tr ko ln
Cc bn li thy, nu by gi khng bm nt, th in p ng vo ca PIC s l 5V. Nhng
nu bm nt mt ci, r rng chng ta gy ra ngn mch khi ni trc tip t ngun xung
t.
Chnh v vy, chng ta phi a thm vo mt in tr gia t, nt bm v ngun.