Mua linh kiện điện tử tại Điện tử Nhật Tùng
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](https://huynhnhattung.com/wp-content/uploads/2019/08/Lập-trình-Pic.png)
Table of Contents
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:
Video Giao tiếp Led đơn, Điều khiển Led bằng Nút nhấn + UART
Blog Giao tiếp Led đơn, Điều khiển Led bằng Nút nhấn + UART
Đề bài giao tiếp Led đơn:
![giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-754x720.png)
Bài giải giao tiếp Led đơn:
Phần cứng chương trình giao tiếp Led đơn:
- Xét trường hợp bên phát yêu cầu sử dụng nút nhấn để điều khiển chế độ MOD chọn hiệu ứng của led đơn cho bên thu.
- Việc sử dụng hai Vi điều khiển giao tiếp với nhau thông qua UART giúp tối ưu được chương trình và phần cứng. Khi giao tiếp UART thì kết nối sẽ chân RC6/TX của VĐK thứ nhất kết nối với chân RC7/RX VĐK thứ hai, ngược lại chân RC7/RX VĐK thứ nhất kết nối với chân RC6/TX của VĐK thứ hai. Chân RX có chức năng nhận dữ liệu, chân TX có chức năng truyền dữ liệu.
- Hiển thị hiệu ứng cho Led đơn được nối vào Port D. Cách tính trở 330 xem trong giáo trình thầy Nguyễn Đình Phú
- Các linh kiện chính cần sử dụng tham khảo tại.
Thông số kỹ thuật Mua Linh kiện Pic16F887 Pic16F887 Điện trở Điện trở Nút nhấn Nút nhấn Thạch anh Thạch anh Led đơn Led đơn
Phần mềm giao tiếp Led đơn:
Xét Vi điều khiển 1 tức bên phát giao tiếp Led đơn
Khai báo thư viện tiền sử lý của giao tiếp Led đơn:
- Vi điều khiển hiện tại mình đan dùng là Pic16F887.
- Hiện dùng thạch anh nội và thạch anh nội khai báo 8M bằng lệnh #Fuses intrc_io và #delay(clock=8M).
- Khai báo giao tiếp UART chuẩn rs232 ” #use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)” gồm tốc độ truyền bằng 4800, không kiểm tra tính chắn lẻ, đồng thời dữ liệu truyền đi 8bit trong đó có 1bit STOP. Khi sử dụng UART bắt buộc phải dùng chân RC6/TX, RC7/RX
- Định nghĩa chân: tùy theo chức năng của chân mà tên định nghĩa được bám sát vào nội dung đan thực hiện.
- Tên khai báo biến phụ thuộc vào chức năng để khai báo cho phù hợp.
- Khi các biến không biết được giá trị cuối thì nên khai báo signed int32 tức khai báo biến có dấu 32bit, lúc này giá trị rất rộng không sợ bị thiếu.
![giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-khai-bao](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-khai-bao.png)
Chương trình con kiểm tra nút nhấn giao tiếp Led đơn:
Nút nhấn có nhiều hơn một chức năng, vì mỗi lần nhấn nút sẽ thay đổi giá trị biến tăng lên một đơn vị từ đó việc lập trình phải sử dụng chương trình chống dội nút nhấn.- Đầu tiên kiểm tra có nhấn nút không, nếu có thì sẽ trả về mức 0 theo thiết kế của phần cứng, nếu có thì chống dội, thời gian dội phím ít nhấn 20ms, tùy vào từng nút nhấn mà thời gian dội sẽ khác nhau, nhưng ít nhấn vẫn là 20ms.
- Kiểm tra lại lần nữa nếu vẫn còn giữ phím thì cho phép biến tt tăng lên một đơn vị, khi tt vượt ngưỡng 2 thì cho tt=0. Nếu tt=2 thì gửi ký tự “T” ngược lại, nếu bằng tt=1 thì khởi tạo lại giá trị dem=0.
- Kiểm tra nếu chưa nhả phím thì làm nhiệm vụ chờ nhả, vòng lặp While chỉ thoát khi điều kiện sai, vậy nếu còn nhấn ngõ vào luôn bằng 0.
![giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-chuong-trinh-con-nut-nhan](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-chuong-trinh-con-nut-nhan.png)
Chương trình chính giao tiếp Led đơn:
- Bắt đầu chương trình chính phải khởi tạ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 C có chân RC7/RX nhận tín hiệu từ máy tính gửi xuống nên đóng vai trò nhận tín hiệu vì vậy phải khởi tạo mức 1 nên khởi tạo là 0x80.
- Gán các giá trị ban đầu bằng 0, đặt biệt biến dem= -1; vì khi tăng giá trị lên một đơn vị sẽ lên 0 và điều kiện cần so sánh với 0.
- Kiểm tra nút nhấn được trang bị ở chương trình con. Nếu tt=1 thì bắt đầu cho biến chạy tăng một đơn vị sau 10ms. khi chay lớn hơn 200 tức sau 2s thì cho chay=0 đồng thời dem tăng lên một đơn vị. Sau đó kiểm tra từng trường hợp của dem sẽ gửi qua các ký tự từ “[0,3]” cho bên thu, nếu dem lớn hơn 3 cho dem=-1 chuẩn bị cho chu kỳ mới.
![giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-chuong-trinh-chinh](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-chuong-trinh-chinh.png)
Xét Vi điều khiển 2 tức bên thu giao tiếp Led đơn
Khai báo thư viện tiền sử lý của Led đơn:
- Vi điều khiển hiện tại mình đan dùng là Pic16F887.
- Hiện dùng thạch anh nội và thạch anh nội khai báo 8M bằng lệnh #Fuses intrc_io và #delay(clock=8M).
- Khai báo giao tiếp UART chuẩn rs232 ” #use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)” gồm tốc độ truyền bằng 4800, không kiểm tra tính chắn lẻ, đồng thời dữ liệu truyền đi 8bit trong đó có 1bit STOP. Khi sử dụng UART bắt buộc phải dùng chân RC6/TX, RC7/RX
- Định nghĩa chân: tùy theo chức năng của chân mà tên định nghĩa được bám sát vào nội dung đan thực hiện.
- Tên khai báo biến phụ thuộc vào chức năng để khai báo cho phù hợp.
- Khi các biến không biết được giá trị cuối thì nên khai báo signed int32 tức khai báo biến có dấu 32bit, lúc này giá trị rất rộng không sợ bị thiếu.
![giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-khai-bao-thu](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-khai-bao-thu.png)
Chương trình con ngắt UART nhận dữ liệu:
- Chương trình ngắt UART khi có dữ liệu gửi đến thì chương trình ngắt sảy ra, lúc này dùng biến data nhận dữ liệu, lưu ý biến data phải khai báo char, nếu data nhận được ký tự từ “[0,3]” thì gán biến tt từ [0,3].
![giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-chuong-trinh-con-ngat-uart-thu](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-chuong-trinh-con-ngat-uart-thu.png)
Chương trình chính Led đơn:
- Bắt đầu chương trình chính phải khởi tạ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 C có chân RC7/RX nhận tín hiệu từ máy tính gửi xuống nên đóng vai trò nhận tín hiệu vì vậy phải khởi tạo mức 1 nên khởi tạo là 0x80. Port D gắn vào led đơn vì vậy xuất giá trị ra nên khởi tạo là 0x00.
- Khởi tạo chương trình ngắt gồm Global là chương trình ngắt toàn cục đơn giản hơn là cho các chương trình ngắt sảy ra, int_rda cho phép chương trình ngắt UART chạy.
- Các biến ban đầu gán bằng 0, nếu không gán giá trị ban đầu thì các biến sẽ Random một giá trị nằm trong giới hạn cho phép của biến đó.
- Kiểm tra từng trường hợp của trạng thái sẽ xuất giá trị theo yêu cầu của đề đưa ra tức sẽ sáng lần lượt từng led một theo thời gian là 2s phụ thuộc vào bên phát gửi qua.
- Kiểm tra nếu tt=4 thì cho 8 led nhấp nháy với tần số 2Hz theo yêu cầu đã đưa ra, tuy nhiên việc tạo tần số bằng delay sẽ làm trễ 2s khi bị chuyển hiệu ứng nhưng yêu cầu ban đầu không tính tới giá trị này có thể bỏ qua sai số về thời gian.
![giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-chuong-trinh-chinh-thu](https://huynhnhattung.com/wp-content/uploads/2021/07/giao-tiep-led-don-dieu-khien-led-bang-nut-nhan-thong-qua-uart-lap-trinh-pic-chuong-trinh-chinh-thu.png)
Chúc các bạn có một kỳ thi thành công…!!!