Lời Nói Đầu
Ngày nay,các vi điều khiển đã thâm nhập vào mọi lĩnh vực vủa đời sống từ
dân sự ,quân sự đến an ninh quốc phòng,có mặt trong hầu hết các ứng dụng hàng
ngày từ những thiết bị nhỏ nh điện thoại di động,máy nhắn tin,trò chơi điện
tử,các thiết bị gia dụng(máy giặt,điều hòa,tủ lạnh.) đến những thiết bị lớn nh
ôtô,tàu thủy,xe lửa,máy bay,hệ thống mạng điện thoại,các bộ điều khiển tự động
trong nhà máy,các bộ điều chỉnh trong nhà máy điện hạt nhân,trong các hệ thống
điều khiển ánh sáng
Với một loạt các ứng dụng thú vị trên,ở đâyem xin giới thiệu một ứng dụng
nhỏ dùng vi điều khiển 8051(cụ thể là vi điều khiển AT89S52) để thiết kế hệ
thống điều khiển bãi đỗ xe tự động.Đây là một ứng dụng nhỏ của vi điều khiển
nhng thực tế sử dụng rất nhiều trong các hệ thống.
1
CHƯƠNG 1
TỔNG QUAN VỀ CÔNG NGHỆ ĐIỀU KHIỂN BÃI ĐỖ XE TỰ ĐỘNG
1.1. MỞ ĐẦU
Hiện nay, các bãi đỗ xe công cộng nhu ở các khu phố, khu chung cư, hội
chợ việc quản lý gặp nhiều khó khăn. Số lượng xe vào và xe ra là ngẫu nhiên,
có lúc nhiều xe, có lúc ít xe, nhiều khi lại ách tắc quá tải. Công việc quản lý
tưởng chừng như đơn giản song lại tốn nhiều nhân lực: người thì bán vé, người
thu vé người thì phải thường xuyên giám sát số lượng xe có trong bãi bên cạnh
đó việc kiểm soát vé là cũng khó khăn.
Ngày nay cùng với sự phát triển của các ngành khoa học kỹ thuật, kỹ
thuật điện tử mà trong đó là kỹ thuật số đóng vai trò quan trọng trong mọi lĩnh
vực khoa học kỹ thuật, quản lí, công nghiệp tự động hóa, cung cấp thông tin….
do đó chúng ta phải nắm bắt và vận dụng nó một cách có hiệu quả nhằm góp
phần vào sự phát triển nền khoa học kỹ thuật thế giới nói chung và trong sự phát
triển kỹ thuật điện tử nói riêng.
Áp dụng những thành tựu khoa học ta có thể sử dụng các phương tiện
hoàn toàn tự động để điều khiển bãi đỗ xe tự động, không những giảm được
nhân lực , đáp ứng được kinh tế mà còn có thể kiểm soát được số lượng vé trong
ngày, tháng quý
Trong giới hạn đề tài em chỉ thiết kế hệ thống điều khiển bãi đỗ xe với
việc đếm số lượng xe ra vào hay quản lý số chỗ đỗ xe, số xe có trong bãi và điều
khiển thanh chắn ra vào.
Để thực hiện được điều đó cần phải thiết kế hai phần chính sau: bộ phận
cảm biến và bộ phận đếm.
* Bộ phận cảm biến: gồm phần phát và phần thu. Thông thường người ta
sử dụng phần phát là led hồng ngoại để phát ra ánh sáng hồng ngoại mục đích để
chống nhiễu so với các loại ánh sáng khác, còn phần thu là transistor quang để
thu ánh sáng hồng ngoại.
* Bộ phận đếm: có nhiều phương pháp thực thi đó la
2
-Lắp mạch dùng kỹ thuật số với các IC đếm, chốt, so sánh ghép lại
-Lắp mạch dùng kỹ thuật vi xử lí
-Lắp mạch dùng kỹ thuật vi điều khiển
1.2. PHƯƠNG ÁN THIẾT KẾ
1.2.1. Với mạch đếm dùng IC rời
• Ưu điểm:
-Cho phép tăng hiệu suất lao động
-Đảm bảo độ chính xác cao
-Tần số đáp ứng của mạch nhanh, cho phép đếm với tần số cao
-Khoảng cách đặt phần phát và phần thu xa nhau cho phép đếm những sản
phẩm lớn.
-Tổn hao công suất bé, mạch có thể sử dụng pin hoặc accu
-Khả năng đếm rộng
-Giá thành hạ
-Mạch đơn giản dễ thực hiện
Với việc sử dụng kỹ thuật số khó có thể đáp ứng được việc thay đổi số
đếm. Muốn thay đổi một yêu cầu nào đó của mạch thì buộc lòng phải thay đổi
phần cứng. Do đó mỗi lần phải lắp lại mạch dẫn đến tốn kém về kinh tế mà
nhiều khi yêu cầu đó không thực hiện được bằng phương pháp này.
Với sự phát triển mạnh của nghành kỹ thuật số đặc biệt là cho ra đời các
họ vi xử lí và vi điều khiển rất đa chức năng do đó việc dùng kỹ thuật vi xử lí,
kỹ thuật vi điều khiển đã giải quyết những bế tắc và kinh tế hơn mà phương
pháp dùng IC rời kết nối lại không thực hiện được.
1.2.2. Với mạch đếm dùng kỹ thuật vi xử lí
Ngoài những ưu điểm như đã liệt kê trong phương pháp dùng IC rời thì
mạch đếm sản phẩm dùng kỹ thuật vi xử lí còn có những ưu điểm sau:
-Mạch có thể thay đổi số đếm một cách linh hoạt bằng việc thay đổi phần
mềm, trong khi đó phần cứng không cần thay đổi mà mạch dùng IC rời không
3
thể thực hiện được mà nếu có thể thực hiện được thì cũng cứng nhắc mà người
công nhân cũng khó tiếp cận, dễ nhầm.
- Số linh kiện sử dụng trong mạch ít hơn.
-Mạch đơn giản hơn so với mạch đếm sản phẩm dùng IC rời và có phần
cài đặt số đếm ban đầu
-Mạch có thể lưu lại số liệu của các ca sản xuất
-Mạch có thể điều khiển đếm được nhiều dây chuyền sản xuất cùng lúc
bằng phần mềm
-Mạch cũng có thể kết nối giao tiếp được với máy tính thích hợp cho những
người quản lí tại phòng kỹ thuật nắm bắt được tình hình sản xuất qua màn
hình của máy vi tính.
Nhưng trong thiết kế người ta thường chọn phương pháp tối ưu nhưng kinh
tế do đó chúng em chọn phương pháp đếm sản phẩm dùng kỹ thuật vi điều khiển
1.2.3. Phương pháp đếm dùng vi điều khiển
Ngoài những ưu điểm có được của hai phương pháp trên, phương pháp này
còn có những ưu điểm :
-Trong mạch có thể sử dụng ngay bộ nhớ trong đối với những chương trình
có quy mô nhỏ, rất tiện lợi mà vi xử lí không thực hiện được.
-Nó có thể giao tiếp nối tiếp trực tiếp với máy tính mà vi xử lí cũng giao
tiếp được với máy tính nhưng là giao tiếp song song nên cần có linh kiện
chuyển đổi dữ liệu từ song song sang nối tiếp để giao tiếp với máy tính.
4
CHƯƠNG 2. THIẾT KẾ MẠCH PHẦN CỨNG
2.1. SƠ ĐỒ HỆ THỐNG
Sơ đồ cấu trúc tổng quát
Hệ thống gồm 4 khối chính:
- Khối cảm biến: Khối cảm biến có nhiệm vụ phát hiện đối tượng (xe ra vào)
- Khối xử lý: Khối xử lý có nhiệm vụ nhận tín hiệu từ khối cảm biến, nhận biết
đối tượng và đưa ra các lệnh điều khiển tới khối chấp hành.
- Khối hiển thị: Khối hiện thị có nhiệm vụ hiển thị trạng thái của hệ thống LCD
2.1.1. Khối cảm biến
A. Hệ thống phát hồng ngoại
Để có thể nhận biết được sản phẩm có rất nhiều phương pháp như siêu âm,
laser hay hồng ngoại mỗi phương pháp có ưu và nhược điểm riêng. Với ưu điểm
giá thành và dễ dàng thiết kế và thi công phương pháp cảm biến bằng hồng
ngoại được chọn. Tuy nhiên phương pháp này cho ta độ ổn định và tin cậy
không cao.
Với hồng ngoại có rất nhiều cách có thể được sử dụng để cảm biến. Với các
sản phẩm có độ bóng cao có thể ứng dụng đặc tính phản xạ của hồng ngoại để
cảm biến, bằng phương pháp này chúng ta sẽ bố trí cặp thu phát ở cùng một
phía, rất dễ cho lắp đặt, nhưng với các sản phẩm có độ phản xạ không cao thi ta
5
KHỐI XỬ
LÝ
CẢM BIẾN
BÀN PHÍM
KHỐI HIỂN THỊ
Chấp hành
s b trớ cp thu phỏt hai phớa, phng phỏp ny cho chỳng ta tin cy cao
hn tuy nhiờn khi lp t thit b s phc tp hn.
H2.1: Mch to dao ng
Hoạt động của mạch điện này nh sau:
Ngay khi cung cấp điện lần đầu cho mạch này, điện áp trên tụ C1 bằng 0V
nên mạch ở trạng thái ban đầu nh sau: R = 0, S = 1 Q của FF ở mức logic cao
Q bù của FF ở mức logic thấp (0V) dẫn đến T1 tắt mức điện áp ra ở chân 3 ở
mức cao. Tụ C1 bắt đầu nạp điện qua điện trở R1, R2 cho đến khi điện áp trên
C1 tăng đến trị số 2/3Vcc ( lúc điện áp trên tụ C1 tăng quá Vcc/3, mạch so sánh
2 đổi trạng thái R = S = 0 nên FF vẫn giữ nguyên trạng thái cũ chân 3 vẫn ở mức
cao) ở thời điểm này mạch so sánh 1 đổi trạng thái nên R = 1, S = 0 FF đổi trạng
thái tức là Q bù ở mức cao phân cực cho T1 dẫn bão hoà làm cho chân 3 chuyển
trạng thái về mức thấp, tụ C1 phóng điện qua R1, chân 7 và T1cho đến khi điện
áp trên tụ giảm xuống còn 1/3Vcc mạch so sánh 2 đổi trạng thái S = 1, R = 0 Q
bù của FF chuyến lên mức điện áp cao T1 tắt tụ C1 lại bắt đầu nạp đến điện áp
2/3Vcc. Chu trình cứ lặp đi lặp lại tại chân 3 sẽ tạo dao động xung vuông. Vì R2
rất lớn hơn R1 nên thời gian nạp lớn hơn rất nhiều thời gian phóng nên một chu
kỳ của bộ định thời t = R2.C1 = 0,01 s Vậy tần số phát là f = 1/t = 100Hz.
B. H thng thu
Phớa thu ta dựng mch in nh sau:
6
H2.2: Mạch điện phía thu
Mạch điện phía thu gồm có ba khối chính như sau:
Khối 1: có nhiệm vụ tạo dao động theo tín hiệu của Diot thu hồng ngoại,
lọc và khuếch đại sơ bộ tín hiệu thu được.
Như vậy khối một sẽ gồm các linh kiện: Diot thu D2, bộ khuếch đại thuật
toán (IC1), tụ C2, C3, điện trở R4, R5.
Trong đó IC1, điện trở R4, tụ C2 đóng vai trò là bộ lọc tích cực thông thấp
một cực dùng hồi tiếp âm.
Khối 2: Có nhiệm vụ khuếch đại tín hiệu gồm IC 2 , tụ C4, R6, R7.
Với hệ số khuếch đại tính theo công thức:
Yêu cầu cần hệ số khuếch đại cỡ 150 lần ta chọn R7 = 330K,
R6 = 1K, tụ C4 = 1µF suy ra Z ≅ 2K.
Tín hiệu sau khi được khuếch đại qua tụ nối tầng C5 đưa vào khối 3.
Khối 3: Có nhiệm vụ tách sóng tạo tín hiệu một chiều để đưa vào bộ so sánh
tạo mức điện áp ra một chiều ở mức logic 0, 1 có thể tích hợp với bộ xử lý số.
Để thực hiện tách sóng ta dùng một Diot D3 (1N4148) và tụ lọc C6(1µF).
D4(1n4148), R8(1K), R9(1K) tạo thành một mạch phân áp có nhiệm vụ bù sụt
áp tín hiệu xoay chiều được chỉnh lưu bởi D3.
7
Z
R
1K
6
u
+=
• Hoạt động phát hiện xe ra vào của khối Cảm biến
Trong hệ thống sử dụng 2 bộ thu phát hồng ngoại (bộ 1 và bộ 2) để nhận
biết sự xuất hiện và chiều di chuyển của xe (đi vào hay đi ra). Căn cứ vào thứ tự
chắn các đèn hồng ngoại mà ta có thể kết luận rằng xe đó đi vào hay đi ra .
Cụ thể như sau:
H2.3: Sơ đồ bố trí cảm biến
Như vậy đối tượng đi vào và đi ra theo 2 chu trình khác hẳn nhau, ta sử
dụng sự khác biệt này để lập trình cho Vi diều khiển nhận ra chúng.
2.1.2. Khối hiển thị
- Chức năng của LCD trong hầu hết các mạch, các bộ điều khiển đảm
nhân vai trò hiển thị các thông số, các thông tin mà chúng ta muốn nhập vào hay
các thông tin xử lý mà bộ điều khiển đang hoạt động được hiển thị ra màn hình,
giúp chúng ta giao tiếp gần hơn với quá trình hoạt đông của hệ thống. LCD có
loại 14 chân hoặc 16 chân.
- Hình ảnh một màn hình LCD 16 chân được mô tả phía dưới
Đầu thu 1 Đầu phát 2
Đầu phát 1 Đầu thu 2
Vµo
Ra
8
Hình 2.6. Hình ảnh LCD 16 chân
*) Mô tả các chân của LCD
Chân V
cc
, V
ss
, V
ee
: là các chân cấp dương nguồn, -5V và đất tương ứng thì
V
EE
được dùng để điều khiển độ tương phản của LCD.
Chân chọn thanh ghi RS:
Có 2 thanh ghi rất quan trọng bên trong LCD, chân RS được dùng để chọn các
thanh ghi này như sau: Nếu RS = 0 thì thanh ghi mã lệnh được chọn để cho phép
người dùng gửi 1 lệnh tới LCD. Nếu RS =1 thì thanh ghi dữ liệu được chọn cho
phép người dùng gửi dữ kiệu cần hiển thị lên LCD.
Chân đọc/ghi (R/W)
Đầu vào đọc/ghi cho phép người dùng ghi thông tin lên LCD khi R/W = 0 hoặc
đọc thông tin từ nó khi R/W =1
Chân cho phép E.
Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ
liệu của nó. Khi dữ liệu được cấp tới chân dữ liệu thì một xung mức cao xuống
thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu.
Xung này phải rộng tối đa 450ns
Chân D0-D7.
Đây là 8 chân dữ liệu 8bit, được dùng để gửi thông tin lên LCD hoặc đọc nội
dung của các thanh ghi trong LCD.
9
Để hiển thị các chữ cái và con số ta hiển thị mã ASCII của các chữ cái từ A đến
Z, a đến f và các con số từ 0 - 9 đến các chân này khi bật RS =1.
Cũng có các mã lệnh có thể gửi đến LCD để xoá màn hình hoặc đưa con
trỏ về đầu dòng, hoặc nhấp nháy con trỏ.
Chúng ta cũng sử dụng RS = 0 để kiểm tra bit cờ bận xem LCD có sẵn
sàng nhận thông tin. Cò bận là D7 và có thể được đọc khi R/W = 1 và RS = 0
như sau:
Nếu R/W = 1, RS = 0 khi D7 =1 thì LCD bận bởi các công việc bên trong
và sẽ không nhận bất kì thông tin mới nào. Khi D7 = 0 thì LCD sẵn sàng nhận
thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất kỳ thông tin
nào lên LCD.
Bảng mô tả các chân của LCD 14 chân:
Ghép nối giữa LCD và vi điều khiển
10
Hình 2.7. Ghép nối giữa vi xử lý và LCD
Nguyên tắc hoạt động
Giá trị số cần hiển thị của mỗi con số được gửi đến cổng P2 từ CPU dưới
dạng mã BCD. Từ đây BCD được mạch SN7447 giải mã và tạo ra các tín hiệu
điều khiển thích hợp đưa đến các chân catốt a.b, g của LED. Mỗi giá trị cần
hiển thị được đưa đến cổng P2cứ mỗi 2ms một lần cho một đèn.
Giá trị số nói trên được hiện ra trên chử số thập phân nào lại là do các bit
của byte dữ liệu từ CPU đưa đến cổng PA của mạch 8255A quyết định.
Như vậy cứ mỗi 2ms thì ta phải đưa dữ liệu ra PB rồi PA và cho hiện ra
một giá trị số trên một đèn. Nếu cả thảy có 8 LED 7 nét thì ta mất 16ms để cho
11
hiện số ra cả dãy đèn. Quá trình trên lặp đi lặp lại làm cho ta có cảm giác là đèn
sáng liên tục mặc dù trong thực tế chúng được điều khiển để sáng không liên
tục.
Một phương pháp phối ghép giống như trên nhưng không dùng mạch giải
mã SN7447 cũng rất hay được sử dụng. Thay vì mạch SN7447 như trên, tại đây
ta dùng một bộ khuếch đại đệm chỉ để nâng cao khả năng tải của cổng PB. Vì
thế trong trường hợp này CPU phải đưa đến PB không phải là 4 bit mã BCD của
giá trị số hiển thị mà là các mẫu 7 bit để làm sáng các nét tương ứng với giá trị
số đó. Như vậy CPU phải để thì giờ để chuyển đổi từ giá trị số hệ 16 sang mẫu
bit dành cho các nét của LED.
2.1.3. Khối chấp hành
Đầu vào : Lấy từ 89C51.
Đầu ra : Nối với động cơ.
• Nhiệm vụ khối chấp hành:
Khối này nhận tín hiệu điều khiển từ 89C51 để điều khiển chiều quay
động cơ (chiều dịch chuyển của thanh chắn).
Sơ đồ khối.
Sơ đồ mạch điều khiển chiều quay động cơ.
12
VI ĐIỀU
KHIỂN
Điều khiển
chiều quay
động cơ
Động cơ
H2.6: Sơ đồ mạch điều khiển động cơ truyền động thanh chắn
• Nguyên lý hoạt động :
Đầu A, B lấy tín hiệu từ 89C51.
+Khi A=1, B=0 , thì đầu ra của mạch điều khiển sẽ đặt lên động cơ một
điện áp 1 chiều 7V Làm động cơ quay theo 1 chiều nhất định.
+Khi A=0, B=1 , thì đầu ra của mạch điều khiển sẽ đặt lên động cơ một
điện áp 1 chiều 7V ngược cực tính với trường hợp trước Làm động cơ quay
theo chiều ngược với trường hợp trước.
Như vậy, với việc điều khiển mức tín hiệu ra của vi điều khiển ta đã điều
khiển được chiều quay của động cơ theo ý muốn.
Động cơ được lựa chọn trong mạch ứng dụng này là động cơ 1 chiều. Động
cơ quay khi điện áp đặt vào nó từ 5V-12V. Chiều quay của động cơ thay đổi khi
đổi vị trí 2 cực điện áp đặt vào.
2.1.4. Khối xử lý
13
R1
10k
R2
10k
R3
10k
R4
10k
C1
33pF
X2
CRYSTAL
C2
33pF
C3
10u
R5
8.2k
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
H2.7 : Khối xử lý
A. chức năng , hoạt động
• Mạch tạo dao động.
Ta dùng thạch anh 11,0592 MHz ghép thêm hai tụ gốm 33pF để tạo xung
clock đồng bộ cho toàn hệ thống.
• Mạch Reset.
Trong ứng dụng này chúng em thực hiện cơ chế Reset nguồn, tức là khi cấp
nguồn cho hệ thống vi điều khiển sẽ được Reset để chuẩn hoá hoạt động. Mạch
Reset thực hiện thông qua mạch RC, khi cấp nguồn, sẽ có xung mức cao đưa
vào chân RS của 89C51 trong hơn 2 chu kỳ máy khi đó vi điều khiển Reset hoạt
động.
• Nhận dữ liệu vào từ khối cảm biến.
Khối cảm biến có 2 bộ thu phát tín hiệu hồng ngoại làm nhiệm vụ phát hiện
đối tượng. Hai đầu báo hiệu của 2 bộ thu phát được đưa vào vi điều khiển (Chân
P3.0 và chân P3.1). Như đã trình bày ở trên đối đi vào hay đi ra theo 2 chu trình
khác nhau, nhờ đó mà phân biệt được. Sau khi được nối với vi điều khiển, các
thông tin về 2 quá trình này được đưa vào khối xử lý nhận biết và ra quyết định
cho khối chấp hành.
14
• Kết nối với khối hiển thị.
Dùng Port 2 (8 bit )của 89C51 để xuất dữ liệu cần hiển thị. Dữ liệu cần hiển
thị chính là số vị trí còn trống trong bãi đỗ. Đây là 8 bit nhị phân sau đó được
giải mã thành BCD rồi đưa ra khối hiển thị.
• Kết nối với khối chấp hành:
Dùng 2 chân của 89C51 để điều khiển khối chấp hành (điều chỉnh chiều quay
động cơ).
P3.2
P3.3
Khi có xe qua cửa hai bit này sẽ nhận các giá trị 0 1 khác nhau qua đó đưa
lên hoặc hạ xuống thanh chắn.
• Kết nối với bàn phím
Vì đây là mạch đếm số lượng vị trí còn trống trong bãi đỗ xe thông qua số
lượng xe ra vào nên ta cần phải cài đặt số lượng ban đầu cho thiết bị. Hơn nữa
mỗi bãi đỗ xe lại có khả năng chứa khác nhau nên vì vậy việc cập nhật giá trị
ban đầu cho bộ đếm là rất cần thiết. Ứng với 4led cho phép ta hiển thị tối đa
9999 vì vậy có thể nhập vào số đếm trong phạm vi từ 0 đến tối đa 9999, do đó
trong mạch sử dụng 10 phím số từ 0 đến 9. Và mỗi lần nhập số vào để nhận biết
là nhập mấy số hoặc đã nhập xong và muốn biết cho phép đếm chưa hoặc hủy
bỏ số vừa nhập phải cần sử dụng thêm các phím chức năng, nên em dùng thêm 6
phím chức năng từ A đến F. Do đó bàn phím gồm 16 phím được kết nối vào port
1 của 8051:
Sơ đồ khối kết nối như sau:
H2.8 : Sơ đồ khối kết nối bàn phím
15
8051
BÀN PHÍM
PORT 1
CHƯƠNG 3. THIẾT KẾ PHẦN MỀN
3.1. LƯU ĐỒ THUẬT TOÁN
Có xe qua
Nạp các giá trị ban đầu
Nhập số liệu từ bàn phím
Hết chỗ để
xe
S
Hiển thị số liêu đã nhập
Nâng thanh chắn
Gọi chương trình đếm
Chờ xe qua
Hạ thanh chắn
Kiểm tra chu
trình xe ra
vào
Không
có xe
Hiển thị
Hạ thanh chắn
End
Begi
n
Đ
16
a) Chương trình nhập số liệu từ bàn phím
• Chương trình con nhấn số
Chương trình này cho phép nhập số thập phân. Nếu phím nhấn từ 0 đến 9
thì nhận số còn phím từ A đến F thì xóa số. Số nhận thì bit YES = [0], NO = [0].
Sau khi nhập số liệu xong nếu thấy qua led hiển thị đúng số liệu đã nhập vào thì
nhấn phím A tức là đặt bit YES = 1 (7E = 1) để kết thúc quá trình nhập số liệu.
Còn đang nhập nếu muốn bỏ số liệu vừa nhập vào thì nhấn phím phím B tức là
đặt bit NO = 1 (7D = 1).
• Chương trình con kiểm tra phím ấn: kiểm tra phím ấn
Nếu như có phím được ấn thì bit C = 1. Vì có khoảng thời gian nhấn phím nên gọi chương
trình dò tìm mã phím ấn 50 lần bằng việc nạp 50 vào R3 và giảm R3. Khi R3 = 0 thì cất mã
phím vào ngăn xếp. Trong lúc đợi phím được nhả ra gọi chương trình dò tìm mã phím ấn 50
17
Bắt đầu
C = 1
A = # 0AH
S
Xóa bit YES
Xoá bit NO
Gọi chương trình dò phím
Đ
Đặt bit YES
Xóa A
A = # 0BH
Đặt bit NO
Xóa cờ C
A - # 0AH
S
Đ
S
Đ
Ret
lần để xem phím có còn được nhấn nữa hay không. Khi R3 = 0 thì lấy mã phím trao cho thanh
ghi A.
• Chương trình dò mã phím ấn:
8051 luôn đọc dữ liệu từ Port 1 để dò tìm mã phím. Khi có một phím được ấn thì cờ
C= 1 và mã của phím ấn được lưu tạm thời vào thanh ghi R6. Sau đó tăng dần R6 lên 4 đơn vị
để dò mã phím tiếp theo, (mã phím )→ (A)
#50→ (R3)
Gọi CT dò mã
phím
C=0
S
R3 - 1
Có phím ấn
Đ
Đ
R3=0
S
Cất ACC
50 → R3
Gọi CT dò mã phím
C=1
Đ
R3 - 1
S
R3=
0
S
Đ
Lấy ACC
RET
18
Bắt đầu
Không có phím ấn
Đ
Đ
• Chương trình nhập số
Chương trình cho phép nhập các số từ 1 đến 9999. Nếu số được nhấn từ A đến F thì yêu
cầu nhập lại. Khi số được nhấn lưu vào thanh ghi A từ 1 đến 9: nếu chấp nhận số thì các bit
19
Đ
R6 =0
#FE → A
# 4 → R6
A → R7
#4 → A
Xóa C
A –R6
A → R6
R7 → A
R7 → A
Xoay A
R6 - 1
Bắt đầu
A → R7
A → P1
Đọc port 1
A AND #0F0H
Xoay A
Xoay phải A qua C
Xóa C
A = # 0F0H
R6 + 4
R5 - 1
Đặt cờ c; R6 → A
R6 → A
Đ
S
C = 0
Đ (3)
S
S
(3)
Đ
(3)
R5 = 0
S
RET
Đ
YES, NO = 0 và khi bit NO = 1 thì yêu cầu nhập lại sô khi bit YES = 1 thì thoát khỏi chương
trình. Các giá trị được nhập này được lưu vào các ô nhớ 7C (soluong1:lưu soluong byte thấp),
7D (soluong2: lưu soluong byte cao). Nếu đồng ý với số đã nhập thì nhấn A ngược lại là B
(xóa số đã nhập)
20
Bắt đầu
A = 0
Đ
S
bit 7D = 1
Đ
S
hiển thị “nhập 0”
nghin,tram,chuc,donvi ← # 00H
xóa yes,no
p0 ← #0h
p2 ← #0h
Gọi nhấn số thứ nhất
swap a
nghin,#a
p0,a
Gọi nhấn số thứ 2
bit 7E = 1
Đ
S
bit 7D = 1
Đ
RET
(1)
b) Chương trình con kiểm tra chu trình xe ra vào
Chu trình xe đi vào sẽ trải qua các giai đoạn sau:
+ Giai đoạn 1: P3.0 = 1; P3.1 = 1 (chờ xe đi qua)
21
tram,a
a + nghin
caidat2,a
p0,a
Gọi nhấn số thứ 3
(2)
bit 7E = 1
Đ
S
Đ
bit 7E = 1
S
donvi,a
a + chuc
caidat1,a
p2, caidat1
RET
A=#0AH
S
S
A=#0BH
Đ
Gọi chương trình dò phím
bit 7D = 1
S
swap a
chuc,a
p2,a
Gọi nhấn số thứ 4
Đ (1)
bit 7D = 1
Đ (1)
S
+ Giai đoạn 2: P3.0 = 0; P3.1 = 1 ( Vào 1 )
+ Giai đoạn 3: P3.0 = 0; P3.1 = 0 ( Vào 2 )
+ Giai đoạn 4: P3.0 = 1; P3.1 = 0 ( Vào 3 )
+ Giai đoạn 5: P3.0 = 1; P3.1 = 1 ( Vào 4 )
Chu trình xe ra cũng trải qua các giai đoạn sau:
+ Giai đoạn 1: P3.1 = 1; P3.0 = 1 ( chờ xe qua )
+ Giai đoạn 2: P3.1 = 0; P3.0 = 1 ( Ra1 )
+ Giai đoạn 3: P3.1 = 0; P3.0 = 0 (Ra2 )
+ Giai đoạn 4: P3.1 = 1; P3.0 = 0 ( Ra3 )
+ Giai đoạn 5: P3.1 = 0; P3.0 = 1 ( Ra4 )
Khi kiểm tra đúng chu trình đi vào bộ đếm giảm một giá trị, khi kiểm tra đúng
chu trình đi ra bộ đếm tăng lên một giá trị.
22
Ra4
Ra3
Ra2
Ra1
Vao4
Vao3
Vao2
Vao1
Wait
S
S
S
S
S
S
S
S
S
S
S
S
S
Đ
BEGIN
1,1
11
1,0
0,1
1,0
1,0
0,0
0,1
0,1
00
0,1
00
00
1,0
00
1,0
00
0,1
0,1
1,1
1,0
11
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
Đ
23