Chương trình có nhiệm vụ:
Kiểm tra xem người đi vào phòng hay đi ra khỏi phòng
Vi điều khiển thực hiện ngắt cổng B để chuơng trình điều khiển thực hiện Giải thuật:
Chương trình điều khiển được thực hiện dựa trên ngắt INTERRUPT của vi điều khiển. Chương trình chính hoàn toàn không tham gia vào việc thực hiện
cho cổng B thực hiện điều khiển. Các cổng B được thực hiện ngắt là từ B4 - >B7.
Đầu tiên ta bố trí 2 bộ thu phát hồng ngoại gần nhau theo phương tạo thành mặt phẳng song song với mặt đất, bộ thu phát đầu tiên nối với cổng B4 của vi xử
lý, bộ thu phát thứ 2 nối tới cổng B5 của vi xử lý.
Khi có người đi qua, để biết được người đó đi vào hay ra khỏi phòng. Ta cần xem xét xem tín hiệu ở bộ thu phát thứ nhất bị gián đoạn trước hay tín hiệu
của bộ thu phát hồng ngoại thứ 2. Nếu mà tín hiệu ở bộ thu phát thứ nhất bị gián đoạn trước thì có nghĩa là người đi vào phòng, nếu tín hiệu ở bộ thu phát thứ 2
bị gián đoạn trước thì có nghĩa là người đi ra khỏi phòng. Vi xử lý ( cụ thể là
Sơ đồ thuật toán Hình 3.2: Sơ đồ thuật toán Khởi tạo Start Chương trình chính B5=0 B4=0 Tăng số người lên 1 Số ng >0 Số ng> =1 Bật điện Số ng =0 Tắt điện Giảm số người đi 1 Đ S Đ Đ Đ S Đ Ngắt từ B4->B7 S S Ngắt từ B4->B7 Hiển thị số người Trong đó:
B4=input_pin(B4): tín hiệu từ Led thu 1
B5=input_pin(B5):tín hiệu từ Led thu 2
Chương trình nạp vào Vi điều khiển Pic 16F877A
Để viết chương trình điều khiển ta sử dụng ngôn ngữ C viết trên phần
mềm CCS và chạy mô phỏng trong Proteus. Chương trình gồm các chương trình con Bật tắt đèn ‘void den(ng)’, chương trình con Hiển thị Led ‘void led(ng)’,
chương trình con Đếm người vào ‘int dauvao()’, chương trình con Đếm người ra ’int daura()’, chương trình con Ngắt thay đổi trạng thái các chân B4->B7 và
chương trình Chính.
Các hằng số và biến trong chương trình : Mảng LED7[10] gồm 10 phần
tử, mỗi phần tử tương ứng với 1 con số từ 0 đến 9 mà Led 7 đoạn sẽ hiển thị.
Biến chạy ‘i’ dùng cho vòng lặp để quét Led. Biến ‘ng‘ biểu thị cho số người đang ở trong phòng. Biến ‘L1, L2’ để hiển thị các Led7 đoạn 1 và 2 tương ứng
với chữ số hàng chục và hàng đơn vị của số người trong phòng. Biến ‘vao, ra’ để
thu nhận tín hiệu từ đầu ra của hai Led thu 1 và 2 : bình thường ‘vao=ra=1’, khi có người cắt qua bộ thu phát 1 thì ‘vao=0’, qua bộ thu phát 2 thì ‘ra=0’. Hai biến ‘x và y’ để xác nhận xem đã có tín hiệu đã đi qua 2 bộ thu phát hay không trong một lượt người vào hoặc ra: ban đầu ‘x=y=0’, khi người cắt qua Led thu 1 thì x=1 ; khi người cắt qua Led thu 2 thì y=1 ; khi người đã đi qua cả 2 bộ thu phát
1,2 thì cài đặt lại : x=y=0 và chuẩn bị cho 1 lượt mới.
Chương trình sử dụng ngắt thay đổi trạng thái cổng B : khi có bất kỳ sự thay đổi trạng thái nào trên các chân B4-> B7 của cổng B thì chương trình sẽ
sinh ra ngắt. Trong bài này, tùy vào tín hiệu thu được ở các cổng B4 và B5
chương trình ngắt sẽ gọi các chương trình con ‘dauvao’ hay là chương trình con
‘daura’. Chương trình ngắt sẽ trả về giá trị là số người trong phòng ’ng’.
Chương trình chính có vòng lặp vô hạn giúp hệ thống có thể làm việc liên tục, từ giá trị ‘ng’ được trả về từ chương trình ngắt, chương trình chính sẽ gọi
CHƯƠNG 3: XÂY DỰNG HỆ THỐNG