Professional Documents
Culture Documents
Lap Trinh Cho PIc Bang CSS PDF
Lap Trinh Cho PIc Bang CSS PDF
Lap Trinh Cho PIc Bang CSS PDF
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
1/32
TUT01.01.PVN
Gin:
www.picvietnam.com
Nidung:
LptrnhchoPICbngCCS ver3.242
MICROSOFTWORD
Tmtt:
TiliuhngdnsdngtrnhbindchCCScholptrnhPIC.TmhiutngquanvCCS
vcchtomtProjecttrongCCS.
ChngtrnhmuchoPIC16F877
Ccvdlptrnhngin:qutLED,ADC,RS232
1.
TngquanvCCS
1.1.
VsaotasdungCCS?
Sraicamtloiviiukhinikmvivicphttrinphnmmngdngcho
viclptrnhchoconviiukhin.Viiukhinchhiuvlmvicvihaicons0
v1.BanuviclptrnhchoVKllmvicvidycccons0v1.Saunykhi
kintrccaViiukhinngycngphctp,slungthanhghilnhnhiuln,viclp
trnhvidyccs0v1khngcnphhpna,ihiraimtngnngmithay
th.VngnnglptrnhAssembly.ytakhngninhiunAssmebly.Saunykhi
ngnngCrai,nhucudngngnngCthaychoASMtrongvicmtcclnh
lptrnhchoViiukhinmtcchngngnvdhiuhndnnsraica
nhiuchngtrnhsonthovbindchCchoViiukhin:KeilC,HTPIC,MikroC,
CCS
Ti chn CCS cho bi gii thiu ny v CCS l mt cng c lp trnh C mnh cho Vi
iu khin PIC. Nhng u v nhc im ca CCS s c cp n trong cc phn
diy.
1.2.
GiithiuvCCS?
CCSltrnhbindchlptrnhngnngCchoViiukhinPICcahngMicrochip.
Chngtrnhlstchhpca3trnhbindichringbitcho3dngPICkhcnhau
l:
PCBchodngPIC12bitopcodes
PCMchodngPIC14bitopcodes
PCHchodngPIC16v18bit
Ttc3trnhbindichnyuctchhplivotrongmtchngtrnhbaogmc
trnhsonthovbindchlCCS,phinbnminhtlPCWHCompilerVer3.227
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
2/32
GingnhnhiutrnhbindichCkhcchoPIC,CCSgipchongisdngnmbt
nhanh c vi iu khin PIC v s dng PIC trong cc d n. Cc chng trnh diu
khinscthchinnhanhchngvthiuqucaothngquavicsdngngn
nglptrnhcpcaoNgnngC
Tiliuhngdnsdngcrtnhiu,nhngchititnhtchnhlbnHelpikm
theophnmm(tiliuTingAnh).Trongbntrgipnhsnxutmtrtnhiuv
hng,bin,chthtinxal,cutrcccculnhtrongchngtrnh,cchmtosncho
ngisdngNgoiravTingVitcngcbndchcatcgiTrnXunTrng,
SVK2001DHBKHCM.TiliunydchtrncsbnHelpcaCCS,tuyrngchay
nhngylmttiliuhay,nubntmhiuvPICvCCSthnntmtiliuny
vc.achDownloadtiliu:www.picvietnam.com>McnivCCS.
2.
ToPROJECTutintrongCCS
tomtProjecttrongCCScnhiucch,cthdngProjectWizard,ManualCreat,
haynginltomtFilesmivthmvocckhaibobanucnthitvbt
buc.
Diystrnhbycchtomtprojecthpltheoc3phngphp.Mtiuta
cnchkhitomtProjectl:khitobtcmtProjectnomithtanntomt
th mc mi vi tn lin quan n Project ta nh lm, ri lu cc files vo . Khi lp
trnhvbindch,CCSstorartnhiufileskhcnhau,donuchungccProject
trognmtthmcsrtmtthigiantrongvictmkimsauny.ycnglquytc
chungkhitalmvicvibtkphnmmno,thitkmchhaylptrnh.
VicutinbncnlmlkhingmytnhvbtchngtrnhPICCCompiler.
2.1.
TomtPROJECTsdngPICWizard
TrchtbnkhingchngtrnhlmvicPICCCompiler.Tgiaodinchng
trnhbndichutchnProject>New>PICWizardnhnnttrichutchn.
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
3/32
Saukhinhnchut,mtcashinrayucubannhptnFilescnto.Bntomt
thmcmi,vothmcvlutnfilescntotiy.
Hnh2.0:CasSaveAs
Nhvylxongbcutin.SaukhinhnntSave,mtcasNewProjecthinra.
TrongcasnybaogmrtnhiuTab,miTabmtvmtvitnhnngcaconPIC.
TaschntnhnngsdngticcTabtngng.
DiystrnhbynghatngmcchntrongmiTab.Ccmcchnnychnh
lcpncctnhnngcamtconPIC,tytheotngloimscccTabtngng.
ivitngdnkhcnhau,khitacnsdngtnhnngnocaconPICthtaschn
mc . Tng cng c 13 Tab ta la chn. Ti gii thiu nhng Tab chnh thng hay
csdng.
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
4/32
2.1.1.
TabGeneral
Hnh2.1:TabGeneral
2.1.2.
Device:LitkdanhschccloiPIC12F,16F,18FTaschntnViiukhin
PICmtasdngtrongdn.LyvdchnPIC16F877A
OscilatorFrequency:Tnsthchanhtasdng,chn20MHz(tytngloi)
Fuses:ThitlpccbitConfignh:Chdaong(HS,RC,Internal),chbo
vCode,Brownoutdetected
ChnkiucontrRAMl16bithay8bit
TabCommunications
Tab Communications lit k cc giao tip ni tip m mt con PIC h tr, thng l
RS232vI2C,cngvicclachnthitlpchhotngchotngloigiaotip.
GiaotipRS232
MimtViiukhinPIChtrmtcngtruynthngRS232chun.Tabny
chophptalachnchnRx,Tx,tcBaud,Databit,BitParity
GiaotipI2C
s dng I2C ta tch vo nt chn Use I2C, khi ta c cc la chn: Chn
SDA,SCL,Tctruyn(FastSlow),chMasterhaySlave,achchoSalve.
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
5/32
Hnh2.2:TabCommunications
2.1.3.
TabSPIandLCD
TabnylitkchongidngcclachnivigiaotipnitipSPI,chun
giaotiptccaomPIChtrvphncng.ChkhitadngI2Cthkhng
thdngSPIvngcli.cthsdngchaigiaotipnycngmtlcth
bucmttrong2giaotipphilptrnhbngphnmm(gingnhkhidngI2C
choccchipAT8051,khngchtrphncngSSP).
PhncuhnhchoLCDdnhchoccchpdng18Fv30F.
Hnh2.3:TabSPIandLCD
2.1.4.
TabTimer
Litkccbm/nhthimccconPICdngMidrangec:Timer0,timer1,
timer2,WDT
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
6/32
Hnh2.4:TabTimer
2.1.5.
TabAnalog
Lit k cc la chn cho b chuyn i tng t/s (ADC) ca PIC. Ty vo
tngICcthmccclachnkhcnhau,baogm:
Lachncngvotngt
Chnchninplymu(Vref)
Chnphngii:8bit=0~255hay10bit=0~1023
NgunxungnghchobADC(tronghayngoi),tmtacctc
lymu,thngtachnlinternal26us.
KhikhngsdngbADCtachnnone
Hnh2.5:TabAnalog
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
7/32
2.1.6.
TabOther
TabnychophptathitlpccthngschoccbCapture/Comparator/PWM.
CaptureBtgi
Chnbtgixungtheosndng(risingedge)haysnm(fallingedge)ca
xungvo
Chn btgi sau1,4 hay16 xung(copy gitr caTimerX vo thanh ghi lutr
CCCPxsau1,4hay16xung).
CompareSosnh
Taccclachnthchinlnhkhixayrabngnhaugia2itngsosnhl
gitrcaTimer1vigitrlutrongthanhghisosnh.Baogm:
o Thchinngtvthitlpmc0
o Thchinngtvthitlpmc1
o ThchinngtnhngkhngthayitrngthicachnPIC.
o aTimer1v0nhngkhngthayitrngthichn.
PWMiuchrngxung
Lachnvtnsxungravdutycycle.Tacthlachnsnhaytchntns,
ttnhintnsraphinmtrongmtkhongnhtnh.
ComparatorSosnhinp
LachnmcinpsosnhVref.Crtnhiumcinptalachn.Ngoi
ratacncthlachnchouvocaccbsosnh.
Hnh2.6:TabOther
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
8/32
2.1.7. TabInterruptsvTabDriver
Tab Interrupts cho php ta la chn ngun ngt m ta mun s dng. Ty vo tng
loi PIC m s lng ngun ngt khc nhau, bao gm: ngt ngoi 0(INT0), ngt RS232,
ngtTimer,ngtI2CSPI,ngtonchangePORTB.v.v
Tab Drivers c dng la chn nhng ngoi vi m trnh dch h tr cc hm
giaotip.ylnhngngoivimtasktniviPIC,trongccICmCCShtr,ng
ch l cc loi EEPROM nh 2404, 2416, 2432, 9346, 9356Ngoi ra cn c IC RAM
PCF8570,ICthigianthcDS1302,Keypad3x4,LCD,ADCChitittacthxemtrong
thmcDrivercachngtrnh:\...\PICC\Drivers
Hnh2.7:TabInterrupts
Hnh2.8:TabDriver
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
9/32
Chuong_trinh_mau.c
#includeD:\1PICproject\chuongtrinhtest.HEX.h
#int_EXT
EXT_isr()
{
//Codehere
}
VoidChuong_trinh_con()
{
//Codehere
}
voidmain()
{
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_EXT);
enable_interrupts(INT_TBE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
//Enteryourcodehere
}
Chuong_trinh_mau.h
#include<16F877A.h>
#deviceadc=8
#FUSESNOWDT,HS,NOPUT,NOPROTECT,NODEBUG,
#usedelay(clock=20000000)
#defineSRAM_SCLPIN_C3
#defineSRAM_SDAPIN_C4
#users232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
10/32
2.2.
MuchngtrnhchuncholptrnhCCS
Phn trn ta tm hiu cch to mt Project trong CCS, tuy nhin theo cch mt
kh nhiu thi gian, mt khc mi ngi lp trnh s to ra nhng form ti liu theo cch
ringkhcnhau,khngngnht.Tiliukhngcchunhasgymtskhkhn
chongic,ngiccthkhnghiuhtnhnggmngilptrnhmundint.
Vimcchara mt formti liuchuncho vic lp trnh bngCCS, quatham kho
bnmucholptrnhbngASMcaanhFalleaftrndinnWWW.PICVIETNAM.COM
tiaraymtformtiliuchovicvitlptrnhbngCCS.ikmvnbnnycnc
ccfilesngunchovnbnmu,baogmfileschoPIC16F877A,16F876A,16F88.Vsaukhi
lptrnhbnchviccopytiliunyvothmcchaProjectcabn,saitnfiles.
KhicnthayinidungcuhnhchoPICbnchivicthamkhoquaPICWizard,xem
codevcopyavoProject.
Mtnidungchngtrnh.
#include16f877a.h:ikmchngtrnhdch,chakhaibovccthanhghitrong
miconPIC,dngchoviccuhnhchoPIC.
#includedef_877a.h:Filesdongilptrnhtora,chakhaibovccthanhghi
trong PIC gip cho vic lp trnh c d dang hn v d ta co th gn PORTB =
0xAA(chititfilesnystrnhbytrongphndiy)
#device*=16ADC=10:Khaibodngcontr8hay16bit,bADCl8hay10bit
#FUSESNOWDT,HS:KhaibovcuhnhchoPIC
#usedelay(clock=20000000):Tnsthchanhsdng
#users232(baud=9600,):KhaibochogiaotipnitipRS232
#usei2c(master,SDA=PIN_C4,):KhaibodngI2C,chhotng
#include<tn_file.c>:KhaiboccfilesthvincsdngvdLCD_lib_4bit.c
#INT_xxx:Khaiboachchngtrnhphcvngt
Voidtn_chng_trnh(tn_bin){}:Chngtrnhchnhhaychngtrnhcon
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
11/32
ChngtrnhmuchoPIC16F877A
//========================================================
//Tenchuongtrinh :MachtestdenLED_1
//Nguoithuchien :Falleaf
//Ngaythuchien
:23/05/2005
//Phienban :1.0
//Motaphancung :DungPIC16F877Athachanh20MHz
//
:LEDgiaotiepvoiPORTB
//
:CucamcuaLEDnoivoiGND
//
:RB0RB7lacacchanoutput
//
//Ngayhoanthanh :23/05/2005
//Ngaykiemtra
:23/05/2005
//Nguoikiemtra
:DoanHiep
//
//Chuthich :Motacacdiemkhacnhaucuacacphienbankhacnhau
//
:hoaccacchuthichkhac
//
:vd,dungchedoPowerOnReset,PORTB=00000000
//
:hoac,chuongtrinhvietchoPICTutorial
//
:hoac,chuongtrinhnayhoantoanmienphivacothedungcho
//
:moimucdichkhacnhau
//========================================================
#include<16f877a.h>
#include<def_877a.h>
#device*=16ADC=8
#FUSESNOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP
#usedelay(clock=20000000)
#users232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9)
#usei2c(Master,Fast,sda=PIN_B1,scl=PIN_B4)
#int_xxx//Khaibaochuongtrinhngat
xxx_isr(){
//Codehere
}
voidTen_chuong_trinh_con(Ten_Bien){
//Codehere
}
voidmain(){
//Entercodehere!
}
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
12/32
ChngtrnhmuchoPIC16F876A
//========================================================
//Tenchuongtrinh :MachtestdenLED_1
//Nguoithuchien :Falleaf
//Ngaythuchien
:23/05/2005
//Phienban :1.0
//Motaphancung :DungPIC16F876Athachanh20MHz
//
:LEDgiaotiepvoiPORTB
//
:CucamcuaLEDnoivoiGND
//
:RB0RB7lacacchanoutput
//
//Ngayhoanthanh :23/05/2005
//Ngaykiemtra
:23/05/2005
//Nguoikiemtra
:DoanHiep
//
//Chuthich :Motacacdiemkhacnhaucuacacphienbankhacnhau
//
:hoaccacchuthichkhac
//
:vd,dungchedoPowerOnReset,PORTB=00000000
//
:hoac,chuongtrinhvietchoPICTutorial
//
:hoac,chuongtrinhnayhoantoanmienphivacothedungcho
//
:moimucdichkhacnhau
//========================================================
#include<16f876a.h>
#include<def_876a.h>
#device*=16ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD,
NOWRT
#usedelay(clock=20000000)
#users232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9)
#usei2c(Master,Fast,sda=PIN_B1,scl=PIN_B4)
#int_xxx//Khaibaochuongtrinhngat
xxx_isr(){
//Codehere
}
voidTen_chuong_trinh_con(Ten_Bien){
//Codehere
}
voidmain(){
//Entercodehere!
}
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
13/32
ChngtrnhmuchoPIC16F88
//========================================================A
//Tenchuongtrinh :MachtestdenLED_1
//Nguoithuchien :Falleaf
//Ngaythuchien
:23/05/2005
//Phienban :1.0
//Motaphancung :DungPIC16F88thachanh20MHz
//
:LEDgiaotiepvoiPORTB
//
:CucamcuaLEDnoivoiGND
//
:RB0RB7lacacchanoutput
//
//Ngayhoanthanh :23/05/2005
//Ngaykiemtra
:23/05/2005
//Nguoikiemtra
:DoanHiep
//
//Chuthich :Motacacdiemkhacnhaucuacacphienbankhacnhau
//
:hoaccacchuthichkhac
//
:vd,dungchedoPowerOnReset,PORTB=00000000
//
:hoac,chuongtrinhvietchoPICTutorial
//
:hoac,chuongtrinhnayhoantoanmienphivacothedungcho
//
:moimucdichkhacnhau
//========================================================
#include<16f88.h>
#include<def_88.h>
#device*=16ADC=8
#FUSESNOWDT,HS,NOPUT,MCLR,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG
#usedelay(clock=20000000)
#users232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9)
#usei2c(Master,Fast,sda=PIN_B1,scl=PIN_B4)
#int_xxx//Khaibaochuongtrinhngat
xxx_isr(){
//Codehere
}
voidTen_chuong_trinh_con(Bien){
//Codehere
}
voidmain(){
//Entercodehere!
}
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
14/32
3.
MtsvdcholptrnhCCS
VimctiugipngicnhanhchnglmbtccchlptrnhCchoPICthng
quachngtrnhdchCCS.DiytigiithiumtvibilptrnhnginchoPIC,
ccbimunydatheotiliututorialcaNigelnhqutLED,LED7thanh,LCD,bn
phm,cchdngccgiaotipcaPICgiaotipvithitbngoivinhRealTimeIC,
ADC,EEPROM
Yucuvphncngtithiucncthchnh:
PIC16F877A(hoc16F876Ahay16F88)=50K(TtnhtlPIC16F877A)
1Boardcmlinhkin(tithiu)=40K
Thchanh20MHz,t22pF,10uF,tr10K,4K7,330,ntbm=10K
10LEDnxanhhay,4LED7thanh(loi4LEDlinmt)=15K
MAX232giaotipmytnh()=10K
Tngcngl:125K
Phncngmrng
LCD1602Aloi2dng16kt(NucLCD2002cngtt)=65K(MinhHcbn)
RealTimeICDS1307hayDS1337=25K(cthxinsamplecaMaximIC)
EEPROMAT24Cxx
ADC/DACICloi12bittrnn(ADC10bitthPICcngc)
SensornhitLM335hayLM35=13K
ngcbc,ngcmtchiu
Mcchchnhcatitrongvicgiithiuccvddiylnhmgipmingi
nhanhchngnmckthutlptrnhbngCCS,thngquaccvdmingis
hiucchmcaCCS,cchsdngtrongtngngdngcth.Vchititcamihm
tiskhngtrnhbyktiy,bitrtacthxemtrongphnTrgipcaCCShay
tiliucatcgiTrnXunTrng,trongnikhy.Tinhnmnhmt
iukhimingitmhiuvPICvCCSlhytmnhtmhiulchnh,tvic
nghincutiliu,tmtiliuchonthitkmchvvitchngtrnh.Nhnggti
ychlcbn,cnvicphttrin,sdnghtimmnhcaPICvCCSlphami
ngi.Chcthnhcng!
Mtiuchlttcccmchinvcodetitrnhbydiytiulp
mchthttrnbocmvchytt.
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
15/32
3.1.
ChngtrnhnhpnhyLED
NhpnhyLEDcthcoilmtchngtrnhKinhin.Mingikhibttayvo
hcVKthbihcutinllmnhpnhymthayviconLEDtrnchnVK.Trong
tiliunyticngchnbitpbtu.Bnthnticngvy,bihcutinl
nhyLEDvqutLED7thanh
Mcchcabinhtrnni:Lmnhpnhy8LEDtiPORTBcaPIC16F877A,
thigiantrdongilptrnhnhtrc.
Nhngiuthucquabihc:
VmtmchinthonchnhdngOrCad9.2
TomtDntrongCCS(cinynitrongphn2)
TpnhnghaccthanhghicaPICdongidngtora
ThitlpchvorachomtcngcaPIC
Sdnghmtotrthigian
Diylsphncng.TrongsccLEDcmcchunglndngngun
thngquaintr.Giatrintrthayitrongkhong100chon560tytheo
sngcaLEDmtamunvcngmbodngquamiLEDkhngqu20mAkhi
nguncpl5V.NhvylmsngLEDtachvicamc0raccchnPICvngc
litttaamc1.
VCC
R1
D1
R2
D2
R3
R
D3
LED
R4
R
D4
LED
R5
R
D5
LED
R6
R
D6
LED
R7
R
D7
LED
R8
R
D8
LED
LED
220
LED
RB0
RB1
RB2
RB3
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
RB4
RB5
RB6
33
34
35
36
37
38
39
40
RB7
2
3
4
5
6
7
OSC1
OSC2
R9
RESET
VCC
OSC1
Y1
OSC2
RESET
13
14
1
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
Cong tac
20MHz
C1
22p
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
OSC1/CLKI
OSC2/CLKO
MCLR/VPP
10K
12
31
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VSS
VSS
VDD
VDD
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
11
32
VCC
C2
22p
Hnh3.1.Smchnhy8LEDtiPORTB
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
16/32
VCC
VDD
LM7805C/TO220
U3
1
3
IN OUT
C4
100uF/50V
C3
4.7uF/25V
R11
R
D9
LED
Hnh3.2.SmachngunchoPIC
MngunchngtrnhnpvoPIC
//========================================================
//Tenchuongtrinh:MachnhaydenLED
//Nguoithuchien :linhnc308
//Ngaythuchien :13/03/2006
//Phienban :1.0
//Motaphancung :DungPIC16F877Athachanh20MHz
//
:LEDgiaotiepvoiPORTB
//
:CucamcuaLEDnoivoiPORTB
//
:RB0RB7lacacchanoutput
//
//Ngayhoanthanh:13/06/2006
//Ngaykiemtra :13/06/2006
//Nguoikiemtra :linhnc308
//
//Chuthich :dungchedoPowerOnReset,PORTB=00000000
//
:chuongtrinhvietchoPICTutorial
//
:chuongtrinhnayhoantoanmienphivacothedungcho
//
:moimucdichkhacnhau
//========================================================
#include<16f877a.h>
#include<def_877a.h>
#device*=16ADC=8
#FUSESNOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,
NOLVP,NOCPD,NOWRT
#usedelay(clock=20000000)
voidmain()
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
17/32
{
//ThietlapchedochoPORTB
TRISB=0x00;
//TatcaPORTBdeulacongxuatdulieu
PORTB=0xFF;
//TathetcacLED
While(1)
{
PORTB=0; //ChoccLEDsng
delay_ms(250);
//Tothigiantr250ms
PORTB=0xFF;
delay_ms(250);
}
}
QuavdngintrnbnhiucchxutdliuramtcngcaPICvdngcc
hmtotr.
ThtcthitlpvorachomtcnghaymtchncaPIC
GhigitrvothanhghiiukhinchcacngtngnglTRISx
o Bit0ngvichnxutdliu
o Bit1ngvinhndliu
o ThanhghiTRISxcthcuhnhtheotngbit
Khimunxutdliu,vdraPORTB,culnhl:PORTB=gia_tri;
KhimunnhndliutPORTB,culnhl:data_in=PORTB;
Vcchmtotr,trongCCShtrsn3loihmtotrl:
delay_cycles(gia_tri):gia_trilthigiantrtnhtheoschukmy
delay_us(gia_tri):TotrMicrogiy
delay_ms(gia_tr):TotrMiligiy
BnchtcacchmtotrlaViiukhinvomtvnglpchnglmgccho
sthigianmtacn.Ngoivicdnghmtotrcsntacthtvithmtotr
dngbTimer
3.2.
BADCtrongPICvngdng
Bchuynittngtsangslmtkhimchintquantrng,cmttrong
rtnhiuthitkint.CcbADCthctcnggitrongnhngICchuyndng,
donhiuhngsnxut.imquantrongcnluccbADCnylphngiiv
tclymutnhiu.phngiicabADCcthl8bt,10bt,12bt,16bt,24
btTclymucaADCcthnhanhhaychm,tytngngdngmtachntc
thchhp.
ViiukhinPIClmttrongnhngdngViiukhincphngiaotipngoivi
mnhvadng.BntrongPICctchhpsnmtbADCcphngiitia
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
18/32
l10bt(tychonl8bithay10bit).VibADCtrongPICtacthlmckhnhiu
cngvic,diytitrnhbymtngdngcabADCtrongvicthitkmcho
nhitsdngsensornhitLM335.
Diylphncodemchonhitd,hinthtrnLCD.
//========================================================
//Tenchuongtrinh
:Machdonhietdo
//Nguoithuchien:linhnc308
//Ngaythuchien :28/03/2006
//Phienban:1.0
//Motaphancung
:DungPIC16F877Athachanh20MHz
//
:LCDgiaotiepvoiPORTD
//
:DauraLM335duavaochanAN0
//
//Ngayhoanthanh
:28/03/2006
//Ngaykiemtra :28/03/2006
//Nguoikiemtra :Linhnc308
//
//Chuthich:hoaccacchuthichkhac
//
:dungchedoPowerOnReset
//
:chuongtrinhvietchoPICTutorial
//========================================================
#include<16F877A.h>
#include<def_877a.h>
#device*=16adc=10
#FUSESNOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,
NOLVP,NOCPD,NOWRT
#usedelay(clock=20000000)
#users232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#include<lcd_lib_4bit.c>
//ThuvienhamchoLCD
int8low,high,key,mode,min,max,mode1,i;
int1do_F;
voidconvert_bcd(int8x);
voidbao_dong();
voidtest();
//
voidmain()
{
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
19/32
floatvalue;
on_off=1;
min=15;//nhietdomindefault
max=35;//nhietdomaxdefault
do_F=0;
i=50;
mode=0;
mode1=0;
trisa=0xFF;
trisb=0x01;
trisd=0x00;
LCD_init();
Printf(LCD_putchar,LopDT8BKHN);
LCD_putcmd(0xC0);
Printf(LCD_putchar,Khoitao...);
//Khoitaochongatngoai
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
enable_interrupts(GLOBAL);
//KhoitaochedochoboADC
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
delay_us(10);
//Laymaunhietdolandautien
value=(float)read_adc();
value=(value558.5)/2.048;//For5Vsupply
//value=(value754.8)/2.048;//For3.7VSupply
//value=(value698.2)/2.048;//For4Vsupply
convert_bcd((int8)value);//Tachsotram,chuc,donvidehienthilenLED7
delay_ms(1000);
LCD_putcmd(0xC0);
Printf(LCD_putchar,Khoitaoxong);
while(1)
{
if(i==50)
{
value=read_adc();
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
20/32
value=(value558.5)/2.048;
if(do_F==1)value=1.8*value+32;
convert_bcd((int8)value);
printf(\n\rNhietdophong:%u,value);//Guigiatrilenmaytinh
LCD_putcmd(0xC0);
printf(LCD_putchar,Temp=);
LCD_putchar(high);LCD_putchar(low);
if(do_F==0)printf(LCD_putchar,C);
elseprintf(LCD_putchar,F);
i=0;
}
i++;
if(((int8)value>40)||((int8)value<15))on_off=1;
else
{
on_off=0;
LCD_Putcmd(0xCF);
LCD_putchar();
blink=0;
}
if(on_off==1)
{
if(blink==0){
LCD_Putcmd(0xCF);LCD_putchar(!);blink=1;delay_ms(250);}
else{LCD_Putcmd(0xCF);LCD_putchar();blink=0;delay_ms(250);}
}
}
}//endmain
#INT_EXT
voidtest()
{
if(do_F==1)do_F=0;
elsedo_F=1;
}
voidconvert_bcd(int8x)
{
low=x%10;//chialayphandu,sohangdonvi
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
21/32
high=x/10;//tachhangtramvahangchuc
low=low+0x30;
high=high+0x30;
}
voidbao_dong(){
int8i;
if(blink==0)blink=1;
elseblink=0;
for(i=0;i<50;i++)
{
LCD_Putcmd(0xCF);
if(blink==0)LCD_putchar(!);
elseLCD_putchar();
}
}
DiylmtsdngPICvLM335onhit,hinthtrnLCDvtrn
LED7.TrongchngtrnhbnthychmchuyninhittatrKvC.
NguynnhnchmldoconLM335thayi10mV/K,tacnhinthlC.Nhn
thy0oC=273K,nhvyti0oCconLM335sxutramtinpl2.73Vvviinp
2.73 *1023
ny,ADCtrongPICschogitrsl
= 558.558 .Nhvykhitnhtongitr
5
nhittacntrigitr558.558ny.Cngthcyl:
adc _ value 558.558
Do _ C =
2.048
Gitr2.048cldotadngADC10bit,inplymul5V,nhvymimc
5V
lngtstngngvi
= 4.883mV .LM335thaydi10mV/Kdongvisthay
1024
i1Csthayi2.048mclngt(10mV/4.883mV=2.048).Cngthctrnlcho
ADC10bit,viccbADC8bithay12bitvictnhtonchuynigitrcngtngt.
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
22/32
U13
VCC
E
R/W
RS
VEE
VCC
VSS
D7
D6
D5
D4
D3
D2
D1
D0
LCD_1602A
6
5
4
3
2
1
21
22
23
24
25
26
27
28
29
30
33pF
Crystal
33pF
40
39
38
37
36
35
34
33
4
5
6
7
8
9
10
Q3
4K7
SPEAKER
HI
13
14
15
16
17
18
19
20
RB7/PGD
RD2/PSP2
RB6/PGC
RD3/PSP3
RB5
RC4/SDI/SDA
RB4
RC5/SDO
RC6/TX/CK RB3/PGM
RB2
RC7/RX/DT
RB1
RD4/PSP4
RB0/INT
RD5/PSP5
RD6/PSP6
RD7/PSP7
RA2/AN2
RA3/AN3
RA4
RA5/AN4
OSC1/CLKI RE0/AN5
OSC2/CLKO RE1/AN6
RC0/T1CKI RE2/AN7
RC1/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
VDD1
VSS1
32
31
14
13
12
11
10
9
8
7
HI
12
VDD
VSS
RA1/AN1
RA0/AN0
VPP
3
2
1
3
VR10K
LM335Z
10K
1K
11
HI
HI
HI
16
15
K
A
Hnh3.3.MchonhitLM335hinthtrnLCD1602
5
DOT
4
a
21
22
23
24
25
26
27
28
29
30
Q2
HI
33pF
Crystal
33pF
4K7
40
39
38
37
36
35
34
33
4
5
6
7
8
9
10
Q3
4K7
SPEAKER
HI
4K7
13
14
15
16
17
18
19
20
RB7/PGD
RD2/PSP2
RB6/PGC
RD3/PSP3
RB5
RC4/SDI/SDA
RB4
RC5/SDO
RC6/TX/CK RB3/PGM
RB2
RC7/RX/DT
RB1
RD4/PSP4
RB0/INT
RD5/PSP5
RD6/PSP6
RD7/PSP7
RA2/AN2
RA3/AN3
RA4
RA5/AN4
OSC1/CLKI RE0/AN5
OSC2/CLKO RE1/AN6
RC0/T1CKI RE2/AN7
RC1/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
VDD1
VSS1
32
31
VCC
Vcc
c
7
f
d
9
g
e
10
b
DOT
a
c
VCC
Vcc
8
f
d
9
g
e
10
Q1
23/32
Trang:
9/8/2006
Ngy:
TUT01.01.PVN
Tiliu:
NguynChLinh
Ngiboco:
HI
VSS
RA1/AN1
RA0/AN0
VPP
3
2
1
3
VR10K
LM335Z
10K
1K
HI
HI
HI
12
VDD
11
Hnh3.4.MchonhithinthitrnLED7thanh
TrongmchtrntadngchnhconPICchovicgiimLED7thanh.Nguyntcqut
chotngLED7thanhlgigitrcnhinth>btLED>Tothigiantr>ttLED.
QutrnhclplinhvychonkhiquthtLED.Tatnhtonthigiantrsaocho
mboccshinthlintc.
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
24/32
3.3.
GiaotipmytnhRS232
VicgiaotipgiaViiukhinvmytnhlbilptrnhkhquantrngkhitalm
vicviccdngViiukhinkhcnhau.ViViiukhinPICcngvy,trongmiIC
PICuctchhpmtkhigiaotipmytnhUSART.Tasdngkhigiaotipny
truyndliulnmytnhvxldliutyvomcchcangilptrnh.
nhndliudoViiukhintruynlnmytnhtacthsdngccphnmmgiao
tipCOMcsnhayvitmtchngtrnhmi,sdngccngnnglptrnhnhC++,
VBhayDelphiTrongchngtrnhvddiytisdngcngcsnccaCCSl
SerialPortMonitortruynvnhndliutPIC.
SmchinORCAD.MchsdngICMAX232ktnincngCOMca
mytnh.MchnginchnhmmcchgiithiukhigiaotipmytnhcaPICv
cchlptrnhchontrongCCS.
E
R/W
RS
VEE
VCC
VSS
D7
D6
D5
D4
D3
D2
D1
D0
LCD_1602A
6
5
4
3
2
1
14
13
12
11
10
9
8
7
16
15
K
A
D4
D5
D6
D7
13
8
TX_PIC
11
10
C9 1uF
1uF C8
VCC
C10
C7
1
3
4
5
2
6
R1IN
R2IN
T1IN
T2IN
C1+
C1C2+
C2V+
V-
VCC
RS
E
RW
U14
TX_PC
RW
RS
R1OUT
R2OUT
T1OUT
T2OUT
12
9
RX_PIC
14
7
RX_PC
TX_PIC
RX_PIC
D4
D5
D6
D7
33pF
20MHz
13
14
15
16
17
18
19
20
1uF
MAX232
21
22
23
24
25
26
27
28
29
30
33pF
1uF
RD2/PSP2
RB7/PGD
RD3/PSP3
RB6/PGC
RC4/SDI/SDA
RB5
RC5/SDO
RB4
RC6/TX/CK RB3/PGM
RC7/RX/DT
RB2
RD4/PSP4
RB1
RD5/PSP5
RB0/INT
RD6/PSP6
RD7/PSP7
RA2/AN2
RA3/AN3
RA4
RA5/AN4
OSC1/CLKI RE0/AN5
OSC2/CLKO RE1/AN6
RC0/T1CKI
RE2/AN7
RC1/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
VDD1
RD1/PSP1
VSS1
40
39
38
37
36
35
34
33
4
5
6
7
8
9
10
32
31
HI
11
RA1/AN1
RA0/AN0
VPP
VSS
3
2
1
10K
HI
HI
12
VDD
Hnh3.5.Mchgiaotipmytnh,hinthLCD
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
25/32
Mngunchngtrnh:
#include<16f877a.h>
#include<def_877a.h>
#usedelay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP,NOCPD,NOWRT
//KhaibosdnggiaotipnitipRS232
#users232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#include<lcd_lib_4bit.c>
int8count=0;
charstring_in[16];
#INT_RDA
//Hmxlngtnitip
Receive_isr(){
charc;
int8i;
count++;
c=getc();
putc(c);
if(c==c|c==C)
{
LCD_putcmd(0x01);//ClearScreen
c=c;
count=0;
}
if((count<=16)&&(c!=c))LCD_putchar(c);
if(count>16)
{
count=0;
LCD_putcmd(0xC0);
}
}
voidmain()
{
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
26/32
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
lcd_init();//KhitochoLCD
lcd_putcmd(0x01);
lcd_putcmd(line_1);
printf(EnteraString.);
printf(Oranythingyouwant!);
while(1){}
}
Mtchngtrnh:Trnylchngtrnhgiaotipvimytnh,tathytrongCCS
sdnggiaotipnitiptachcnkhaibo#users232().Cchmgiaotipvimytnhm
CCShtrl:
putc(charky_tu):GimtktASCIIlnmytnh
getc():Hmtrvmtktnhnctmytnh
printf(string):hmgimtchuiktlnmytnh
Trongchngtrnhtacsdnghmxlngtnitipxlktnhnctmy
tnh.Khicngtxyra,tagihmgetc()strvktvanhnc.TrnmnhnhLCD
shinthktmtagtbnphmmytnh.
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
27/32
3.4.
NgtcaPICvcchsdng
TrongViiukhinPICcnhiungunngt.bitcthtacthvomc
View>>ValidInterrupts.Khimtcasshinralitkyccngun
ngtcatngconPIC.
Hnh3.6CcngunngttrongPIC
vitmthmphcvngttachvicthmkhaibo#INT_tn_ngtvo
trchmphcvchongt.Khitrnhdichshiulachhmcho
ngt,khicngttngngxyrathnsnhynvtr
Lyvdkhitamunxlngtngoi,hmscvitnhsau:
#INT_EXT
Ext_isr()
{
//Nhpmtiy
}
Diylchngtrnhnhyledtheonhiukiukhcnhau,sdng1phm
bmnivichnngtngoiRB0chnkiunhy.C8kiunhyLEDkhcnhau,
Khinkiunhyth8,nutanhnthstrvchbanu.Banubinmode=0
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
28/32
vttcccLEDuttMikhinhnphmbm,binmodestngln1nv.Gitr
binmodetngngvichngtrnhnhycthchin.Khimode=9thscgn
vmode=0.CckiunhykhcnhauldotabtttccLEDtrncngDtheocccch
khcnhau.LyvdkhitamunccLEDnhyxenknhautachvicgiracngDgi
trAAh(10101010)v55h(01010101).
Smchin:
VCC
R10
R
SW1
Phim chon
33
34
35
36
37
38
39
40
R9
RESET
VCC
10K
Cong tac
2
3
4
5
6
7
OSC1
OSC2
OSC1
Y1
OSC2
13
14
RESET
1
12
31
20MHz
C1
22p
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
OSC1/CLKI
OSC2/CLKO
MCLR/VPP
VSS
VSS
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VDD
VDD
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
LED1
LED2
LED3
LED1
LED2
LED3
LED4
LED5
LED6
LED7
LED8
LED4
LED5
LED6
LED7
D8
R8
D7
R7
D6
LED
R6
220
D5
LED
R5
R
D4
LED
R4
R
D3
LED
R3
R
D2
LED
R2
R
D1
LED
R1
R
LED
LED
LED8
8
9
10
11
32
VCC
VCC
C2
22p
Hnh3.7.NhyLEDnhiuch
Phnmngunchngtrnh:
#include<16F877A.h>
#include<def_877a.h>
#FUSESNOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,
NOLVP,NOCPD,NOWRT
#usedelay(clock=20000000)
int8mode,i;
bytetemp;
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
29/32
#INT_EXT
EXT_ISR(){
mode++;
if(mode==9)mode=0;
}
//EndofINT
voidprogram1();
voidprogram2();
voidprogram3();
voidprogram4();
voidprogram5();
voidprogram6();
voidprogram7();
voidprogram8();
voidmain(){
trisd=0x00;
trisb=0xFF;
portd=0xff;
enable_interrupts(int_EXT);
ext_int_edge(H_TO_L); //Chnngttheosnm
enable_interrupts(GLOBAL);
mode=0;
while(1){
switch(mode){
case1:program1();break;
case2:program2();break;
case3:program3();break;
case4:program4();break;
case5:program5();break;
case6:program6();break;
case7:program7();break;
case8:program8();break;
}
}
}
voidprogram1(){
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
30/32
PortD=0x00;
delay_ms(250);
Portd=0xFF;
delay_ms(250);
}
voidprogram2(){//LEDsngchyttriquaphi
temp=0xFF;
for(i=0;i<=8;i++){
portd=temp;
delay_ms(250);
temp>>=1;
}
}
voidprogram3(){//LEDsngchytphiquatri
temp=0xFF;
for(i=0;i<=8;i++){
portd=temp;
delay_ms(250);
temp<<=1;
}
}
voidprogram4(){
portd=0xAA;
delay_ms(500);
portd=0x55;
delay_ms(500);
}
voidprogram5(){
Portd=0x7E;delay_ms(150);
Portd=0xBD;delay_ms(250);
Portd=0xDB;delay_ms(150);
Portd=0xE7;delay_ms(150);
Portd=0xDB;delay_ms(150);
Portd=0xBD;delay_ms(150);
Portd=0x7E;delay_ms(150);
}
voidprogram6(){
temp=0xFF;
for(i=0;i<=8;i++){
portd=temp;
delay_ms(250);
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
31/32
temp=temp>>1;
}
}
voidprogram7(){
Portd=0xFE;delay_ms(150);
Portd=0xFD;delay_ms(150);
Portd=0xFB;delay_ms(150);
Portd=0xF7;delay_ms(150);
Portd=0xEF;delay_ms(150);
PortD=0xDF;delay_ms(150);
Portd=0xBF;delay_ms(150);
Portd=0x7F;delay_ms(150);
}
voidprogram8(){
Portd=0x7F;delay_ms(150);
Portd=0xBF;delay_ms(150);
PortD=0xDF;delay_ms(150);
Portd=0xEF;delay_ms(150);
Portd=0xF7;delay_ms(150);
Portd=0xFB;delay_ms(150);
Portd=0xFD;delay_ms(150);
Portd=0xFE;delay_ms(150);
}
Ngiboco:
NguynChLinh
Tiliu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
32/32
3.5.
Bm/nhthi(Timer)
3.6.
GiaotipI2C,SPI
3.7.
PWM,Capture,Comparator