Professional Documents
Culture Documents
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
1/32
TUT01.01.PVN
Gi n:
www.picvietnam.com
Ni dung:
Tm tt:
Ti liu hng dn s dng trnh bin dch CCS cho lp trnh PIC. Tm hiu tng quan v CCS
v cch to mt Project trong CCS.
Chng trnh mu cho PIC16F877
Cc v d lp trnh n gin: qut LED, ADC, RS232
1.
1.1.
1.2.
CCS l trnh bin dch lp trnh ngn ng C cho Vi iu khin PIC ca hng Microchip.
Chng trnh l s tch hp ca 3 trnh bin dich ring bit cho 3 dng PIC khc nhau
l:
PCB cho dng PIC 12bit opcodes
PCM cho dng PIC 14bit opcodes
PCH cho dng PIC 16 v 18bit
Tt c 3 trnh bin dich ny uc tch hp li vo trong mt chng trnh bao gm c
trnh son tho v bin dch l CCS, phin bn mi nht l PCWH Compiler Ver 3.227
Ging nh nhiu trnh bin dich C khc cho PIC, CCS gip cho ngi s dng nm bt
nhanh c vi iu khin PIC v s dng PIC trong cc d n. Cc chng trnh diu
khin s c thc hin nhanh chng v t hiu qu cao thng qua vic s dng ngn
ng lp trnh cp cao Ngn ng C
Ti liu hng dn s dng c rt nhiu, nhng chi tit nht chnh l bn Help i km
theo phn mm (ti liu Ting Anh). Trong bn tr gip nh sn xut m t rt nhiu v
hng, bin, ch th tin xa l, cu trc cc cu lnh trong chng trnh, cc hm to sn cho
ngi s dng Ngoi ra v Ting Vit cng c bn dch ca tc gi Trn Xun Trng,
SV K2001 DH BK HCM. Ti liu ny dch trn c s bn Help ca CCS, tuy rng cha y
nhng y l mt ti liu hay, nu bn tm hiu v PIC v CCS th nn tm ti liu ny
v c. a ch Download ti liu: www.picvietnam.com > Mc ni v CCS.
2.
2.1.
Trc ht bn khi ng chng trnh lm vic PIC C Compiler. T giao din chng
trnh bn di chut chn Project > New > PIC Wizard nhn nt tri chut chn.
Hnh2.0: Ca s Save As
Nh vy l xong bc u tin. Sau khi nhn nt Save, mt ca s New Project hin ra.
Trong ca s ny bao gm rt nhiu Tab, mi Tab m t v mt vi tnh nng ca con PIC.
Ta s chn tnh nng s dng ti cc Tab tng ng.
Di y s trnh by ngha tng mc chn trong mi Tab. Cc mc chn ny chnh
l cp n cc tnh nng ca mt con PIC, ty theo tng loi m s c cc Tab tng ng.
i vi tng d n khc nhau, khi ta cn s dng tnh nng no ca con PIC th ta s chn
mc . Tng cng c 13 Tab ta la chn. Ti gii thiu nhng Tab chnh thng hay
c s dng.
2.1.1.
Tab General
2.1.2.
Device: Lit k danh sch cc loi PIC 12F, 16F, 18F Ta s chn tn Vi iu khin
PIC m ta s dng trong d n. Ly v d chn PIC16F877A
Oscilator Frequency: Tn s thch anh ta s dng, chn 20 MHz (ty tng loi)
Fuses: Thit lp cc bit Config nh: Ch dao ng (HS, RC, Internal ), ch bo
v Code, Brownout detected
Chn kiu con tr RAM l 16bit hay 8bit
Tab Communications
Tab Communications lit k cc giao tip ni tip m mt con PIC h tr, thng l
RS232 v I2C, cng vi cc la chn thit lp ch hot ng cho tng loi giao tip.
Giao tip RS232
2.1.3.
Tab ny lit k cho ngi dng cc la chn i vi giao tip ni tip SPI, chun
giao tip tc cao m PIC h tr v phn cng. Ch khi ta dng I2C th khng
th dng SPI v ngc li. c th s dng c hai giao tip ny cng mt lc th
buc mt trong 2 giao tip phi lp trnh bng phn mm (ging nh khi dng I2C
cho cc chip AT8051, khng c h tr phn cng SSP).
Phn cu hnh cho LCD dnh cho cc chp dng 18F v 30F.
2.1.4.
Tab Timer
2.1.5.
Tab Analog
Lit k cc la chn cho b chuyn i tng t/s (ADC) ca PIC. Ty vo
tng IC c th m c cc la chn khc nhau, bao gm:
La chn cng vo tng t
Chn chn in p ly mu (Vref)
Chn phn gii: 8bit = 0 ~ 255 hay 10bit = 0~1023
Ngun xung ng h cho b ADC (trong hay ngoi), t m ta c c tc
ly mu, thng ta chn l internal 26 us.
Khi khng s dng b ADC ta chn none
2.1.6.
Tab Other
Compare So snh
Ta c cc la chn thc hin lnh khi xay ra bng nhau gia 2 i tng so snh l
gi tr ca Timer1 vi gi tr lu trong thanh ghi so snh. Bao gm:
o Thc hin ngt v thit lp mc 0
o Thc hin ngt v thit lp mc 1
o Thc hin ngt nhng khng thay i trng thi ca chn PIC.
o a Timer1 v 0 nhng khng thay i trng thi chn.
Comparator So snh in p
2.1.7.
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,
ngt Timer, ngt I2CSPI, ngt onchange PORTB.v.v
Tab Drivers c dng la chn nhng ngoi vi m trnh dch h tr cc hm
giao tip. y l nhng ngoi vi m ta s kt ni vi PIC, trong cc IC m CCS h tr, ng
ch l cc loi EEPROM nh 2404, 2416, 2432, 9346, 9356Ngoi ra cn c IC RAM
PCF8570, IC thi gian thc DS1302, Keypad 3x4, LCD, ADC Chi tit ta c th xem trong
th mc Driver ca chng trnh: \...\PICC\Drivers
Chuong_trinh_mau.c
#include D:\1PIC project\chuong trinh test.HEX.h
#int_EXT
EXT_isr()
{
// Code here
}
Void Chuong_trinh_con()
{
// Code here
}
void main()
{
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);
// Enter your code here
}
Chuong_trinh_mau.h
#include <16F877A.h>
#device adc=8
#FUSES NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,
#use delay(clock=20000000)
#define SRAM_SCL PIN_C3
#define SRAM_SDA PIN_C4
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
2.2.
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
ring khc nhau, khng ng nht. Ti liu khng c chun ha s gy mt s kh khn
cho ngi c, ngi c c th khng hiu ht nhng g m ngi lp trnh mun din t.
Vi mc ch a ra mt form ti liu chun cho vic lp trnh bng CCS, qua tham kho
bn mu cho lp trnh bng ASM ca anh Falleaf trn din n WWW.PICVIETNAM.COM
ti a ra y mt form ti liu cho vic vit lp trnh bng CCS. i km vn bn ny cn c
cc files ngun cho vn bn mu, bao gm files cho PIC16F877A, 16F876A, 16F88. V sau khi
lp trnh bn ch vic copy ti liu ny vo th mc cha Project ca bn, sa i tn files.
Khi cn thay i ni dung cu hnh cho PIC bn chi vic tham kho qua PIC Wizard , xem
code v copy a vo Project.
M t ni dung chng trnh.
#include 16f877a.h : i km chng trnh dch, cha khai bo v cc thanh ghi trong
mi con PIC, dng cho vic cu hnh cho PIC.
#include def_877a.h: Files do ngi lp trnh to ra, cha khai bo v cc thanh ghi
trong PIC gip cho vic lp trnh c d dang hn v d ta co th gn PORTB =
0xAA (chi tit files ny s trnh by trong phn di y)
#device *=16 ADC = 10: Khai bo dng con tr 8 hay 16 bit, b ADC l 8 hay 10 bit
#FUSES NOWDT, HS: Khai bo v cu hnh cho PIC
#use delay(clock=20000000): Tn s thch anh s dng
#use rs232 (baud=9600,): Khai bo cho giao tip ni tip RS232
#use i2c(master, SDA=PIN_C4,): Khai bo dng I2C, ch hot ng
#include <tn_file.c>:Khai bo cc files th vin c s dng v d LCD_lib_4bit.c
#INT_xxx : Khai bo a ch chng trnh phc v ngt
Void tn_chng_trnh (tn_bin) {}: Chng trnh chnh hay chng trnh con
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9)
#use i2c(Master,Fast,sda=PIN_B1,scl=PIN_B4)
#int_xxx
// Khai bao chuong trinh ngat
xxx_isr() {
// Code here
}
void Ten_chuong_trinh_con(Ten_Bien) {
// Code here
}
void main() {
// Enter code here!
}
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9)
#use i2c(Master,Fast,sda=PIN_B1,scl=PIN_B4)
#int_xxx
// Khai bao chuong trinh ngat
xxx_isr() {
// Code here
}
void Ten_chuong_trinh_con(Ten_Bien) {
// Code here
}
void main() {
// Enter code here!
}
#FUSES NOWDT, HS, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9)
#use i2c(Master,Fast,sda=PIN_B1,scl=PIN_B4)
#int_xxx
// Khai bao chuong trinh ngat
xxx_isr() {
// Code here
}
void Ten_chuong_trinh_con(Bien) {
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
14/32
3.
LCD 1602A loi 2 dng 16 k t (Nu c LCD 2002 cng tt) = 65K (Minh H c bn)
Real Time IC DS1307 hay DS1337 = 25K (c th xin sample ca MaximIC)
EEPROM AT24Cxx
ADC/DAC IC loi 12bit tr nn (ADC 10bit th PIC cng c)
Sensor nhit LM335 hay LM35 = 13K
ng c bc, ng c mt chiu
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
15/32
3.1.
Nhp nhy LED c th coi l mt chng trnh Kinh in. Mi ngi khi bt tay vo
hc VK th bi hc u tin l lm nhp nhy mt hay vi con LED trn chn VK. Trong
ti liu ny ti cng chn bi tp bt u. Bn thn ti cng vy, bi hc u tin l
nhy LED v qut LED 7 thanh
Mc ch ca bi nh trn ni: Lm nhp nhy 8 LED ti PORTB ca PIC 16F877A,
thi gian tr do ngi lp trnh nh trc.
Nhng iu thu c qua bi hc:
V mt mch in t hon chnh dng OrCad 9.2
To mt D n trong CCS (ci ny ni trong phn 2)
Tp nh ngha cc thanh ghi ca PIC do ngi dng to ra
Thit lp ch vo ra cho mt cng ca PIC
S dng hm to tr thi gian
Di y l s phn cng. Trong s cc LED c mc chung ln dng ngun
thng qua in tr. Gia tr in tr thay i trong khong 100 cho n 560 ty theo
sng ca LED m ta mun v cng m bo dng qua mi LED khng qu 20mA khi
ngun cp l 5V. Nh vy lm sng LED ta ch vic a mc 0 ra cc chn PIC v ngc
li tt ta a mc 1.
VCC
R1
D1
R2
D2
R3
LDE
3D
LDE
4D
LDE
5D
DLE
R4
R
R
R7
R8
R
220
RB0
RB1
RB2
RB3
RB4
RB5
DLE
LD
7
DE
RB7
RB6
RB7
8D
LED
OSC1
OSC2
RESET
10K
Cong tac
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
2
3
4
RA0/AN0
RA1/AN1
5
6
7
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
15
16
17
18
23
24
25
26
RD0/PSP0
RD1/PSP1
19
20
21
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
22
27
28
29
30
LED
R9
VCC
33
34
35
36
37
38
39
40
OSC1
Y1
OSC2
RESET
13
14
1
12
31
20MHz
C1
22p
OSC1/CLKI
OSC2/CLKO
MCLR/VPP
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VSS
VSS
C2
22p
VDD
VDD
8
9
10
11
32
VCC
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
16/32
VDD
VCC
LM7805C/TO220
U3
1
3
IN
OUT
C4
100uF/50V
C3
4.7uF/25V
R11
R
D9
LED
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
17/32
{
// Thiet lap che do cho PORTB
TRISB = 0x00;
// Tat ca PORTB deu la cong xuat du lieu
PORTB = 0xFF;
// Tat het cac LED
While(1)
{
PORTB = 0; // Cho cc LED sng
delay_ms(250);
// To thi gian tr 250ms
PORTB = 0xFF;
delay_ms(250);
}
}
Qua v d n gin trn bn hiu cch xut d liu ra mt cng ca PIC v dng cc
hm to tr.
Th tc thit lp vo ra cho mt cng hay mt chn ca PIC
Ghi gi tr vo thanh ghi iu khin ch ca cng tng ng l TRISx
o Bit 0 ng vi chn xut d liu
o Bit 1 ng vi nhn d liu
o Thanh ghi TRISx c th cu hnh theo tng bit
Khi mun xut d liu, v d ra PORTB, cu lnh l: PORTB = gia_tri;
Khi mun nhn d liu t PORTB, cu lnh l: data_in = PORTB;
V cc hm to tr, trong CCS h tr sn 3 loi hm to tr l:
delay_cycles(gia_tri): gia_tri l thi gian tr tnh theo s chu k my
delay_us(gia_tri): To tr Micro giy
delay_ms(gia_tr): To tr Mili giy
Bn cht ca cc hm to tr l a Vi iu khin vo mt vng lp chng lm g c cho
s thi gian m ta cn. Ngoi vic dng hm to tr c sn ta c th t vit hm to tr
dng b Timer
3.2.
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
18/32
l 10bt (ty chon l 8bit hay 10bit). Vi b ADC trong PIC ta c th lm c kh nhiu
cng vic, di y ti trnh by mt ng dng ca b ADC trong vic thit k mch o
nhit s dng sensor nhit LM335.
Di y l phn code mch o nhit d, hin th trn LCD.
//================================================= =======
// Ten chuong trinh
: Mach do nhiet do
// Nguoi thuc hien: linhnc308
// Ngay thuc hien : 28/03/2006
// Phien ban: 1.0
// Mo ta phan cung
: Dung PIC16F877A thach anh 20MHz
//
: LCD giao tiep voi PORTD
//
: Dau ra LM335 dua vao chan AN0
//
// Ngay hoan thanh
: 28/03/2006
// Ngay kiem tra : 28/03/2006
// Nguoi kiem tra : Linhnc308
//
// Chu thich : hoac cac chu thich khac
//
: dung che do Power On Reset
//
: chuong trinh viet cho PIC Tutorial
//================================================= =======
#include <16F877A.h>
#include <def_877a.h>
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#include <lcd_lib_4bit.c>
// Thu vien ham cho LCD
int8 low,high,key,mode,min,max,mode1,i;
int1 do_F;
void convert_bcd(int8 x);
void bao_dong();
void test();
//
void main()
{
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
19/32
float value;
on_off =1;
min =15; //nhiet do min default
max =35; //nhiet do max default
do_F =0 ; i
= 50 ; mode
=0 ; mode1
=0;
trisa = 0xFF;
trisb = 0x01;
trisd = 0x00;
LCD_init();
Printf(LCD_putchar,Lop DT8
BKHN); LCD_putcmd(0xC0);
Printf(LCD_putchar,Khoi tao...);
// Khoi tao cho ngat ngoai
enable_interrupts (INT_EXT);
ext_int_edge(H_TO_L);
enable_interrupts (GLOBAL);
// Khoi tao che do cho bo ADC
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
delay_us(10);
// Lay mau nhiet do lan dau tien
value=(float)read_adc();
value = (value 558.5)/2.048;
// For 5V supply
// value = (value 754.8)/2.048; // For 3.7V Supply
// value = (value 698.2)/2.048; // For 4V supply
convert_bcd((int8)value); // Tach so tram, chuc, donvi de hien thi len LED 7
delay_ms(1000);
LCD_putcmd(0xC0);
Printf(LCD_putchar,Khoi tao
xong); while(1)
{
if (i==50)
{
value = read_adc();
Ngi bo co:
Nguyn Ch Linh
Ti liu:
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\rNhiet do phong: %u,value);// Gui gia tri len may tinh
LCD_putcmd(0xC0);
printf(LCD_putchar, Temp = );
LCD_putchar(high); LCD_putchar(low);
if (do_F==0) printf(LCD_putchar, C);
else printf(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);}
}
}
}//end main
#INT_EXT
void test()
{
if (do_F == 1) do_F=0;
else
do_F=1;
}
void convert_bcd(int8 x)
{
low=x%10; //chia lay phan du, so hang don vi
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
21/32
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
22/32
U13
VCC
56
R/W RS VEE VCC VSSE
LCD_1602A
21
22
23
24
25
26
27
28
29
30
33pF
Crystal
13
14
15
16
17
18
19
20
33pF
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
VDD1
RD0/PSP0
VSS1
RD1/PSP1
40
39
38
37
36
35
34
33
4
5
6
7
8
9
10
Q3
4K7
SPEAKER
HI
32
31
2
D6D7
1314
HI
12
VDD
VSS
RA1/AN1
RA0/AN0
VPP
3
10K
LM335Z
1K
HI
HI
11
3
2
1
HI
1516
KA
VR10K
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
23/32
DOT
4
a
HI
33pF
Crystal
13
15
16
17
18
33pF
4K7
4K7
19
20
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
OSC2/CLKO RE1/AN6
RC0/T1CKI RE2/AN7
RC1/CCP2
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
VDD1
VSS1
40
39
38
37
36
35
34
33
4
5
6
7
8
Q3
4K7
SPEAKER
10
HI
32
31
2
3
VCC
Vcc
c
7
21
22
23
24
25
26
27
28
29
30
Q2
HI
11
VDD
VSS
3
2
1
3
10K
VR10K
LM335Z
1K
HI
HI
HI
12
RA1/AN1
RA0/AN0
VPP
Q1
2
f
d
9
1
g
e
5
b
DOT
6
10
4
a
c
7
3
VCC
Vcc
8
2
f
d
g
e
10
Ngi bo co:
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
24/32
3.3.
Vic giao tip gia Vi iu khin v my tnh l bi lp trnh kh quan trng khi ta lm
vic vi cc dng Vi iu khin khc nhau. Vi Vi iu khin PIC cng vy, trong mi IC
PIC u c tch hp mt khi giao tip my tnh USART. Ta s dng khi giao tip ny
truyn d liu ln my tnh v x l d liu ty vo mc ch ca ngi lp trnh.
nhn d liu do Vi iu khin truyn ln my tnh ta c th s dng cc phn mm giao
tip COM c sn hay vit mt chng trnh mi, s dng cc ngn ng lp trnh nh C++,
VB hay Delphi Trong chng trnh v d di y ti s dng cng c sn c ca CCS l
Serial Port Monitor truyn v nhn d liu t PIC.
S mch in ORCAD. Mch s dng IC MAX232 kt ni n cng COM ca
my tnh. Mch n gin ch nhm mc ch gii thiu khi giao tip my tnh ca PIC v
cch lp trnh cho n trong CCS.
56
E R/W RS VEE VCC VSS
D6D7
LCD_1602A
1314
1516
KA
D4
D5
D6
D7
U14
13
8
TX_PIC
C9 1uF
1uF C8
VCC
C10
C7
11
10
1
3
4
5
2
6
R1IN
R2IN
R 1OU T
R2OUT
T1IN
T2IN
T1OU T
T2OUT
C1+
C1C2+
C2V+
V-
12
9
VCC
RW
RX_PIC
RX_PC
21
22
23
TX_PIC
24
25
RX_PIC
D4
D5
D6
D7
14
7
33pF
26
27
28
29
30
20MHz
13
14
15
16
17
18
19
20
1uF
MAX232
RS
E
33pF
1uF
RD2/PSP2
RD3/PSP3
RB7/PGD
RB6/PGC
RC4/SDI/SDA
RC5/SDO
RB5
RB4
RC6/TX/CK RB3/PGM
RC7/RX/DT
RB2
RD4/PSP4
RB1
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
VDD1
RD0/PSP0
VSS1
RD1/PSP1
40
39
38
37
36
35
34
33
4
5
6
7
8
9
10
32
31
HI
11
HI
12
VDD
RA1/AN1
RA0/AN0
VPP
VSS
3
2
1
10K
HI
TX_PC
RW
RS
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
25/32
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
26/32
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
lcd_init(); // Khi to cho LCD
lcd_putcmd(0x01);
lcd_putcmd(line_1);
printf(Enter a String.);
printf(Or anything you want!);
while (1) {}
}
M t chng trnh: Trn y l chng trnh giao tip vi my tnh, ta thy trong CCS
s dng giao tip ni tip ta ch cn khai bo #use rs232(). Cc hm giao tip vi my tnh m
CCS h tr l:
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
27/32
3.4.
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
28/32
S mch in:
VCC
R10
R
SW1
Phim chon
33
34
35
36
37
38
40
39
R9
RESET
VCC
10K
Cong tac
2
3
4
5
6
7
OSC1
OSC2
OSC1
OSC2
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
RD0/PSP0
RD1/PSP1
LED1
LED2
LED3
19 LED1
20 LED2
21 LED3
12
31
D7
R7
DLE
R2260
R5
LED5 LDE
R4
DLE
4D
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
MCLR/VPP
Y1
R8
LED4 6D
13
14
RESET
D8
5D
OSC1/CLKI
OSC2/CLKO
20MHz
C1
22p
15
16
17
18
23
24
25
26
VSS
VSS
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
VDD
VDD
22
27
28
29
30
LED4
LED5
LED6
LED7
LED8
LED6 DLE
LED7 3D
LED8
L DE
R1
2D
DLE
8
9
10
11
32
C2
22p
VCC
1D
LED
LED
VCC
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
29/32
#INT_EXT
EXT_ISR() {
mode+
+;
if (mode==9) mode =
0;
}
// End of INT
void program1();
void program2();
void program3();
void program4();
void program5();
void program6();
void program7();
void program8();
void main() {
trisd = 0x00;
trisb = 0xFF;
portd=0xff;
enable_interrupts(int_EXT);
ext_int_edge(H_TO_L); // Chn ngt theo sn m
enable_interrupts(GLOBAL);
mode = 0;
while (1) {
switch(mode) {
case 1: program1(); break;
case 2: program2(); break;
case 3: program3(); break;
case 4: program4(); break;
case 5: program5(); break;
case 6: program6(); break;
case 7: program7(); break;
case 8: program8(); break;
}
}
}
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
30/32
void program1() {
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
30/32
PortD = 0x00;
delay_ms(250);
Portd = 0xFF;
delay_ms(250);
}
void program2() { // LED sng chy t tri qua phi
temp = 0xFF;
for (i=0;i<=8;i++)
{ portd = temp;
delay_ms(250);
temp >>= 1;
}
}
void program3() { // LED sng chy t phi qua tri
temp = 0xFF;
for (i=0;i<=8;i++)
{ portd = temp;
delay_ms(250);
temp <<= 1;
}
}
void program4() {
portd = 0xAA;
delay_ms(500);
portd = 0x55;
delay_ms(500);
}
void program5() {
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);
}
void program6() {
temp = 0xFF;
for (i=0;i<=8;i++)
{ portd = temp;
delay_ms(250);
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
31/32
}
void program7() {
void program8() {
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);
}
Ngi bo co:
Nguyn Ch Linh
Ti liu:
TUT01.01.PVN
Ngy:
9/8/2006
Trang:
32/32
3.5.
3.6.
3.7.