You are on page 1of 32

Ngiboco:

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

Tab General cho php ta la chn loi PIC m ta s dng v mt s la chn


khcnhchntnsthchanhdaong,thitlpccbitCONFIGnhmthitlp
chhotngchoPIC.

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

Trong cc la chn cu hnh cho cc b m /nh thi c: chn ngun xung


ngh(trong/ngoi),khongthigianxyratrn

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

Sau cc bc chn trn, ta nhn OK kt thc qu trnh to mt Project trong CCS,


mtFilesten_project.cctora,chanhngkhaibocnthitchoPICtrongmtFiles
ten_project.h.Diylnidungmtfileschngtrnhmu.

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

LCD - 16x2 - DM1602A

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

LCD - 16x2 - DM1602A

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

You might also like