Professional Documents
Culture Documents
Mc lc
Gii thiu kit th nghim BK89IT ....................................................................................... 4
M hnh lp trnh C trong vi iu khin .............................................................................. 5
Bi 1 : Hng dn ci t Keil C v Flash Magic .......................................................... 6
1.1 Ci t Keil C ............................................................................................................ 6
1.2 Ci t Flash Magic................................................................................................. 11
1.3 Cu hnh cho Flash Magic ....................................................................................... 16
Bi 2 : Truy xut Port I/O ............................................................................................. 22
2.1 To project trn Keil C ............................................................................................ 22
2.2 Vit chng trnh n gin ..................................................................................... 32
2.2.1 Kt ni phn cng ............................................................................................ 32
2.2.2 Vit chng trnh ............................................................................................. 33
2.2.3 Np chng trnh.............................................................................................. 34
2.2.4 Cc li xy ra khi np chng trnh ................................................................. 35
Bi 3 : iu khin n gin Led 7 on ....................................................................... 38
3.1 Kt ni phn cng: .................................................................................................. 38
3.2 Vit chng trnh .................................................................................................... 39
3.2.1 Hm init_main() ............................................................................................... 39
3.2.2 Hm main() ...................................................................................................... 39
3.3 Mt s li lp trnh quan trng ................................................................................ 41
Bi 4 : Ngt Timer ........................................................................................................ 42
4.1 Khai bo ngt timer ................................................................................................. 42
4.2 Vit chng trnh .................................................................................................... 43
4.2.1 Hm init_timer1()............................................................................................. 43
4.2.2 Hm start_timer1() ........................................................................................... 43
4.2.3 Hm timer1_isr() .............................................................................................. 43
4.2.4 Hm delay_ms(unsigned int duration) ............................................................. 44
4.2.5 Hm stop_timer1() ........................................................................................... 44
Bi 5 : Dng ngt timer vit ng dng LED RIVER .................................................... 45
5.1 Kt ni phn cng ................................................................................................... 45
5.2 Vit chng trnh .................................................................................................... 45
Bi 6 : Chng rung cho phm ........................................................................................ 47
6.1 Nguyn l chng rung ............................................................................................. 47
6.2 Kt ni phn cng ................................................................................................... 48
6.3 Vit chng trnh .................................................................................................... 49
6.3.1 Hm initKey() .................................................................................................. 49
6.3.2 Hm getKey() ................................................................................................... 49
Bi 7 : Qut led iu khin Led 7 on ........................................................................ 51
7.1 Nguyn l qut led 7 on....................................................................................... 51
7.2 Kt ni phn cng ................................................................................................... 52
7.3 Vit chng trnh .................................................................................................... 52
7.3.1 Hm init_led7() ................................................................................................ 52
7.3.2 Hm clear_led7() .............................................................................................. 53
7.3.3 Hm set_position(unsigned int pos) ................................................................. 53
7.3.4 Hm get_position()........................................................................................... 53
BKIT HARDWARE CLUB www.bkit4u.com
led7.h
timer.c
#include "timer.h"
int counter0;
int counter1;
void init_tim er0();
{
IE |= 0x20;
TR0 = 1;
..........................
}
void init_tim er1()
{
..........................
}
void private_function()
{
..........................
}
led7.c
#ifndef __LED7_H_
#define __LED7_H_
#include "led7.h"
unsigned char led7_buff[8];
void init_led7();
void scan_led7();
...............
void init_led7();
{
P0 = 0x00;
T2 = 0x00;
..........................
}
void scan_led7()
{
..........................
}
void private_function()
{
..........................
}
#endif
Bi 1 :
Mc ch :
Ci t Keil C son tho chng trnh.
Ci t Flash Magic np chng trnh.
Cu hnh cho Flash Magic.
1.1 Ci t Keil C
Keil C l chng trnh h tr kh y ngi dng son tho chng trnh
dnh cho cc vi iu khin thuc h 8051. ci t bn tin hnh theo cc bc nh
sau:
Bc 1 : Click vo file c51v815.exe trong CD i km, mn hnh sau s xut hin
10
Bc 2 : Chn Next
11
12
Bc 5 : mc nh v chn Next
13
Bc 6 : Chn Next.
14
15
16
17
Bc 3 : Chn menu Option v chn Advance Option, mn hnh sau s xut hin :
18
Bc 5 : Xem cng COM ang l cng no. Bn thu nh Flash Magic li, trn
mn hnh Desktop, t biu tng My Computer, click phi chut v chn Manage.
19
20
21
Bi 2 :
Mc ch:
To project n gin trong Keil C v cu hnh cho Keil C.
iu khin Port 1 v Port 3.
Np chng trnh bng Flash Magic.
Yu cu:
Vit chng trnh nhn nt 1 n th 1 sng, nt 2 n th 2 sng,.
22
23
24
Bc 6 : Project c to ra nh sau:
25
26
27
28
29
30
31
32
33
34
35
li ny, Flash Magic hin th thng bo yu cu bn nhn reset, nhng khi nhn
reset th thng bo trn xut hin, bn chnh li tc Baud l 9600.
36
li ny, Flash Magic cng chy c ti phn ch nhn nt Reset, sau khi n
nt Reset th thng bo ny xut hin.
Xung t Port 3
Li ny xut hin l do ngi lp trnh can thip n Port 3, nn Flash Magic
khng th giao tip c vi vi iu khin np chng trnh. Khi b li ny thng bo
sau y s xut hin (tng t nh thng bo chn sai cng COM) :
37
Bi 3 :
Mc ch:
Nm nguyn l iu khin led 7 on.
Yu cu:
Vit chng trnh nhn nt 1 s hin th s 0 led 7 on ngoi cng, nt 2 s
hin th s 1 led 7 on k tip, v.v
P0 : Data
P0.0 : a
P0.1 : b
P0.2 : c
P0.3 : d
P0.4 : e
P0.5 : f
P0.6 : g
P0.7 : dot
P2 : Select
P2.0 : Led 1
P2.0 : Led 2
P2.0 : Led 3
P2.0 : Led 4
P2.0 : Led 5
P2.0 : Led 6
P2.0 : Led 7
P2.0 : Led 8
38
3.2.2 Hm main()
Hm ny s gi init_main(), sau xt cc gi tr ca Port 3 v hin th ra led 7
on gi tr tng ng.
void main()
{
//P0 : Data
//P0.0 : a
//P0.1 : b
//P0.2 : c
//P0.3 : d
P2 : Select
P2.0 : Led 1
P2.0 : Led 2
P2.0 : Led 3
P2.0 : Led 4
39
P2.0 : Led 5
P2.0 : Led 6
P2.0 : Led 7
P2.0 : Led 8
init_main();
while(1)
{
if((P3 & 0x01) == 0) // P3 = 1111 1110
{
P0 = led7_data[0];
P2 = 0x01;
}
else if((P3 & 0x02) == 0)// P3 = 1111 1101
{
P0 = led7_data[1];
P2 = 0x02;
}
else if((P3 & 0x04) == 0)// P3 = 1111 1011
{
P0 = led7_data[2];
P2 = 0x04;
}
else if((P3 & 0x08) == 0) // P3 = 1111 0111
{
P0 = led7_data[3];
P2 = 0x08;
}
else if((P3 & 0x10) == 0) // P3 = 1110 1111
{
P0 = led7_data[4];
P2 = 0x10;
}
else if((P3 & 0x20) == 0) // P3 = 1101 1111
{
P0 = led7_data[5];
P2 = 0x20;
}
else if((P3 & 0x40) == 0) // P3 = 1011 1111
{
P0 = led7_data[6];
40
41
Bi 4 :
Ngt Timer
Mc ch:
Tm hiu ngt timer ca 89V51
Xy dng module dnh cho timer ca 89V51 c th dng li c.
Yu cu:
Vit chng trnh hin th t 0, sau 1 giy tng ln 1, khi tng n 9 th chuyn
sang hin th led k tip, hin th bt u li t 0.
42
void start_timer0();
void start_timer1();
void stop_timer0();
void stop_timer1();
void delay_ms(unsigned int duration);//using timer1 to delay in ms
4.2.1 Hm init_timer1()
Hm ny lm nhim v khi to ngt timer1 sau mi 1ms, khi khi to ngt
timer1 xong, ta phi hin thc hm phc v ngt qung cho n, nu khng chng trnh
s chy sai.
void init_timer1()
{
IE &= ~(0x08);// enable timer 1
IE |= 0x08;
TMOD &= ~(0x10);// setup mode for timer 1
TMOD |= 0x10;
TH1 = (-1000/256); //1 ms
TL1 = (-1000%256);
TR1 = 1; //start timer1
}
4.2.2 Hm start_timer1()
void start_timer1()
{
TR1 = 1;
}
4.2.3 Hm timer1_isr()
y l hm phc v ngt qung ca timer1, c khai bo v nh ngha nh sau:
43
4.2.5 Hm stop_timer1()
void stop_timer1()
{
TR1 = 0;
}
Phn hin thc cc bn xem trong project Bai 4 bit thm chi tit.
44
Bi 5 :
Mc ch:
Nm vng ngt timer.
S dng ngt timer vit ng dng LED RIVER.
Yu cu:
Vit chng trnh led river n gin, 1 led chy t P0.0 sang P1.1, n P0.7
chuyn sang P3.7, P3.6. Khi ti P3.0 th tr v P0.0. Thi gian chuyn qua trng thi mi
l 1s
45
46
Bi 6 :
Mc ch:
Nm vng k thut chng rung cho phm.
Yu cu:
Vit chng trnh xut s m ra led 7 on vi gi tr khi to l 0. Khi nhn nt
1 (c ni vi P3.0) th gi tr ny tng ln 1, tng n 9 th quay tr li 0.
47
48
6.3.1 Hm initKey()
void initKey()
{
KeyReg0 = 0x00;
KeyReg1 = 0x00;
KeyReg2 = 0x00;
KeyReg3 = 0x00;
}
Trong KeyReg0, KeyReg1, KeyReg2 dng lu 3 ln lin tip. Khi 3 bin
ny bng nhau, bin KeyReg3 mi c cp nht. Bin KeyReg3 l gi tr hp l ca
phm nhn.
6.3.2 Hm getKey()
Hm ny c chia lm 2 phn, phn u l chng rung phm dng 2 ln so
snh trng nhau. Phn th 2 x l khi 1 phm c , phi sau 1 khong thi gian
TimeOutForKeyPress mi c tnh cc.
49
50
Bi 7 :
Mc ch:
Nm vng k thut qut Led.
ng dng qut Led vo vic iu khin 8 led 7 on.
Yu cu:
Vit module iu khin Led 7 on c th dng li cho cc ng dng khc.
a ra hm xut gi tr s nguyn ra led 7 on ti bt k v tr no.
51
7.3.1 Hm init_led7()
void init_led7()
{
P0 = 0x00;
P2 = 0x00;
position = 0;
led7_index = 0;
is_valid_data = 1;
}
//data port
//selected port
//output index
//scan index
//flag to check if data is valid
P0 : Port xut d liu cho led 7 on, khi to 0x00 tc l khng c led no
trong led 7 on sng.
P2 : Port chn led 7 on no trong 8 led s nhn data t Port 0, tc cc mc 1,
P2 = 0x01 (0000 0001)tc l led 7 on ngoi cng bn tri s sng, P2 = 0x20 (0000
0010) tc l led th 2 tnh t tri s sng.
52
7.3.2 Hm clear_led7()
void clear_led7()
{
led7_buffer[0] = 0x00;
led7_buffer[1] = 0x00;
led7_buffer[2] = 0x00;
led7_buffer[3] = 0x00;
led7_buffer[4] = 0x00;
led7_buffer[5] = 0x00;
led7_buffer[6] = 0x00;
led7_buffer[7] = 0x00;
}
Hm ny ch n gin l xo buffer 8 phn t, lc ton b cc led s tt. Buffer
ny dng cha d liu ca 8 led 7 on, d liu ca tng led s c nh k a ra
led tng ng.
7.3.4 Hm get_position()
unsigned int get_position() //get current position
{
return position;
}
Hm ny tr v v tr ang xut d liu.
53
}
Hm ny dng ct tng ch s ca s num b vo buffer tng ng. Vng
lp for dng hin thc tc v ny, ch s hng n v ca num s c b vo buffer
v tr position.
7.3.7 Hm scan_led7
void scan_led7()
{
if(is_valid_data)
{
P2 = 0x00;
P0 = led7_buffer[led7_index];
P2 = 1 << led7_index;
led7_index++;
if(led7_index == 8)
BKIT HARDWARE CLUB www.bkit4u.com
//remove noise
//data for the next led
//enable data
54
55
Bi 8 :
Mc ch:
ng dng qut Led iu khin Ma trn led 2 mu.
Yu cu:
Vit chng trnh nh k 1s xut cc ch ci in hoa t A-Z ra ma trn led.
56
8.3.1 Hm init_led_matrix()
void init_led_matrix()
{
P0 = 0x00; //red data
P2 = 0x00; //green data
index_led_matrix = 0; //index use to scan led
alphabet_index = 208;// in the initial, led matrix doesn't display
anything
}
Trong :
P0 : Port xut d liu cho ma trn led.
P2 : Port xut d liu xanh cho ma trn led.
index_led_matrix : bin dng qut d liu hin th trn ma trn led, ta dng
bin ny ly d liu trong 2 buffer (mi buffer 8 phn t) hin th v chn ct.
alphabet_index : bin dng ly d liu cn hin th, b vo 2 buffer v
xanh. Mng d liu ny thng kh ln v c khai bo trong file table_led_matrix.h.
8.3.2 Hm scan_led_matrix()
Hm ny c gi trong timer, c nhim v xut buffer hin th ra ma trn led,
nh k xut tng phn t ca buffer ra ct tng ng.
void scan_led_matrix()
{
P1 = 0; //remove noise
P0 = red_buff[index_led_matrix];
P2 = green_buff[index_led_matrix];
P1 = 1 << index_led_matrix;
index_led_matrix = (index_led_matrix + 1) % 8;
//next column
8.3.3 Hm update_display_led_matrix()
Hm ny dng thay i ni dung hin th, cc ng dng ca ngi dng ch
yu l thay i code hm ny.
void update_display_led_matrix()
{
char i;
for(i = 0; i < 8; i++)
{
red_buff[i]=alphabet_upcase_led_matrix[i+alphabet_index ];
green_buff[i]=alphabet_upcase_led_matrix[i+alphabet_index];
}
}
Hm main ch vic thay i alphabet_index (d liu ca ch ci k tip) ri gi
hm update_display_led_matrix(), nh k 1s sau thay i ch k tip:
57
58
Bi 9 :
Mc ch:
Nm vng nguyn l iu khin ma trn led. Xy dng ng dng trn ma trn led.
Yu cu:
Vit chng trnh ch chy trn ma trn led, cung cp interface gip ngi dng
c th thay i d dng.
59
60
9.3.2 Hm main()
void main()
{
init_main();
init_timer0();
//use for scan led
init_timer1();
//use for delay_ms() function
init_led_matrix();
//initiate led matrix
set_message("HELLO WORLD");
while(1)
{
delay_ms (300);
update_display_led_matrix();
}
}
Hm update_display_led_matrix() tng con tr alphabet_index ly d liu
trong data_buff b vo red_buff v green buff. Bin alphabet_index c khi to l -8
vi ngha trng thi u tin mn hnh led 7 on khng hin th g c. Khi hin thc
hm ny bn ch kim tra iu kin ca alphabet_index ly d liu cho ng. Chi
tit ca chng trnh cc bn tham kho ti th mc Bai 9.
61
Bi 10 : Ngt ngoi
Mc ch:
Nm vng k thut iu khin ngt ngoi.
Yu cu:
Vit chng trnh khi c ngt ngoi 0 th tng bin m ln 1, ngt ngoi 1 th
gim i 1, xut gi tr ra led 7 on.
10.3.1 Hm init_ext_int0()
void init_ext_int0()
{
IE &= ~(0x01);// enable external interrupt 0
IE |= 0x01;
IT0 = 1;
}
10.3.2 Hm init_ext_int1()
void init_ext_int1()
{
IE &= ~(0x04);// enable external interrupt 1
62
10.3.3 Hm ext0_isr()
y l hm phc v ngt ngoi 0.
void ext0_isr() interrupt 0
{
//Add your code here
if(count<9)
count++;
}
10.3.4 Hm ext1_isr()
y l hm phc v ngt ngoi 1.
void ext0_isr() interrupt 1
{
//Add your code here
if(count>0)
count--;
}
63
Bi 11 : iu khin encoder
Mc ch:
Hiu c nguyn l hot ng ca encoder. Nm vng k thut iu khin
encoder bng ngt ngoi.
Yu cu:
Xy dng chng trnh c s xung encoder v hin th gi tr ra led 7 on.
64
65
66
Ngoi ra trong frame truyn c th c thm bit odd parity (bit l) hoc even
parity (bit chn) kim tra li trong qu trnh truyn. Bit parity ny c c im nu
s dng odd parity th s cc bit 1 + odd parity bit s ra 1 s l cn nu s dng even
parity th s cc bit 1 + even parity bit s ra 1 s chn.
67
68
Bit
SCON.7
K hiu
SM0/FE
Chc nng
Cch dng ca bit ny c nh ngha bng gi tr ca bit
SMOD0 trong thanh ghi PCON, nu SMOD=0, bit ny c
c v vit l SM0, n vi bit SM1 nh ngha ch hot
ng ca cng ni tip. Nu SMOD0=1, bit ny c c v
vit l FE (khung li). FE c set trong qu trnh nhn khi
pht hin bit dng khng hp l, v n ch c xa bi phn
mm. (ch rng cc ch UART nn c lp trnh(thng
qua SM0 v SM1) khi SMOD0=0-ch mc nh sau cc
qu trnh RESET)
69
00
01
10
11
SCON.5
SM2
SCON.4
REN
SCON.3
TB8
SCON.2
RB8
SCON.1
TI
SCON.0
RI
Cc ch truyn ni tip:
Ch 0: ch ny chn RxD s va lm nhim v thu v pht d liu
cn chn TxD lm nhim v pht xung dch bit(Shift Clock) vi tc sung
bng 1/12 tc xung ca XTAL.D liu truyn i gm 8 bit vi bit LSB
c truyn hoc nhn trc. ng dng ca ch ny l m rng ng ra
cho 8051 t 2 ng TxD,RxD s to ra 8 ng m rng.
8051
TxD(P3.1)
CLOCK
Data
Shift register
RxD(P3.0)
70
TH1 (Hexa)
9600
-3
ED
4800
-6
FA
2400
-12
F4
1200
-24
E8
71
//timer1 run
72
73
kb_Shield
VCC
VCC
R3
22K
J3
R4
22K
6
VCC
5
kb_Vcc
kb_Clock
P3.3
4
3
kb_Ground
kb_Data
2
P3.4
74
75
76
77
CCAP0H = 0xff;
CCAP1H = 0xff;
CCAP2H = 0xff;
CCAP3H = 0xff;
CCAP4H = 0xff;
CCON |= (1<<6);
78
Control
Operation
Th t
1
2
3
4
Tn
VSS
Vdd
Vee
RS
R/W
0
1
0
1
0
1
T 1 xung 0
D0
D1
D2
D3
D4
D4
D6
D7
0|1
0|1
0|1
0|1
0|1
0|1
0|1
0|1
7
8
9
Data/Command 10
11
12
13
14
Mc Logic
M t
0V
+5V
0-Vdd
D0-D7 l command
D0-D7 l Data
Write
Read
Disable
Normal
Truyn
Data
hoc
Command xung LCD
Bit 0 LSB
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7 MSB
79
80
15.3.3 B nh CGROM
B nh dng lu tr cc k t hin th trn LCD. Cc gi tr lu trong b nh
ny nh sau:
81
82
Lnh
Clear display
Return home
Entry mode set
Display on/off
control
Cursor/Display
shift
Function set
Set CGRAM
address
Set DDRAM
address
Read BUSY flag
(BF)
Write to
DDRAM or
CGRAM
Read from
DDRAM or
CGRAM
RS
RW
D7
D6
D5
D4
D3
D2
D1
D0
Thi gian
thc thi
1.52ms
1.52ms
37s
S/
C
R/
L
37s
DL
37s
DDRAM address
37s
BF
DDRAM address
0s
D7
D6
D5
D4
D3
D2
D1
D0
43s
D7
D6
D5
D4
D3
D2
D1
D0
43s
I/D RL
CGRAM address
37s
37s
RL
S 1 = Display shift on
0 = Display shift off
DL 1 = 8-bit interface
0 = 4-bit interface
D 1 = Display on
0 = Display off
U 1 = Cursor on
0 = Cursor off
B 1 = Cursor blink on
0 = Cursor blink off
1 = Shift right
0 = Shift left
83
84
85
86
//1
//2
//3
//4
//5
//6
87
//7
//8
//9
//10
//11
}
ngha cc lnh trn nh sau:
v Lnh 1 : gi hm lcd_delay(15000) delay 15ms.
v Lnh 2 : ko chn RS (ni vi LCD_PORT ti bit 1) xung 0. Lnh ny c
nh ngha l 1 macro trong file lcd.h:
#define RS(x)
( (x) ? ( LCD_PORT |= 0x02 ) : ( LCD_PORT &= 0xFD ) )
CMD c define l 0 nn lnh RS(CMD) s c iu kin (x) l false v s thc
hin phn th 2 ca lnh trn : LCD_PORT & 0xFD (ko bit 1 xung 0 : 1111 1101).
v Lnh 3 : thc hin trng thi u tin sau khi ch 15ms, ghi D7 D6 D5 D4 =
0011. Cc chn ny c ni vi 4 bit cao ca vi iu khin nn ta phi dch tri gi tr
0x03 4 bit.
v Lnh 4 : delay khong 41ms.
v Lnh 5,6,7,8 : Thc hin cc trng thi 2,3 v 4. Sau lnh 7 th LCD
chuyn sang ch 4 bit, v gi 1 byte, ta s gi 2 ln 4 bit cao trc ri ti 4 bit thp.
v Lnh 9 : gi hm lcd_write_cmd ghi 4 bit 2 ln, gi tr 0x28 tng ng vi
N = 1 (hin th trn 2 hng ca LCD) v B = 0 (font nh dng 5x7 im).
v Lnh 10 : thc hin lnh display on (xem thm trong bng lnh), D = 1.
v Lnh 11 : thc hin lnh entry set mode, 0x06 tng ng vi ch dch phi
tng dn.
15.8.3 Xo mn hnh
Hm ny ch n gin l gi lnh clear mn hnh lcd (xem thm trong bng lnh
ca LCD).
void lcd_clear()
{
lcd_write_cmd(0x01);
lcd_goto_xy(0, 0);
}
88
15.8.5 In k t ra mn hnh
Hm ny nhn thng s l 1 k t v hin th k t ra mn hnh LCD. Vic hin
thc hm ny kh n gin, ta ch cn ko chn RS xung 0 l LCD s hiu cc bit D7D4 l d liu.
void lcd_print_char(unsigned char dat)
{
lcd_wait_busy();
//find next position
if(current_row == 0 && current_col == 16)
lcd_goto_xy(1,0);
if(current_row == 1 && current_col ==16)
lcd_goto_xy(0,0);
RS(DAT); //RS = 0
lcd_write_4bits(dat);
lcd_write_4bits(dat << 4);
current_col ++; //update new position
}
T nhng hm c bn ny, bn c th hin thc thm cc hm xut 1 string
hay 1 gi tr s ra mn hnh LCD. Code chi tit c th xem thm trong th mc Bi 15.
89
90
91
92
93
94
95
96
97
c d liu t DS1307
// Second
// Minute
// hour
// Day
98
//second = 12
// minute = 55
// hour = 05 ,24-hour mode(bit 6=0)
// Day = 1 or sunday
// Date = 01
// month = August
// year = 05 or 2005
//out second to P3
// delay about 1 second
}
}
99