Professional Documents
Culture Documents
HiQPdfEvaluation02/01/2013
CNGHCAVR
tmkim...
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.
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.
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.
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
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
Description
ADC_vect
SIG_ADC
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
SPI_STC_vect
SIG_SPI
SPM_RDY_vect
SIG_SPM_READY
TIMER0_OVF_vect
SIG_OVERFLOW0
Timer/Counter0 Overflow
TIMER1_CAPT_vect
SIG_INPUT_CAPTURE1
TIMER1_COMPA_vect
SIG_OUTPUT_COMPARE1A
TIMER1_COMPB_vect
SIG_OUTPUT_COMPARE1B
TIMER1_OVF_vect
SIG_OVERFLOW1
Timer/Counter1 Overflow
TIMER2_COMP_vect
SIG_OUTPUT_COMPARE2
TIMER2_OVF_vect
SIG_OVERFLOW2
Timer/Counter2 Overflow
TWI_vect
SIG_2WIRE_SERIAL
USART3_UDRE_vect
SIG_USART3_DATA
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
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
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