Chương 6:
Ch
−
¬ng
tr×nh xö lý
p
h
Ým
chung
Keybo
a
rd
yes
R
u
n=
0?
y
e
s
Flo
_
C
all?
ye
s
Bu
z
y
=1
?
Reset
K
ey_buff01
C
all
_S
B
N02
Call
_SB
N03
C
all
_
SB
N0
1
Li
_
cal
l?
No
yes yes
yes
Up_call
?
Bu
sy
=1
R
un=0?
Bu
s
y
=
1
y
e
s
Call SBN07 Call
SBN09 Call
SBN
08
R
un=0?
yes
Call SBN04 Call SBN05 Call
SB
N0
6
Reset
K
ey_
buff0
2
H
×
nh
2
-
10
:
S¬
®
å
thu
Ë
t
to¸n
cña
ch
−
¬n
g
tr
×
nh
bµn
p
h
Ý
m
1. KiÓm tra xem cã
phÝm
gäi tÇng
kh«ng,
nÕu cã chuyÓn
sang
b
−
íc
2,
ng
−
îc
l¹i
sang
b
−
íc 8.
2. KiÓm tra cê busy, nÕu busy = 1 chuyÓn sang
b
−
íc
3,
ng
−
îc
l¹i
sang
b
−
íc 6.
3. KiÓm tra cê run, nÕu run = 0 chuyÓn sang
b
−
íc
4, nÕu
run = 1 chuyÓn
sang b
−
íc 5.
4. Gäi
ch
−
¬ng
tr×nh
con
SBN
002, sang
b
−
íc 8.
5. Gäi
ch
−
¬ng
tr×nh
con
SBN
003, sang
b
−
íc 8.
6. Gäi
ch
−
¬ng
tr×nh
con
SBN
001, sang
b
−
íc 8.
7. Reset cê key_buff1 ( cã
phÝm
gäi tÇng ) = 0, sang
b
−
íc 8.
8. KiÓm tra xem cã phÝm gäi thang kh«ng, cã sang
b
−
íc
9,
ng
−
îc
l¹i
sang b
−
íc 21.
9. KiÓm tra cê run, run = 0
th×
sang
b
−
íc
10, run = 1 sang
b
−
íc 12.
10. KiÓm tra cê busy, busy = 1
th×
sang
b
−
íc
11, busy = 0
sang
b
−
íc 13.
11. KiÓm tra cê run, run = 0
th×
sang
b
−
íc
15, run = 1 sang
b
−
íc 14.
12. KiÓm tra cê busy, busy = 1
th×
sang
b
−
íc
17, busy = 0
sang
b
−
íc 16.
13. Gäi
ch
−
¬ng
tr×nh
con
SBN
007, sang
b
−
íc 20.
14. Gäi
ch
−
¬ng
tr×nh
con
SBN
009, sang
b
−
íc 20.
15. Gọi
ch
ơng
trình
con
SBN
008, sang
b
ớc 20.
16. Gọi
ch
ơng
trình
con
SBN
004, sang
b
ớc 20.
17. Kiểm tra cờ run, run = 0
thì
sang
b
ớc
19, run = 1 sang
b
ớc 18.
18. Gọi
ch
ơng
trình
con
SBN
005, sang
b
ớc 20.
19. Gọi
ch
ơng
trình
con
SBN
006, sang
b
ớc 20.
20. Reset cờ key_buff 02 ( có
phím
gọi thang ) =
0.
21. Kết thúc
ch
ơng
trình.
2.5
Ch
ơng
trình
đó
ng
-
mở
cửa
(
door
).
Op
e n _
D
o o
r
Se
t
T
IM
0 1
TIM 2 = 0
?
ye s
Re
a
d
k e y
Cl
o
s e _ f a s t?
ye s
Cl
o
s
e
d
o o
r
Se
t
T
IM
0 3
TIM
3 = 0
ye s
Re
a
d
k e y
H
ì
n
h
2-
11
:
S
ơ đ
ồ
th u
ậ
t
to
á
n
c
ủ
a
c h
ơng
tr
ì
nh c ử
a ( D
o
or
).
1. Ra lệnh mở cửa;
đặt
bộ
đếm
TIM 002, chuyển sang
b
ớc
2.
2. Kiểm tra xem
đã
hết thời gian trễ
ch
a,
nếu
ch
a th
ì
sang
b
ớc
3,
ng
ợc
lại
sang
b
ớc 5.
3. Gọi
ch
ơng
trình đọc phím
( Read_key ), sang
b
ớc 4.
4. KiÓm tra xem cã cê
®
ãng
cöa nhanh
kh«ng,
nÕu cã
th×
sang
b
−
íc
5,
ng
−
îc
l¹i
vÒ
b
−
íc 2.
5. Ra lệnh
đóng
cửa,
đặt
bộ TIM 003, sang
b
ớc 6.
6. Kiểm tra xem
đã
hết thời gian trễ
ch
a,
nếu
ch
a th
ì
sang
b
ớc
7,
ng
ợc
lại
sang
b
ớc 8.
7. Gọi
ch
ơng
trình đọc phím
( Read_key ), sang
b
ớc 6.
8. Kết thúc
ch
ơng
trình.
2.6.1
các
Ch
ơng
trình
ng
ắt.
2.6.1
Ch
ơng trình
ngắt
sensor.
St
art
INC
S
ens
o
r
<
=
Sensor
CMP 3
>
Set S03
=1
Set S04
=1
<
=
Sensor CMP 5
Set S05
=1
En
d
Sơ
đ
ồ
thuật
toán
xử lý ngắt Sensor
St
art
No
Key_buff01=1 ?
St
art
No
Key_bu
ff01=1
?
Calculat
e K
ey
Set
K
ey_buff0
1=1
End
Calculat
e K
ey
Set
K
ey_buff0
1=1
E
nd
Sơ
đ
ồ
thu
ậ
t
toán
xử lý
ngắt
bàn phím
gọi
tầng
Sơ đồ
thuật
toán
xử lý ngắt
bàn
ph
í
m
gọi
thang
H
ì
nh
2-12
:
C
á
c s
ơ
đồ
thu
ậ
t
toán
xử lý
ngắt.
1.
Tăng giá
tr
ị
sensor
lên
một
giá trị,
chuyển sang
b
ớc 2.
2. So
sánh giá
trị của sensor với số 3, nếu
bằng
sang
b
ớc
3, lớn hơn
sang b
ớc
4, nếu nhỏ
hơn
sang
b
ớc 6.
3. Set cờ S03 = 1, sang
b
ớc 7.
4. So
sánh giá
tr
ị
của sensor với số 5, nếu
bằng
sang
b
ớc
5, nhỏ hơn
sang b
ớc 6.
5. Set cờ S05 = 1, Reset
giá
tr
ị
sensor = 0, chuyển sang
b
ớc 7.
6. Set cờ S04 = 1, chuyển sang
b
ớc 7.
7. Kết thúc
ch
ơng
trình.
2.6.2
Ch
ơng
t
r
ình
ngắt đọc phím
gọi
tầng.
1. Kiểm tra xem
phím
bấm
tr
ớc
đó đã
đợc
xử lý
ch
a,
nếu
ch
a
(
key_buff
= 1 )
thì
sang
b
ớc
3, rồi ( key_buff1 = 0 )
thì
sang
b
ớc 2.
2.
Tính toán
v
à
đ
a
ra
mã
của
p
h
í
m
đợc
gọi ( Scan code
), set
key_buff1=1.
3. Kết thúc
ch
ơng
trình.