THIẾT KẾ MACH NỐI GHÉP 1 LED ĐƠN VỚI CHÂN P1.3 VIẾT CHƯƠNG TRÌNH CHO PHÉP TIMER 0 XẢY RA SAU KHOẢNG THỜI GIAN 1 GIÂY, MỖI KHI CÓ NGẮT XẢY RA THÌ BẬT LED TẠI CHÂN P1.3
Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
900,38 KB
File đính kèm
Nhóm 2.zip
(1 MB)
Nội dung
BÁO CÁO LẬP TRÌNH NHÚNG THIẾT KẾ MACH NỐI GHÉP LED ĐƠN VỚI CHÂN P1.3 VIẾT CHƯƠNG TRÌNH CHO PHÉP TIMER XẢY RA SAU KHOẢNG THỜI GIAN GIÂY, MỖI KHI CĨ NGẮT XẢY RA THÌ BẬT LED TẠI CHÂN P1.3 (FULL DOME BÁO CÁO ) MÔN HỌC: Lập Trình Nhúng GV: XXX I I.1 Thành viên nhóm: Nguyễn Văn Ban Hoàng Thị Hải Yến Bùi Minh Ngọc Tơ Thành Đồng Hồng Thị Huyền Nguyễn Thị Mỹ Hạnh Ngắt 8051 Ngắt gì? Ngắt (Interrupt) - tên nó, số kiện khẩn cấp bên bên vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực chương trình tại, phục vụ nhiệm vụ mà ngắt yêu cầu – nhiệm vụ gọi trình phục vụ ngắt (ISR: Interrupt Service Routine) I.2 Phương pháp sử dụng ngắt Mỗi có thiết bị cần phục vụ báo cho vi điều khiển cách gửi tín hiệu ngắt Khi nhận tín hiệu ngắt vi điều khiển ngừng tất thực để chuyển sang phục vụ thiết bị gọi ngắt Chương trình ngắt gọi trình phục vụ ngắt ISR (Interrupt Service Routine) hay cịn gọi trình quản lý ngắt (Interrupt handler) Sau phục vụ ngắt xong, vi xử lý lại quay trở lại điểm bị ngắt trước tiếp tục thực công việc I.3 Điểm mạnh phương pháp ngắt Bộ vi điều khiển phục vụ nhiều thiết bị (tất nhiên khơng thời điểm) Mỗi thiết bị nhận ý vi điều khiển dựa mức ưu tiên gán cho Quan trọng hơn, phương pháp ngắt vi điều khiển cịn che (làm lơ) yêu cầu phục vụ thiết bị Lý quan trọng mà phương pháp ngắt ưu chuộng khơng lãng phí thời gian cho thiết bị không cần phục vụ I.4 Các ngắt 8051 Có sáu loại ngắt 8051 RESET: Khi chân RESET kích hoạt từ 8051, đếm chương trình nhảy địa 0000H Đây địa bật lại nguồn 2 ngắt dành cho định thời: cho Timer0 cho Timer1 Địa tương ứng ngắt 000BH 001BH ngắt dành cho ngắt phần cứng bên ngoài: chân 12 (P3.2) 13 (P3.3) cổng P3 ngắt phần cứng bên INT0 INT1 tương ứng Địa tương ứng ngắt ngồi 0003H 0013H Truyền thơng nối tiếp: có ngắt chung cho nhận truyền liệu nối tiếp Địa ngắt bảng vector ngắt 0023H I.5 Trình phục vụ ngắt Đối với ngắt phải có trình phục vụ ngắt (ISR) hay trình quản lý ngắt để đưa nhiệm vụ cho vi điều khiển gọi ngắt Khi ngắt gọi vi điều khiển chạy trình phục vụ ngắt Đối với ngắt có vị trí cố định nhớ để giữ địa ISR Nhóm vị trí nhớ dành riêng để lưu giữ địa ISR gọi bảng vector ngắt Hình 1: Mức ưu tiên ngắt cấp lại nguồn I.6 Quy trình thực ngắt Khi kích hoạt ngắt vi điều khiển thực bước sau: Nó hồn thành nốt lệnh thực lưu địa lệnh vào ngăn xếp Nó lưu tình trạng tất ngắt Nó nhảy đến vị trí cố định nhớ gọi bảng vector ngắt, nơi lưu giữ địa trình phục vụ ngắt Bộ vi điều khiển nhận địa ISR từ bảng vector ngắt nhảy tới Nó bắt đầu thực trình phục vụ ngắt lệnh cuối ISR trở chương trình từ ngắt Khi vi điều khiển quay trở nơi bị ngắt Trước hết nhận địa đếm chương trình PC từ ngăn xếp cách kéo 02 byte đỉnh ngăn xếp vào PC Sau bắt đầu thực tiếp lệnh từ địa I.7 Các bước cho phép cấm ngắt Khi bật lại nguồn tất ngắt bị cấm (bị che), có nghĩa khơng có ngắt vi điều khiển đáp ứng trừ chúng kích hoạt Các ngắt phải kích hoạt phần mềm để vi điều khiển đáp ứng chúng Có ghi gọi ghi cho phép ngắt IE (Interrupt Enable) – địa A8H chịu trách nhiệm việc cho phép cấm ngắt Hình 2: Thanh ghi cho phép ngắt IE Để cho phép ngắt ta phải thực bước sau: Nếu EA = khơng có ngắt đáp ứng cho dù bit tương ứng IEcó giá trị cao Bit D7 - EA ghi IE phải bật lên cao phép bit lại ghi hoạt động Nếu EA = tất ngắt phép đáp ứng bit tương ứng chúng IE có mức cao • TF0(1) cờ báo tràn timer, kiện tràn timer xảy ra, cờ tự động đặt lên mức logic ngắt tràn timer bật, ngắt xảy Khi CPU xử lý ngắt tràn timer0(1), cờ ngắt TF0(1) tương ứng tự động xóa • TR0(1) = 1, timer0(1) đếm, ngược lại TR0(1) = 0, timerx không đếm Khi dừng không đếm, giá trị timer giữ nguyên Chúng ta biết cờ định thời TF bật lên cao định thời đạt giá trị cực đại quay (Roll - over) Trong trước cách kiểm tra cờ TF vòng lặp Trong thăm dò cờ TF ta phải đợi cờ TF bật lên Vấn đề với phương pháp vi điều khiển bị trói buộc chờ cờ TF bật làm việc khác Sử dụng ngắt giải vấn đề tránh trói buộc vi điều khiển Nếu ngắt định thời ghi IE phép quay trở vi điều khiển bị ngắt, bất chấp thực việc nhảy tới bảng vector ngắt để phục vụ ISR Bằng cách vi điều khiển làm cơng việc khác thơng báo định thời quay II Bộ định thời 8051 có Timer tên Timer0 Timer1 Các Timer Timer 16 bit, giá trị đếm max 2^16 = 65536 (đếm từ đến 65535) Hai Timer có nguyên lý hoạt động hoàn toàn giống độc lập Sau cho phép chạy, có thêm xung đầu vào đếm, giá trị Timer tự động tăng lên đơn vị, giá trị tăng lên vượt giá trị max mà ghi đếm biểu diễn giá trị đếm lại đưa trở giá trị (thơng thường = 0) Khi xảy tràn Timer (overflow) gây ngắt ngắt tràn Timer cho phép (bit ETx ghi IE=1) Việc cho Timer chạy/dừng thực bit TR ghi TCON (đánh địa đến bit) Thanh ghi 16 bit Timer (hay Timer 1) truy cập byte thấp byte cao: II.1 Các ghi sở định thời Cả hai định thời Timer Timer có độ dài 16 bit truy cập hai ghi tách biệt byte thấp byte cao Chúng ta bàn riêng ghi II.1.1.Các ghi Timer 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 Hình 1: Các ghi Timer II.1.2 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 Hình 2: Các ghi Timer II.1.3 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 tốn Hình 3: Thanh ghi TMOD a 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: M1 M0 Chế độ Chế độ hoạt động 0 Bộ định thời 13 bit:8 bit định thời/bộ đếm, bit đặt trước 1 Bộ định thời 16 bit: khơng có đặt trước 1 Bộ định thời bit: tự nạp lại 1 Chế độ định thời chia tách Bảng 1: Các chế độ hoạt động đếm/bộ định thời b 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 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 Hình 4: Tần số đếm/bộ định thời Tần số thạch anh Tần số định thời Chu kỳ định thời 20MHz 20MHz/12=1,6666MHz 1/1,6666MHz=0,6us 12MHz 12MHz/12=1MHz 1/1MHz=1us 11,0592MHz 11,0592MHz/12=0,9216MHz 1/0,9216MHz=1,085us Bảng 2: 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 c GATE Bit GATE quy định việc cho phép Timer đếm (run Timer) Nếu GATE =0, Timer đếm bit TR 1, dừng bit Nếu GATE =1, Timer đếm bit TR = tín hiệu chân INT = 1, dừng hai điều kiện khơng cịn thỏa mãn Thơng thường người ta dùng Timer với GATE = 0, dùng timer với GATE = trường hợp muốn đo độ rộng xung lúc Timer đếm thời gian xung đưa vào chân INT mức cao d M0 M1 Hai bit lại (M0 M1) dùng để chọn chế độ timer M Chế M0 độ Chế độ hoạt động Bộ Timer 13 bit: bit Timer/bộ đếm, bit 0 đặt trước 1 Bộ Timer 16 bit: khơng có đặt trước Bộ Timer bit: tự nạp lại 1 Chế độ tách Timer II.2 Các chế độ * Để sử dụng timer 8051, cần thực bước sau: - Quy định chế độ hoạt động cho timer cách tính tốn ghi giá trị cho bit ghi TMOD - Ghi giá trị đếm khởi đầu mong muốn vào ghi đếm THx TLx Đôi ta không muốn timer/counter bắt đầu đếm từ mà từ giá trị để thời điểm tràn gần hơn, chẵn tính tốn sau Ví dụ cho timer đếm từ 15535 sau 50000 xung nhịp (tức 50000 ms với thạch anh 12MHz) timer tràn, thời gian giây dễ dàng tính xác = 20 lần tràn timer (đương nhiên lần tràn lại phải nạp lại giá trị 15535) - Dùng bit TRx ghi TCON timer chạy hay dừng theo ý muốn Hình 2.1: Timer chế độ Hình 2.2: Timer chế độ Hình 2.3: Timer chế độ Hình 2.4: Timer chế độ II.2.1.Lập trình cho chế độ Dưới bước hoạt động timer chế độ 1: Đây định thời 16 bit, cho phép giá trị 0000 đến FFFFHđược 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 đối vớiTimer 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ừ FFFFHvề 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đối với 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 Hình 5: Timer/counter chế độ *Các bước lập trình cho Timer chế độ 1: • Nạp giá trị TMOD cho ghi báo độ định thời nào( Timer hay Timer1) • • • • • • sử dụng chế độ chọn Nạp ghi TL TH Khởi động định thời: TRx=1; Duy trì kiểm tra cờ định thời TF Thốt vịng lặp TF lên cao Dừng định thời Xóa cờ TF cho vòng Quay trở lại bước để nạp lại cho TL TH *Cơng thức tính giá trị nạp vào cho ghi THx TLx: Chia thời gian trễ cần thiết(us) cho chu kì T Với T= T(thạch anh)/12 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ó XXYY giá trị Hexa ban đầu nạp vào ghi định thời Đặt TH=XX TL= YY Ví dụ: thiết kế mạch ghép nối LED đơn với chân P1.3 Viết chương trình cho phép ngắt Timer0 xảy sau khoảng thời gian 1ms Mỗi có ngắt bật LED chân P1.3 Bài làm: Giả sử ta sử dụng tần số XTAL = 11,0592MHZ f(đt) = f(thạch anh)/12 = 11.0952/12 = 0,9216MHZ Chu kỳ định thời T(đt) = 1/0,9216 = 1,0852 µs (mỗi xung nhịp µs) Thời gian cần định thời 1ms = 1000 µs Vậy cứ: nhịp = 1,085 µs ? nhịp = 1000 µs Vậy số nhịp 1000/1,085 = 922 Vậy giá trị cần nạp cho ghi TH0 TL0 65536-922=64614=FC66(Hex) ... chân P1.3 Viết chương trình cho phép ngắt Timer0 xảy sau khoảng thời gian 1ms Mỗi có ngắt bật LED chân P1.3 Bài làm: Giả sử ta sử dụng tần số XTAL = 11 ,05 92MHZ f(đt) = f(thạch anh) /12 = 11 .09 52 /12 ... đếm chương trình nhảy địa 00 00H Đây địa bật lại nguồn 2 ngắt dành cho định thời: cho Timer0 cho Timer1 Địa tương ứng ngắt 00 0BH 00 1BH ngắt dành cho ngắt phần cứng bên ngoài: chân 12 (P3.2) 13 ... 11 .09 52 /12 = 0, 9 216 MHZ Chu kỳ định thời T(đt) = 1/ 0, 9 216 = 1, 08 52 µs (mỗi xung nhịp µs) Thời gian cần định thời 1ms = 10 00 µs Vậy cứ: nhịp = 1, 08 5 µs ? nhịp = 10 00 µs Vậy số nhịp 10 00 /1, 08 5 = 922