Ngắt Port B, Điều khiển hiệu ứng led đơn bằng nút nhấn, Lập trình Pic

ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic
Ngắt Port B được sử dụng phổ biến trong các chương trình có sử dụng nút nhấn. Giúp người lập trình tối ưu được tốc độ xử lý của các nút nhấn hoặc cảm biến để đáp ứng được yêu cầu đã được đề ra. Khi chương trình chạy liên quan lớn đến tính thứ tự vì vậy việc sử dụng ngắt Port B sẽ giúp hệ thống có tính ổn định và chương trình chạy đáp ứng được nhu cầu cần thiết đồng thời không ảnh hướng đến các chương trình khác trong quá trình sử dụng. 

Mua linh kiện điện tử tại Điện tử Nhật Tùng

Liên hệ làm mạch  Phone: 0967.551.477 Zalo: 0967.551.477 Email: dientunhattung@gmail.com Địa Chỉ: 171/25 Lê Văn Thọ, P8, Gò Vấp, Tp HCM Chi tiết: Nhận làm mạch và đồ án Điện tử  
Khóa học Vi điều khiển có phí Hình thức học: Video hoặc Kèm trực tiếp ===>>>>  Kích vào hình để được biết thêm chi tiết khóa học lập trình vi điều khiển online

Tải File bài giải

Pass giải nén: Huynhnhattung.com
===>>>   Nếu bạn chưa có phần mềm giải nén:

Hướng dẫn Tải và Cài đặt phần mềm giải nén Winrar

Video Ngắt Port B, Điều khiển hiệu ứng led đơn bằng nút nhấn

 

Blog Ngắt Port B, Điều khiển hiệu ứng led đơn bằng nút nhấn

Đề bài ngắt Port B:

ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic-de-bai

Bài giải ngắt Port B:

Phần cứng chương trình ngắt Port B:

  • Đề yêu cầu sử dụng ngắt Port B vì vậy các nút nhấn được gắn lần lượt vào RB0, RB1, RB2.
  • Sử dụng dao động ngoài thạch anh 4M gắn vào chân OSC1 OSC2.
  • Led đơn sử dụng 8 led được gắn vào Port D đồng thời điện trở kèm theo là 330Ω, cách tính các bạn có thể tham khảo sách giáo trình Vi điều khiển thầy Nguyễn Đình Phú bài led đơn.
ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic-phan-cung

Phần mềm ngắt Port B:

Khai báo thư viện tiền sử lý của ngắt Port B:

  • Vi điều khiển hiện tại mình đan dùng là Pic16F887
  • Hiện đan dùng thạch anh ngoài và thạch anh ngoài 4M bằng lệnh #Fuses    hs     và    #delay(clock=4M)
  • Định nghĩa các chân RB0, RB1, RB2 theo tên chức năng của nút nhấn để dễ sử dụng.
  • Tên khai báo biến thì cái này tùy thuộc vào chức năng sử dụng. Sử dụng cho 8 Led nên khai báo 8bit cho biến i, y và biến tt là biến trung gian của ngắt Port B cho 3 nút nhấn.
ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic-tien-su-ly

Chương trình con kiểm tra nút nhấn của ngắt Port B:

Chương trình con đầu tiên hiệu ứng sáng đuổi 8led đơn từ phải sang trái.

  • Khi nghe hiệu ứng sáng đuổi thì gán giá trị led sáng đầu tiên y=0x01; hiệu ứng chạy từ phải sang trái. Sau đó xuất giá trị ra vào tạo trễ 300ms theo yêu cầu của đề bài.
  • Để Led sáng dịch vào thì sử dụng lệnh dịch trái “<<1” đơn vị. Sử dụng 8led nên vòng for cần chạy là 8 lần. Mỗi lần dịch xong chỉ cần xuất giá trị ra Port D và tạo trễ 300ms.

ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic-sang-duoi-phai-sang-traiChương trình con thứ hai hiệu ứng sáng dần 8led đơn từ trái sang phải

  • Khi nghe hiệu ứng sáng dần thì gán giá trị đầu tiên y=0x00;. Sau đó xuất giá trị ra vào tạo trễ 300ms theo yêu cầu của đề bài.
  • Để Led sáng dần thì sử dụng lệnh dịch phải “>>1” đơn vị. Nhưng khi dịch xong giá trị sẽ bị trống vị trí cuối vi điều khiển tự động chèn vị trí số 0 vào, lúc này ta bắt buộc phải cho vị trí đó sáng lên. Muốn chuyển giá trị từ 0000 0000 sang 1000 0000 chỉ cần “|” với bị trí led sáng đầu tiên1000 0000 = 0x80. Sử dụng 8led nên vòng for cần chạy là 8 lần. Mỗi lần dịch xong sau đó OR (|) 0x80 rồi xuất giá trị ra Port D và tạo trễ 300ms.

ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic-sang-dan-trai-sang-phaiChương trình con thứ ba hiệu ứng sáng dần 8led đơn từ ngoài vào trong

  • Cần tính mã ví dụ cho hai led 2 đầu sáng thì mã sẽ là 1000 0001 = 0x81. Tương tự cho các mã khác đến hết 4 trạng thái. Đây được xem là một cách sơ khai nhất về viết cho hiệu ứng led đơn, nếu viết bằng phương pháp này chỉ có thể sử dụng cho ít led. Số lượng led đơn lớn thì rất khó và sẽ lâu hơn, lúc đó sẽ có phương pháp khác hữu hiệu hơn.

ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic-sang-dan-ngoai-vao-trongChương trình ngắt Port B cũng được xem là một chương trình con.

  • #int_RB đầy là lệnh khai báo chương trình ngắt. Chương trình kế lệnh này được hiểu đó là chương trình con của ngắt. Câu hỏi đặt ra vậy ngắt sảy ra khi nào.? Chương trình ngắt Port B sảy ra khi có sự thay đổi tín hiệu ở các chân của Port B từ RB0…RB7.
  • Void ngat_portb(); Việc đặt tên cho chương trình ngắt chỉ cần tuân thủ theo yêu cầu đặt tên chương trình con là được. Các nút nhấn khi được nhấn sẽ trả về 0, nên kiểm tra chỉ cần một trong 3 chân trả về 0 thì sẽ trả về sản phẩm tương ứng là biến “tt” quy định biến phụ thuộc vào người lập trình.
ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic-ngat-portb

Chương trình chính thực hiện toàn bộ hoạt động của vi điều khiển dùng ngắt Port B

  • Bắt đầu chương trình chính phải khỏi rạo ngõ vào ra cho vi điều khiển. Một chân của vi điều khiển thì làm nhiệm vụ I/O vì thế phải khỏi tạo. Port B dùng cho nút nhấn để đưa vào Vi điều khiển vì thế khởi tạo giá trị là 0xff, Port D xuất cho led đơn tức đưa tín hiệu từ Vi điều khiển ra ngoài nên khởi tạo là 0x00.
  • Khai báo enable_interrupts(global); cho phép toàn cục, tức cho phép các chương trình ngắt sảy ra.
  • Khai báo enable_interrupts(int_rb);  cho phép chương trình ngắt Port B sảy ra.
  • Đầu tiên khi không nhấn thì tt=0 để làm tắt led. Lúc này nếu một trong ba nút nhấn được phép nhấn sẽ trả về sản phẩm tt theo giá trị đã được quy định trong chương trình ngắt Port B. Nếu tt=1 mở chương trình chạy sáng dần từ trái sang phải nhưng chỉ mở một lần sau đó cho tt=0 để quay về ban đầu chuẩn bị cho lần nhấn tiếp theo, tương tự cho hai nút nhấn còn lại và số lượng hoạt động của chương trình con chính là số lần được gọi ra trong điều kiện.
  • Ở đây nếu sử dụng chương trình này thì sẽ có một nhược điểm rất lớn là khi đan chạy hiệu ứng nào thì có nhấn nút cũng không có tác dụng. Chỉ khi chương trình chạy xong mới bắt đầu cho phép nhấn lần tiếp theo và thực hiện theo điều kiện đã được lập trình.
ngat-portb-su-dung-dieu-khien-hieu-ung-led-don-qua-nut-nhan-lap-trinh-pic-chuong-trinh-chinh

Chúc các bạn có một kỳ thi thành công…!!!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *