Xây dựng các mạch 8051 để điều chế độ rộng xung bằng pwm, truyền thông nối tiếp uart, hiển thị led 7 thanh, hiển thị led 7 seg, quyét phím hiển thị ra lcd, xấp xỉ bằng ADC. Thiết kế mạch mô phỏng điều khiển động cơ dùng pwm.
Trang 1Trường Đại Học Bách Khoa Hà Nội
Viện Điện
Báo cáo mô tả bài tập mô phỏng
Môn : Vi Xử Lý
Giảng viên: Ths Vũ Đức Trọng Sinh viên thực hiện:
Nguyễn Văn Thịnh 20122512
Hà Nội, 2016
Trang 2Contents
Bài 2: Điểu chế độn rộng xung PWM 3
Bài 3: Truyền thông nối tiếp UART 4
Bài 4: Quét bàn phím hiển thị ra led 7 seg 5
Bài 5: Quét phím hiển thị ra LCD 5
Bài 6: ADC_Successive Approximation 6
Trang 3Bài 2: Điểu chế độn rộng xung PWM
Thiết kế mạch mô phỏng điều khiển động cơ:
Mô tả:
Gọi tOn là thời gian mà xung ở mức 1
tOff là thời gian xung ở mức 0
T = tOn + tOff là chu kỳ xung PWM
Đặt đầu ra xung PWM ở cổng P1.0
Lập trình C
Khởi tạo các giá trị:
- Cấu hình timer0 ở mode 1 16bit
- Cấu hình cho phép ngắt ngoài ở chân INT0, INT1 và cho phép ngắt tràn timer
- Khởi tạo thời giant On ban đầu
- Khởi tạo giá trị bắt đầu lặp cho timer đến khi tràn, số lần đếm của timer đúng bằng tOn:
TH0 = (65536 - tOn)>>8;
TL0 = (65536 - tOn)&0x00ff;
- Cho phép timer hoạt động TR0 = 1;
Ngắt:
Trang 4- Ngắt ngoài INT0: cấu hình IT0=1 cho phép ngắt ở sường xuống, viết hàm phục
vụ ngắt sao cho khi có ngắt ngoài xảy rat tOn giảm một số (trong code là 80)
- Ngắt ngoài INT1: cầu hình IT1 = 1 cho phép ngắt ở sường xuống, viết hàm phục
vụ ngắt sao cho khi có ngắt ngoài xảy rat tOn tăng một số (trong code là tăng 80)
- Ngắt timer: viết hàm phục vụ ngắt khi timer đếm tràn:
Lấy PWM = !PWM
Nếu PWM = 0 thì chuyển sang đếm thời gian tOff (tOff = T – tOn):
TH0 = (65536 - (T-tOn))>>8;
TL0 = (65536 - (T-tOn))&0x00ff;
Nếu không thì đếm thời gian tOn
Như vậy timer sẽ đếm thời giant On xung PWM ở mức 1 và thời gian tOff xung PWM ở mức 0, khi ta nhất các công tắc ở các cổng INT0 và INT1 xảy ra các ngắt ngoài thì thời giant On cũng thay đổi theo
Bài 3: Truyền thông nối tiếp UART
Mô tả:
Chọn chế độ gửi ở mode 3 truyền 9bit trong đó có 8 bit dữ liệu và 1 bit parity
Trang 5Cấu hình và khởi động timer1, đặt TH1 = 0xFD để tốc độ baud là 9600 (làm điều này với cả 2 bên nhận và truyền)
Bên truyền: đẩy 8bit dữ liệu vào thanh ghi SBUF, một bit parity của dữ liệu được gán cho TB8
Bên nhận dữ liệu nhận được chuyển vào thanh ghi SBUF, giá trị bit parity được truyền
từ bên gửi được đưa vào bit RB8, từ dữ liệu nhận được trong thanh ghi SBUF tính bit parity của nó và so sánh với giá trị của RB8 nếu bằng truyền đúng và nhận dữ liệu nếu không bằng truyền sai và không nhận dữ liệu
Bài 4: Quét bàn phím hiển thị ra led 7 seg
Thuật toán quét phím:
Đặt các cột và các hàng của ma trận phím ở mức
Tiến hành quét từng hàng, đặt giá trị từng hàng ở mức 0, đặt giá trị các hàng còn lại và các cột ở mức 1, tiến hành quét liên tục lặp đi lặp lại
Khi một phím được nhấn, do hàng được quét liên tục tốc độ đủ nhanh để khi nhấn thì hàng của phím được nhấn cũng kịp về mức 0 trước khi nhả phím, khi đó cột tương ứng với phím cũng trở về mức không, ta có được vị trí nhấn của nút (là một đoạn mã nhị phân)
Sau khi có được vị trí của phím ta đối chiếu với một mảng 2 chiều lưu sẵn các vị trí các phím, để tìm ra được nội dung của phím được nhấn
Sau khi có được nội dung (là các số 0,1,2,3,4 ) ta tìm ra mã hiển thị của nội dung đó(các số 0,1,2,3,4…) trên led7 thanh có anot chung
Hiển thị:
Sau khi có được mã hiển thị lên led, ta dịch phải từng bit và đưa vào chân DB của 74HC595 , đầu ra của 74HC595 sẽ được nối và led anot chung để hiển thị
Bài 5: Quét phím hiển thị ra LCD
Thuật toán quét phím: giống bài trên
Trang 6Hiển thị:
Cấu hình các chân LCD:
EN = 0;
RW = 0; // che do led la ghi
RS = 1;
Lấy dữ liệu lấy được của ký tự chuyển sang mã ASCII:
Đưa mã asci của ký tự quét được ra port 3 để đưa vào các chân dữ liệu của LCD
Đưa chân E của LCD lên 1 sau đó xuống 0 để kích hiển thị thông qua sường xuống
Bài 6: ADC_Successive Approximation
Bài Làm nhóm làm mạch thật:
Trang 7Mô tả:
Bài này dùng thuật toán xấp xỉ lên tiếp
Công thức Vout của DAC0808 được tính theo công thức:
Vout = Vref*(𝐴12 +𝐴24 +𝐴28 +𝐴216+𝐴232+𝐴264+128𝐴2 +256𝐴2)
Trong bài này, ta dùng Vref = 5V
Khởi tạo đầu vào DAC ban đầu là 0x80 (1000 0000) ra port P2 của 8051, chú ý đầu P2.7 nối với A1 của DAC, khi đó ta tính tượng Vout = 2.5V
Đưa Vout vào chân đảo của LM393 và Vin (cần đo) đưa vào chân thuận của LM393 Khi Vin>Vout thì out = 1 và ngược lại (out được đưa vào port P3.2)
Khi out =1 : giữ nguyên P2.7 dịch bit sang phải 1 bit và đưa ra cổng P2
Nếu out = 0 dịch sang phải 1 bit và đưa ra P2
Lập lại 8 lần dịch hết 8 bit ta được kết quả là giá trị ADC của Vin cần đo rồi hiển thị ra LCD