1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng môn vi xử lý chương 7

43 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 699,81 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

7.1 Giới thiệu  Ngắt là 1 hoạt động bất đồng bộ tác động vào chương trình đang thực hiện tuần tự  Khi yêu cầu ngắt được đáp ứng,chương trình chính sẽ tạm dừng,chuyển sang thực hiện chư

Trang 1

CHƯƠNG 7

NGẮT(INTERRUPT)

Trang 2

7.4 Thiết kế chương trình sử dụng ngắt

7.4.1 ISR ngắn 7.4.2 ISR dài 7.5 Ngắt Timer

7.6 Ngắt SPI

7.7 Ngắt ngoài

7.8 Định thì ngắt

Trang 3

7.1 Giới thiệu

 Ngắt là 1 hoạt động bất đồng bộ tác động vào chương trình đang thực hiện tuần tự

 Khi yêu cầu ngắt được đáp ứng,chương trình chính sẽ tạm dừng,chuyển sang thực hiện chương trình phục vụ ngắt và khi thực hiện xong sẽ quay về thực hiện tiếp chương trình chính tại điểm dừng ban đầu

 Ngắt có thể tác động tại bất kỳ điểm nào trong chương trình chính

 Chương trình thực hiện theo tác động ngắt gọi là trình phục vụ ngắt(ISR: Interrupt Sevice Routine)

 Địa chỉ bắt đầu ISR gọi là vector ngắt(do nhà sản xuất quy định)

 Kết thúc ISR bằng lệnh RETI(Return from Interrupt)

 Hình 7.1 mô tả hoạt động của MCU khi có tác động ngắt:

Chương trình chính=Base-level(Foreground)

ISR=Interrupt-level(Background)

Trang 4

7.1 Giới thiệu

Hình 7.1: (a) Chương trình không có ngắt;(b) Chương trình có ngắt

Trang 5

7.1 Giới thiệu

 Một số ví dụ về tác động ngắt:

1 Trong các ví dụ về nhận dạng phím nhấn,thay vì chương trình chính liên tục hỏi vòng đọc trạng thái phím và chờ phím nhấn,sử dụng tác động nhấn phím làm điều kiện

ngắt.Chương trình chính sẽ thực hiện các công việc khác,khi có phím nhấn sẽ tạo

ngắt,chương trình chính sẽ chuyển sang ISR phục vụ theo yêu cầu có phím nhấn

2 Trong ví dụ về giao tiếp ADC0809,thay vì MCU phải chờ tín hiệu EOC tích cực hay phải thực hiện chương trình con tạo trễ 120µs,sử dụng tín hiệu EOC tích cực làm tín hiệu ngắt.MCU sẽ thực hiện các công việc khác,khi ADC biển đổi xong sẽ tạo tín hiệu EOC tích cực báo ngắt,MCU sẽ chuyển sang ISR tương ứng để đọc giá trị AD về

 Hoạt động ngắt giải phóng cho MCU khỏi khoảng “thời gian chết” chờ thực hiện điều kiện(như chờ nhấn phím,chờ ADC biến đổi xong…),tiết kiệm thời gian thực thi của MCU

và MCU gần như đáp ứng tức thời với một tác động hay sự kiện xảy ra!

Trang 6

7.2 Tổ chức ngắt của MCU8051

 MCU8051 có 5 nguồn ngắt: 2 ngắt ngoài,2 ngắt Timer,1 ngắt cổng nối tiếp(SPI)

 Ngắt ngoài ngõ /INT0=P3.2: Tín hiệu tạo ngắt đưa vào ngõ /INT0 tích cực mức thấp hoặc cạnh xuống

 Ngắt ngoài ngõ /INT1=P3.3: Tín hiệu tạo ngắt đưa vào ngõ /INT1 tích cực mức thấp hoặc cạnh xuống

 Ngắt Timer0: Tín hiệu tạo ngắt khi Timer0 tràn TF0=1

 Ngắt Timer1: Tín hiệu tạo ngắt khi Timer1 tràn TF1=1

 Ngắt SPI: Tín hiệu báo ngắt khi phát xong ký tự TI=1 hay thu xong ký tự RI=1

 MCU8052 có thêm ngắt Timer2

 Khi Timer2 tràn TF2=1 hay khi bắt/nạp lại làm EXF2=1

 Tất cả các nguồn ngắt bị cấm khi reset hệ thống và được khai báo cho phép/cấm riêng rẽ từng nguồn ngắt qua SFR IE

 Trường hợp có 2 hay nhiều nguồn ngắt xảy ra đồng thời,mức ưu tiên ngắt sẽ được khai báo

ưu tiên từng nguồn ngắt qua SFR IP hay trình tự hỏi vòng mặc định

Trang 7

7.2 Tổ chức ngắt của MCU8051

7.2.1 SFR IE- Cấm/cho phép các nguồn ngắt

 IE địa chỉ byte 0A8H,truy xuất bit được

 Chứa các bit cấm/cho phép toàn bộ hoặc từng nguồn ngắt độc lập

Bảng 7-1: Tóm tắt SFR IE

Ví dụ 7.1: Khai báo cho phép ngắt Timer1

Giải:

Bit Ký hiệu Đia chỉ bit Mô tả(1= cho phép;0= cấm)

IE.7 EA 0AFH Cho phép/cấm toàn cục

IE.5 ET2 0ADH Cho phép ngắt Timer2(8052)

IE.4 ES 0ACH Cho phép ngắt SPI

IE.3 ET1 0ABH Cho phép ngắt Timer1

IE.2 EX1 0AAH Cho phép ngắt ngoài ngõ /INT1

IE.1 ET0 0A9H Cho phép ngắt Timer0

IE.0 EX0 0A8H Cho phép ngắt ngoài ngõ /INT0

Trang 8

7.2 Tổ chức ngắt của MCU8051

7.2.2 SFR IP- Mức ưu tiên ngắt

 IP địa chỉ bit B8H,truy xuất bit được

 Khai báo các bit ưu tiên cao=1/ ưu tiên thấp=0 cho từng nguồn ngắt độc lập

 Khi mới reset hệ thống (IP)=00H→các nguồn ngắt cùng mức ưu tiên

Bảng 7-2: Tóm tắt SFR IP

Bit Ký hiệu Đia chỉ bit Mô tả(1= ưu tiên cao;0= ưu tiên thấp)

IP.5 PT2 0BDH Ưu tiên ngắt Timer2(8052)

IP.3 PT1 0BBH Ưu tiên ngắt Timer1

IP.2 PX1 0BAH Ưu tiên ngắt ngoài ngõ /INT1

IP.0 PX0 0B8H Ưu tiên ngắt ngoài ngõ /INT0

Trang 9

7.2 Tổ chức ngắt của MCU8051

7.2.2 SFR IP- Mức ưu tiên ngắt

 Thực hiện ngắt ưu tiên:

- Khi 2 nguồn ngắt xảy ra đồng thời điểm,MCU sẽ thực hiện trước nguồn ngắt mức ưu tiên cao,sau đó mới thực hiện nguồn ngắt mức ưu tiên thấp

- Khi MCU đang thực hiện ISR nguồn ngắt mức ưu tiên thấp,có tín hiệu yêu cầu nguồn ngắt mức ưu tiên cao,MCU sẽ tạm dừng thực hiện ISR nguồn ngắt ưu tiên thấp,chuyển sang thực hiện ISR nguồn ngắt ưu tiên cao hơn,sau đó sẽ quay thực hiện tiếp ISR nguồn ngắt mức ưu tiên thấp tại điểm dừng trước đó

7.2.3 Trình tự hỏi vòng

 Trường hợp 2 nguồn ngắt cùng cấp ưu tiên,MCU sẽ xác định mức ưu tiên theo trình tự hỏi vòng theo thứ tự nguồn ngắt ưu tiên đứng trước: /INT0,Time0,/INT1,Timer1,SPI,Timer2

Trang 10

 MCU đang thực hiện ISR Timer0→ngắt /INT0 xảy ra,do sau khi reset hệ thống mức ưu tiên

2 nguồn ngắt này bằng nhau(PX0=PT0=0)→xét trình tự hỏi vòng ngắt /INT0 ưu tiên cao hơn→MCU tạm dừng ISR Timer0 và chuyển đến thực hiện ISR /INT0

 MCU đang thực hiện ISR /INT0→ngắt SPI xảy ra,do PS=1→mức ưu tiên cao hơn→MCU tạm dừng ISR /INT0 và chuyển đến thực hiện ISR SPI

 Sau khi thực hiện xong ISR SPI,MCU quay về thực hiện tiếp ISR /INT0

 Sau khi thực hiện xong ISR /INT0,MCU quay về thực hiện tiếp ISR Timer0

 Sau khi thực hiện xong ISR Timer0,MCU quay về thực hiện tiếp chương trình chính

Giáo Trình Vi Xử Lý Lưu Phú 10

Trang 11

 Lưu ý là cờ báo tràn TF0,TF1 của Timer0 và Timer1 vẫn set khi Timer tràn hoặc cờ RI,TI vẫn set khi thu đủ/phát xong 1 ký tự,cho dù không khai báo ngắt.Ngắt Timer hay ngắt SPI chỉ tác động khi khai báo cho phép ngắt tương ứng

Giáo Trình Vi Xử Lý Lưu Phú 11

Trang 12

7.2 Tổ chức ngắt của MCU8051

7.2.4 Các cờ báo ngắt

Bảng 7-3: Tóm tắt các cờ báo ngắt

 Ngắt SPI có 2 cờ báo ngắt là TI(phát) và RI(thu)

 Ngắt Timer2 có 2 cờ báo ngắt là TF2(báo tràn) và EXF2(báo điều khiển ngoài)

 Hình 7.2 tóm tắt tổ chức ngắt MCU8051(8052) gồm cho phép/cấm,mức ưu tiên ngắt,cờ báo ngắt,tín hiệu từ nguồn ngắt

Giáo Trình Vi Xử Lý Lưu Phú 12

Loại ngắt Ký hiệu cờ Đia chỉ bit trong SFR

Trang 13

7.2 Tổ chức ngắt của MCU8051

7.2.4 Các cờ báo ngắt

Giáo Trình Vi Xử Lý Lưu Phú 13

Hình 7.2: Tóm tắt tổ chức ngắt MCU8051(8052)

Trang 14

7.3 Xử lý ngắt

 Khi có một ngắt xảy ra và được MCU chấp nhận,chương trình chính tạm dừng,các hoạt động sau được thực hiện:

 Thực thi xong lệnh hiện hành

 Nội dung PC được cất vào trong stack

 Trạng thái ngắt hiện hành được lưu bên trong

 Các ngắt được chặn theo mức ưu tiên ngắt

 PC nạp địa chỉ vector ngắt ISR

 Thực thi ISR

 ISR thực thi đáp ứng theo yêu cầu ngắt tương ứng

 Kết thúc ISR bằng lệnh RETI→PC phục hồi lại nội dung cất vào stack trước đó và trạng thái ngắt trước đó cũng được phục hồi lại,chương trình tiếp tục thực hiện từ điểm dừng trước đó

Giáo Trình Vi Xử Lý Lưu Phú 14

Trang 15

7.3 Xử lý ngắt

 Vector ngắt

 Khi một ngắt được chấp nhận,giá trị nạp vào PC gọi là vector ngắt

 Vector ngắt chính là địa chỉ đầu tiên của ISR thuộc nguồn ngắt tương ứng

Trang 16

7.3 Xử lý ngắt

 Reset hệ thống xem như là một ngắt ngoài đặc biệt,tín hiệu ngắt chính là tín hiệu reset mức

1 đưa vào chân Reset(pin 9)→PC nạp vector ngắt 0000H

 Khi PC được nạp vector ngắt bắt đầu thực thi ISR,các cờ báo ngắt tương ứng được tự động xóa bằng phần cứng,trừ ngắt SPI và Timer2

 Ngắt SPI có 2 cờ báo ngắt là TI và RI,ngắt Timer2 có 2 cờ báo ngắt là TF2 và EXF2→phần cứng không biết chính xác là ngắt từ nguồn nào( thu hay phát,Timer2 tràn hay bắt/nạp

lại),nên sẽ không xóa cờ báo ngắt.Trong ISR tương ứng,phần mềm sẽ kiểm tra loại ngắt nào

và sẽ xóa cờ báo ngắt tương ứng

 Chiều dài vùng nhớ giữa 2 vector ngắt chỉ có 8 byte,nếu dung lượng ISR dài quá 8 byte sẽ

đè lên vector ngắt kế tiếp→không sử dụng được ngắt kế tiếp

 Do các vector ngắt ở vùng địa chỉ đầu của chương trình→lệnh đầu tiên trong chương trình chính thường là lệnh nhảy,ví dụ LJMP 0030H để dự trữ vùng địa chỉ vector ngắt

Giáo Trình Vi Xử Lý Lưu Phú 16

Trang 18

7.4 Thiết kế chương trình sử dụng ngắt

 Sau khi reset hệ thống,địa chỉ đầu tiên thực hiện chương trình là 0000H,để dự trữ vùng

vector ngắt,lệnh đầu tiên trong chương trình chính là lệnh nhảy dài đến địa chỉ thực sự bắt đầu chương trình chính:

LJMP MAIN ; lệnh đầu tiên sau reset

… ; điểm vào các ISR theo các vector ngắt

ORG 0030H ; điểm vào chương trình chính

 Lệnh đầu tiên dài 3 byte chiếm địa chỉ từ 0000-0002H,nhảy đến nhãn MAIN địa chỉ 0030H

 Từ địa chỉ 0003H là vector ngắt cho ISR /INT0,mỗi ISR dài 8 byte,nên dự trữ vùng địa chỉ các vector ngắt và bắt đầu chương trình chính tại địa chỉ 0030H

7.4.1 ISR ngắn

 Trường hợp các ISR ngắn chiều dài không quá 8 byte,có thể viết trực tiếp các ISR tại các địa chỉ vector ngắt

Giáo Trình Vi Xử Lý Lưu Phú 18

Trang 19

ORG 0030H ;bắt đầu chương trình chính

SETB ET0 ;cho phép ngắt Timer0

 Vector ngắt 000BH là địa chỉ bắt đầu ISR Timer0

 ISR Timer0 dài 3 byte không đè lên địa chỉ vector ngắt kế tiếp là 0013H của ngắt /INT1

Giáo Trình Vi Xử Lý Lưu Phú 19

Trang 21

7.4 Thiết kế chương trình sử dụng ngắt

ORG 0000H LJMP MAIN ;nhảy đến chương trình chính ORG 000BH ; điểm vào ISR Timer0

LJMP T0_ISR ; nhảy đến T0_ISR

SETB TR0 RETI

 Tại điểm vào ISR Timer0 tại địa chỉ 000BH,lệnh LJMP T0_ISR chỉ dài 3 byte chuyển điểm bắt đầu thực sự ISR Timer0 tại nhãn T0_ISR nằm ngoài vùng địa chỉ vector ngắt→không giới hạn chiều dài ISR Timer0

 So với các ví dụ ở chương 5 Timer,trong ví dụ 7.4 và 7.5 không có lệnh chờ cờ báo tràn TF0 set và xóa TF0→Do có khai báo ngắt Timer0,khi Timer0 tràn TF0=1 tạo tín hiệu ngắt→MCU tạm dừng chương trình chính và PC nạp địa chỉ vector ngắt là 000BH,đồng thời phần cứng tự động xóa cờ TF0

Giáo Trình Vi Xử Lý Lưu Phú 21

Trang 22

7.5 Ngắt Timer

 Ngắt Timerx xảy ra khi Timerx báo trán,cờ báo tràn TFx=1

 Khi MCU chuyển đến ISR Timerx tương ứng phần cứng tự động xóa cờ báo tràn TFx

 Khi khai báo cho phép ngắt Timer,chương trình chính không cần kiểm tra và xóa cờ báo tràn tương ứng

Ví dụ 7.6: Viết một chương trình sử dụng ngắt Timer0 tạo chuỗi xung vuông đối xứng f=10Khz trên P1.0 (Fosc=12Mhz)

MOV TH0,#-50 ;giá trị nạp lại

MOV IE,#82H ;cho phép ngắt Timer0

END Giáo Trình Vi Xử Lý Lưu Phú 22

Trang 23

7.5 Ngắt Timer

 Để tạo chuỗi xung vuông đối xứng Timer0 chạy mode 2 giá trị nạp lại -50

 Khi Timer0 tràn TF0=1→tạo tín hiệu ngắt Timer0→PCHH được cất vào stack và nạp vector ngắt Timer0 000BH,địa chỉ bắt đầu ISR Timer0,đồng thời xóa cờ TF0

 ISR Timer0 thực hiện đảo bit P1.0,kết thúc ISR PC nạp lại địa chỉ đã cất vào stack trước đó

và tiếp tục chạy chương trình chính cho đến khi có yêu cầu ngắt mới

 Trong chương trình chính lệnh SJMP $ là lệnh “giả” để hoàn chỉnh chương trình.Trong thực tế,thay cho lệnh SJMP $,MCU sẽ thực hiện các lệnh tương ứng với các công việc khác

Ví dụ 7.7: Viết chương trình tạo chuỗi xung đối xứng tần số 7Khz và 500Hz lần lượt xuất ra P1.7 và P1.6 (Cho Fosc=12Mhz)

Giải:

 Để tạo chuỗi xung 7Khz, = 142.8 ≈ 143

→chọn Timer0 mode 2,giá trị nạp lại -71

 Để tạo chuỗi xung 500Hz,T=1000µs

→chọn Timer1 mode1,giá trị nạp lại -1000

Giáo Trình Vi Xử Lý Lưu Phú 23

Hình vd7.7

Trang 24

7.5 Ngắt Timer

ORG 0

RETI END

Giáo Trình Vi Xử Lý Lưu Phú 24

Trang 25

 ISR Timer0 chỉ là lệnh đảo bit P1.7

 ISR Timer1 thực hiện:

Trang 26

7.6 Ngắt SPI

 Ngắt SPI xảy ra từ một trong hai nguồn ngắt sau:

- Khi phát xong 1 ký tự,SBUF phát rỗng,cờ ngắt phát TI=1

- Khi thu đủ 1 ký tự,SBUF thu đầy,cờ ngắt thu RI=1

 Khi MCU chuyển đến địa chỉ vector ngắt SPI,phần cứng sẽ không xóa TI hay RI do không biết ngắt từ nguồn nào

 Trong ISR SPI sẽ kiểm tra các cờ báo ngắt và xóa bằng mềm cờ báo ngắt tương ứng

Ví dụ 7.8: Viết một chương trình sử dụng ngắt SPI liên tục truyền các ký tự mã ASCII nhìn thấy được ra cổng nối tiếp,với baudrate=9600,cho Fosc=11.059Mhz

Giải:

 Mã ASCII nhìn thấy được giá trị từ 20H đến 7EH

 Với Fosc=11.059Mhz,giá trị nạp lại cho TH1 bằng -3(SMOD=0)tạo BR=9600

 Trong chương trình khai báo SPI cấm thu nên khi có ngắt SPI chắc chắn là ngắt phát TI=1

 Khi khai báo SPI qua SCON,TI=1 tạo ép ngắt ngay vì SBUF phát rỗng khi mới reset

 Mỗi lần SPI phát xong 1 ký tự SBUF phát rỗng,TI=1 tạo ngắt SPI

 Trong ISR SPI phát tiếp ký tự và xóa TI

Giáo Trình Vi Xử Lý Lưu Phú 26

Trang 27

7.6 Ngắt SPI

LJMP MAIN ORG 0023H ;vector ngắt SPI LJMP SPI_ISR

ORG 0030H

MOV TH1,#-3 ; giá trị nạp lại tạo BR=9600 SETB TR1

MOV SCON,#42H ;SPI UART 8 bit cấm thu,TI=1ép ngắt MOV A,#20H ;Ký tự đầu tiên

MOV IE,#90H ;cho phép ngắt SPI SJMP $

SPI_ISR: CJNE A,#7FH,SKIP ;phát ký tự cuối?

MOV A,#20H ;phát lại ký tự đ62u SKIP: MOV SBUF,A ;phát ký tự ra SPI

RETI END Giáo Trình Vi Xử Lý Lưu Phú 27

Trang 28

- IT1(TCON.2)=0: ngắt tác động mức thấp;IT1=1: ngắt tác động cạnh xuống

 Khi khai báo ngắt tác động cạnh xuống ITx=1,khi MCU chuyển đến ISR,cờ báo ngắt IEx tương ứng sẽ tự động xóa bằng phần cứng

 Khi khai báo ngắt tác động mức thấp,khi MCU chuyển đến ISR,cờ báo ngắt IEx không bị

xóa bằng phần cứng,mà chỉ xóa khi tín hiệu yêu cầu ngắt ngoài đưa vào ngõ /INTx lên mức 1

→Trước khi RETI,tín hiệu yêu cầu ngắt ngoài phải lên mức 1 hoặc thực hiện lệnh cấm ngắt ngoài tương ứng,nếu không sau khi kết thúc ISR,cờ IEx vẫn =1 sẽ làm MCU ngắt tiếp→tạo vòng lặp ngắt cho đến khi tín hiệu yêu cầu ngắt ngoài lên mức 1

Giáo Trình Vi Xử Lý Lưu Phú 28

Trang 29

7.7 Ngắt ngoài

Ví dụ 7.10: Mạch điều khiển nhiệt độ như hình vd7.7 hoạt động như sau:

- P1.7 điều khiển mạch lái nguồn nhiệt : P1.7=1 lò nung on,P1.7=0 lò nung off

RETI ORG 000BH;vector ngắt /INT1 EX1_ISR: SETB P1.7 ;on lò nung

RETI ORG 0030H MAIN: MOV IE,#85H ; cho phép ngắt /INT0 và /INT1

SETB IT0 ;ngắt /INT0 cạnh xuống SETB IT1 ;ngắt /INT1 cạnh xuống SETB P1.7 ; on lò nung

SJMP $ END Giáo Trình Vi Xử Lý Lưu Phú Hình vd7.10 29

Trang 30

7.7 Ngắt ngoài

Ví dụ 7.11: Thiết kế mạch phát âm thanh cảnh báo tần số 400Hz trong một giây khi cảm biến cửa mở phát tín hiệu logic từ 1→0 theo sơ đồ mạch như hình vd7.11(Fosc=12Mhz)

Giải:

 Sử dụng tín hiệu cảm biến cửa mở làm tín hiệu ngắt ngoài /INT0:

- Trong ISR /INT0 cho phép ngắt Timer0 và Timer1

 Sử dụng ngắt Timer0 tạo chuỗi xung vuông đối xứng f=400Hz→T=2500µs:

- Khai báo Timer0 mode 1,giá trị nạp lại=-1250

 Sử dụng ngắt Timer1 tạo thời gian delay 50ms và đếm số lần ngắt 20 lần→tạo trễ 1s:

- Khai báo Timer1 mode 1,giá trị nạp lại=-50000

LJMP EX0_ISR ;vector ngắt /INT0

LJMP T1_ISR

Giáo Trình Vi Xử Lý Lưu Phú 30

Trang 31

7.7 Ngắt ngoài

ORG 0030H MAIN: SETB IT0 ;ngắt /INT0 cạnh xuống

MOV TMOD,#11H ;Timer0 và Timer1 mode 1 MOV IE,#81H ; cho phép ngắt /INT0 SJMP $

EX0_ISR: MOV R7,#20 ;đếm số lần ngắt /INT0

SETB TF0 ;ép ngắt Timer0 SETB TF1 ;ép ngắt Timer1 SETB ET0 ;cho phép ngắt Timer0 SETB ET1 ;cho phép ngắt Timer1 RETI

T0_ISR: CLR TR0

MOV TH0,#HIGH(N0);giá trị nạp lại Timer0 MOV TL0,#LOW(N0)

CPL P1.7 ;xuất xung ra P1.7 SETB TR0

RETI T1_ISR: CLR TR1

DJNZ R7,SKIP ;đếm số lần ngắt đủ 20?

CLR ET0 ;cấm ngắt Timer0 CLR ET1 ;cấm ngắt Timer1 SJMP EXIT

Giáo Trình Vi Xử Lý Lưu Phú 31

SKIP: MOV TH1,#HIGH(N1);giá trị nạp lại Timer1 MOV TL1,#LOW(N1)

SETB TR1 EXIT: RETI

END

Hình vd7.11

Ngày đăng: 02/11/2022, 09:56