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 Đếm sản phẩm Counter gửi lên máy tính qua UART RS232
Blog Đếm sản phẩm Counter gửi lên máy tính qua UART RS232
Đề bài đếm sảm phẩm:
Bài giải đếm sản phẩm:
Phần cứng chương trình đếm sản phẩm:
- Đề yêu cầu sử dụng đếm COUNTER vì thế phải đấu cảm biến vào chân RC0 được ký hiệu là T1CKI tức sử dụng bộ đếm Timer1.
- Giao tiếp UART bắt buộc phải sử dụng chân TX (truyền) , RX(nhận) tức phải đấu vào chân RC6, RC7. Vì mô phỏng nên sử dụng Teaminal còn trong lúc thi phải gắn cổng COM loại VGA theo sách giáo trình của thầy Nguyễn Đình Phú.
- Sử dụng dao động ngoài thạch anh 20M gắn vào chân OSC1 OSC2.
Phần mềm đếm sản phẩm:
Khai báo thư viện tiền sử lý của đếm sảm phẩm:
- 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 20M bằng lệnh #Fuses hs và #delay(clock=20M)
- Khai báo thư viện “#use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)“ sử dụng giao thức RS232, tốc độ Baud là 4800, không kiểm tra tính chẵn lẻ, khai báo theo chân TX, RX, Truyền nhận dữ liệu là 8bit.
- 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 biến data là char vì từ giao diện máy tính gửi xuống sẽ là ký tự thuộc bảng mã ASCII. Biến tt là một biết đặt biết, khi thấy trong yêu cầu có 1 sự kiện đối lập ví dụ RUN – STOP, THUẬN – NGHỊCH, LÊN-XUỐNG,… thì đều dùng biến trung gian 1bit để giải quyết.
Chương trình con kiểm tra nút nhấn của đếm sảm phẩm:
- Chương trình con nhận dữ liệu từ máy tính gửi xuống, theo yêu cầu đưa ra khi giao diện nhấn RUN đồng nghĩa với việc gửi ký tự số “1” xuống vi điều khiển để cho phép đếm sản phẩm. Ngược lại khi nhấn STOP đồng nghĩa với việc gửi ký tự số “0” xuống vi điều khiển thì dừng đếm sản phẩm.
- Lệnh kiểm tra điều kiện if(kbit()) kiểm tra có dữ liệu gửi xuống không. Nếu có tiến hành nhận dữ liệu bằng lệnh data=getc(), nếu nhận được ký tự “1” cho tt=1 đồng thời cho phép timer1 hoạt động. Cụ thể T1_EXTERNAL sử dụng xung bên ngoài tức là xung được đưa vào từ chân T1CKI, vì mỗi lần đưa vào 1 xung nên chỉ có thể chọn bộ chia 1 cho timer1. Ngược lại nếu nhận ký tự “0” cho tt=0 đồng thời dừng hoạt động của timer1 thông qua T1_DISABLED.
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 đếm sản phẩm
- 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 C đấu dùng cảm biến đếm sản phẩm và chân RX tức chân RC7 dùng để đưa tín hiệu vào vi điều khiển cách tính như phần note.
- Ban đầu thì tắt timer1, và khởi tạo giá trị ban đầu bằng 0 thông qua lệnh set_timer1(0);
- Các biến ban đầu đều cho bằng 0 đồng thời gửi giá trị 0 lên màn hình máy tính thông qua UART bằng lệnh Printf(“P=%ld,B=%ld”,sp,thung); lệnh nếu ra đầu tiên gửi ký tự P và B đại diện cho sản phẩm và Box đếm được, %ld cách truyền tham số 16bit và 32bit vào chuỗi string, \r\n là lệnh nhảy và xuống dòng để set không bị trung lặp mỗi lần gửi trên một hàng.
- Tiến hành nhận dữ liệu từ giao diện máy tính gửi xuống thông qua hàm nhan_dulieu(). Kiểm tra nếu tt=1 tức nhận được ký tự “1” cho phép đếm sản phẩm. Khi có tín hiệu từ chân T1CKI thì hàm get_timer1 tăng lên một giá trị sau đó tiến hành gán lại cho biến sp.
- Nếu sp lớn hơn 50 thì cho sp=1 và phải set giá trị timer1 bằng 1, đồng thời tăng giá trị thùng lên một đơn vị.
- Nếu sản phẩm hoặc số lượng thùng thay đổi thì sẽ gửi lên trên máy tính một lần. Giá trị spt chỉ thay đổi khi sp thay đổi.
Chúc các bạn có một kỳ thi thành công…!!!