Professional Documents
Culture Documents
452 Nang Cao Voi AVR PDF
452 Nang Cao Voi AVR PDF
NLU
CNG HC AVR
AVR2 CU TRC AVR
Tho thun: ti liu ny thuc quyn s hu ca tc gi, bn c th t do tham kho
ti liu nhng khng c php s dng in thnh sch bo, ng ln cc din n
hay website, nhng bn c th dng ng link http://www.dieukhientudong.net
hng ti ti liu. Lin h tc gi qua email: thanhtam.h@gmail.com.
I.
Bn s i n u.
T chc ca AVR.
AVR c cu trc Harvard, trong ng truyn cho b nh d liu (data memory bus) v
ng truyn cho b nh chng trnh (program memory bus) c tch ring. Data memory bus
ch c 8 bit v c kt ni vi hu ht cc thit b ngoi vi, vi register file. Trong khi
program memory bus c rng 16 bits v ch phc v cho instruction registers. Hnh 1 m t cu
trc b nh ca AVR.
B nh chng trnh (Program memory): L b nh Flash lp trnh c, trong cc chip
AVR c (nh AT90S1200 hay AT()2313) b nh chng trnh ch gm 1 phn l Application
Flash Section nhng trong cc chip AVR mi chng ta c thm phn Boot Flash setion. Boot
section s c kho st trong cc phn sau, trong bi ny khi ni v b nh chng trnh, chng
ta t hiu l Application section. Thc cht, application section bao gm 2 phn: phn cha cc
instruction (m lnh cho hot ng ca chip) v phn cha cc vector ngt (interrupt vectors). Cc
vector ngt nm phn u ca application section (t a ch 0x0000) v di n bao nhiu ty
thuc vo loi chip. Phn cha instruction nm lin sau , chng trnh vit cho chip phi c
load vo phn ny. Xem li phn u ca v d trong bi 1:
.ORG 0x000
RJMP BATDAU
.ORG 0x020
BATDAU:
Trong v d ny, ngay sau khi set v tr 0x000 bng ch th (DIRECTIVE) .ORG 0x000
chng ta dng instruction RJMP nhy n v tr 0x020, nh th phn b nh chng trnh t
0x00 n 0x01F khng c s dng (v trong v d ny chng ta khng s dng cc vector
For more details and questions, contact me: thanhtam.h@gmail.com
AUTO.NLU
ngt). Chng trnh chnh c bt u t a ch 0x020, con s 0x020 l do ngi lp trnh chn,
tht ra cc vector ngt ca chip ATMEGA8 ch ko di n a ch 0x012, v vy chng trnh
chnh c th c bt u t bt c v tr no sau . bit di cc vector ngt ca tng chip
bn hy tham kho datasheet ca chip .
V chc nng chnh ca b nh chng trnh l cha instruction, chng ta khng c nhiu c
hi tc ng ln b nh ny khi lp trnh cho chip, v th i vi ngi lp trnh AVR, b nh ny
khng qu quan trng. Tt c cc thanh ghi quan trng cn kho st nm trong b nh d liu
ca chip.
AUTO.NLU
t l R0 n R31. Chng c chia thnh 2 phn, phn 1 bao gm cc thanh ghi t R0 n R15 v
phn 2 l cc thanh ghi R16 n R31. Cc thanh ghi ny c cc c im sau:
- c truy cp trc tip trong cc instruction .
- Cc ton t, php ton thc hin trn cc thanh ghi ny ch cn 1 chu k xung clock.
- Register File c kt ni trc tip vi b x l trung tm CPU ca chip.
- Chng l ngun cha cc s hng trong cc php ton v cng l ch cha kt qu tr li
ca php ton.
minh ha, hy xt v d thc hin php cng 2 thanh ghi bng instruction ADD nh sau:
ADD R1, R2
Bn thy trong dng lnh trn, 2 thanh ghi R1 v R2 c s dng trc tip vi tn ca
chng, dng lnh trn khi c dch sang opcode download vo chip s c dng:
0000110000010010 trong 00001=1 tc thanh ghi R1 v 00010 = 2 ch thanh ghi R2. Sau php
cng, kt qu s c lu vo thanh ghi R1.
Tt c cc instruction s dng RF lm ton hng u c th truy nhp tt c cc RF mt cch
trc tip trong 1 chu k xung clock, ngoi tr SBCI, SUBI, CPI, ANDI v LDI, cc instruction
ny ch c th truy nhp cc thanh ghi t R16 n R31.
Thanh ghi R0 l thanh ghi duy nht c s dng trong instruction LPM (Load Program
Memory). Cc thanh ghi R26, R27, R28, R29, R30 v R31 ngoi chc nng thng thng cn
c s dng nh cc con tr (Pointer register) trong mt s instruction truy xut gin tip.
Chng ta s kho st vn con tr sau ny. Hnh 3 m t cc chc nng ph ca cc thanh ghi.
AUTO.NLU
Phn 2: l phn nm ngay sau register file, phn ny bao gm 64 thanh ghi c gi l 64
thanh ghi nhp/xut (64 I/O register) hay cn gi l vng nh I/O (I/O Memory). Vng nh I/O
l ca ng giao tip gia CPU v thit b ngoi vi. Tt c cc thanh ghi iu khin, trng
thica thit b ngoi vi u nm y. Xem li v d trong bi 1, trong ti c cp v vic
iu khin cc PORT ca AVR, mi PORT lin quan n 3 thanh ghi DDRx, PORTx v PINx, tt
c 3 thanh ghi ny u nm trong vng nh I/O. Xa hn, nu mun truy xut cc thit b ngoi vi
khc nh Timer, chuyn i Analog/Digital, giao tip USARTu thc hin thng qua vic
iu khin cc thanh ghi trong vng nh ny.
Vng nh I/O c th c truy cp nh SRAM hay nh cc thanh ghi I/O. Nu s dng
instruction truy xut SRAM truy xut vng nh ny th a ch ca chng c tnh t 0x0020
n 0x005F. Nhng nu truy xut nh cc thanh ghi I/O th a ch ca chng c tnh t
0x0000 n 0x003F.
Xt v d instruction OUT dng xut gi tr ra cc thanh ghi I/O, lnh ny s dng a ch
kiu thanh ghi, cu trc ca lnh nh sau: OUT A, Rr, trong A l a ch ca thanh ghi trong
vng nh I/O, Rr l thanh ghi RF, lnh OUT xut gi tr t thanh ghi Rr ra thanh ghi I/O c a
ch l A. Gi s chng ta mun xut gi tr cha trong R6 ra thanh ghi iu khin hng ca
PORTD, tc thanh ghi DDRD, a ch tnh theo vng I/O ca thanh ghi DDRD l 0x0011, nh th
cu lnh ca chng ta s c dng: OUT 0x0011, R6. Tuy nhin trong 1 trng hp khc, nu
mun truy xut DDRD theo dng SRAM, v d lnh STS hay LDS, th phi dng a ch tuyt i
ca thanh ghi ny, tc gi tr 0x0031, khi lnh OUT trn c vit li l STS 0x0031, R6.
thng nht cch s dng t ng, t by gi chng ta dng khi nim a ch I/O cho
cc thanh ghi trong vng nh I/O ni n a ch khng tnh phn Register File, khi nim
a ch b nh ca thanh ghi l ch a ch tuyt i ca chng trong SRAM. V d thanh ghi
DDRD c a ch I/O l 0x0011 v a ch b nh ca n l 0x0031, a ch b nh =
a ch thanh ghi + 0x0020.
V cc thanh ghi trong vng I/O khng c hiu theo tn gi nh cc Register file, khi lp
trnh cho cc thanh ghi ny, ngi lp trnh cn nh a ch ca tng thanh ghi, y l vic tng
i kh khn. Tuy nhin, trong hu ht cc phn mm lp trnh cho AVR, a ch ca tt c cc
thanh ghi trong vng I/O u c nh ngha trc trong 1 file Definition, bn ch cn nh km
file ny vo chng trnh ca bn l c th truy xut cc thanh ghi vi tn gi ca chng. Gi s
trong v d bi 1, lp trnh cho chip Atmega8 bng AVRStudio, dng th 2 chng ta s dng
INCLUDE "M8DEF.INC" load file nh ngha cho chip ATMega8, file M8DEF.INC. V vy,
trong sau ny khi mun s dng thanh ghi DDRD bn ch cn gi tn ca chng, nh:
OUT DDRD,R6.
Phn 4: RAM ngoi (external SRAM), cc chip AVR cho php ngi s dng gn thm cc
b nh ngoi cha bin, vng ny thc cht ch tn ti khi no ngi s dng gn thm b nh
ngoi vo chip.
Phn 5: EEPROM (Electrically Ereasable Programmable ROM) l mt phn quan trng ca
cc chip AVR mi, v l ROM nn b nh ny khng b xa ngay c khi khng cung cp ngun
nui cho chip, rt thch hp cho cc ng dng lu tr d liu. Nh trong hnh 1, phn b nh
EEPROM c tch ring v c a ch tnh t 0x0000.
AUTO.NLU
AVR hot ng nh th no?
Hnh 4 biu din cu trong bn trong ca 1 AVR. Bn thy rng 32 thanh ghi trong Register
File c kt ni trc tip vi Arithmetic Logic Unit -ALU (ALU cng c xem l CPU ca
AVR) bng 2 line, v th ALU c th truy xut trc tip cng lc 2 thanh ghi RF ch trong 1 chu
k xung clock (vng c khoanh trn mu trong hnh 4).
AUTO.NLU
III. Stack.
Stack c hiu nh l 1 thp d liu, d liu c cha vo stack nh thp v d
liu cng c ly ra t nh. Kiu truy cp d liu ca stack gi l LIFO (Last In First Out vo
sau ra trc). Hnh 5 th hin cch truy cp d liu ca stack.
Hnh 5. Stack
Khi nim v cch thc hot ng ca stack c th c p dng cho AVR, bng cch khai
bo mt vng nh trong SRAM l stack ta c th s dng vng nh ny nh mt stack thc th.
khai bo mt vng SRAM lm stack chng ta cn xc lp a ch u ca stack bng cch
xc lp con tr stack-SP (Stack Pointer). SP l 1 con tr 16 bit bao gm 2 thanh ghi 8 bit SPL v
SPH (ch L l LOW ch thanh ghi mang gi tr byte thp ca SP, v H = HIGH), SPL v SPH
nm trong vng nh I/O. Gi tr gn cho thanh ghi SP s l a ch khi ng ca stack. Quay li
v d bi 1, phn khi to cc iu kin u.
; KHOI TAO CC DIEU KIEN DAU
LDI R16, HIGH(RAMEND)
LDI R17, LOW(RAMEND)
OUT SPH, R16
OUT SPL, R17
Bn dng khai bo trn mc ch l gn gi tr ca RAMEND cho con tr SP, RAMEND
(tc End of Ram) l bin cha a ch ln nht ca RAM ni trong AVR, bin ny c nh
ngha trong file M8DEF.INC. Nh th sau 4 dng trn, con tr SP cha gi tr cui cng ca
SRAM hay ni cch khc vng stack bt u t v tr cui cng ca b nh SRAM. Nhng ti sao
l v tr cui cng m khng l 1 gi tr khc. C th gii thch nh sau: stack trong AVR hot
ng t trn xung, sau khi d liu c y vo stack, SP s gim gi tr v th khi ng SP
v tr cui cng ca SRAM s trnh c vic mt d liu do ghi . Bn c th khi ng stack
vi 1 a ch khc, tuy nhin v l do an ton, nn khi ng stack RAMEND.
Hai instruction dng cho truy cp stack l PUSH v POP, trong PUSH dng y d liu
vo stack v POP dng ly d liu ra khi stack. D liu c y vo v ly ra khi stack ti v
tr m con tr SP tr n. V d cho chip ATMega8, RAMEND=0x045F, sau khi khi ng, con
tr SP tr n v tr 0x045F trong SRAM, nu ta vit cc cu lnh sau:
LDI R1, 1
PUSH R1
LDI R1, 5
PUSH R1
LDI R1, 8
For more details and questions, contact me: thanhtam.h@gmail.com
AUTO.NLU
PUSH R1
Khi ni dung ca stack s nh trong hnh 6.
AUTO.NLU
Hnh 7. Thanh ghi trng thi.
Bit 0 C (Carry Flag: C nh): l bit nh trong cc php i s hoc logic, v d thanh
ghi R1 cha gi tr 200, R2 cha 70, chng ta thc hin php cng c nh: ADC R1, R2,
sau php cng, kt qu s c lu li trong thanh ghi R1, trong khi kt qu thc l 270
m thanh ghi R1 li ch c kh nng cha ti a gi tr 255 (v c 8 bit) nn trong trng
hp ny, gi tr lu li trong R1 thc cht ch l 14, ng thi c C c set ln 1 (v
270=100001110, trong 8 bit sau 00001110 =14 s c lu li trong R1).
Bit 1 Z (Zero Flag: C 0): c ny c set nu kt qu php ton i s hay php Logic
bng 0.
Bit 2 N (Negative Flag: C m): c ny c set nu kt qu php ton i s hay php
Logic l s m.
Bit 3 V (Twos complement Overflow Flag: C trn ca b 2): hot ng ca c ny c
v s kh hiu cho bn v n lin quan n kin thc s nh phn (phn b), chng ta s
cp n khi no thy cn thit.
Bit 4 S (Sign Bit: Bit du): Bit S l kt qu php XOR gia 1 c N v V, S=NV.
Bit 5 H (Half Carry Flag: C nh na): c H l c nh trong 1 vi php ton i s v
php Logic, c ny hiu qu i vi cc php ton vi s BCD.
Bit 6 T (Bit Copy Storage): c s dng trong 2 Instruction BLD (Bit LoaD) v BST
(Bit STorage). Ti s gii thch chc nng Bit T trong phn gii thiu v BLD v BST.
Bit 7 I (Global Interrupt Enable : Cho php ngt ton b): Bit ny phi c set ln 1 nu
trong chng trnh c s dng ngt. Sau khi set bit ny, bn mun kch hot loi ngt
no cn set cc bit ngt ring ca ngt . Hai instruction dng ring Set v Clear bit I
l SEI v CLI.
Ch : tt c cc bit trong thanh ghi SREG u c th c xa thng qua cc instruction khng
ton hng CLx v set bi SEx, trong x l tn ca Bit.V d CLT l xa Bit T v SEI l set bit I.
Ti ch gii thch ngn gn chc nng ca cc bit trong thanh ghi SREG, c th chc nng v
cch s dng ca tng bit chng ta s tm hiu trong cc trng hp c th sau ny, ngi c c
th t tm hiu thm trong cc ti liu v INSTRUCTION cho AVR.
Ti cung cp thm 1 bng tm tt s nh hng ca cc php ton i s, logic ln cc Bit
trong thanh ghi SREG.
AUTO.NLU
Sau khi tm hiu cu trc b nh v phng thc hot ng ca chip, phn ny ti gii thiu
mt s instruction m chng ta rt hay s dng khi lp trnh cho AVR. Ti s chia cc instruction
ny ra thnh nhiu nhm da theo phm vi tc ng v chc nng ca chng.
Trc ht chng ta thng nht mt s cch s dng k hiu trong cch vit c php ca cc
instruction nh sau:
Rd: thanh ghi ngun v cng l ch thuc Register File.
Rr: thanh ghi ngun thuc Register File.
Khi nim ngun (Source), ch (Destination) l ch cc ton hng v kt qu trong
cc php ton i s v Logic, v d ADD R1, R2 l lnh cng 2 gi tr cha trong 2
thanh ghi R1, R2, trong trng hp ny c R1 v R2 u c gi l ngun v cha
gi tr trc khi thc hin php cng. Sau khi php cng c thc hin, kt qu
c cha li trong R1 v v th R1 c gi l ch trong trng hp ny. R1 va
l ngun, va l ch trong khi R2 ch l ngun, nu vit v d ny di dng tng
qut s l : ADD Rd, Rr.
R: kt qu sau khi lnh c thc thi.
K: hng s.
k: hng s ch a ch tuyt i ca thanh ghi.
b: (0 n 7) s th t bit trong cc thanh ghi ca Register File v vng nh I/O.
s: (0 n 7) s th t bit trong thanh ghi trng thi SREG .
X,Y,X: cc thanh ghi a ch tng i (X=R27:R26, X=R29:R28, X=R31:R30).
For more details and questions, contact me: thanhtam.h@gmail.com
AUTO.NLU
A: a ch I/O.
q: dch chuyn ca a ch tuyt i.
1.
AUTO.NLU
AUTO.NLU
Gii hn: ch p dng cho cc thanh ghi t R16 n R31.
V d: ORI R17, 0xFF kt qu l R17 c 0xFF.
- OR (Logical OR)
C php: OR Rd, Rr
Chc nng: thc hin php Logic OR gia 2 thanh ghi Rd v Rr , kt qu t li trong
Rd.
Gii hn: p dng cho tt c cc thanh ghi trong RF.
V d:
LDI R1, 0xFF ;(11111111)
LDI R17, 0xAA; (10101010)
AND R1, R17
Kt qu l R1=0xFF v 11111111 & 10101010 =11111111.
- LSL(Logical Shift Left)
C php: LSL Rd
Chc nng: dch tt thanh ghi Rd sang tri 1 v tr, Bit 7 (bit ln nht) ca Rd s c
cha trong c nh C, bit 0 ca Rd b xa thnh 0. Thc cht LSL tng ng vi
php nhn thanh ghi Rd vi 2. Bn xem hnh minh ha bn di.
AUTO.NLU
AUTO.NLU
Chc nng: thc hin php tr thanh ghi Rd vi hng s K, kt qu t li trong Rd.
Gii hn: ch p dng cho cc thanh ghi t R16 n R31.
V d:
LDI R16, 30
SUBI R16, 20
Kt qu l R16=10.
- DEC (DECrement)
C php: DEC Rd
Chc nng: gim thanh ghi Rd 1 n v v kt qu t li trong Rd. Lnh ny c bit
thch hp cho cc ng dng lp, kt hp vi BREQ hay BRNE c th to thnh 1
vng lp FOR.
Gii hn: p dng cho tt c cc thanh ghi trong RF.
V d: DEC R17 kt qu l R17 c gim i 1 n v.
- MUL (MULtiply unsigned)
C php: MUL Rd, Rr
Chc nng: thc hin php nhn khng du 2 thanh ghi 8 bit Rd, Rr, kt qu l 1 s 16
bit t trong 2 thanh ghi R1:R0. Ch nu Rd v Rr l cc thanh ghi R1 v R0 th kt
qu sau khi tnh c s c vit ln. Xem hnh minh ha instruction MUL bn
di.
AUTO.NLU
OUT 0x11, R16
Kt qu l thanh ghi c a ch 0x11 trong vng I/O, tc thanh ghi DDRD, c gi
tr bng 0xFF.
- IN(INPUT Data )
C php: IN Rr, A
Chc nng: Load gi tr t thanh ghi c a ch A trong vng nh I/O vo thanh ghi
Rr. y l cch ph bin nht nhn gi tr t vng I/O.
Gii hn: Rr l thanh ghi RF bt k, A b gii hn t 0 n 63.
V d:
IN R16, 0x10
Kt qu l thanh ghi R16 nhn c gi tr ca thanh ghi c a ch 0x11 trong
vng I/O, tc thanh ghi PIND, y chnh l v d c gi tr cc chn ca PORTD
vo R16.
- SBI(Set Bit in I/O Register)
C php: SBI A, b
Chc nng: Set bit th b trong thanh ghi c a ch A trong vng nh I/O. Tuy nhin
lnh ny khng c tc dng trn ton b vng I/O m ch c tc i vi 32 thanh ghi
u (a ch t 0 n 31).
Gii hn: b l s th cc bit trong thanh ghi, 0b7; A b gii hn t 0 n 31.
V d:
SBI 0x12, 2
Kt qu l bit 2 ca thanh ghi c a ch 0x12 trong vng I/O, tc thanh ghi
PORTD, c set ln 1. y chnh l v d set chn PD2 ca PORTD.
- CBI(Clear Bit in I/O Register)
C php: CBI A, b
Chc nng: xa bit th b trong thanh ghi c a ch A trong vng nh I/O. Tuy nhin
lnh ny khng c tc dng trn ton b vng I/O m ch c tc i vi 32 thanh ghi
u (a ch t 0 n 31).
Gii hn: b l s th cc bit trong thanh ghi, 0b7; A b gii hn t 0 n 31.
V d:
CBI 0x12, 2
Kt qu l bit 2 ca thanh ghi c a ch 0x12 trong vng I/O, tc thanh ghi
PORTD, b xa thnh 0. y chnh l v d xa chn PB2 ca PORTD.
Nh ti trnh by phn trn, trong lc lp trnh, sau khi include file nh ngha cho chip bn
c th s dng tn ca cc thanh ghi thay cho a ch ca chng, nh th chng trnh ca cc bn
s tr nn d hiu hn.
3.
Trong Register File ca AVR, cc thanh ghi t R26 n R31ngoi cha nng thanh ghi thng
thng cn c chc nng l con tr (Pointer) trong vic truy cp b nh (c b nh data v b nh
Program). Nu c s dng nh cc Pointer, cc thanh ghi trn c bit n vi tn gi X, Y,
Z. nh ngha nh sau: X=R27:R26, X=R29:R28, X=R31:R30. Chng l 3 thanh ghi 16 bit c
nh ngha trc cho tt c cc AVR. Ngoi ra trong cc file nh ngha cho chip chng ta c thm
For more details and questions, contact me: thanhtam.h@gmail.com
AUTO.NLU
6 nh ngha khc l XL, XH, YL, YH, ZL, ZH cng chnh l tn gi ca R26-> R31. Phn ny
chng ta kho st mt s instruction dng truy cp ton b khi nh ca AVR bng cch s dng
a ch trc tip v bng cch s dng Pointer.
- LDS(LoaD direc from data Space)
C php: LDS Rd, k
Chc nng: load gi tr 1 byte t thanh ghi c a ch k trong SRAM vo thanh ghi Rd,
k l dng a ch tuyt i c gii hn t 0 n 65535(216-1) .
Gii hn: Rd l thanh ghi bt k trong RF nhng gi tr ln nht ca k l 65535, v th
vi lnh ny ta khng th truy cp vt qu khong khng gian 64KB. Nu mun truy
cp vng khng gian ln hn 64KB chng ta cn mt s h tr, tuy nhin y ti
gi s b nh ca chip (thng l b nh data) khng vt qu 64KB (thc t cha c
chip AVR no c SRAM hay EEPROM vt qu 64KB).
V d:
LDS R2, 0x0060
Kt qu l thanh ghi R2 cha gi tr ca thanh ghi c a ch 0x0060, y l thanh
ghi u tin trong khong SRAM (sau RF v vng I/O) ca AVR.
- STS(STorage direc to data Space)
C php: STS k, Rr
Chc nng: instruction ny hon ton ging LDS nhng dng xut d liu t thanh
ghi Rr ra RAM, ngi c c th tham kho phn gii thch cho LDS.
S dng a ch trc tip th cu lnh s n gin nhng rt kh nh phn a ch, thng
thng SRAM l vng chng ta hay s dng cha bin tm thi, trong cc ngn ng cp cao ta
ch cn nh tn bin nhng vi ASM chng ta phi nh a ch ca chng. Mt cch tt trnh
vic ny l dng ch th (DIRECTIVE, bn xem li bi 1) . EQU gn tn bin cho 1 a ch, v
d .EQU bientam = 0x0060 v sau s dng bientam thay cho 0x0060.
Mt cch khc c dng truy cp b nh m khng dng a ch tuyt i l s dng s
dng con tr. C 2 instruction h tr con tr l LD (LoaD indirec from data Space), v ST
(STorage indirec to data Space), LD c d liu t SRAM vo thanh ghi cn ST lu d liu t
thanh ghi vo SRAM. C 3 con tr X, Y v Z u c th c dng nhng c mt s im lu :
c 3 u dng c trong trng hp truy xut thng thng nhng vi cch truy cp c offset,
con tr X khng s dng c. truy xut b nh chng trnh bng con tr th Z l gii php
duy nhtDi y l 1 s cch s dng LD, ST kt hp vi con tr, chng ta xt thng qua cc
v d.
V d 1:
CLR R27 ; xa R27, tc xa byte cao ca pointer X
LDI R26, 0x60 ; load gi tr 0x60 vo R26, tc byte thp ca pointer X
; sau 2 dng trn, gi pointer X l 0x0060, sn sng tr n v tr u tin trong SRAM.
LD R1, X+ ; Load gi tr nh 0x0060 vo R1 (v X tr n 0x0060), sao tng gi tr
;X ln 1, nh th sau lnh ny X=0x0061
LD R2, X+ ; Load gi tr nh 0x0061 vo R2, sao tng gi tr ;X ln 1, nh th sau
lnh ny X=0x0062
For more details and questions, contact me: thanhtam.h@gmail.com
AUTO.NLU
LD R3, X ; Load gi tr nh 0x0062 vo R3 v khng thay i X
LD R4, -X ; Gim gi tr ca X trc (X=0x0061), sau load gi tr nh 0x0061 vo
R4
T v d ny chng ta thy c 3 cch c bn load d liu t SRAM bng con tr, cch
Load trc tip trong trng hp LD R3, X, cch load post-increment (hoc post-decrement) nh
trong trng hp LD R1, X+ v cch load pre-decrement (hoc pre-increment) trong trng hp
LD R4, -X.
Chng ta c th vit li v d trn nhng s dng con tr Y hoc Z thay cho X. V d vit
cho instruction ST cng hon ton tng t.
Tuy nhin cch truy cp theo cch pre hay post u lm thay i gi tr ca con tr, iu ny
c 1 bt li l nu chng ta mun quay li v tr nh no , chng ta phi tip tc thay i con
tr. trnh vic lm ny, 1 cch truy cp khc c h tr l truy cp Offset. Xt v d sau:
LD R1, Y+1
y chnh l cch truy cp Offset dng con tr Y, cch vit trn l tng ng vi cch vit
LD R1, Y+
Nhng im khc bit y l cch vit Offset khng lm thay i gi tr ca con tr Y. S
dng Offset c u im nh s dng mng (array) trong cc ngn ng lp trnh cp cao. Cn ch
l gi tr offset khng vt qu 63 v phng php ny ch dng cho 2 thanh ghi Y v Z.
4.
R nhnh v vng lp
AUTO.NLU
ca chng ta c AVR thc hin nh sau: kim tra c Z, nu Z=1 tip tc thc hin dng tip
theo sau m khng quan tm n nhn DELAY1, nhng nu Z=0 th nhy n nhn DELAY1.
Bn thy rng ban u R21 =255, sau khi gim 1 bi DEC, thanh ghi R21=2540, c Z =0, r
nhnh xy ra, b m chng trnh nhy v nhn DELAY1. Qu trnh ny lp li khong 255 ln
trc khi R21 =0 dn n Z=1.
Bao bn ngoi vng lp ca nhn DELAY1 l vng lp ca nhn DELAY0, cch hiu hon
ton tng t nhng trc khi lnh DEC R20 c thc thi th phi ch cho vng lp DELAY1
kt thc. Bn thn DELAY0 cng l 1 vng lp 255 ln. kt qu cui cng l ta thu c 1 vng
lp khong 255x255 ln m khng lm g c, chnh l ngha v cch hot ng ca on
chng trnh con DELAY.
Bn cnh BRNE chng ta c 1 s instruction phc v r nhnh khc nh:
- BREQ(BRanch if EQual )
C php: BREQ LABEL
Chc nng: Nhy n nhn LABEL nu c Z =1. C Z chu tc ng ca rt nhiu
instruction nh CP, CPI, SUB, SUBIv th BREQ thng c s dng sau cc
instruction ny.
V d:
LDI R16, 0xFF
LDI R17, 0xFF
CP R16, R17 ; so sanh 2 thanh ghi R16, R17
BREQ RENHANH
..
RENHANH:
; thc hin nhng vic khi r nhnh.
Kt qu l vic r nhnh xy ra v khi so snh bng CP, R17=R16 nn c Z t
ng c set bng 1, lnh BREQ c thc thi v nhy n nhn RENHANH. V
d ny tng ng cu trc if (R16=R17) {thc hin nhng vic khi r nhnh}
- BRLO(BRanch if LOwer )
C php: BRLO LABEL
Chc nng: bn cht ca cu lnh l nhy n nhn LABEL nu c C =1. Tuy nhin,
thng thng lnh ny s dng theo sau cc instruction nh CP, CPI, SUB,
SUBIkhi vic r nhnh s xy ra nu thanh ghi Rd <Rr.
V d:
EOR R16, R16 ;XOR R16 vi chnh n, tng ng CLR R16
VONG LAP:
INC R16 ;tng R16 thm 1 n v
CPI R16, $10 ;so snh R16 vi s hexadecimal $10
BRLO VONGLAP ;nhy v VONGLAP nu R16 <$10
NOP ;cu lnh ny s c thc thi nu iu kin r nhnh trn khng tha,
; NOP l 1 instruction, chc nng l khng lm g c.
AUTO.NLU
Kt qu l phn lnh bn trong VONGLAP s c thc hin khong 16 ln
($10=16) trc khi thc hin lnh NOP.
- BRSH(BRanch if Same or Higher )
C php: BRSH LABEL
Chc nng: bn cht ca cu lnh l nhy n nhn LABEL nu c C =0. Tuy nhin,
thng thng lnh ny s dng theo sau cc instruction nh CP, CPI, SUB,
SUBIkhi vic r nhnh s xy ra nu thanh ghi Rd Rr.
V d:
SUBI R16, 4 ;tr R16 i 4 n v
BRSH RENHANH ; nhy n RENHANH nu R16 4
.
RENHANH:
NOP
AUTO.NLU
thc thi chng trnh con v sau quay v chng trnh chnh. Nh th chng trnh con ch
c bin dch 1 ln v c th s dng nhiu ln, n lm gim dung lng chong trnh. y l
u im v cng l im khc bit ln nht gia chng trnh con v Macro. Tuy nhin cn ch
l vic nhy n chng trnh con v nhy v chng trnh chnh cn vi chu k my, c th lm
chm chng trnh, y l nhc im ca chng trnh con so vi macro.
Chng trnh con cho AVR lun c bt u bng 1 Label, cng l tn v a ch ca
chng trnh con. Chng trnh con thng c kt thc vi cu lnh RET (Return). Chng ta
bit v chng trnh con qua v d ca bi 1, trong DELAY l 1 chng trnh con.
gi chng trnh con t 1 v tr no trong chng trnh, chng ta c th dng lnh
CALL hoc RCALL (Relative CALL) (xem li v d bi 1 v cch s dng RCALL). Mi khi
cc lnh ny c gi, b m chng trnh c t ng c PUSH vo stack v khi chng
trnh con kt thc bng lnh RET, b m chng trnh c POP tr ra v quay v chng trnh
chnh. Lnh CALL c th gi 1 chng trnh con bt k v tr no trong khi RCALL ch gi
trong khong b nh 4KB, nhng RCALL cn t chu k xung clock hn khi thc thi.
Hai instruction khc c th c dng gi chng trnh con l JMP (Jump) v RJMP
(Relative Jump). Khc vi cc lnh call, cc lnh jump khng cho php quay li v khng t ng
PUSH b m chng trnh vo Stack, s dng cc lnh ny gi chng trnh con bn cn mt
s lnh jump khc cui chng trnh con.
Tm li bn nn vit 1 chng trnh con ng chun v dng CALL hoc RCALL gi
chng cc chng trnh ny, ch nhng trng hp c bit hoc bn hiu rt r v chng th c
th dng cc lnh jump.
VII. Chng trnh v d.
Nu bn c v hiu n thi im ny th bn c th hiu ht hot ng ca chng
trnh v d trong bi 1, tht s v d rt n gin v d hiu. Tuy nhin, bn c th ti u ha v
d theo hng lm gim dung lng chng trnh v tt nhin, chng trnh s kh hiu hn
cho ngi khc. Cc phn khi ng v tr b nh, stack v chng trnh con DELAY chng ta
khng thay i, ch thay i phn chng trnh chnh, 1 trong nhng cch vit chng trnh chnh
nh cch sau:
; CHUONG TRINH CHINH , BAI 1, VI DU 1, VERSION 2///////////////////////////////
LDI R16, $1 ; LOAD GIA TRI KHOI DONG CHO R16
MAIN:
OUT PORTB, R16 ; XUAT GIA TRI TRONG R16 RA PORTB
RCALL DELAY ; GOI CHUONG TRINH CON DELAY
ROL R16 ; XOAY THANH GHI R16 SANG TRAI 1 VI TRI
RJMP MAIN ; NEU R16 0, NHAY VE MAIN, TIEP TUC QUET
;//////////////////////////////////////////////////////////////////////////////////////////
C th khng cn gii thch bn cng c th hiu on code trn, y ch l 1 trong
nhng cch c th, bn hy vit li theo cch ca ring bn vi yu cu l chng trnh phi thc
hin ng chc nng v ngn gn.
By gi chng ta s thc hin mt v d minh ha cho nhng g chng ta hc trong bi 2
ny. Ni dung ca v d th hin trong mch in hnh 9. Hot ng ca mch in t nh sau: 1
chip ATMega8 c s dng nh mt counter, c th dng m ln v m xung, 2 button
For more details and questions, contact me: thanhtam.h@gmail.com
AUTO.NLU
trong mch in tc ng nh 2 kicker, nhn button 1 m ln v button m xung, gi
tr m nm trong khong t 0 n 9. Gi tr m c hin th trn 1 LED 7 on loi anod
chung (dng chung), chip 7447 c dng gii m t gi tr BCD xut ra bi ATMega8 sang
tn hiu cho LED 7 on anod chung, chng ta cn s dng 7447 v tn hiu xut ra t chip
ATMega8 l dng nh phn hoc BCD , tn hiu ny khng th hin th trc tip trn cc LED 7
on, chip 7447 c nhim v chuyn 1 d liu dng digit BCD sang m ph hp cho LED 7 on.
thc hin v d, trc ht bn hy v mch in nh trong hnh 9 bng phn mm Proteus
(xem cch v mch in bng Proteus trong v d bi 1), mch in ch c 5 loi linh kin l chip
ATMega8 (t kha mega8), 1 LED 7 on anod chung vi tn y trong Proteus l 7SEGCOM-AN-GRN (t kha 7SEG), 1 chip 7447 (t kha 7447), 1 in tr 10 v 2 button (t kha
button).
Hnh 9. V d cho bi 2.
S dng AVRStudio to 1 project mi vi tn gi avr2 (xem li v d bi 1 bit cch to
Project mi trong AVRStudio). Vit li phn code bn di vo vo file avr2.asm
.INCLUDE "M8DEF.INC"
.CSEG.
.ORG 0x0000
RJMP BATDAU
.ORG 0x0020
BATDAU:
;KHOI DONG STACK POINTER
LDI R17, HIGH(RAMEND)
LDI R16, LOW(RAMEND)
OUT SPL, R16
OUT SPH,R17
; KHOI DONG CAC PORT
CLR R16 ; XOA R16, R16=0
OUT DDRB, R16; DDRB=0, PORTB LA NGO NHAP
LDI R16, 0xFF; SET TAT CA CAC BIT CUA R16 LEN 1
OUT PORTB,R16; DDRB=0, PORTB =0xFF, KEO LEN CAC CHAN PORTB
For more details and questions, contact me: thanhtam.h@gmail.com
AUTO.NLU
OUT DDRD, R16; DDRD=0xFF, PORTD LA NGO XUAT
CLR R25; XOA R25, R25 LA THANH GHI DUNG CHUA SO DEM
SER R20 ; R21 LA THANH GHI TAM CHUA GIA TRI TRUOC DO CUA PINB
MAIN:
IN R21,PINB ; DOC GIA TRI TU PINB, TUC TU CAC BUTTON
RCALL SOSANH; GOI CHUONG TRINH CON SOSANH
OUT PORTD, R25; XUAT GIA TRI DEM RA PORTD
SBRS R21,0; NEU BIT 0 CUA R21 (TUC CHAN PB0) =1 THI BO QUA DONG
;TIEP THEO
RCALL TANG ; NHAY DEN CHUONG TRINH CON TANG GIA TRI DEM
SBRS R21,1; NEU BIT 1 CUA R21 (TUC CHAN PB1) =1 THI BO QUA DONG
;TIEP THEO
RCALL GIAM; NHAY DEN CHUONG TRINH CON GIAM GIA TRI DEM
MOV R20,R21; LUU LAI TRANG THAI PINB
RJMP MAIN
;**********************CHUONG TRINH CON************************
; **************subroutine kiem tra gioi hang (tu 0 den 9) cua so dem
SOSANH:
CPI R25, 10
BREQ RESET0; NEU GIA TRI DEM=10 THI TRA VE 0
CPI R25, 255
BREQ RESET9; NEU GIA TRI DEM =255 THI TRA VE 9
RJMP QUAYVE; NHAY DEN NHAN QUAYVE
RESET0:
LDI R25,$0; TRA GIA TRI DEM VE 0
RJMP QUAYVE
RESET9:
LDI R25,$9; GAN 9 CHO GIA TRI DEM
QUAYVE:
RET
; ************************************************************
; **************subroutine tang so dem 1 don vi neu dieu kien thoa
TANG:
SBRS R20,0
RET
INC R25
RET
; **************subroutine giam so dem 1 don vi neu dieu kien thoa
GIAM:
SBRS R20,1
RET
DEC R25
RET
For more details and questions, contact me: thanhtam.h@gmail.com
AUTO.NLU
Trong v ny ny, chng ta s dng 2 PORT ca chip ATMega8, PORTD dng xut d liu
(s m) ra chip 7447 v sau hin th trn LED 7 on. PORTB dng nh ng nhp, tn hiu t
cc button s c chip ATMega8 nhn thng qua 2 chn PB0 v PB1 ca PORTB.
Hot ng ca cac PORT v vic xc lp 1 PORT nh cc ng xut chng ta kho st
trong bi 1. y chng ta kho st thm v xc lp PORT nh 1 ng nhp, trc ht bn hy
quan st mch in tng ng ca 1 chn trong cc PORT xut nhp ca AVR trong hnh 10.
AUTO.NLU
Hnh 11. Thay i trng thi cc chn I/O.
Trong trng thi bnh thng (button khng c nhn), chn PB0 mc cao (do in tr
ko ln), b m khng hot ng, gi tr m khng thay i, by gi nu nhn button, chn PB0
c ni trc tip vi GND, chn ny s b ko xung mc thp, bng cch kim tra trng thi
chn PB0, nu PB0=0 ta tng gi tr m 1 n v. tng nh th c v hp l, tuy nhin nu p
dng th chng trnh s hot ng khng ng chc nng, khi bn nhn 1 ln gi, tr m c th
tng n c trm hoc khng kim sot c, hiu ng ny tng t khi bn nhn v gi 1 phm
trn bn phm my tnh, l do l v chng ta s dng phng php kim tra mc m, thi gian
qut ca chng trnh rt ngn so vi thi gian chng ta gi button. khc phc, chng ta dng
phng php kim tra cnh xung, ch khi no pht hin chn PB0 thay i t 1 xung 0 th mi
tng gi tr m 1 n v, kt qu l mi ln nhn button th gi tr m ch tng 1 (ngay c khi ta
nhn v gi button), thanh ghi R20 c s dng lu trng thi trc ca PINB (cng l
trng thi ca cc button).
Trong chng trnh, ti s dng 2 istruction mi l SBRC v SBRS kim tra trng thi
cc chn ca PORTB (button). SBRC Skip if Bit in Register is Clear, lnh ny s b qua 1 dng
lnh ngay sau (ch b qua 1 dng duy nht) nu 1 bit trong thanh ghi mc 0, SBRC Skip if
Bit in Register is Set- hot ng tng t SBRC nhng skip s xy ra nu bit trong thanh ghi
mc 1. Da vo y chng ta gii thch 4 dng sau:
SBRS R21,0
RCALL TANG
SBRS R21,1
RCALL GIAM
Dng 1 dng kim tra trng thi bit 0 trong R21 (ch R21 cha gi tr ca PINB), nu bit
ny bng 1 (set), tc chn PB0=1 hay button khng c nhn, th nhy b qua dng lnh tip
theo n dng 3. dng 3 chng trnh kim tra trng thi chn PB1 (button th 2). Quay li
dng 1, nu chng trnh kim tra pht hin chn PB0=0 (button th nht c nhn) th dng
lnh th 2 c thc thi, kt qu l chng trnh nhy n chng trnh con TANG.
TANG:
SBRS R20,0
RET
INC R25
RET
Dng u tin ca chng trnh con TANG l kim tra trng thi trc ca chn PB0
(c lu bit 0 trong thanh ghi R20), nu trng thi ny bng 0, ngha l khng c s chuyn t
1 xung 0 chn PB0, dng 2 (lnh RET) s c thc thi quay v chng trnh chnh. Nhng
nu PB0 trc bng 1, ngha l c s thay i t 1->0 chn ny, gi tr m s c tng
thm 1 nh INC R25, sau quay v chng trnh chnh.
Tm li mun tng gi tr m thm 1 n v cn tha mn 2 iu kin: chn PB0 hin ti =0
(button ang c nhn) v trng thi trc ca PB0 phi l 1 (trnh trng hp tng lin tc).
Phng php ny c th p dng cho rt nhiu trng hp m dng m xung.
Qu trnh gim gi tr m c hiu tng t, phn cn li ca v d ny bn c hy t
gii thch theo nhng gi trn.
AUTO.NLU
Chng ta kt thc bi 2 y, sau bi ny ti hy vng bn s nm c mt cch chung nht
cu trc v hot ng ca chip AVR, y l c s quan trng s dng hiu qu loi vi iu
khin ny. K t cc bi sau, chng ta s tm hiu hot ng v ng dng ca cc thit b ngoi vi
trn AVR nh Timer, chuyn i analog to digital (ADC), cc chun giao tip
Cc thc mc v ni dung v cch s dng ti liu, cc bn c th lin h tc gi qua email:
thanhtam.h@gmail.com hoc sim@mophong.org