You are on page 1of 8

Quickly Create High Quality PDFs with HiQPdf

HiQPdfEvaluation02/01/2013

CNGHCAVR

tmkim...

...to become the AVR Master

Trangch

HcAVR

ngdngAVR

Htrphnmm

Htrphncng

Tholun

Thngtin

Bi3Ngtngoi
( 70 Votes )

Nidung

Ccbicnthamkhotrc

1. NgttrnAVR.

CutrcAVR.

2. Ngtngoi.

WinAVR.

3. VdngtngoiviC.

C cho AVR.

Downloadvd

MphngviProteus.

I.NgttrnAVR.
Interrupts,thngcgilngt,lmttnhiukhncpginbxl,yucubxltmngngtckhccc
hotnghintinhynmtnikhcthchinmtnhimvkhncpno,nhimvnygiltrnhphc
vngtisr(interruptserviceroutine).Saukhiktthcnhimvtrongisr,bmchngtrnhsctrvgitr
trcbxlquayvthchintipccnhimvcndangd.Nhvy,ngtcmcutinxlcaonht,
ngtthngcdngxlccskinbtngnhngkhngtnqunhiuthigian.Cctnhiudnnngtc
thxutphttccthitbbntrongchip(ngtbobmtimer/countertrn,ngtboqutrnhgidliubng
RS232ktthc)haydocctcnhnbnngoi(ngtboc1buttoncnhn,ngtboc1gidliuc
nhn).
Ngtlmttrong2kthutbtskincbnlhivng(Polling)vngt.Hytngtngbncnthitkmt
mchiukhinhonchnhthchinrtnhiunhimvbaogmnhnthngtintngidngquaccbuttonhay
keypad(hockeyboard),nhntnhiutcmbin,xlthngtin,xuttnhiuiukhin,hinththngtintrngthiln
ccLCD(bnhontoncthlmcviAVR),rrngtrongccnhimvnyvicnhnthngtinngidng
(start,stop,setup,change,)rthimxyra(soviccnhimvkhc)nhnglirtkhncp,cutinhngu.
NudngPollingnghalbncnvit1onchngtrnhchuynthmdtrngthicaccbutton(titmgion
chngtrnhlInput())vbnphichnonchngtrnhInput()nyvortnhiuvtrtrongchngtrnhchnh
trnhtrnghpbstlnhtngidng,iunythtlngphthigianthcthi.Giiphpchovnnyls
dngngt,bngcchktniccbuttonvingngtcachipvsdngchngtrnhInput()lmtrnhphcvngt
isrcangt,bnkhngcnphichnInput()tronglcangthcthivvthkhngtnthigianchon,Input()ch
cgikhingidngnhnccbutton.ltngsdngngt.
Hnh1minhhacchtchcngtthngthngtrongccchipAVR.Slngngttrnmidngchiplkhcnhau,
ngvimingtscvectorngt,vectorngtlccthanhghicachcnhcnhnghatrcnmtrongphn
ucabnhchngtrnh.Vdvectorngtngoi0(externalinterrupt0)cachipatmega8cachl0x001(theo
datasheettAtmel).Tronglcchngtrnhchnhangthcthi,nucmtsthayidnnngtxyrachnINT0
(chn4),bmchngtrnh(ProgramCounter)nhynach0x001,gisngaytiach0x001chngtact1
lnhRJMPnmttrnhphcvngt(IRS1chnghn),mtlnnabmchngtrnhnhynIRS1thcthi
trnhphcvngt,ktthcISR1,bmchngtrnhliquayvvtrtrctrongchngtrnhchnh,qutrnh
ngtktthc.Khngmangtnhbtbucnhngtikhuynbnnntchcchngtrnhngttheocchnytrnh
nhnglilinquannachchngtrnh.

Quickly Create High Quality PDFs with HiQPdf

HiQPdfEvaluation02/01/2013

Hnh1.Ngt.
Bng1tmttccvectorngtctrnchipatmega8,choccchipkhcbnhythamkhodatasheetbitthm.
Bng1ccvectorngtvResettrnchipAtmega8.

II.Ngtngoi(ExternalInterrupt).
Phnnytidnhgiithiuccbncchcitvsdngngtngoivylloingtduynhtclpvicc
thitbcachip,ccngtkhcthnggnvihotngca1thitbnonhTimer/Counter,giaotipnitip
USART,chuyniADCchngtaskhostcthkhitmhiuvhotngcaccthitbny.
Ngtngoilcchrthiuquthchingiaotipgiangidngvchip.Trnchipatmega8c2ngtngoic
tnlINT0vINT1tngng2chns4(PD2)vs5(PD3).NhticptrongbiAVR2,khilmvicvicc
thitbngoivicaAVR,hunhchngtachthaotctrnccthanhghichcnngcbitSFR(SpecialFunction
Registers)trnvngnhIO,mithitbbaogmmttphpccthanhghiiukhin,trngthi,ngtkhcnhau,iu
nyngnghachngtaphinhttcccthanhghicaAVR.Lcnydatasheetphthuytcdng,bnphinhanh
chngdownloadfiledatasheetcachipmnhangsdng,crtnhiunidownloadnhtiwww.atmel.com hay
trncctrangwebchuyncungcpICdatasheetminph(www.alldatasheet.coml1vd).Quayvvingtngoi,c
3thanhghilinquannngtngoilMCUCR,GICRvGIFR.Cthccthanhghictrnhbybndi.
ThanhghiiukhinMCUMCUCR(MCUControlRegister)lthanhghixclpchngtchongtngoi,
quansthnh2trckhitmhiuthanhghiny.

Quickly Create High Quality PDFs with HiQPdf

HiQPdfEvaluation02/01/2013
Hnh2.Ktningtngoichoatmega8.
GischngtaktniccngtngoitrnAVRmega8nhphatrihnh2,ccbuttondngtoraccngt.C4
khnng(tmgilccMODES)cthxyrakhichngtanhnvthccbutton.Nukhngnhn,trngthiccchn
INTlHIGHdointrkoln,khivanhn1button,scchuyntrngthitHIGHsangLOW,chngtagil
cnhxungFalling Edge,khibuttoncnhnvgi,trngthiccchnINTcxcnhlLOWvcuicng
khithccbutton,trngthichuyntLOWsangHIGH,gilcnhlnRising Edge.Trongnhngtrnghpc
th,1trong4MODEStrnuhuch,vdtrongccngdngmxung(mencodercaservomotorchnghn)
th2MODEcnhphicdng.ThanhghiMCUCRchaccbitschophpchngtachn1trong4MODEtrn
choccngtngoi.DiylcutrcthanhghiMCUCRctrchratdatasheetcachipatmega8.

MCUCRlmtthanhghi8bitnhngivihotngngtngoi,chngtachquantmn4bitthpcan(4bit
caodngchoPowermanagervSleepMode).BnbitthplccbitInterruptSenseControl(ISC)trong2bit
ISC11:ISC10dngchoINT1v2bitISC01:ISC00dngchoINT0.Hynhnvobngtmttbndibitchc
nngcaccbittrn,ylbngchntrca2bitISC11,ISC10.BngchntrchoccbitISC01,ISC00honton
tngt.
Bng2:INT1SenseControl

ThtddnghiuchcnngcaccbitSenseControl,vdbnmunsetchoINT1lngtcnhxung(Falling
Edge)trongkhiINT0lngtcnhln(RisingEdge),hytdnglnhMCUCR=0x0B(0x0B=00001011nhphn)
trongchngtrnhcabn.
ThanhghiiukhinngtchungGICR(GeneralInterruptControlRegister)(chtrnccchipAVRc,nhcc
chipAT90Sxxxx,thanhghinyctnlthanhghimtnngtthngthngGIMSK,bnthamkhothmdatasheetca
ccchipnynucnsdngn).GICRcngl1thanhghi8bitnhngchc2bitcao(bit6vbit7)lcsdng
choiukhinngt,cutrcthanhghinhbndi(trchdatasheet).

Bit7INT1gilbitchophpngt1(InterruptEnable),setbitnybng1nghabnchophpngtINT1hotng,
tngt,bitINT0iukhinngtINT0.
ThanhghicngtchungGIFR(GeneralInterruptFlagRegister)c2bitINTF1vINTF0lccbittrngthi(hay
bitcFlag)ca2ngtINT1vINT0.Nuc1skinngtphhpxyratrnchnINT1,bitINTF1ctng
setbng1(tngtchotrnghpcaINTF0),chngtacthsdngccbitnynhnraccngt,tuynhiniu
nylkhngcnthitnuchngtachophpngttng,vvythanhghinythngkhngcquantmkhilp
trnhngtngoi.CutrcthanhghiGIFRctrnhbytronghnhngaybndi.

Quickly Create High Quality PDFs with HiQPdf

Saukhixclpccbitsnsngchoccngtngoi,vicsaucngchngtacnlmlsetbitI,tcbitcho
HiQPdfEvaluation02/01/2013
phpngttoncc,trongthanhghitrngthichungcachip(thanhghiSREG,xemlibiAVR2). Mtchkhcl
vccchnPD2,PD3lccchnngtnnbnphisetccchnnylInput(setthanhghiDDRD).Qutrnh
thitlpngtngoictrnhbytronghnh10.

Hnh3.Thitlpngtngoi.
NgtngoiviASM: DiytitrnhbycchvitchngtrnhsdngngtngoibngngnngASM,i
viccngtkhcbnchcnthmccDIRECTIVEnhvccvectorngttngngvvitchngtrnhphcv
ngttngng.
List1.NgtviASM.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

.CSEG
.INCLUDE "M8DEF.INC"
.ORG 0x000 nhvvtrutin
RJMP BATDAU
.ORG 0x001nhvvectorngtngoi0INT0(xembngvector)
RJMP INT0_ISR NhynINT0_ISRnucngtINT0xyra
.ORG 0x002 nhvvectorngtngoi1INT1(xembngvector)
RJMP INT1_ISR NhynINT1_ISRnucngtINT1xyra
Tngt,nhvccvectorngtkhcy..
..
.ORG 0x020 nhvchngtrnhchnh
BATDAU:
khitoStack
LDI R16, HIGH(RAMEND)
LDI R17, LOW(RAMEND)
OUT SPH, R16
OUT SPL, R17
setchnPD2vPD3nhccchninput
LDI R16, 0Bxxxx00xx xltrngthidobntchn,0hoc1
OUT DDRD, R16
PD2vPD3linput
LDI R16, 0Bxxxx11xx xltrngthidobntchn,0hoc1
OUT PORTD, R16
mcintrkolnchoPD2,PD3

khingngt
LDI R16, $0B $0B=00001011,INT1:ngtcnhxung,INT0:ngtcnhln
OUT MCUCR, R16 xutgitriukhinrathanhghiMCUCR
LDI R16, $C0
$C0=11000000:EnableINT1vINT0
OUT GICR, R16 xutgitriukhinrathanhghiGICR
SEI setbitchophpngttoncc
Chngtrnhchnh
MAIN:
cccngvicmchngtrnhchnhcnthchin
.
RJMP MAIN

Quickly Create High Quality PDFs with HiQPdf

37
38
39
40
41
42
43
44
45
46
47

vylnhnghatrnhphcvngtINT0_ISR
HiQPdfEvaluation02/01/2013
INT0_ISR:
cccngviccnthchinkhicngt
.
RETIphidnglnhRETIquayvchngtrnhchnh
vylnhnghatrnhphcvngtINT1_ISR
INT1_ISR:
cccngviccnthchinkhicngt
.
RETI phidnglnhRETIquayvchngtrnhchnh

Bnthyccccngtcnhvnmgiavtr0x0000,khimikhing,tivtr0x000llnhRJMP
BATDAU,nhthcclnhRJMPticcvectorngtvccISRukhngcthchin,chngchcthchin
mtcchtngkhicngt.
NgtngoiviC:Avrlibchtrmtthvinhmchongtkhhonho,sdngngttrongchngtrnhvit
bngC(avrgcc)bnchcnincludefileinterrupt.hnmtrongthmcconavrlxong.fileheaderinterrupt.hcha
nhnghacchmvphngthcphcvchovittrnhphcvngt,ccvectorngtkhngcnhnghatrongfile
nymtrongfileiom8.h(choatmega8).Nubnvtnhtmthy1chngtrnhngtnokhngincludefile
interrupt.hmincludefilesignal.hthbnngngcnhin,lcchvitctrongavrgcc,thtrabnhontoncth
sdngcchvitcvccphinbnmicaavrlibc(icngviccbnWinAVRmi)vnhtrcchvitny
nhngkhngkhuynkhchbndng.
TrongC,cctrnhphcvngtcdnglISR(vector_name).Trongccphinbnctrnhphcvngtctn
SIGNAL(vector_name),nhngcngnhfileheadersignal.h,cchvitnyvnchtrtrongphinbnminhng
khngckhuynkhch.
List2.NgtviC.
1
2
3
4
5
6

#include <avr/interrupt.h>
ISR (vector_name)
{
//user code here
}

Trongvector_nameltncaccvectorngtnhnghasnavrlibc,ISRltnbtbuc,bnkhngcdng
cctnkhcty(nhngcthdngSIGNALnhtrnhbytrn).cbit,bncthtISRtrchocsau
chngtrnhchnhukhngnhhngvthtra,ckhnhiucngoncthchinkhibngiISR(nhng
bnkhngthyvcngkhngcnquantm).ISRlunctrnhbindchtngoivngvectorngtnhcch
chngtathchintrongASM,nhthmtchngtrnhsdngnhiuloingtsphicslngtrnhISRtngng
nhngvivector_namekhcnhau,mikhicngtxyra,tythucvogitrcavector_namem1trongcctrnh
ISRcthcthi.iviccvector_name,bitcvector_namechomiloingt,bncnthamkhotiliu
avrlibcmanual.Bng10tmttccvector_namecamtsngtthngdngtrnatmega8,bnchrngcc
vector_nametrongavrlibccnhnghartkhcnhauchotngloichip,bnnhtthitphisdngtiliuavrlibc
manualbitchnhxcccvector_namecholoichipmbnangdng.
Bng3:vector_namechoatmega8.
Vector name

Old vector name

Description

ADC_vect

SIG_ADC

ADC Conversion Complete

ANA_COMP_vect

SIG_COMPARATOR

Analog Comparator

EE_RDY_vect

SIG_EEPROM_READY

EEPROM Ready

INT0_vect

SIG_INTERRUPT0

External Interrupt 0

INT1_vect

SIG_INTERRUPT1

External Interrupt Request 1

SPI_STC_vect

SIG_SPI

Serial Transfer Complete

SPM_RDY_vect

SIG_SPM_READY

Store Program Memory Ready

TIMER0_OVF_vect

SIG_OVERFLOW0

Timer/Counter0 Overflow

Quickly Create High Quality PDFs with HiQPdf

TIMER1_CAPT_vect

SIG_INPUT_CAPTURE1

Timer/Counter Capture Event

TIMER1_COMPA_vect

SIG_OUTPUT_COMPARE1A

Timer/Counter1 Compare Match A

TIMER1_COMPB_vect

SIG_OUTPUT_COMPARE1B

Timer/Counter1 Compare MatchB

TIMER1_OVF_vect

SIG_OVERFLOW1

Timer/Counter1 Overflow

TIMER2_COMP_vect

SIG_OUTPUT_COMPARE2

Timer/Counter2 Compare Match

TIMER2_OVF_vect

SIG_OVERFLOW2

Timer/Counter2 Overflow

TWI_vect

SIG_2WIRE_SERIAL

2-wire Serial Interface

USART3_UDRE_vect

SIG_USART3_DATA

USART3 Data register Empty

HiQPdfEvaluation02/01/2013

III.VdngtngoiviC.
thchinvdsdngngtngoibngC,tisvitlichngtrnhvdcabi"cutrcAVR "nhngbng
ngnngCvsdngngt.TrongchngtrnhvdcabiAVR2,chngtathchinvicmlnvmxung
dng2button,chngtasvnthchintrntngnynhngcchtthayitrongktni,trchtbnv1mch
inmphngtrongProteusnhhnh4.

Hnh4.Mchinmphngngt.
KtnibuttonmlnvingtINT0,buttonmxungviINT1,PORTBcchnlmPORTxut.Hychy
Programmer Notepad,to1ProjectmitnAVR2INT,typeoncodebndivo1filenewvluvitnmain.c,
addfilenyvoProjectcabn,sautomtMakefilechoProject.
List3.vdngtngoibngC.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
volatile int8_t val=0; //khaibo1binval8bit,cduvgitrkhitobng0.
int main(void){
DDRD=0x00; //khaiboPORTDlInputsdng2chnngt.
PORTD=0xFF; //sdngintrnikoln.
DDRB=0xFF; //PORTBlOutputxutLED7on
MCUCR|=(1<<ISC11)|(1<<ISC01);//c2ngtlngtcnhxung
GICR |=(1<<INT1)|(1<<INT0); //chophp2ngthotng
sei();
//setbitIchophpngttoncc
DDRC=0xFF;
while (1){
PORTC++;
_delay_loop_2(60000);
}
return 0;
}

//PORTClOutput
//vnglpvtn
//qutPORTC

Quickly Create High Quality PDFs with HiQPdf

24
25
26
27
28
29
30
31
32
33
34
35
36

//TrnhphcvngtcaINT0
ISR(INT0_vect){
val++;
if (val>9) val=0;
PORTB=val;
}

HiQPdfEvaluation02/01/2013
//nucngtINT0xyra,tngvalthm1
//giihnkhngvtqu9

//TrnhphcvngtcaINT1
ISR(INT1_vect){
val--;
//nucngtINT1xyra,gimvali1
if (val<0) val=9;
//giihnkhngnhhn0
PORTB=val;
}

Cloncodenykhdhiunuccbntheoditubihc,tichgiithchnhngntcbnvmi.
tnglchngtasdng1bintm8bit,cdulugitrm,tnbinval,mikhicngttrnchnINT0,tng
val1nvvngclikhicngttrnINT1,gimvali1,lnidungca2trnhphcvngt.Trongchng
trnhchnh,trchtchngtathchinvicxclphotngcho2ngt,sauachngtrnhvo1vnglpv
tnwhile(1),PORTCcdngkimtrarngchngtrnhtrongvnglpvtnvnanghotng.Clphnkh
hiunhttrongoncodelcchmtidngkhaibocho2thanhghiiukhinngtMCUCRvGICR.
NuxemlibngtmttcctontcaC,tont<<cgiltontdchtridngtrndngnhphnca
cccons,nubnthyx=5<<3nghaldchccbitnhphnca5sangtri3vtrvgnchox,nhmtnhsau:

Bnthytonbccbitca5dchsangtri3vtrvgitrcasmithuclx=40,ch40=5x8=5x2^3.
HynhnculnhMCUCR|=(1<<ISC11)|(1<<ISC01),githbnhiu(1<<ISC11)nghaldchs1sangtriISC11
vtr,v(1<<ISC01)ldchs1sangtriISC01vtr,nhngISC11vISC01uravgitrcachnglbaonhiu?
Bnch,khibnincludefileio.hthfileiom8.hcchnvo,vtrongfilenychakhaiboachccthanh
ghicachipatmega8,cctnbitcngckhaibosntrongfileny,nubnmfileiom8.h(thngnmtrongth
mc~\WinAVR\avr\include\avr)bng1chngtrnhtexteditornhnotepad,dngchcnngfindbnsthyccdng
nhnghanhsau:
/* MCUCR */
#define SE
#define SM2
#define SM1
#define SM0
#define ISC11
#define ISC10
#define ISC01
#define ISC00

7
6
5
4
3
2
1
0

ylnhnghavtrccbittrongthanhghiMCUCR,vylr,ISC11=3,ISC01=1,do:(1<<ISC11)
tngng(1<<3)=00001000(Binary)v(1<<ISC01)=00000010,bnhytngtngrngbnmangs1n
ccvtrcaISC11vISC01trongthanhghiMCUCR.ByginlttontORbitwise|.
(1<<ISC11)
= 00001000
(1<<ISC01)
= 00000010
-------------------------------------------------(1<<ISC11)|(1<<ISC01) = 00001010
GngitrnychoMCUCR,ichiuvibngccgitrcaccbitISC(bng9)bnsthychngtaangset
cho2ngtlfallingedge.iucuicngcaculnhsetMCUCRlcchrtgnculnhMCUCR|=(1<<ISC11)|
(1<<ISC01)thcchtlMCUCR=MCUCR|((1<<ISC11)|(1<<ISC01)),ylcchsetmtsbittrongmtthanhghi
mkhngmunlmnhhngnccbitkhc(nhngbnphithtcnthnvicchlmnyvcthsphntc
dngnubnkhngnmr),bncthgntrctipMCUCR=(1<<ISC11)|(1<<ISC01),haynhanhhn

Quickly Create High Quality PDFs with HiQPdf

MCUCR=0x0A(0x0A=00001010).Vyldonokhintibin1culnhgnnginthnhmtbitonkhhiu,
HiQPdfEvaluation02/01/2013
cutrlichnhltnhtngqut.TrongccchipAVRkhcnhau,vtrccbittrongccthanhghilrtkhcnhau,cu
lnhMCUCR=0x0Angchoatmega8nhngkhngpdngcchoccchipkhctrongkhiculnhMCUCR=
(1<<ISC11)|(1<<ISC01)thhotngtt,mtldokhclcchvitgintipnygipngikhc(haychnhbnsau
ny)khiccodecthddnghiucngivit
Tinghbnquhiudnglnhtiptheo,GICR|=(1<<INT1)|(1<<INT0).Tidnggiithchoncodey
vcngdngbiAVR3,bnhythctpbngcchvitlioncodetrnbngASM.

[Top]

Copyright2013BnquynthucvCnghcAVR(AVRtutorial)TiliuhclptrnhAVRbngtingVit.
AVR is a registered trademark of Atmel Corporation
This site is founded by Thanhtam Ho

You might also like