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ếtTable 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 Truyền nhận 2 Vi điều khiển, UART + Nút nhấn + Led 7 đoạn
Blog Truyền nhận 2 Vi điều khiển, UART + Nút nhấn + Led 7 đoạn
Đề bài truyền nhận 2 vi điều khiển:
Bài giải truyền nhận 2 Vi điều khiển:
Phần cứng chương trình truyền nhận 2 Vi điều khiển:
- Xét trường hợp bên phát yêu cầu sử dụng 2 nút nhấn để điều khiển cho phép và dừng ở xung ngõ ra của Led đơn 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.
- Sử dụng hai nút nhấn của VĐK thứ hai để tăng hoặc giảm thời gian nhấp nháy của Led đơn. Cách tính trở 330 xem trong giáo trình thầy Nguyễn Đình Phú
- Hiển thị thời gian được quy định ra một Led 7 đoạn anot chung đượ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 |
Led 7 đoạn | Led 7 đoạn |
Đ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 truyền nhận 2 Vi điều khiển:
Xét Vi điều khiển 1 tức bên phát truyền nhận 2 Vi điều khiển
Khai báo thư viện tiền sử lý của truyền nhận 2 Vi điều khiể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.
Chương trình chính truyền nhận 2 Vi điều khiể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.
- Kiểm tra hai nút nhấn được quy định: Khi nhấn nút RUN thì gửi giá trị ký tự “1” sang bên Vi điều khiển 2 tức bên thu. Khi nhấn nút STOP thì gửi giá trị ký tự “0” sang bên Vi điều khiển 2 tức bên thu.
Xét Vi điều khiển 2 tức bên thu truyền nhận 2 Vi điều khiển
Khai báo thư viện tiền sử lý của truyền nhận 2 Vi điều khiể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.
- Mã 7 đoạn là đoạn mã Anot: Cấu trúc lệnh cho bạn nào cần copy : ” unsigned int8 ma7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8.0x80,0x90,0xff} “.
- 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.
Chương trình con kiểm tra nút nhấn truyền nhận 2 Vi điều khiển:
Hai nút nhấn đều 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 giây có thể tăng lên hoặc giảm xuống 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.Kiếm tra nút nhấn tăng:
- Đầ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 giay tăng lên một đơn vị, khi giay vượt ngưỡng 9 gán giá trị giay=9 vì chỉ sử dụng một led 7 đoạn nên giới hạn vượt ngưỡng là 9 thì sẽ cực đại.
- 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.
Kiếm tra nút nhấn giảm:
- Đầ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 giay giảm xuống một đơn vị, khi giay vượt ngưỡng nhỏ hơn 0 gán giá trị giay=0. Ở đây cần lưu ý khi khai báo biến, vì so sánh thoải mãn điều kiện khi giay= -1, nên biến giay cần sử dụng là có dấu.
- 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.
Chương trình con nhận dữ liệu truyền nhận 2 Vi điều khiển:
- Nếu có dữ liệu gửi đến thì kbhit()=1, tiến hành nhận dữ liệu bằng biến nhan, lưu ý biến nhận phải khai báo là char vì giá trị gửi qua là ký tự.
- Theo quy định bên phát nên nếu nhận được: Giá trị là ký tự “1” thì gán tt=1 để cho phép chạy chương trình nhấp nháy led đơn, chay=0 bắt đầu chạy chương trình thời gian, lệnh output_toggle(blynk); là đảo trạng thái Led đơn, đây là lệnh đặt biệt được hổ trợ trên phần mềm. Nếu không hổ trợ thì có thể sử dụng điều kiện để bật hoặc tắt tùy theo yêu cầu. Giá trị là ký tự “0” thì gán tt=0 tức dừng chương trình nhấp nháy led đơn đồng thời tắt led nhấp nháy.
Chương trình chính truyền nhận 2 Vi điều khiể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. Port D gắn vào led 7 đoạn vì vậy xuất giá trị ra nên khởi tạo là 0x00.
- 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 đó.
Và tắt led đơn khi khởi động.
- Kiểm tra hai nút nhấn tăng và giảm hoặc kiểm tra xem có dữ liệu gửi qua từ VĐK thứ nhất tức bên phát, sau đó xuất giá trị ra led 7 đoạn.
- Kiểm tra nếu tt=0 hoặc giay=0 thì tắt led đây là điều kiện được quy định theo yêu cầu lập trình, ngược lại cho phép biến chạy tăng một đơn vị sau 1ms, đến khi chạy lớn hơn 1000 tức được 1s thì giá trị chay=0 chuẩn bị cho chu kỳ mới, giayt tăng lên một đơn vị, đến khi giayt = giay thì tiến hành đảo trạng thái một lần, theo yêu cầu đề bài đưa ra thời gian sáng bằng thời gian tắt, sau đó cho giá trị giayt=0 để bắt đầu chu kỳ mới.
- Việc đếm 1ms tăng lên một đơn vị nhằm giúp chương trình con nhận dữ liệu kiểm tra liên tục tránh trường hợp rớt dữ liệu trong quá trình thao tác các chương trình khác.
Chúc các bạn có một kỳ thi thành công…!!!