(NB) Tiếp nội dung phần 1, Giáo trình Lập trình vi điều khiển (Nghề: Cơ điện tử): Phần 2 cung cấp cho người học những kiến thức như: Bộ định thời; cổng nối tiếp; ngắt. Mời các bạn cùng tham khảo!
86 BÀI 4: BỘ ĐỊNH THỜI Mã bài: MĐ CĐT32-04 Giới thiệu: Trong trình viết chương trình dùng vi điều khiển để vận hành hệ thống việc khởi tạo đọc định thời vấn đề quan trọng Việc hiểu sử dụng chức timer yêu cầu cấp thiết việc lập trình cho vi điều khiển Trong 4, vào tìm hiểu cách thức khởi tạo sử dụng đinh thời vi điều khiển Mục tiêu: - Trình bày cấu tạo chế độ làm việc định thời 8051 theo nội dung học; - Thực khởi tạo nhớ yêu cầu kỹ thuật; - Thực đọc định thời hoạt động yêu cầu kỹ thuật; - Thực lập trình điều khiển dùng định thời yêu cầu kỹ thuật; - Chủ động, sáng tạo an tồn q trình học tập Nội dung chính: Mở đầu Một định thời chuỗi flipflop với flipflop mạch chia hai,chuỗi nhận tín hiệu ngõ vào làm nguồn xung clock.Xung clock đặt vào flipflop thứ flipflop chia đơi tần số xung clock Ngõ flipflop thứ trở thành nguồn xung clock cho flipflop thứ hai,nguồn xung clock chia cho 2,v.v Vì tần chia định thời có n tầng chia tần số xung clock ngõ vào cho Ngõ tần cuối làm xung clock cho flipflop báo tràn định thời hay còngọi cờ tràn (overflow flag),cờ tràn kiểm tra phần mềm tạo ngắt.Giá trị nhị phân flipflop định thời số đếm xung clock từ định thời bắt đầu đếm Ví dụ định thời 16bit đếm từ 0000H đến FFFH.Cờ tràn set bằng xảy tràn số đếm từ FFFFH xuống 0000H Hoạt động Timer bit đơn giản minh họa sau: 87 Hình 4.1 Hoạt động Timer bit Hoạt động định thời đơn giản minh họa hình bên (hình 4.1),bộ định thời bit Mỗi tầng D-FF kích khởi cạnh âm hoạt động mạch chia cho ta nối ngõ Q đảo với ngõ vào D Flipflop cờ đơn giản mạch chốt D set bằng tầng cuối định thời Giản đồ thời gian hình cho thấy tầng thứ (Q0 ) chia hai tần số xung clock, tầng thứ hai chia tần số xung clock v.v… Số đếm (count) ghi dạng thập phân kiểm tra dễ dàng bằng cách khảo sát trạng thái flipflop.Ví dụ: Số đếm xuất Q2=1, Q1=0 Q0=0(410=1002) Các flip flop hình flipflop tác động cạnh âm (nghĩa ngõ Q flip flop đổi trạng thái theo cạnh âm xung clock) Khi số đếm tràn từ 1112 xuống 0002,ngõ Q2 có cạnh âm (1 hay 0) làm cho trạng thái flip flop cờ đổi từ lên 1(ngõ vào D flipflop luôn logic 1) Bộ định thời sử dụng hầu hết ứng dụng hướng điều khiển 8051 với định thời chip trường hợp ngoại lệ 8051 có hai 88 định thời 16 bit, có chế độ hoạt động Bộ định thời thứ với ba chế độ hoạt động thêm vào chip 8051.Các định thời dùng để: Định thời khoảng thời gian Đếm kiện Tạo tốc độ baud cho port nối tiếp chip 8051 Với định thời 16 bit, tầng cuối (tầng thứ 16)chia tần số xung clock ngõ vào định thời cho 216=65536 Trong ứng dụng định thời khoảng thời gian, định thời lập trình cho tràn sau khoảng thời gian quy định set cờ tràn định thời bằng Cờ tràn sử dụng để đồng chương trình nhằm thực cơng việc kiểm tra trạng thái ngõ nhập gửi liệu đến ngõ xuất Các ứng dụng khác sử dụng xung clock định thời để đo khoảng thời gian hai kiện (Ví dụ: đo độ rộng xung) Việc đếm kiện dùng để xác định số lần xuất kiện đo thời gian kiện.Từ “sự kiện” kích thích bên ngồi cung cấp chuyển trạng thái từ xuống tới chân chip 8051 Các định thời cung cấp xung clock tốc độ baud cho port nối tiếp bên 8051 Các định thời 8051 truy xuất bằng cách sử dụng ghi chức đặc biệt.Với định thời thứ chip 8052, ta có thêm ghi chức đặc biệt để truy xuất định thời SFR định thời Mục đích Địa Định địa TCON Điều khiển 88H Có TMOD TL0 TL1 TH0 Chọn chế độ Byte thấp định thời Byte thấp định thời Byte cao định thời 89H 8AH 8BH 8CH Không Không Không Không TH1 T2CON RCAP2H RCAP2L TL2 TH2 Byte cao định thời Điều khiển định thời Nhận byte thấp định thời Nhận byte cao định thời Byte thấp định thời Byte cao định thời 8DH C8H CAH CBH CCH CDH Khơng Có Không Không Không Không 89 Thanh ghi SFR timer - Thanh ghi chế độ định thời (TMOD) Thanh ghi TMOD (timer mode register) chứa hai nhóm bit dùng để thiết lập chế độ hoạt động cho định thời định thời 1.TMOD không định địa bit Một cách tổng quát,TMOD nạp lần phần mềm thời điểm bắt đầu chương trình để khởi động chế độ hoạt động định thời.Sau định thời dừng, bắt đầu,v.v…bằng cách truy xuất ghi chức đặc biệt khác định thời TMOD Register MSB LSB GATE C/T M1 M0 GATE C/T Timer M1 M0 Timer Bảngh 4.1 Timer TMOD Các bít M1, M0: Là bít chế độ Timer Timer Chúng chọn chế độ định thời: 0, 1, Chế độ định thời 13, chế độ định thời 16 bít chế độ định thời bít Chúng ta tập chung vào chế độ thường sử dụng rộng rãi 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 ( bảng 4.2, 4.3) Bit Tên Mô tả Bộ định thời GATE Bit điều khiển cổng.Khi set lên 1,bộ định thời hoạt động INT1 đảo mức cao C/ T Bit chọn chức đếm định thời: = đếm kiện = định thời khoảng thời gian M1 Bit chọn chế độ thứ M0 Bit chọn chế độ thứ hai GATE Bit điều khiển cổng cho định thời 90 C/ T Bit chọn chức đếm định thời cho định thời M1 Bit chọn chế độ thứ M0 Bit chọn chế độ thứ hai Bảng 4.2 Thanh ghi chọn chế độ định thời M1 M0 Chế độ Mô tả 0 Chế độ định thời 13 bit 1 Chế độ định thời 16 bit Chế độ tự động nạp lại bit 1 Chế độ định thời chia sẻ Bảng 4.3 Các chế độ định thời - Thanh ghi điều khiển định thời (TCON) Thanh ghi TCON chứa bit điều khiển, bit trạng thái định thời định thời 1.Bit cao TCON (TCON4 – TCON7) dùng để điều khiển cho định thời hoạt động, ngưng (TR0,TR1) để báo định thời tràn (TF0,TF1) Bit thấp TCON(TCON0- TCON3) không dùng để điều khiển định thời,chúng dùng để phát khởi động ngắt (bảng 4.4) Bit TCON.7 Ký Địa hiệu bit TF1 8FH Mô tả Cờ tràn định thời 1.Cờ set phần cứng có tràn, xóa phần mềm,hoặc phần cứng vi xử lý tác động đến chương trình phục vụ ngắt TCON.6 TR1 8EH Bit điều khiển hoạt động định thời 1.Bit set xóa phần mềm để điều khiển định thời hoạt động hay ngưng hoạt động TCON.5 TF0 8DH Cờ tràn định thời 91 TCON.4 TR0 8CH Bit điều khiển hoạt động định thời TCON.3 IE1 8BH Cờ ngắt bên 1.Cờ set phần cứng có cạnh âm( xuống),xuất chân INT1 đảo,được xóa phần mềm,hoặc phần cứng CPU trỏ đến chương trình phục vụ ngắt TCON.2 IT1 8AH Bit chọn ngắt thuộc loại tác động cạnh hay tác động mức.0:mức;1:cạnh TCON.1 IE0 89H Cờ ngắt bên ngồi (kích khởi cạnh) TCON.0 IT0 88H Bit chọn ngắt thuộc loại tác động cạnh hay tác động mức ; mức 1; cạnh Bảng 4.4 Thanh ghi điều khiển định thời TCON Các chế độ làm việc Do ta có hai định thời chip 8051,kí hiệu “x” sử dụng để định thời định thời 1.Thí dụ : THx TH0 hay TH1 tùy theo định thời hay 3.1 Chế độ định thời 13 bit (chế độ 0) Chế độ định thời chế độ định thời 13 bit cung cấp khả tương thích với vi điều khiển tiền nhiệm 8048.Chế độ không dùng cho thiết kế mới.Byte cao định thời THx ghép cascade với bit thấp byte thấp định thời THx để tạo thành định thời 13bit Ba bit cao TLx không sử dụng 3.2 Chế độ định thời 16 bit (chế độ 1) Chế độ định thời 16 bit có cấu hình giống chế độ định thời 13 bit Khi có xung clock định thời đếm lên: 0000H,0001H,0002H … FFFFH (65535) Một tràn xuất có chuyển số đếm từ FFFFH xuống 0000H, kiện set cờ tràn bằng (TFx = 1) định thời tiếp tục đếm Bit có ý nghĩa lớn (MSB : Most significant bit) giá trị ghi định thời bit THx bit có ý 92 nghĩa thấp (LSB : Least significan bit ) bit TLx Các ghi định thời ( THx,TLx) đọc ghi bằng phần mềm thời điểm Timer clock TLx THx TFx 3.3 Chế độ tự nạp lại bit (chế độ 2) Chế độ chế độ tự nạp lại 8bit Byte thấp định thời (TLx) hoạt động định thời bit byte cao định thời lưu giữ giá trị nạp lại Khi số đếm tràn từ FFH xuống 00H không cờ tràn định thời set lên mà giá trị THx nạp vào TLx, việc đếm tiếp tục từ giá trị xảy lần tràn kế tiếp,v.v… Timer clock TLx TFx Reload THx 3.4 Chế độ định thời tách biệt timer (chế độ 3) Chế độ chế độ định thời chia xẻ có hoạt động khác cho định thời Bộ định thời chế độ chia thành định thời bit hoạt động riêng lẻ TL0 TF1, định thời Set cờ tràn tương ứng TF0 TF1 xảy tràn Bộ định thời không hoạt động chế độ khởi động bắng cách chuyển định thời vào chế độ khác Giới hạn cờ tràn TF1 định thời không bị ảnh hưởng định thời xảy tràn TF1 nối với định thời TH0 Chế độ chủ yếu cung cấp thêm định thời bit nữa, nghĩa 8051 có thêm định thời thứ 3.Khi định thời chế độ 3,bộ định thời hoạt động ngưng bằng cách chuyển khỏi chế độ vào chế độ Bộ định thời sử dụng port nối tiếp (lúc định thời làm nhiệm vụ tạo xung clock tốc độ baud) sử dụng theo cách khơng u cầu ngắt (vì định thời lúc khơng cịn nối với TF1) 93 Nguồn cung cấp xung cho Timer Có khả tạo nguồn xung clock này,việc lựa chọn khả ta thiết lập bit C/ T (counter/timer) ghi TMOD bằng hay định thời khởi động.Một nguồn xung clock dùng để định thời khoảng thời gian, nguồn xung clock lại dùng để đếm kiện 4.1 Chức định thời Nếu C/ T = 0,hoạt động định thời chọn nguồn xung clock định thời mạch dao động bên chip tạo Một mạch chia 12 tầng thêm vào để giảm tần số xung clock đến giá trị thích hợp với hầu hết ứng dụng Lúc định thời dùng để định thời khoảng thời gian.Các ghi định thời (TLx/THx) đếm lên với tần số xung clock bằng 1/12 tần số mạch dao động chip (nghĩa thạch anh 12MHz, tần số xung clock 1MHz) Bộ định thời tràn sau số xung clock cố định phụ thuộc vào giá trị ban đầu nạp cho ghi định thời( TLx/THx) 4.2.Đếm kiện Nếu C/ T = 1, định thời cung cấp xung clock từ nguồn tạo xung bên Trong đa số ứng dụng,nguồn xung clock cung cấp cho định thời xung dựa việc xảy kiện định thời đếm kiện Số kiện xác định phần mềm bằng cách đọc ghi định thời (TLx/THx), giá trị 16-bit ghi tăng theo kiện Hai chân port 3( P3.4 P3.5 ) trở thành ngõ vào xung clock cho định thời Chân P3.4 ngõ vào xung clock cho định thời (ta gọi chân T0 ngữ cảnh này), chân P3.5 ngõ vào xung clock cho định thời 1(T1) Trong ứng dụng đếm kiện, ghi định thời tăng xảy chuyển trạng thái từ xuống ngõ vào Tx (T0 1).Ngõ vào Tx lấy mẫu suốt chu kỳ máy, ngõ vào mức cao chu kỳ mức thấp chu kỳ kế, số đếm tăng Phải chu kỳ máy (2us) để nhận biết chuyển trạng thái từ xuống 0, tần số cực đại nguồn xung clock bên 500KHz (với giả sử chip vi điều khiển hoạt động với thạch anh 12 MHz) Khởi động, dừng, điều khiển Timer Cách đơn giản để khởi động dừng định thời sử dụng bit điều khiển hoạt động TRx ghi TCON TRx xóa thiết lập hệ thống; 94 nghĩa định thời ngưng hoạt động Ngược lại ta set bit TRx nghĩa cho phép định thời hoạt động Do ghi TCON ghi định địa bit, ta dễ dàng khởi động dừng định thời bằng chương trình Một phương pháp khác để điều khiển định thời sử dụng bit GATE ghi TMOD ngõ vào /INTx Bằng cách set bit GATE lên ta cho phép định thời điều khiển /INTx Khởi tạo truy xuất ghi Timer Các định thời thường khởi động lần thời điểm bắt đầu chương trình để thiết lập chế độ hoạt động yêu cầu.Trong thân chương trình,các định thời điều khiển hoạt động, dừng, kiểm tra bit cờ xóa, cá ghi định thời đọc cập nhật tuỳ theo yêu cầu ứng dụng TMOD ghi khởi động trước tiên ghi thiết lập chế độ hoạt động Các tác vụ: - Đặt chế độ làm việc - Cho timer chạy - Dừng timer - Kiểm tra cờ tràn - Xóa cờ tràn - Đọc cập nhật ghi timer - Chú ý: có sử dụng ngắt ngồi ( TD: chế độ 1) Hình 4.2 Ngắt ngồi timer 95 Ví dụ: Đặt chế độ làm việc: Khởi động định thời hoạt động chế độ 16-bit (chế độ 1), xung clock cấp từ mạch dao động chip(định thời khỏang thời gian) MOV TMOD,#00010000B Timer 1: Gate = 0, C/T = 0, M1M0 = 01 (mode 1) Timer : Gate = 0, C/T = 0, M1M0 = 00(mode 0) Trong trường hợp cần đến số đếm ban đầu, ghi định thời TL1/TH1 phải khởi động Cần nhớ định thời đếm lên thiết lập cờ tràn bằng xảy tràn số đếm từ FFFFH xuống 0000H, khoảng thời gian 100us định thời bằng cách khởi động TL1/TH1 chứa số đếm nhỏ 0000H lượng 100 nghĩa -100 hay FF9CH Các lệnh sau thực điều MOV TL1,#9CH MOV TH1,#0FFH Cho timer chạy: Kế đến định thời bắt đầu hoạt động bằng cách thiết lập bit điềukhiển hoạt động bằng sau : SETB TR1 Cờ tràn tự động sau khoảng thời gian 100us Phần mềm chứa vịng lặp trì hỗn thời gian 100us bằng cách sử dụng lệnh rẽ nhánh lặp lại lệnh cờ tràn chứa set bằng WAIT : JNB TF1, WAIT Dừng timer: Khi định thời tràn ta cần dừng định thời xóa cờ tràn bằng phần mềm: CLR TR1 CLR TF1 Kiểm tra cờ xóa cờ: WAIT: JNB TF1,WAIT CLR TR1 ;dừng timer T1 CLR TF1 ; xóa cờ báo tràn Cập nhật ghi timer MOV TL1,#9CH MOV TH1,#0FFH 131 = 0: Cấm ngắt truyền thông nối tiếp ES = 1: Cho phép ngắt truyền thông nối tiếp ET1 = 0: Cấm ngắt Timer = 1: Cho phép ngắt Timer EX1 = 0: Cấm ngắt ngoại vi INT0 = 1: Cho phép ngắt ngoại vị INT0 = 0: Cấm ngắt Timer = 1: Cho phép ngắt timer ET0 = 0: Cấm ngắt ngoại vi INT1 EX0 = 1: Cho phép 2.1 Cho phép không cho phép ngắt: Trước tiên phải hiểu cho phép không cho phép ngắt nào? Khi ta cho phép ngắt ngắt tác động vi điều khiển ngừng chương trình để thực chương trình phục vụ ngắt, khơng cho phép dù có tác động đến ngắt vi điều khiển tiếp tục thực chương trình chính, khơng thực chương trình phục vụ ngắt Trong vi điều khiển có ghi IE (Interrupt Enable) địa 0A8H có chức cho phép/cấm ngắt Ta sử dụng ghi phép hay không cho phép nguồn ngắt cho toàn nguồn ngắt Tổ chức ghi sau: EA - ET2 ES ET1 EX1 ET0 EX0 Mỗi nguyên nhân ngắt cho phép không cho phép riêng rẽ thông qua ghi chức đặc biệt định địa bit, ghi cho phép ngắt IE (interrupt enable) có địa byte 0A8H Mỗi bit ghi cho phép không cho phép nguyên nhân ngắt riêng rẽ, ghi IE đồng thời có bit tồn cục ( global ) cho phép không cho phép tất ngắt Hoạt động bit ghi cho phép ngắt IE tóm tắt bảng sau: 132 Thanh ghi cho phép ngắt IE Bit Ký hiệu Địa bit Mô tả ( 0: không cho phép, 1: cho phép ) IE.7 EA AFH Cho phép/không cho phép ngắt tồn cục IE.6 - AEH Không sử dụng IE.5 ET2 ADH Cho phép ngắt định thời IE.4 ES ACH Cho phép ngắt port nối tiếp IE.3 ET1 ABH Cho phép ngắt định thời IE.2 EX1 AAH Cho phép ngắt từ bên ( ngắt ) IE.1 ET0 A9H Cho phép ngắt định thời IE.0 EX0 A8H Cho phép ngắt từ bên ( ngắt ngồi ) Trong ghi IE có bit IE.6 chưa dùng đến, bit IE.7 bit cho phép/cấm ngắt tồn nguồn ngắt Khi bit IE.7= cấm hết tất nguồn ngắt, bit IE.7=1 cho phép tất nguồn ngắt cịn phụ thuộc vào bit điều khiển ngắt nguồn ngắt Ví dụ: Ngắt định thời cho phép bằng cách dùng hai lệnh: SETB ET1 : Cho phép ngắt định thời SETB EA : set bit EA bằng phép ngắt tồn cục HoặcMOV IE,#10001000B Đối với yêu cầu ví dụ cách thực xong ta so sánh cách thực ý vài điều lập trình:Các lệnh cách khơng ảnh hưởng bit cịn lại ghi IE Cách thứ hai xóa bit lại ghi IE Ở đầu chương trình ta nên khởi gán IE với lệnh MOV BYTE, điều khiển cho phép hay cấm chương trình ta dùng lệnh SET BIT CLR BIT để tránh làm ảnh hưởng đến bit khác ghi IE 2.2 Ưu tiên ngắt Khi có nhiều nguồn ngắt tác động lúc ngắt quan trọng cần thực trước ngắt khơng quan trọng thực sau giống công việc mà ta giải hằng ngày.Ngắt thiết kế có xếp thứ tự ưu tiên từ thấp đến cao để người lập trình xếp nguồn ngắt theo u cầu cơng việc mà xử lý 133 Mỗi nguyên nhân ngắt lập trình riêng rẻ để có hai mức ưu tiên thông qua chức ghi đặc biệt định địa bit, ghi ưu tiên ngắt IP ( interrupt priority ), ghi có địa byte 0B8H Thanh ghi có chức thiết lập chế độ ưu tiên vi điều khiển ghi IP (Interrupt Priority) địa 0B8H Tổ chức ghi sau: - - PT2 PS PT1 PX1 PT0 PX0 Hoạt động bit ghi IP tóm tắt bảng sau: Thanh ghi IPBit Ký hiệu Địa bit Mô tả (1: mức cao, 0: mức thấp) IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0 PT2 PS PT1 PX1 PT0 PX0 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H Không sử dụng Không sử dụng Ưu tiên ngắt định thời Ưu tiên ngắt port nối tiếp Ưu tiên ngắt định thời Ưu tiên ngắt Ưu tiên ngắt định thời Ưu tiên ngắt Khi hệ thống thiết lập lại trạng thái ban đầu, ghi IP bị xóa mặc định tất ngắt mức ưu tiên thấp Trong 89C51 có mức ưu tiên thấp mức ưu tiên cao Nếu vi điều khiển thực chương trình phục vụ ngắt có mức ưu tiên thấp có yêu cầu ngắt với mức ưu tiên cao xuất vi điều khiển phải ngừng thực chương trình phục vụ ngắt có mức ưu tiên thấp để thực chương trình phục vụ ngắt có ưu tiên cao Ngược lại vi điều khiển thực chương trình phục vụ ngắt có mức ưu tiên cao có yêu cầu ngắt với mức ưu tiên thấp xuất vi điều khiển tiếp tục thực thực xong chương trình phục vụ ngắt có ưu tiên cao thực chương trình phục vụ ngắt có ưu tiên thấp u cầu Chương trình mà vi điều khiển thực hệ thống mức thấp nhất, khơng có liên kết với yêu cầu ngắt nào, luôn bị ngắt bất chấp ngắt 134 mức ưu tiên cao hay thấp Nếu có yêu cầu ngắt với ưu tiên khác xuất đồng thời u cầu ngắt có mức ưu tiên cao phục vụ trước 2.3 Chuỗi Nếu có hai ngắt có mức ưu tiên xuất đồng thời, chuỗi vòng cố định xác định ngắt phục vụ trước Chuỗi vòng là: ngắt 0, ngắt định thời 0, ngắt 1, ngắt định thời 1, ngắt port nối tiếp, ngắt định thời Các bit cờ nguồn ngắt tóm tắt bảng sau: Interrupt Flag SFR Register and Bit Position External IE0 TCON External IE1 TCON Timer TF1 TCON Timer TF0 TCON Serial Port TI SCON Serial Port RI CSON Timer TF2 T2CON 7(8052) Timer EXF2 T2CON 6(8052) Hình 6.3 Cấu trúc ngắt vi điều khiển 135 Hình 6.3 ta thấy tác dụng ghi IE hoạt động contact On/Off ghi IP hoạt động contact chuyển mạch vị trí để lựa chọn Ta ghi IE trước: bit cho phép ngắt toàn cục (Global Enable) phép đóng tồn contact tùy thuộc vào bit cho phép nguồn ngắt có phép hay không chúng hoạt động giống contact: phép đóng mạch tín hiệu yêu cầu ngắt đưa vào bên để xử lý, khơng phép contact hở mạch nên tín hiệu u cầu ngắt khơng đưa vào bên không xử lý Tiếp theo ghi IP: tín hiệu sau khỏi ghi IE đưa đến ghi IP để xếp ưu tiên cho nguồn ngắt Có mức độ ưu tiên: mức ưu tiên cao mức ưu tiên thấp Nếu nguồn có ưu tiên cao contact chuyển mạch đưa tín hiệu u cầu ngắt đến vùng kiểm tra có ưu tiên cao, nguồn có ưu tiên thấp contact chuyển mạch đưa tín hiệu u cầu ngắt đến vùng kiểm tra có ưu tiên thấp Vùng kiểm tra ngắt ưu tiên cao thực trước kiểm tra theo thứ tự từ xuống gặp yêu cầu ngắt yêu cầu ngắt thực Sau tiếp tục thực cho vùng kiểm tra ưu tiên ngắt có mức ưu tiên thấp Trong hình cịn cho thấy yêu cầu ngắt truyền liệu nối tiếp tạo từ tổ hợp OR cờ báo nhận RI cờ báo phát TI Khi ngắt truyền liệu xảy ta muốn biết cờ nhận hay cờ phát tạo ngắt để thực cơng việc khác ta phải kiểm tra cờ RI TI để biết thực công việc tương ứng Ví dụ truyền liệu: có báo ngắt truyền liệu ta phải kiểm tra xem cờ RI = hay không? Nếu hệ thống khác gởi liệu đến ta phải chuyển hướng chương trình phục vụ ngắt sang hướng nhận liệu, khơng phải chắn cờ TI=1 báo cho biết rằng liệu truyền xong sẵn sàng truyền kí tự ta phải chuyển hướng chương trình phục vụ ngắt sang phát liệu Tương tự, yêu cầu ngắt Timer2 tạo từ tổ hợp OR cờ tràn TF2 cờ nhập EXF2 136 Xử lý ngắt Hình 6.4 Các tín hiệu điều khiển ngắt Ở hình có điểm ý hai tín hiệu IT0 IT1, hai bit lựa chọn nguyên nhân ngắt cho ngắt INTR0 INTR1 Nếu =1 ngắt sườn âm, =0 ngắt sườn dương Khi có ngắt xuất CPU chấp nhận, chương trình bị ngắt Các thao tác sau xảy ra: Hoàn tất việc thực thi lệnh hành Bộ đếm chương trình PC cất vào stack Trạng thái ngắt hành lưu giữ lại Các ngắt chận lại mức ngắt Bộ đếm chương trình PC nạp địa vector trình phục vụ ngắt ISR ISR thực thi ISR thực thi để đáp ứng công việc ngắt Việc thực thi ISR kết thúc gặp lệnh RETI Lệnh lấy lại giá trị cũ đếm chương trình PC từ stack phục hồi trạng thái ngắt cũ Chú ý: chương trình phục vụ ngắt không làm làm sai địa PC lưu ngăn xếp điều xảy trở lại chương trình CPU khơng thực tiếp cơng việc chương trình khơng xác định CPU làm đâu Khi quyền kiểm sốt vi xử lý Trong “vi điều khiển” nhớ ngăn xếp nhớ RAM nội nên chúng sẵn sàng hoạt động cho việc lưu trữ tạm, cịn “vi xử lý” nhớ ngăn xếp sử dụng nhớ nên bạn phải khởi tạo nhớ ngăn xếp phải vùng nhớ RAM để ghi đọc lại được, bạn khởi tạo vùng nhớ EPROM khởi tạo nơi mà 137 nhớ không ghi vào làm địa – liệu lưu vào nhớ ngăn xếp dẫn đến chương trình thực sai.Một điều cần phải ý lập trình khơng nhảy từ chương trình sang chương trình để thực tiếp chương trình làm sau nhiều lần thực nhớ ngăn xếp bị tràn ghi đè lên liệu khác làm sai chương trình Trong trường hợp thấy rằng chương trình thực vài lần sau sai 3.1 Các vector ngắt Địa vector Ngắt Reset hệ thống 0000H Ngắt 0003H Ngắt định thời 000BH Ngắt 0013H Ngắt định thời 001BH Ngắt port nối tiếp 0023H Ngắt định thời 002BH Khi ngắt chấp nhận, giá trị nạp cho đếm chương trình PC gọi vector ngắt Vector ngắt địa bắt đầu trình phục vụ ngắt nguyên nhân ngắt tương ứng Vector reset hệ thống bắt đầu địa 0000H: reset vi điều khiển ghi PC = 0000H chương trình ln bắt đầu địa Khi bạn sử dụng yêu cầu ngắt chương trình phục vụ ngắt phải viết địa tương ứng Ví dụ: sử dụng ngắt timer T0 chương trình ngắt bạn phải viết địa 000BH.Do khoảng vùng nhớ vector địa nguồn ngắt có vài nhớ Ví dụ vector địa ngắt ngắt INT0 0003H vector địa ngắt ngắt T0 000BH cách có ô nhớ Nếu chương trình phục vụ ngắt ngắt INT0 có kích thước lớn byte đụng đến vùng nhớ ngắt T0 Cách giải tốt địa 0003H ta viết lệnh nhảy đến vùng nhớ khác rộng Còn ngắt T0 ngắt khác khơng sử dụng ta viết chương trình Chương trình ln bắt đầu địa 0000H sau reset 138 hệ thống, chương trình có sử dụng ngắt ta phải dùng lệnh nhảy địa 0000H để nhảy đến vùng nhớ khác rộng không bị giới hạn để viết tiếp 3.2 Ngắt (External Interrupt) 8051 có ngắt ngồi INT0 INT1 Ngắt ngồi hiểu ngắt gây kiện mức logic (mức điện áp thấp, gần 0V) sườn xuống (sự chuyển mức điện áp từ mức cao mức thấp) xảy chân ngắt tương ứng (P3.2 với ngắt P3.3 với ngắt 1) Việc lựa chọn kiểu ngắt thực bằng bit IT (Interrupt Type) nằm ghi TCON Đây ghi điều khiển timer bit LSB (bit0 3) dùng cho ngắt Khi bit ITx = ngắt ngồi tương ứng chọn kiểu ngắt theo sườn xuống, ngược lại bit ITx = ngắt ngồi tương ứng có kiểu ngắt ngắt theo mức thấp Các bit IE bit cờ ngắt ngồi, có tác dụng trường hợp kiểu ngắt chọn ngắt theo sườn xuống.Khi kiểu ngắt theo sườn xuống chọn ngắt xảy lần có sườn xuống tín hiệu, sau tín hiệu mức thấp, có sườn lên, mức cao khơng có ngắt xảy có sườn xuống Cờ ngắt IE dựng lên có sườn xuống tự động bị xóa CPU bắt đầu xử lý ngắt.Khi kiểu ngắt theo mức thấp chọn ngắt xảy tín hiệu chân ngắt mức thấp Nếu sau xử lý xong ngắt mà tín hiệu mức thấp lại ngắt tiếp, xử lý xong ngắt lần thứ n, tín hiệu lên mức cao thơi khơng ngắt Cờ ngắt IE trường hợp khơng có ý nghĩa cả.Thông thường kiểu ngắt hay chọn ngắt theo sườn xuống Thiết kế chương trình dùng ngắt Các bước thực ngắt Khi kích hoạt ngắt vi điều khiển qua bước sau: - Kết thúc lệnh thực lưu địa lệnh (PC) vào ngăn xếp - Lưu tình trạng tất ngắt vào bên (nghĩa không lưu vào ngăn xếp) 139 - Nhảy đến vị trí cố định nhớ gọi bảng véc tơ 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 véc tơ ngắt nhảy tới Nó bắt đầu thực trình phục vụ ngắt lệnh cuối ISR RETI (trở từ ngắt) - Khi thực lệnh RETI 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 bằng cách kéo hai byte đỉnh ngăn xếp vào PC Sau bắt đầu thực lệnh từ địa - Lưu ý bước đến vị trí nhạy cảm ngăn xếp, lý mà phải cẩn thận thao tác nội dung ngăn xếp ISR Đặc biệt ISR chương trình CALL số lần đẩy vào ngăn xếp (Push) số lần lấy từ (Pop) phải bằng Thứ tự ưu tiên ngắt Khi có hai hay nhiều ngắt lúc xảy ra, ngắt thực hiện, mở ngắt khác yêu cầu ngắt có độ ưu tiên ưu tiên xử lý Có cấp độ ưu tiên ngắt 8051: - Ngắt reset ngắt có mức ưu tiên cao nhất, reset xảy tất ngắt khác chương trình bị dừng vi điều khiển trở chế độ khởi dộng ban đầu - Ngắt mức 1, có reset cấm ngắt - Ngắt mức 0, ngắt mức reset cấm ngắt Việc đặt chọn mức ưu tiên ngắt thông qua ghi IP Việc xử lý ưu tiên ngắt 8051 sau: Nếu có độ ưu tiên cao ngắt xử lý xuất thì, ngắt có ưu tiên thấp bị dừng để ngắt thực Nếu ngắt yêu cầu vào thời điểm ngắt có mức ưu tiên xử lý trước Nếu ngắt có mức ưu tiên yêu cầu vào thời điểm thứ tự chọn sau: INTR Timer INTR 140 Timer UART Mẫu đề nghị cho chương trình thực thi độc lập có sử dụng ngắt sau : ORG 0000H ; điểm nhập sau reset LJMP MAIN ; điểm nhập ISR ORG 0030H ; điểm nhập chương trình MAIN: ; chương trình bắt đầu END 4.1 Các trình phục vụ ngắt kích thước nhỏ Các trình phục vụ ngắt phải bắt đầu gần đáy nhớ chương trình địa qui định Mặc dù có byte điểm nhập trình phục vụ ngắt, dung lượng thường đủ để thực công việc u cầu quay trở chương thình từ trình phục vụ ngắt Điều có nghĩa trình phục vụ ngắt cho ngắt tương ứng thường khơng dài q byte Nếu có nhiều ngắt dùng ta phải cẩn thận để đảm bảo ISR bắt đầu vị trí mà khơng tràn sang ISR kế Ví dụ: ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH T0_ISR : ; điểm nhập ngắt định thời ; bắt đầu ISR cho định thời MOV P2,#00001111B RETI ; trở chương trình MAIN : ; chương trình END ; kết thúc chương trình 4.2 Các trình phục vụ ngắt kích thước lớn Nếu trình phục vụ ngắt dài byte cần đến, ta phải di chuyển phương trình đến nơi khác nhớ chương trình ta cho lấn qua 141 điểm nhập ISR kế Điển hình ISR bắt đầu với lệnh nhảy đến vùng khác nhớ chương trình, ISR trải rộng cần Ví dụ 1: ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH ; điểm nhập ngắt timer LJMP T0_ISR ; điểm nhập ngắt khác ( có ) ORG 0030H ; địa phía vector ngắt MAIN: ; chương trình T0_ISR: ; chương trình phụ vụ ngắt ; định thời RETI ; quay chương trình END Ví dụ 2: Viết chương trình tạo sóng vng có tần số 10KHz chân P1.0 sử dụng định thời ngắt định thời ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH T0_ISR: ; điểm nhập ngắt timer ; ISR timer CPL P1.0 ; đảo bit P1.0 RETI ; trở chương trình MAIN: MOV TMOD,#00000010B; timer hoạt động chế độ (8 bit) MOV TH0,#-50 ; giá trị nạp lại tương ứng với 50us MOV IE,#10000010B SETB TR0 ; bật timer SJMP $ ; nhảy chổ ; cho phép ngắt định thời END Ví dụ 3: Viết chương trình sử dụng ngắt để tạo đồng thời dạng sóng vng có tần số 10KHz chân P1.0 500Hz chân P1.1 142 ORG 0000H LJMP MAIN ORG 000BH LJMP NGAT_T0 ORG 001BH LJMP NGAT_T1 ORG 0030H MAIN: MOV TMOD,#00010010B; timer chế độ 1, timer chế độ MOV TH0,#-50 MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) MOV IE,#10001010B SETB TR0 SETB TR1 SJMP $ NGAT_T0: CPL P1.0 RETI NGAT_T1: CLR TR1 MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) SETB TR1 CPL P1.1 RETI END Luyện tập Viết chương trình điều khiển sóng vng tuần hồn có tần số 10Hz (sử dụng ngắt Timer) chân P0.0 hiển thị mức logic chân lên LED0 (LED0 nối với P0.0) Trình tự tiến hành thí nghiệm: Bước 1: Kết nối thiết bị thí nghiệm: 143 Bước 2: Tắt nguồn cấp cho kít thí nghiệm Bước 3: Dùng dây bus nối Bước 4: Dùng dây bus Bước 5: Vẽ lưu đồ giải thuật viết chương trình điều khiển ORG 0000H ;DIEM NHAP RESET DJMP MAIN ORG 0BH ;DIEM NHAP ISR TIMER0 T0ISR: CPL P0.0 ;DAO TRANG THAI P0.0 (TAO XUNG) RETI ORG 30H ;DIEM NHAP CHUONG TRINH CHINH MAIN: MOV TMOD,#01H;TIMER0 LA TIMER 16 BIT MOV TH0,#(-50000);THỜI GIAN TRE -50MS (THOI GIAN XUNG O MUC THAP HOAC MUC CAO) MOV TL0,#CHU KY -2x50 =100 MS LA F = 10Hz SETB TR0 ;CHO TIMER BAT DAU CHAY MOV IE,#82H SJMP $ ;CHO PHEP NGAT TIMER0 HOAT DONG ;DUNG YEN END Bước 6: Lưu chương trình biên dịch chương trình Bước 7: Kiểm tra lỗi hiệu chỉnh lỗi có Bước 8: Gắn chip vi điều khiển thí nghiệm vào socket tương ứng khối nạp chip bật nguồn cho khối nạp chip hoạt động Bước 9: Nạp chương trình vào vi điều khiển Bước 10: Sử dụng vi điều khiển vừa nạp gắn vào socket tương ứng tren khối vi điều khiển Bước 11: Bật nguồn cho mơ hình thí nghiệm Quan sát kết hoạt động, kết hoạt động không yêu cầu đề phải quay lại kiểm tra việc kết nối mạch, hiệu chỉnh chương trình làm lại bước từ bước đến bước 144 CÁC BÀI TẬP MỞ RỘNG, NÂNG CAO VÀ GIẢI QUYẾT VẤN ĐỀ Bài 1: Viết chương trình điều khiển đèn giao thông ngã tư? Bài 2: Viết chương trình đếm hiển thị LED loại A chung từ đến sử dụng ngắt Yêu cầu đánh giá kết học tập: Nội dung: + Về kiến thức: Trình bày tác dụng thực tế hệ thống điều khiển bằng tín hiệu ngắt; + Về kỹ năng: Thực tổ chức ngắt chế thực chương trình phục vụ ngắt 8051 yêu cầu kỹ thuật; + Thái độ: Đánh giá phong cách, thái độ học tập Chủ động, sáng tạo an tồn q trình học tập Phương pháp: + Về kiến thức: Được đánh giá bằng hình thức kiểm tra viết + Về kỹ năng: Đánh giá kỹ thực hành Mỗi sinh viên, nhóm học viên thực cơng việc theo yêu cầu giáo viên Tiêu chí đánh giá theo nội dung: - Độ xác cơng việc - Thời gian thực cơng việc - Độ xác theo yêu cầu kỹ thuật + Thái độ: Tỉ mỉ, cẩn thận, xác 145 TÀI LIỆU THAM KHẢO [1] Đề cương môđun/môn học nghề Sửa chữa thiết bị điện tử công nghiệp”, Dự án Giáo dục kỹ thuật Dạy nghề (VTEP), Tổng cục Dạy Nghề, Hà Nội, 2003 [2] Microprocessor and IC families - Walter H Buchbaum Sc.D [3] Mikrocompute Lehrbuch - HPI Fachbuchreihen Pflaum Verlag Munchen [4] 8051 Development Boad, Rev - Paul Stoffregen [5] Họ vi điều khiển - Tống văn On - Đại học Bách khoa TP.HCM - 2005 ... giá kỹ thực hành Mỗi sinh vi? ?n, nhóm học vi? ?n thực công vi? ??c theo yêu cầu giáo vi? ?n Tiêu chí đánh giá theo nội dung: - Độ xác công vi? ??c - Thời gian thực công vi? ??c - Độ xác theo yêu cầu kỹ thuật. .. (= 0) xuất xung âm T2EX (P1.1) EXEN2 = Giá trị reset: T2CON = 00h, T2CON cho phép định vị bit Thanh ghi T2MOD: Bảng 4.8 Nội dung ghi T2MOD - - Bit Tên T2OE DCEN - - - - T2OE DCEN Mô tả Timer... vi? ?n 127 Tiêu chí đánh giá theo nội dung: - Độ xác cơng vi? ??c - Thời gian thực công vi? ??c - Độ xác theo yêu cầu kỹ thuật + Thái độ: Tỉ mỉ, cẩn thận, xác 128 BÀI 6: NGẮT Mã bài: MĐ CĐT 3 2- 06 Giới