
1
BÙI QUC BO
LP TRÌNH H THNG
NHÚNG
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
Concurrency (Tác v. ch/y ñ1ng
th3i)
Mt h thng có th có 2 hay nhiu tác v chy ñc
lp nhau.
VD: Mt h thng dùng 8051 ñ:
Bt/T(t 1 LED g(n vào P1.0 sau chu kỳ 500 ms.
Cho 3 LED vàng4xanh4ñ6 l7n lư9t sáng4t(t sau chu
kỳ 500 ms
Chia 2 tác v. trên thành 2 máy tr/ng thái SM
ñ1ng b; v<i chu kỳ 500 ms

2
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
LEDON LEDOFF
GREEN_ON YELLOW_ON RED_ON
Blink LED Period: 500 ms
Rotate LED Period: 500 ms
LED SHOW
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
enum BLState_t {OFF_STATE,ON_STATE} BLState;
enum RTState_t {YELLOW_STATE, GREEN_STATE,
RED_STATE} RTState;
unsigned char timerFlag = 0;
void TimerISR() {
timerFlag = 1;
}
void BL_Update() {
…
}
void RT_Update() {
…
}

3
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
void main(void)
{
outputInit();
timerInit();
BLStateInit();
STStateInit();
while (1)
{
while (!timerFlag);
BL_Update();
RT_Update();
timerFlag = 0;
}
}
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
Shared variable (biLn dùng chung)
Hot ñng c;a mt h thng có th ñư9c
chia thành nhiu tác v ñc lp m<c dù
chúng có liên quan t@i nhau.
VD:
M;t h thOng phát hi n chuyQn ñ;ng s" d.ng 1 sensor kLt nOi vào
chân P1.0. M;t chuyQn ñ;ng ñưTc phát hi n khi sensor bUng 1 trong
2 lVn lâý mXu liên tiLp cách nhau 200ms.
LED1 (nôí vào P1.1) ñưTc nh[p nháy sau v<i chu kỳ 200ms trong
th3i gian phát hi n chuyQn ñ;ng.
LED2 (nôí vào P1.2) ñưTc bt khi phát hi n chuyQn ñ;ng và t\t 10s
sau khi chuyQn ñ;ng không còn b^ phát hi n.

4
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
Shared variable (biLn dùng chung)
S0 S1 S2
!P1.0 !P1.0
P1.0 P1.0
P1.0
!P1.0
mnt = 0 mnt = 1
T0 T1 T2
!mnt
mnt
mnt
!mnt
cnt = 0
!mnt && (cnt < 50)
cnt++
!mnt && !(cnt < 50)
mnt
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
Shared variable (biLn dùng chung)
Chú ý:
Cha có 1 tác v. ghi vào biLn chung. Nhicu
tác v. có thQ cùng ñdc m;t biLn chung.
VD
Ve máy tr/ng thái cho h thOng làm vi c sau:
Bt lò ñOt bUng cách set P1.0 khi nhi t ñ; ño ñưTc (ñdc
vào tf P2) nhg hơn 100.
Trong khi bt lò, ch<p nháy LED nOi vào P1.1 v<i chu kỳ
500ms ñQ báo cho ngư3i dùng biLt là lò ñang bt.

5
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
Máy tr/ng thái có chu kỳ khác nhau
Các tác v. v<i chu kỳ khác nhau có thQ ñưTc
ch/y bUng cách s" d.ng m;t biLn ñQ ñLm sO
lVn c3 timerFlag ñưTc bt (Timer tick) và thjc
thi khi biLn ñó ñ/t ñLn giá tr^ mong muOn.
VD:
ViLt chương trình ñQ 8051 ch<p LED g\n vào
P1.0 v<i chu kỳ 600 ms, và cho 3 LED xanh,
vàng, ñg lVn lưTt sáng sau khoong th3i gian 1s.
BM K Thut ði n T" # ðH Bách Khoa TP.HCM
enum blState_t {LEDON, LEDOFF} BLState;
enum blState_t {GREEN, YELLOW,RED} RTState;
static unsigned char timerFlag = 0;
void timerISR(void)
{
timerFlag = 1;
}
void BLUpdate
{
…
}
void RTUpdate
{
…
}

