Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 110 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
110
Dung lượng
2,95 MB
Nội dung
BỘ LAO ĐỘNG - THƯƠNG BINH VÀ XÃ HỘI TỔNG CỤC DẠY NGHỀ GIÁO TRÌNH Tên mơ đun: Vi điều khiển NGHỀ: ĐIỆN DÂN DỤNG TRÌNH ĐỘ CAO ĐẲNG NGHỀ Ban hành kèm theo Quyết định số: 120 /QĐ- TCDN Ngày 25 tháng năm 2013 Tổng cục trưởng Tổng cục dạy nghề Hà Nội, năm 2012 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI GIỚI THIỆU Ngày với phát triển khoa học công nghệ, nhà khoa học phát minh nhiều linh kiện vi điều khiển Chúng khác không cấu tạo; nguyên lý làm việc hay đặc tính; thơng số kỹ thuật mà với đặc điểm tính chất chức khác chúng sản xuất để sử dụng cho nhiều lĩnh vực môi trường khác Việc sử dụng linh kiện vi điều khiển thiết bị điện tử khác cách hợp lý hiệu quả, nhằm nâng cao hiệu hoạt động, tính cho thiết bị điện tử gia dụng hay cơng nghiệp đòi hỏi nguời thiết kế, lắp ráp thiết bị phải đuợc trang bị kiến thức vi điện tử Mô đun Vi điều khiển xây dựng nhằm phục vụ cho yêu cầu nói Nội dung mô đun bao gồm sau: Bài 1: Các hệ đếm việc mã hóa thơng tin máy tính Bài Cấu trúc họ vi điều khiển 8051 Bài Tập lệnh 8051 Bài Lập trình I/O Bài Timer/Counter Nội dung chủ yếu quan tâm đến việc giúp nguời lắp ráp thiết bị điện tử gia dụng hay công nghiệp sử dụng hệ vi xử lý hay vi điều khiển nắm bắt giải thích tốt nguyên lý hoạt động chúng Mặc dù tác giả cố gắng việc cung cấp đầy đủ thông tin liên quan đến họ vi điều khiển 8051 Tuy nhiên, thời gian hạn hẹp, kiến thức nguồn tài liệu tham khảo hạn chế, nên khơng thể tránh khỏi sai sót Mong nhận ý kiến đóng góp để tác giả hoàn thiện nội dung tài liệu Mọi ý kiến đóng góp xin gửi địa chỉ: Trường Cao đẳng nghề Bách Nghệ Hải Phòng Khoa Điện – Điện tử Số 196/143 Đường Trường Chinh - Quận Kiến An - TP Hải Phòng Email: khoadienbn@gmail.com Hà Nội, ngày 20 tháng 11 năm 2012 Nhóm biên soạn: Chủ biên: Ngô Duy Khánh Khúc Anh Phúc Phạm Văn Việt Mục lục Nội dung Bài 1: Các hệ đếm việc mã hóa thơng tin máy tính Trang Hệ đếm mười hệ đếm hai 1.1 Hệ đếm mười hệ đếm hai 1.2 Chuyển đổi hai hệ đếm Các hệ đếm khác 2.1 Số BCD 2.2 Hệ 16 Các phép toán số học với số hệ hai 3.1 Phép cộng 3.2 Phép trừ số bù hai 3.3 Phép nhân 3.4 Phép chia Mã hóa thơng tin máy tính Giới thiệu mã ASCII-mã tiêu chuẩn cho trao đổi thông tin 10 Bài Cấu trúc họ vi điều khiển 8051 13 Cấu trúc họ 8051 13 1.1 Cấu trúc tổng quát họ 8051 13 1.2 Khối ALU 14 1.3 Bộ nhớ Ram 15 1.4 Bộ nhớ Rom 17 Trao đổi thông tin 8051 17 Sơ đồ ý nghĩa chân 89C51 19 3.1 Port0 19 3.2 Port1 19 3.3 Port 20 3.4 Port 20 3.5 Chân chốt địa ALE 20 3.6 Chân truy suất Rom 20 3.7 Chân Reset 20 3.8 Các chân XTAL1 XTAL2 21 Các ghi đặc biệt 21 4.1 Thanh ghi PC 21 4.2 Thanh ghi SP 23 4.3 Thanh ghi tích lũy A 24 4.4 Thanh ghi từ trạng thái PSW 24 4.5 Thanh ghi DPTR 25 4.6 Các ghi PORT 26 Nguyên lý hoạt động mạch Reset 26 Bài Tập lệnh 8051 27 Tổng quan ngôn ngữ assembly 27 Cấu trúc câu lệnh chương trình viết assembly 27 2.1 Cấu trúc câu lệnh assemby 27 2.2 Cấu trúc chương trình viết assembly 28 2.3 Chương trình soạn thảo biên dịch ngơn ngữ assembly 29 Các kiểu đánh địa 8051 29 3.1 Chế độ địa tức thời 30 3.2 Chế độ địa ghi 31 3.3 Chế độ địa trực tiếp 31 3.4 Chế độ địa gián tiếp thành ghi 35 3.5 Chế độ định địa chỉ số truy cập nhớ Rom chip 37 Tập lệnh 8051 40 Thực hành 51 Bài Lập trình I/O 55 Các Port 8051 55 1.1 Port0 55 1.2 Port1 55 1.3 Port2 56 1.4 Port3 56 Lập trình điểu khiển nháy Led 57 2.1 Sơ đồ nguyên lý 57 2.2 Lập trình điều khiển 57 Lập trình điểu khiển Led matrix 60 3.1 Nguyên lý hoạt động 60 3.2 Lập trình điều khiển 61 4 Lập trình điểu khiển LCD 73 4.1 Sơ đồ nguyên lý 73 4.2 Lập trình điều khiển 85 Giao tiếp led đoạn 88 5.1 Sơ đồ nguyên lý 88 5.2 Lập trình điều khiển 92 Bài Timer/Counter 94 Tổng quan 94 Các ghi liên quan đến timer 94 2.1 Thanh ghi liệu TH0 , TL0, TH1, TL1 94 2.2 Thanh ghi TMOD 95 2.3 Thanh ghi TCON 97 Lập trình cho chế độ 97 3.1 Đặc điểm 97 3.2 Các bước lập trình chế độ 98 3.3 Tìm giá trị cần nạp vào định thời 100 3.4 Thực hành 100 Lập trình cho chế độ 104 4.1 Đặc điểm 104 Các bước lập trình cho chế độ 105 Bộ đếm 106 5.1 Tổng quan 106 5.2 Thực hành 107 Bài CÁC HỆ ĐẾM VÀ VIỆC MÃ HÓA THƠNG TIN TRONG MÁY TÍNH Mã bài: MĐ28.01 Giới thiệu : Trong học này, trình bày hệ đếm thơng dụng ngành khoa học máy tính Mục tiêu: - Sử dụng, chuyển đổi thành thạo hệ đếm thông dụng - Thực thành thạo phép toán hệ đếm nhị phân Nội dung: Hệ đếm mười hệ đếm hai Mục tiêu - Phân biệt, chuyển đổi thành thạo hệ đếm mười hệ đếm hai 1.1 Hệ đếm mười hệ đếm hai - Trong sống hàng ngày hệ đếm số mười hay hệ mười đuợc sử dụngrộng rãi, hệ đếm số mười sử dụng số từ để biểu diễn giá trị số kèm theo tập hợp dùng thêm chữ D, sống hàng ngày số hệ mười đuợc biểu diễn độc lập khơng kèm theo kí tự, ngơn ngữ máy tính sử dụng nhiều hệ đếm khác phải có kí tự biểu diễn hệ đếm để phân biệt với hệ đếm khác Ví dụ: 13; 14D - Trong giới máy tính khác, để biểu diễn giá trị số dùng hệ số hai nói ngắn gọn hệ hai, sử dụng giá trị để biểu diễn giá trị số (ứng với hai trạng thái có điện khơng có điện mạch điện tử cấu tạo lên máy) Khi dùng nhiều hệ đếm khác hệ hai thường kèm theo chữ B để phân biệt với hệ đếm khác Ví dụ cách biểu diễn hệ hai: 0011; 1101B - Cách biểu diễn số hệ mười theo trọng số 10: Một số hệ mười 12345,67 đuợc biểu diễn theo trọng số 10 12345,67=1.104 +2.103 +3.102 +4.101 +5.100 +6.10-1 +7.10-2 - Tương tự số hệ hai đuợc biểu diễn theo trọng số 2: 1100B= 1.23+1.22+0.21+0.20=12D 1.2 Chuyển đổi hai hệ đếm - Cách chuyển đổi số nguyên từ hệ mười sang hệ hai Quy tắc: Lấy số cần đổi chia cho ghi nhớ phần dư, lấy thương phép chia trước chia cho ghi nhớ phần dư, làm đuợc thương Đảo ngược thứ tự dãy số dư đuợc số hệ hai cần tìm Ví dụ : Đổi số 34 sang hệ hai( 100010B.) 34 17 2 1 - Chuyển số thập phân sang hệ hai: Ví dụ: Đổi số 0.125 samg hệ hai: Ta thực theo quy tắc sau: 0,125 * = ,250 0,250 * = ,500 0,500 * = ,000 Kết cuối thu đuợc 0,125 = 0,001B Kết hợp với kết phép chuyển đổi số nguyên 34 ta có kết chuyển dổi số thập phân 34,125 sang hệ đếm hai sau 34,125 = 100010,001 B - Cách chuyển đổi từ hệ hai sang hệ mười 1100B= 1.23+1.22+0.21+0.20=12D Các hệ đếm khác Mục tiêu - Sử dụng thành thạo hệ đếm BCD thập lục phân 2.1 Số BCD Số BCD số thập phân mã hóa theo nhị phân Đây số quen thuộc thực tế thường sử dụng số từ đến số nhị phân hay số Hexa Biểu diễn nhị phân số từ đến gọi BCD Cóhai dạng số BCD dạng nén không nén Số BCD 0000 0001 0010 0011 0011 0101 0110 0111 1000 1001 Số BCD khơng nén có bit thấp biểu diễn số BCD bốn bit cao Ví dụ “00001001” “00000101” số BCD không nén số số Để biểu diễn số BCD không nén cần dùng byte nhớ hay ghi bit Số BCD nén byte chứa hai số BCD, số bit thấp số thứ bit cao Ví dụ “0101 1001” số BCD nén số 59H Như cần byte nhớ lưu hai toán hạng BCD Đây lý sử dụng số BCD nén hiệu lưu liệu tăng gấp đôi 2.2 Hệ 16 - Hệ đếm 16 dùng số từ đến chữ A, B,C, D,E, F tương ứng với giá trị 10 đến 15 để biểu diễn chữ số - Hệ đếm 16 thường đuợc dùng thay cho số dài biểu diễn dạng hệ đếm hai Ví dụ: 255D= 11111111B= FFH Các phép tốn số học với số hệ hai Mục tiêu Thực thành thạo phép toán cộng, trừ, nhân, chia với hệ số hai 3.1 Phép cộng Phép cộng y= a+b tuân theo quy tắc sau: a 0 1 b 1 y 1 C 0 C: Nhớ (carry) 3.2 Phép trừ số bù hai - Biểu diễn số âm bit dấu: Bit có trọng số cao số hệ hai dùng để biểu diễn bit dấu ứng với số dương, ứng với số âm - Trong hệ thống vi xử lý số âm tính theo số bù hai - Các bước để lấy số bù hai số hệ hai A: Biểu diễn A theo dạng mã nhị phân Lấy mã bù A cách đảo ngược bit A Cộng thêm vào mã bù A Ví dụ: Tìm mã bù hai 13 Mã nhị phân 13: 13 = 0000 1101 B (Mã nhị phân 13) Số bù 13: 1111 0010 B (đảo giá trị bit) Cộng thêm 1: Số bù hai 13: 1111 0011 B (tương ứng với giá trị -13) Số bit Hệ hai 0000 0000 0000 0001 0000 0010 0111 1101 0111 1110 0111 1111 1000 0000 1000 0001 1000 0010 1111 1101 1111 1110 1111 1111 Số hệ mười tương đương 125 126 127 128 129 130 125 126 255 Số hệ mười theo mã hệ hai có dấu +0 +1 +2 + 125 +126 +127 -0 -1 -2 -125 -126 -127 Số hệ mười tính theo mã bù hai +0 +1 +2 + 125 +126 +127 - 128 - 127 - 126 - -2 -1 Bảng mô tả cách biểu diễn số âm có độ dài bit - Phép trừ y = a- b đuợc hiểu theo nghĩa phép cộng a số bù hai b(giá trị âm b) Ví dụ: 15 - 13 = ? Ta viết lại phép trính thành 15 + (-13) sử dụng kết trình tìm số bù hai 13 ta có: ( 15 0000 1111 (-13) 1111 0011 Tổng 0000 0010 (nhớ 1) Kết cho 3.3 Phép nhân Phép nhân y= a.b tuân theo quy tắc sau: a 0 1 b 1 y 0 Ví dụ: 1001 0110 0000 1001 1001 0000 0110110 Số bị nhân (9) Số nhân (6) Thành phần tổng tích luỹ Thành phần tổng tích luỹ Thành phần tổng tích luỹ Thành phần tổng tích lũy Tổng tích lũy (54) 94 Mục tiêu: - Nắm bắt đặc điểm Timer/Counter, nguyên lý hoạt động - Lập trình điều khiển thục Timer/Counter Nội dung: Tổng quan Bộ đếm/Bộ định thời: Đây ngoại vi thiết kế để thực nhiệm vụ đơn giản: đếm xung nhịp Mỗi có thêm xung nhịp đầu vào đếm giá trị đếm tăng lên 01 đơn vị (trong chế độ đếm tiến/đếm lên) hay giảm 01 đơn vị (trong chế độ đếm lùi/đếm xuống) Xung nhịp đưa vào đếm hai loại: Xung nhịp bên IC: Đó xung nhịp tạo nhờ kết hợp mạch dao động bên IC linh kiện phụ bên nối với IC Trong trường hợp sử dụng xung nhịp loại này, người ta gọi định thời (timers) Do xung nhịp bên loại thường đặn nên ta dùng để đếm thời gian cách xác Xung nhịp bên ngồi IC: Đó tín hiệu logic thay đổi liên tục 02 mức 0-1 không thiết phải đặn Trong trường hợp người ta gọi đếm (counters) Ứng dụng phổ biến đếm đếm kiện bên đếm sản phầm chạy băng chuyền, đếm xe ra/vào kho bãi… Một khái niệm quan trọng cần phải nói đến kiện “tràn” (overflow) Nó hiểu kiện đếm đếm vượt giá trị tối đa mà biểu diễn quay trở giá trị Với đếm bit, giá trị tối đa 255 (tương đương với FF hệ Hexa) 65535 (FFFFH) với đếm 16 bit 8051 có hai định thời Timer Timer Chúng dùng định thời để tạo trễ thời gian đếm để đếm kiện xảy bên VĐK Trong tìm hiểu cách lập trình cho chúng sử dụng chúng Các ghi liên quan đến timer 2.1 Thanh ghi liệu TH0 , TL0, TH1, TL1 Thanh ghi 16 bit Timer truy cập byte thấp byte cao: Thanh ghi byte thấp gọi TL0 (Timer0 Low byte) Thanh ghi byte cao gọi TH0 (Timer0 High byte) Các ghi truy cập, đọc ghi khác chẳng hạn A, B, R0, R1, R2 v.v Các ghi Timer Giống timer 0, định thời gian Timer dài 16 bit ghi 16 bit chia thành hai byte TL1 TH1 Các ghi truy cập đọc giống ghi Timer 95 Các ghi Timer 2.2 Thanh ghi TMOD Cả hai định thời Timer Timer dùng chung ghi gọi TMOD: để thiết lập chế độ làm việc khác định thời Thanh ghi TMOD ghi bit gồm có: bit thấp để thiết lập cho Timer bit cao để thiết lập cho Timer Trong đó: bit thấp chúng dùng để thiết lập chế độ định thời bit cao dùng để xác định phép toán Thanh ghi TMOD 2.2.1 Các bit M1, M0 Là bit chế độ Timer Timer Chúng chọn chế độ định thời: 0, 1, bảng Chúng ta tập chung vào chế độ thường sử dụng rộng rãi chế độ chế độ Chúng ta sớm khám phá đặc tính chế độ sau khám phần lại ghi TMOD Các chế độ thiết lập theo trạng thái M1 M0 sau: Chế độ M1 M0 0 0 1 1 Chế độ hoạt động Bộ định thời 13 bit:8 bit định thời/bộ đếm, bit đặt trước Bộ định thời 16 bit: khơng có đặt trước Bộ định thời bit: tự nạp lại Chế độ định thời chia tách Các chế độ hoạt động đếm/bộ định thời 2.2.2 Bit C/T (Counter/Timer) Bit ghi TMOD dùng để định xem định thời dùng máy tạo độ trễ hay đếm kiện Nếu bit C/T = dùng định thời tạo độ trễ thời gian Ví dụ 1: TMOD = 0000 0001 (01H) : chế độ định thời Timer chọn 96 TMOD = 0010 0000 (20H) : chế độ định thời Timer chọn TMOD = 0001 0010 (12H) : chế độ định thời Timer chế độ Timer chọn Nguồn đồng hồ cho chế độ trễ thời gian tần số thạch anh 8051 Điều có nghĩa độ lớn tần số thạch anh kèm với 8051 định tốc độ nhịp định thời 8051 Tần số định thời 1/12 tần số thạch anh gắn với 8051 Tần số đếm/bộ định thời Ví dụ 2: Tần số thạch anh 20MHz 12MHz 11,0592MHz Tần số định thời Chu kỳ định thời 20MHz/12=1,6666MHz 1/1,6666MHz=0,6us 12MHz/12=1MHz 1/1MHz=1us 11,0592MHz/12=0,9216MHz 1/0,9216MHz=1,085us Một số tần số thông dụng Mặc dù hệ thống 8051 sử dụng tần số thạch anh từ 10 đến 40MHz, song ta tập trung vào tần số thạch anh 11,0592MHz Lý đằng sau số lẻ tốc độ baud truyền thông nối tiếp 8051 Tần số XTAL = 11,0592MHz cho phép hệ thống 8051 truyền thông với PC mà khơng có lỗi 2.2.3 Bit cổng GATE Một bit khác ghi TMOD bit cổng GATE Để ý hình ta thấy hai định thời Timer0 Timer1 có bit GATE Vậy bit GATE dùng để làm gì? Mỗi định thời thực điểm khởi động dừng Một số định thời thực điều phần mềm, số khác phần cứng số khác vừa phần cứng vừa phần mềm Các định thời 8051 có hai: Việc khởi động dừng định thời khởi động phần mềm bit khởi động định thời TR TR0 TR1 Điều có nhờ lệnh Set bit TR0 lên (khởi động định thời) Clear bit TR0 (dừng định thời) Timer 0, tương tự TR1 Timer Các lệnh có tác dụng bit GATE = ghi TMOD Việc khởi động ngừng định thời phần cứng từ nguồn cách đặt bit GATE = ghi TMOD Tuy nhiên, để tránh lẫn lộn từ ta đặt GATE = có nghĩa khơng cần khởi động dừng định thời phần cứng từ bên ngồi Ví dụ 3: TMOD = 0000 0010: Bộ định thời Timer0, chế độ 2, C/T = dùng nguồn XTAL, GATE = dùng phần mềm để khởi động dừng định thời 97 Như vậy, có hiểu biết vai trò ghi TMOD, xét chế độ định thời cách chúng lập trình để tạo độ trễ thời gian 2.3 Thanh ghi TCON Trong ví dụ ta thấy công dụng cờ TR0 TR1 để bật/tắt đếm/bộ định thời Các bit phận ghi TCON Đây ghi bit, hình 2: bit dùng để lưu cất bit TF TR cho Timer/counter Timer/counter bit thấp thiết lập dành cho điều khiển ngắt mà ta bàn sau Lập trình cho chế độ 3.1 Đặc điểm Dưới đặc điểm timer chế độ 1: Đây định thời 16 bit, cho phép giá trị 0000 đến FFFFH nạp vào ghi TL TH định thời Sau TL TH nạp giá trị khởi tạo 16 bit định thời phải khởi động Điều thực việc SET bit TR0 Timer SET bit TR1 Timer Sau định thời khởi động, bắt đầu đếm lên Nó đếm lên đạt giới hạn FFFFH Sau đó, quay từ FFFFH 0000 bật lên bit cờ TF gọi cờ định thời Cờ định thời hiển thị Khi cờ định thời thiết lập, để dừng định thời: ta thực xóa bit TR0 Timer TR1 Timer Ở cần phải nhắc lại định thời có cờ TF riêng mình: TF0 Timer TF1 Timer Sau định thời đạt giới hạn giá trị FFFFH, muốn lặp lại trình ghi TH TL phải nạp lại với giá trị ban đầu cờ TF phải xóa Timer/counter chế độ 3.2 Các bước lập trình chế độ 98 Để tạo độ trễ thời gian dùng chế độ định thời cần phải thực bước đây: Nạp giá trị TMOD cho ghi báo độ định thời (Timer0 hay Timer1) sử dụng chế độ chọn Nạp ghi TL TH với giá trị đếm ban đầu Khởi động định thời Duy trì kiểm tra cờ định thời TF vòng lặp để xem bật lên khơng Thốt vòng lặp TF lên cao Dừng định thời Xoá cờ TF cho vòng Quay trở lại bước để nạp lại TL TH Cơng thức tính tốn độ trễ sử dụng chế độ (16 bit) định thời tần số thạch anh XTAL = f (MHz): a) Tính theo số Hex b) Tính theo số thập phân (FFFF - YYXX + 1)*12/f (ms) Chuyển đổi giá trị YYXX TH, YYXX giá trị khởi tạo TL số thập phân để nhận số TH, TL tương ứng Lưu ý giá thập phân NNNNN sau lấy (65536 trị YYXX theo số Hex – NNNNN)*12/f (ms) Cơng thức tính độ trễ thời gian theo tần số XTAL (f) Ví dụ 4: Trong chương trình ta tạo sóng vng với độ đầy xung 50% (cùng tỷ lệ phần cao phần thấp) chân P1.5 Bộ định thời Timer0 dùng để tạo độ trễ thời gian: #include ;khai báo thư viện cho VĐK 89x51 Org 0x00 Main: setb P1_5=1 ;khởi tạo chân P1_5 mức cao back: Acall delay ; Goi chuơng trình Delay Cpl P1_5 ; Dao gia tri P1.5 Sjmp back ; Tao vong lap vo han Delay: Mov TMOD, #0x01 ; chọn timer0, chế độ 1, 16Bit Mov TL0=0xF2 ;Nạp giá trị cho TL0 Mov TH0=0xFF ;Nạp giá trị cho TH0 Seb TR0=1 ;Khởi động timer0 Here: Jnb TF0, here ; kiểm tra cờ TF0 Clr TR0; ngừng timer0 ; Xoa co TR0 Clr TF0; xóa cờ TF0 ; Xoa co TF0 Ret end 99 Trong chương trình (hàm main) thực gọi hàm delay() tạo trễ, đảo liên tục tín hiệu đầu chân P1_5 Trong chương trình delay() ý bước sau: TMOD nạp Giá trị FFF2H nạp TH0 - TL0 Bộ định thời Timer0 khởi động lệnh Set bit TR0 Bộ Timer0 đếm lên 01 sau chu kỳ timer Khi định thời đếm tăng qua trạng thái FFF3, FFF4 đạt giá trị FFFFH quay 0000H bật cờ định thời TF0 = Tại thời điểm vòng lặp kiểm tra cờ TF0 thoát Bộ Timer0 dừng lệnh clear bit TR0 Cờ TF0 xóa, sẵn sàng cho chu trình Lưu ý để lặp lại trình ta phải nạp lại ghi TH TL khởi động lại định thời (đơn giản ta gọi lại hàm delay()) Một chu trình đếm timer0 Tính tốn độ trễ tạo định thời chương trình với tần số XTAL=11,0592MHz: Bộ định thời làm việc với tần số đồng hồ 1/12 tần số XTAL, ta có 11,0592MHz/12=0,9216MHz tần số định thời Kết nhịp xung đồng hồ có chu kỳ T=1/0,9216MHz=1,085us Hay nói cách khác, Timer0 tăng 01 đơn vị sau 1,085ms để tạo trễ số_đếm´1,085ms Số đếm FFFFH - FFF2H = ODH (13 theo số thập phân) Tuy nhiên, ta phải cộng vào 13 cần thêm nhịp đồng hồ để quay từ FFFFH 0000H bật cờ TF Do vậy, ta có 14 ´ 1,085ms = 15,19ms cho nửa chu kỳ chu kỳ T = ´ 15,19ms = 30, 38ms thời gian trễ tạo định thời Tuy nhiên, tính tốn độ trễ ta khơng tính đến tổng phí lệnh cài đặt timer0, lệnh kiểm tra vòng lặp, gọi hàm con… Chính câu lệnh làm cho độ trễ dài hơn, dẫn đến tần số xung vuông đầu P1_5 khơng tính tốn Đây nhược điểm C lập trình VĐK Tùy vào chương trình biên dịch, lệnh C biên dịch số lệnh ASM khác nhau, để tính tốn xác ta phải tính tổng phí dòng lệnh ASM 3.3 Tìm giá trị cần nạp vào định thời Giả sử biết lượng thời gian trễ mà ta cần câu hỏi đặt làm để tìm giá trị cần thiết cho thi TH TL Để tính tốn giá trị cần nạp vào ghi TH TL nhìn vào 100 ví dụ sau với việc sử dụng tần số dao động XTAL = 11 0592MHz hệ thống 8051 Các bước để tìm giá trị ghi TH TL: Chia thời gian trễ cần thiết cho 1.085ms Thực 65536 - n với n giá trị thập phân nhận từ bước Chuyển đổi kết bước sang số Hex: ta có YYXX giá trị Hexa ban đầu cần phải nạp vào ghi định thời Đặt TL = XX TH = YY Ví dụ 5: Giả sử tần số XTAL = 11.0592MHz Hãy tìm giá trị cần nạp vào ghi vào ghi TH TL ta muốn độ thời gian trễ 5ms Lời giải: Vì tần số XTAL = 11.0592MHz nên đếm tăng sau chu kỳ 1.085ms Điều có nghĩa phải nhiều khoảng thời gian 1,085ms để có xung 5ms Để có ta chia 5ms cho 1.085ms nhận số n = 4608 nhịp Để nhận giá trị cần nạp vào TL TH ta tiến hành lấy 65536 trừ 4608 60928 Ta đổi số số hex thành EE00H Do vậy, giá trị nạp vào TH EE Và TL 00 Delay: ; định nghĩa hàm delay Mov TMOD, #0x01 ; Chọn timer0 chế độ 16Bit Mov TL0, #0x00 ;Nạp giá trị cho TL0 Mov TH0, #0xEE ; Nạp giá trị cho TH0 Setb TR0=1 ;khởi động timer0 Here: Jnb TF0, here ; kiểm tra cờ TF0 Clr TR0; ngừng timer0 ; Xoa co TR0 Clr TF0; xóa cờ TF0 ; Xoa co TF0 ret 3.4 Thực hành Cho sơ đồ mạch hình vẽ, dùng Timer 8051 điều chế độ rộng xung (PWM) điều khiển tốc độ động trên: 101 L M L C /T O D V IN G N D U4 VO U T L10 R 16 5V 330 C6 LED N G U O N u F /1 V C5 u F /1 V 1N 4007 5V C1 33uF ZTA Y1 C 1 9 /A /A /A /A /A /A /A /A 1 1 1 P P P P P P P P P P P P P P P P 3 3 3 /R XD /T XD /IN T /IN T /T /T /W R /R D A L E /P R O G PSEN XT A L XT A L R ST 20 XTAL 33uF 0 0 0 0 /A /A /A /A /A /A /A /A D D D D D D D D P P P P P P P P 1 1 1 1 39 38 37 36 35 34 33 32 5V C 1815 - /2 W 1k R5 R 17 1k Q 10 C4 2 J /2 V Q MO C 3020 BT137 E A /V P P AT89C 51 U3 31 10k 5V 10K N 220V ~ R 5V 10uF R6 R C 3 - /2 W 6 2 2 VC C 1 1 1 1 P P P P P P P P 12VD C L220V ~ U1 40 2 2 2 2 G N D J1 SW Reset 3.4.1 Nguyên lý a Tổng quan PWM Trước tìm hiểu sâu tìm hiểu định nghĩa PWM gì? Như Phương pháp điều chế PWM có tên tiếng anh Pulse Width Modulation phương pháp điều chỉnh điện áp tải hay nói cách khác phương pháp điều chế dựa thay đổi độ rộng chuỗi xung vuông dẫm đếm thay đổi điện áp Các PWM biến đổi có tần số khác độ rộng sườn dương hay sườn âm b - Sơ đồ nguyên tắc điều khiển tải dùng PWM 102 Trên đồ thị dạng xung điều khiển PWM Với độ rộng xung đầu tương ứng tính % Tùy thích điều khiển b Nguyên lý PWM Đây phương pháp thực theo nguyên tắc đóng ngắt nguồn cới tải cách có chu kì theo luật điều chỉnh thời gian đóng cắt Phần tử thực nhiện vụ mạch van bán dẫn Xét hoạt động đóng cắt van bán dẫn DÙng van đóng cắt Mosfet c Giản đồ xung 103 Trên mạch nguyên lý điều khiển tải PWM giản đồ xung chân điều khiển dạng điện áp đầu dùng PWM * Nguyên lý : Trong khoảng thời gian - to ta cho van G mỏ toàn điện áp nguồn Ud đưa tải Còn khoảng thời gian to - T cho van G khóa, cắt nguồn cung cấp cho tải Vì với to thay đổi từ T ta cung cấp toàn , phần hay khóa hồn tồn điện áp cung cấp cho tải Cơng thức tính giá trị trung bình điện áp tải : Gọi t1 thời gian xung sườn dương (khóa mở ) T thời gian sườn âm dương, Umax điện áp nguồn cung cấp cho tải Ud = Umax.(t1/T) (V) hay Ud = Umax.D (V) với D = t1/T hệ số điều chỉnh tính % tức PWM Như ta nhìn hình đồ thị dạng điều chế xung ta có : Điện áp trùng bình tải : + Ud = 12.20% = 2.4V ( với D = 20%) + Ud = 12.40% = 4.8V ( Vói D = 40%) + Ud = 12.90% = 10.8V (Với D = 90%) d Nguyên lý hoạt động mạch - Khi chân P1.7 lên mức logic cao tranzito Q10 thông mạch dẫn đến MOC 3020 thông mạch, MOC 3020 thông làm Triac BT137 mở cho dòng xoay chiều qua động cơ, động làm việc - Quá trình diễn ngược lại chân P1.7 mức logic thấp e Phần mềm #include ORG 0x00 main: 104 Nop ; Vi dieu khien khong lam gi mov R0,#0x00 ; Khoi gao bien dem setb P1.7 ; Set chan P1.7 len muc logic cao Mov TMOD, #00000001B ; Chon bo dinh thoi hoat dong o che back1: Mov TL0,#0x18 ; Nap vao ghi bo dinh gia tri 64536 Mov TH0,#0xFC ;Timer0 dem tu 64536-65536 tuon ung voi 1ms setb TR0 ;kich hoat bo Timer0 hoat dong here1: Jnb TF0, here1 ; Tham xem bo timer bi tran chua Clr TF0 Clr TR0 Inc R0 cjne R0,#4,back1 ; So sanh xem Timer hoat dong du lan chua tuong ung voi 4ms Mov R0,#0x00 ; Xoa bo dem R0 Clr P1.7 ; Set P1.7=0 back2: Mov TL0,#0x18 ; Nap vao ghi bo dinh gia tri 64536 Mov TH0,#0xFC ; Timer0 dem tu 64536-65536 tuon ung voi 1ms setb TR0 ;kich hoat bo Timer0 hoat dong here2: Jnb TF0, here2 ; Tham xem bo timer bi tran chua Clr TF0 Clr TR0 inc R0 cjne R0,#16,back2 ; So sanh xem Timer hoat dong du 16 lan chua tuong ung voi 16ms sjmp main ; P1.7=0 khoang 16ms end Giải thích: - Chọn Timer0 hoạt động chế 1, định thời 16 bit - Chọn khoảng đếm từ 64536-65536, tương ứng với 1ms - Chọn chu kì xung vng T=20ms - Chọn độ lấp đầy xung 20% (thời gian xung mức cao=4ms, thời gian xung mức thấp = 16ms) Lập trình cho chế độ 4.1 Đặc điểm Dưới đặc điểm timer chế độ 2: Nó định thời bit, cho phép giá trị từ 00 đến FFH nạp vào ghi TH định thời Sau ghi TH TL nạp giá trị ban đầu định thời phải khởi động Sau định thời khởi động, bắt đầu đếm tăng lên cách tăng ghi TL Nó đếm đại giá trị giới hạn FFH 105 Khi quay trở 00 từ FFH, thiết lập cờ định thời TF Nếu ta sử dụng định thời Timer0 cờ TF0, Timer1 cờ TF1 Khi ghi TL quay trở 00 từ FFH, cờ TF bật lên ghi TL tự động nạp lại với giá trị chép từ ghi TH Để lặp lại trình đơn giản việc xố cờ TF chạy mà khơng cần can thiệp lập trình viên để nạp lại giá trị ban đầu Điều làm cho chế độ gọi chế độ tự nạp lại so với chế độ (phải nạp lại ghi TH TL) Timer/counter chế độ Cần phải nhấn mạnh rằng: chế độ định thời bit Tuy nhiên, lại có khả tự nạp, tự nạp lại giá trị ban đầu TH giữ nguyên, TL nạp lại giá trị chép từ TH Chế độ có nhiều ứng dụng, bao gồm việc thiết lập tần số baud truyền thông nối tiếp Các bước lập trình cho chế độ Để tạo thời gian trễ sử dụng chế độ định thời cần thực bước sau: Nạp ghi giá trị TMOD để báo định thời gian (Timer0 hay Timer1) sử dụng chế độ làm việc chúng chon Nạp lại ghi TH TL với giá trị đếm ban đầu Khởi động định thời Duy trì kiểm tra cờ định thời TF cách sử dụng vòng lặp để xem bật chưa Thốt vòng lặp TF lên cao Dừng định thời Xoá cờ TF Quay trở lại bước Vì chế độ chế độ tự nạp lại Ví dụ 6: #include Org 0x00 Main: Mov TMOD,#0x20 ; chọn timer1, chế độ 2, 8Bit, tự nạp lại Mov TH1,#0x00 ; nạp giá trị cho TH1 Mov TL1,#0xFE ; nạp giá trị cho TL1 Setb P1_5 ; khởi tạo chân P1_5 mức cao back: Acall delay ; Goi chuơng trình Delay Cpl P1_5 ; Dao gia tri P1.5 106 Sjmp back ; Tao vong lap vo han Delay: Setb TR1 ; khởi động timer1 Here: Jnb TF1, here ; Tham TF1 len chua Clr TR1 ; ngừng timer1 Clr TF1 ; xóa cờ TF1 Ret end Hàm delay() tạo độ trễ 256 lần (FF - 00 + 1) chu kỳ timer (khơng tính tổng phí lệnh) kể từ chu trình thứ Vì chu trình timer1 bắt đầu đếm vị trí 0xFE, kể từ chu trình sau ghi TL1 chép giá trị TH1 Bộ đếm 5.1 Tổng quan Ở phần ta sử dụng định thời 8051 để tạo độ trễ thời gian Các định thời dùng đếm (counter) kiện xảy bên 8051 Công dụng đếm kiện tình bày phần Chừng liên quan đến công dụng định thời đếm kiện vấn đề mà ta nói lập trình định thời phần trước áp dụng cho việc lập trình đếm ngoại trừ nguồn tần số Đối với định thời/bộ đếm dùng định thời nguồn tần số tần số thạch anh 8051 Tuy nhiên, dùng đếm nguồn xung để tăng nội dung ghi TH TL từ bên 8051 Ở chế độ đếm, lưu ý ghi TMOD TH, TL giống định thời bàn phần trước, chí chúng có tên gọi Các chế độ đếm giống Xem lại phần bit C/T ghi TMOD: ta thấy định nguồn xung đồng hồ cho đếm: Nếu bit C/T = định thời nhận xung đồng hồ từ giao động thạch anh 8051 Nếu bit C/T = định thời sử dụng đếm nhận xung đồng hồ từ nguồn bên 8051 Do vậy, bit C/T = đếm tăng lên xung đưa đến chân P3.4 (T0) counter0 chân P3.5 (T1) counter1 Chân 14 15 Chân cổng Chức Mô tả P3.4 T0 Đầu vào đếm P3.5 T1 Đầu vào đếm Các chân cổng P3 dùng cho đếm Ví dụ 7: Chương trình sau sử dụng đếm 1, đếm xung chân P3.5 hiển thị số đếm (trong ghi TL1) lên cổng P2: 107 #include Main: Mov TMOD,#0x60 ;0x60=0110 000 : C/T=1, đếm 1, chế độ tự nạp Mov TH1,#0x00 ;xóa đếm ban đầu Setb P3_5 ; set chân vào cho đếm Setb TR1 ;khởi động đếm Back: Mov A,TL1 ;hiển thị số đếm cổng P2 Mov P2,A ; thong qua ghi A Sjmp Back ; Tao vong lap vo han Trong ví dụ sử dụng counter1 đếm kiện để đếm lên xung đồng hồ cấp đến chân P3.5 Các xung đồng hồ biểu diễn số người qua cổng số vòng quay kiện khác mà chuyển đổi thành xung 5.2 Thực hành a Mô tả mạch Cho sơ đồ mạch sau, sử dụng Timer0 tạo đếm từ 00-99, hiển thị thông qua led7 thanh, xung đầu vào chân P3.4(T0) Mạch gồm module sau: - Khối 89C51 dùng để đếm xung vào chân P3.4 - Khối hiển thị gồm Led7 thanh, IC giải mã 74LS47, chân xuất tín hiệu đếm tương ứng từ P0.0-P0.3, chân điều khiển cấp nguồn cho led7 tương ứng P0.4, P0.5 - Khối nút nhấn tạo xung 3u F ZTA Y1 C XTAL 3u F P P P P P P P P A L E /P R O G P S E N XTA L2 XTA L1 R S T 1 1 1 1 V R E A /V P P 19 A A A A A A A A D IR O E B B B B B B B B 1 1 1 1 16 31 V C C 5V 0u F K S W b Nội dung phần mềm: #include G N D V k AT8 C 51 10k R 1 10 S N 44 7 4H C 5V C U4 T est R B I R B P 20 20 U2 3 3 3 3 3 1 1 1 D D D D D D D D g f e d c b a /A /A /A /A /A /A /A /A /R X D /T X D /IN T /IN T /T /T /W R /R D 0 0 0 0 0 A A A A P P P P P P P P 7 1 1 1 V C C 9 3 3 3 3 /A /A /A /A /A /A /A /A G N D 1 P P P P P P P P 10 2 2 2 2 V C C 1 1 1 1 P P P P P P P P V U1 40 C 1 G N D Xung vao 2 2 2 2 B B 10 R 20 2VD C L E d 7d o an g f e d c b a g f e d c b a V V cc V cc L E D N G U O N L E d a n N 0 V 2 3 k J1 k C B L10 R 16 V u F /1 V V O U T u F /1 V C D V IN G N D U4 k L M L C /T O 0 B V X ung va o 108 Org 0x00 main: Mov TMOD, #00000110 ; Chon Counter0che tu nap lai begin: Clr TR0 ; Dung bo dem Mov TH0, #0x00 ; Nap gia tri ban dau cho TH Setb TR0 back: Nop Mov A,TH0 ; Copy du lieu tu TH0 sang A Mov R1,A Subb A,#99 ; Kiem tra TH0 dat den so 99 chua Jnc begin ; Neu TH0 >99 quay lai tu dau Mov A,R1 ; Copy du lieu tu R1 sang A Acall bin_to_bcd ; chuyen doi ket qua sang ma bcd Mov R2, A ; Copy du lieu tu A sang R2 Anl A,#0x0F ; giu nguyen bit cao dua bit thap ve Mov P0,#0x00 ; Xoa cong P0 setb P0.5 ; cap nguon cho led7 hang truc Add A,P0 ; Xu ly du lieu truoc xuat P0 Mov P0,A ; Dua du lieu P0 Mov A,R2 ; Copy du lieu tu R2 sang A Rr A ; Dich phai A chuyen tiep 4bit hang don vi Rr A ; led7 hang don vi Rr A Rr A Anl A,#0x0F Mov P0,#0x00 setb P0.4 Add A,P0 Mov P0,A sjmp back ; tao vong lap vo han ;====================================================== bin_to_bcd: ; Chuyen so binary sang ma bcd Mov B,#10 Div AB Rl A Rl A Rl A Rl A Add A,B ret end ... +126 +127 -0 -1 -2 -1 25 -1 26 -1 27 Số hệ mười tính theo mã bù hai +0 +1 +2 + 125 +126 +127 - 128 - 127 - 126 - -2 -1 Bảng mô tả cách biểu diễn số âm có độ dài bit - Phép trừ y = a- b đuợc hiểu... Driver, Port Driver - Khối Timing And Control: Khối điều khiển hoạt động Bus - Khối Timer: Điều khiển hoạt động Timer - Bộ nhỡ liệu RAM - Bộ nhớ chương trình Rom (Flash) - Hệ thống ghi đặc biệt,... sau: - ALU : Khơi chun thực phép tính số học logic - Bộ tạo dao động Osc: tạo xung nhịp hoạt động cho chip từ nguồn thạch anh - Các đệm cổng Port Latch, Port Latch, Port Latch, Port Latch - Các