1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

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

18 340 1

Đ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 18
Dung lượng 900,38 KB
File đính kèm Nhóm 2.zip (1 MB)

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

Nội dung

Ngắt Interrupt - như tên của nó, là một số sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lậ

Trang 1

BÁO CÁO LẬP TRÌNH NHÚNG 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 (FULL DOME BÁO CÁO )

MÔN HỌC: Lập Trình Nhúng

GV: XXX

Thành viên nhóm:

1 Nguyễn Văn Ban

2 Hoàng Thị Hải Yến

3 Bùi Minh Ngọc

4 Tô Thành Đồng

5 Hoàng Thị Huyền

6 Nguyễn Thị Mỹ Hạnh

I Ngắt trong 8051.

I.1 Ngắt là gì?

Ngắt (Interrupt) - như tên của nó, là một số sự kiện khẩn cấp bên

trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu

cầu – nhiệm vụ này gọi là trình phục vụ ngắt (ISR: Interrupt Service

Routine)

I.2 Phương pháp sử dụng ngắt.

Trang 2

Mỗi khi có một thiết bị bất kỳ cần được phục vụ thì nó báo cho bộ vi

điều khiển bằng cách gửi một tín hiệu ngắt Khi nhận được tín hiệu ngắt thì

bộ vi điều khiển ngừng tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị gọi ngắt Chương trình ngắt được gọi là trình phục vụ

ngắt ISR (Interrupt Service Routine) hay còn gọi là trình quản lý ngắt

(Interrupt handler) Sau khi phục vụ ngắt xong, bộ vi xử lý lại quay trở lại điểm bị ngắt trước đó và tiếp tục thực hiện công việc

I.3 Điểm mạnh của phương pháp ngắt.

 Bộ vi điều khiển có thể phục vụ được rất nhiều thiết bị (tất nhiên là không tại cùng một thời điểm) Mỗi thiết bị có thể nhận được sự chú ý của bộ vi điều khiển dựa trên mức ưu tiên được gán cho nó

 Quan trọng hơn, trong phương pháp ngắt thì bộ vi điều khiển còn có thể che (làm lơ) một yêu cầu phục vụ của thiết bị

 Lý do quan trọng nhất mà phương pháp ngắt được ưu chuộng là vì nó không lãng phí thời gian cho các thiết bị không cần phục vụ

I.4 Các ngắt trong 8051.

Có sáu loại ngắt trong 8051

1 RESET: Khi chân RESET được kích hoạt từ 8051, bộ đếm chương trình nhảy về địa chỉ 0000H Đây là địa chỉ bật lại nguồn.

2 2 ngắt dành cho các bộ định thời: 1 cho Timer0 và 1 cho Timer1 Địa chỉ tương ứng của các ngắt này

là 000BH và 001BH.

3 2 ngắt dành cho các ngắt phần cứng bên ngoài: chân 12

(P3.2) và 13 (P3.3) của cổng P3 là các ngắt phần cứng bên

ngoài INT0 và INT1 tương ứng Địa chỉ tương ứng của các ngắt ngoài này là 0003H và 0013H.

Trang 3

4 Truyền thông nối tiếp: có 1 ngắt chung cho cả nhận và truyền

dữ liệu nối tiếp Địa chỉ của ngắt này trong bảng vector ngắt

là 0023H.

I.5 Trình phục vụ ngắt.

Đối với mỗi ngắt thì phải có một trình phục vụ ngắt (ISR) hay trình quản

lý ngắt để đưa ra nhiệm vụ cho bộ vi điều khiển khi được gọi ngắt Khi một ngắt được gọi thì bộ vi điều khiển sẽ chạy trình phục vụ ngắt Đối với mỗi ngắt

thì có một vị trí cố định trong bộ nhớ để giữ địa chỉ ISR của nó Nhóm vị trí bộ nhớ được dành riêng để lưu giữ địa chỉ của các ISR được gọi là bảng vector ngắt.

Hình 1: Mức ưu tiên các ngắt trong khi cấp lại nguồn.

I.6 Quy trình thực hiện một ngắt.

Khi kích hoạt một ngắt bộ vi điều khiển thực hiện các bước sau:

1 Nó hoàn thành nốt lệnh đang thực hiện và lưu địa chỉ của lệnh kế

tiếp vào ngăn xếp.

Trang 4

2 Nó cũng lưu tình trạng hiện tại của tất cả các ngắt.

3 Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là bảng vector

ngắt, nơi lưu giữ địa chỉ của một trình phục vụ ngắt.

4 Bộ vi điều khiển nhận địa chỉ ISR từ bảng vector ngắt và nhảy tới đó Nó

bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR và

trở về chương trình chính từ ngắt

5 Khi bộ vi điều khiển quay trở về nơi nó đã bị ngắt Trước hết nó nhận địa

chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo 02 byte trên đỉnh của ngăn xếp vào PC Sau đó bắt đầu thực hiện tiếp các lệnh từ địa chỉ đó

I.7 Các bước cho phép và cấm ngắt.

Khi bật lại nguồn thì tất cả mọi ngắt đều bị cấm (bị che), có nghĩa là không có ngắt nào được bộ vi điều khiển đáp ứng trừ khi chúng được kích hoạt

Các ngắt phải được kích hoạt bằng phần mềm để bộ vi điều khiển đáp ứng chúng Có một thanh ghi được gọi là thanh ghi cho phép ngắt IE (Interrupt Enable) – ở địa chỉ A8H chịu trách nhiệm về việc cho phép và cấm các ngắt

Trang 5

Hình 2: Thanh ghi cho phép ngắt IE.

Để cho phép một ngắt ta phải thực hiện các bước sau:

Nếu EA = 0 thì không có ngắt nào được đáp ứng cho dù bit tương ứng của nó trong IEcó giá trị cao Bit D7 - EA của thanh ghi IE phải được bật lên cao để cho phép các bit còn lại của

thanh ghi hoạt động được

Nếu EA = 1 thì tất cả mọi ngắt đều được phép và sẽ được đáp ứng nếu các bit tương ứng của chúng trong IE có mức cao.

Trang 6

 TF0(1) là các cờ báo tràn timer, khi sự kiện tràn timer xảy ra, cờ

sẽ được tự động đặt lên mức logic 1 và nếu ngắt tràn timer đang bật,

Trang 7

ngắt sẽ xảy ra Khi CPU xử lý ngắt tràn timer0(1), cờ ngắt TF0(1) tương ứng sẽ tự động được xóa về 0

 TR0(1) = 1, timer0(1) sẽ đếm, ngược lại khi TR0(1) = 0, timerx sẽ không đếm Khi dừng không đếm, giá trị của timer được giữ nguyên Chúng ta đã biết rằng cờ bộ định thời TF được bật lên cao khi bộ định thời đạt giá trị cực đại và quay về 0 (Roll - over) Trong các bài trước chúng

ta cũng chỉ ra cách kiểm tra cờ TF bằng một vòng lặp Trong khi thăm dò

cờ TF thì ta phải đợi cho đến khi cờ TF được bật lên Vấn đề với phương pháp này là bộ vi điều khiển bị trói buộc trong khi chờ cờ TF được bật và không thể làm được bất kỳ việc gì khác

Sử dụng các ngắt sẽ giải quyết được vấn đề này và tránh được sự trói buộc bộ vi điều khiển Nếu bộ ngắt định thời trong thanh ghi IE được phép thì mỗi khi nó quay trở về 0 bộ vi điều khiển sẽ bị ngắt, bất chấp nó đang thực hiện việc gì và nhảy tới bảng vector ngắt để phục vụ ISR Bằng cách này thì bộ vi điều khiển có thể làm những công việc khác cho đến khi nó được thông báo rằng bộ định thời đã quay về 0

II Bộ định thời

8051 có 2 Timer tên là Timer0 và Timer1 Các Timer này đều là Timer

16 bit, giá trị đếm max do đó bằng 2^16 = 65536 (đếm từ 0 đến 65535) Hai Timer có nguyên lý hoạt động hoàn toàn giống nhau và độc lập

Sau khi cho phép chạy, mỗi khi có thêm một xung tại đầu vào đếm, giá trị của Timer sẽ tự động được tăng lên 1 đơn vị, cứ như vậy cho đến khi giá trị tăng lên vượt quá giá trị max mà thanh ghi đếm có thể biểu diễn thì giá trị đếm lại được đưa trở về giá trị min (thông thường min = 0) Khi đó xảy ra tràn Timer (overflow) và có thể gây ra ngắt nếu ngắt tràn Timer được cho

Trang 8

phép (bit ETx trong thanh ghi IE=1) Việc cho Timer chạy/dừng được thực hiện bởi các bit TR trong thanh ghi TCON (đánh địa chỉ đến từng bit)

Thanh ghi 16 bit của bộ Timer 0 (hay Timer 1) được truy cập như

byte thấp và byte cao:

II.1 Các thanh ghi cơ sở của bộ định thời

Cả hai bộ định thời Timer 0 và Timer 1 đều có độ dài 16 bit được truy cập như hai thanh ghi tách biệt byte thấp và byte cao Chúng ta sẽ bàn riêng về từng

thanh ghi

II.1.1.Các thanh ghi của bộ Timer 0

Thanh ghi 16 bit của bộ Timer 0 được truy cập như byte thấp và byte cao:

 Thanh ghi byte thấp được gọi là TL0 (Timer0 Low byte).

 Thanh ghi byte cao được gọi là TH0 (Timer0 High byte).

Các thanh ghi này có thể được truy cập, hoặc được đọc như mọi thanh ghi khác chẳng hạn như A, B, R0, R1, R2 v.v

Hình 1: Các thanh ghi của bộ Timer 0

II.1.2 Các thanh ghi của bộ Timer 1

Giống như timer 0, bộ định thời gian Timer 1 cũng dài 16 bit và thanh ghi

16 bit của nó cũng được chia ra thành hai byte là TL1 và TH1 Các thanh ghi này

được truy cập và đọc giống như các thanh ghi của bộ Timer 0 ở trên

Hình 2: Các thanh ghi của bộ Timer 1.

Trang 9

II.1.3 Thanh ghi TMOD

Cả hai bộ định thời Timer 0 và Timer 1 đều dùng chung một thanh ghi được gọi là TMOD: để thiết lập các chế độ làm việc khác nhau của bộ định thời Thanh ghi TMOD là thanh ghi 8 bit gồm có:

 4 bit thấp để thiết lập cho bộ Timer 0.

 4 bit cao để thiết lập cho Timer 1.

Trong đó:

 2 bit thấp của chúng dùng để thiết lập chế độ của bộ định thời

 2 bit cao dùng để xác định phép toán

Hình 3: Thanh ghi TMOD.

a Các bit M1, M0

Là các bit chế độ của các bộ Timer 0 và Timer 1 Chúng chọn chế độ của các bộ định thời: 0, 1, 2 và 3 như bảng dưới Chúng ta chỉ tập chung vào các chế

độ thường được sử dụng rộng rãi nhất là chế độ 1 và chế độ 2 Chúng ta sẽ sớm khám phá ra các đặc tính của các chế độ này sau khi khám phần còn lại của thanh ghi TMOD Các chế độ được thiết lập theo trạng thái của M1 và M0 như sau:

0 0 0 Bộ định thời 13 bit:8 bit là bộ định thời/bộ đếm, 5 bit đặttrước.

0 1 1 Bộ định thời 16 bit: không có đặt trước

Trang 10

1 0 2 Bộ định thời 8 bit: tự nạp lại.

1 1 3 Chế độ bộ định thời chia tách

Bảng 1: Các chế độ hoạt động của bộ đếm/bộ định thời

b Bit C/T (Counter/Timer)

Bit này trong thanh ghi TMOD được dùng để quyết định xem bộ định thời được dùng như một máy tạo độ trễ hay bộ đếm sự kiện Nếu bit C/T = 0 thì nó được dùng như một bộ định thời tạo độ trễ thời gian

Nguồn đồng hồ cho chế độ trễ thời gian là tần số thạch anh của 8051 Điều

đó có nghĩa là độ lớn của tần số thạch anh đi kèm với 8051 quyết định tốc độ nhịp của các bộ định thời trên 8051 Tần số của bộ định thời luôn bằng 1/12 tần số của thạch anh gắn với 8051

Hình 4: Tần số của bộ đếm/bộ định thời

Tần số thạch

anh Tần số bộ định thời Chu kỳ bộ định thời

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ù các hệ thống 8051 có thể sử dụng tần số thạch anh từ 10 đến

40MHz, song ta chỉ tập trung vào tần số thạch anh 11,0592MHz Lý do đằng sau

một số lẻ như vậy là tốc độ baud đối với truyền thông nối tiếp của 8051 Tần số

Trang 11

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 sẽ đếm khi bit TR bằng 1, dừng khi bit bằng 0 Nếu GATE =1, Timer sẽ chỉ đếm khi bit TR = 1 và tín hiệu tại chân INT = 1, dừng khi một trong hai điều kiện trên không còn thỏa mãn Thông thường người ta dùng Timer với GATE = 0, chỉ dùng timer với GATE = 1 trong trường hợp muốn đo độ rộng xung vì lúc đó Timer sẽ chỉ đếm thời gian khi xung đưa vào chân INT ở mức cao

d M0 và M1

Hai bit còn lại (M0 và M1) dùng để chọn chế độ timer

Chế

Bộ Timer 13 bit: 8 bit là bộ Timer/bộ đếm, 5 bit

đặt trước

0 1 1 Bộ Timer 16 bit: không có đặt trước

1 0 2 Bộ Timer 8 bit: tự nạp lại

II.2 Các chế độ

* Để sử dụng timer của 8051, chúng ta cần thực hiện các bước sau:

Trang 12

- Quy định chế độ hoạt động cho timer bằng cách tính toán và ghi giá trị cho các bit trong thanh ghi TMOD

- Ghi giá trị đếm khởi đầu mong muốn vào 2 thanh ghi đếm THx và TLx Đôi khi ta không muốn timer/counter bắt đầu đếm từ 0 mà từ một giá trị nào

đó để thời điểm tràn gần hơn, hoặc chẵn hơn trong tính toán sau này Ví

dụ nếu cho timer đếm từ 15535 thì sau 50000 xung nhịp (tức 50000 ms với thạch anh 12MHz) timer sẽ tràn, và thời gian một giây có thể dễ dàng tính ra khá chính xác = 20 lần tràn của timer (đương nhiên mỗi lần tràn lại phải nạp lại giá trị 15535)

- Dùng bit TRx trong thanh ghi TCON để cho timer chạy hay dừng theo

ý muốn

Trang 13

Hình 2.1: Timer ở chế độ 0.

Hình 2.2: Timer ở chế độ 1.

Trang 14

Hình 2.3: Timer ở chế độ 2.

Hình 2.4: Timer ở chế độ 3.

Trang 16

II.2.1.Lập trình cho chế độ 1

Dưới đây là những bước hoạt động của timer ở chế độ 1:

 Đây là bộ định thời 16 bit, do vậy nó cho phép các giá trị 0000 đến FFFFHđược nạp vào các thanh ghi TL và TH của bộ định thời.

Trang 17

 Sau khi TL và TH được nạp một giá trị khởi tạo 16 bit thì bộ định thời phải được khởi động Điều này được thực hiện bởi việc SET bit TR0 đối vớiTimer

0 và SET bit TR1 đối với Timer 1.

 Sau khi bộ định thời được khởi động, nó bắt đầu đếm lên Nó đếm lên cho đến khi

đạt được giới hạn FFFFH của nó Sau đó, khi nó quay từ FFFFHvề 0000 thì nó bật lên bit cờ TF được gọi là cờ bộ định thời Cờ bộ định thời này có thể được hiển thị Khi cờ bộ định thời này được thiết lập, để dừng bộ định thời: ta thực hiện xóa các bit TR0 đối với Timer 0 hoặc TR1đối với Timer 1 Ở đây cũng cần phải nhắc lại là đối với mỗi bộ định thời đều có cờ TF riêng của mình: TF0 đối với Timer 0 và TF1 đối với Timer 1.

 Sau khi bộ định thời đạt được giới hạn của nó là giá trị FFFFH, muốn lặp lại quá trình thì các thanh ghi TH và TL phải được nạp lại với giá trị ban đầu và

cờ TF phải được xóa về 0.

Hình 5: Timer/counter chế độ 1

*Các bước lập trình cho Timer ở chế độ 1:

 Nạp giá trị TMOD cho thanh ghi báo độ định thời nào( Timer 0 hay Timer1) được sử dụng và chế độ nào được chọn

 Nạp các thanh ghi TL và TH

 Khởi động bộ định thời: TRx=1;

 Duy trì kiểm tra cờ bộ định thời TF Thoát vòng lặp khi TF được lên cao

 Dừng bộ định thời

 Xóa cờ TF cho vòng kế tiếp

 Quay trở lại bước 2 để nạp lại cho TL và TH

Trang 18

*Công thức tính các giá trị nạp vào cho thanh ghi THx và 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 hiện 65536-n với n là giá trị thập phân nhận được từ bước 1

 Chuyển đối kết quả ở bước 2 sang số Hex: ta có XXYY là giá trị Hexa ban đầu nạp vào các thanh ghi bộ định thời

 Đặt TH=XX và TL= YY

Ví dụ: thiết kế mạch ghép nối 1 LED đơn với chân P1.3 Viết chương trình cho phép ngắt Timer0 xảy ra sau khoảng thời gian 1ms Mỗi khi có ngắt thì bật LED tại 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ỳ bộ định thời là T(đt) = 1/0,9216 = 1,0852 µs (mỗi xung nhịp mất 1 µs)

Thời gian cần định thời là 1ms = 1000 µs

Vậy cứ: 1 nhịp = 1,085 µs

? nhịp = 1000 µs

Vậy số nhịp là 1000/1,085 = 922

Vậy giá trị cần nạp cho thanh ghi TH0 và TL0 là

65536-922=64614=FC66(Hex)

Ngày đăng: 27/09/2017, 09:32

HÌNH ẢNH LIÊN QUAN

Hình 1: Mức ưu tiên các ngắt trong khi cấp lại nguồn. - 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
Hình 1 Mức ưu tiên các ngắt trong khi cấp lại nguồn (Trang 3)
Hình 2: Thanh ghi cho phép ngắt IE. - 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
Hình 2 Thanh ghi cho phép ngắt IE (Trang 4)
Bảng 1: Các chế độ hoạt động của bộ đếm/bộ định thời - 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
Bảng 1 Các chế độ hoạt động của bộ đếm/bộ định thời (Trang 10)
Hình 2.1: Time rở chế độ 0. - 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
Hình 2.1 Time rở chế độ 0 (Trang 12)
Hình 2.2: Time rở chế độ 1. - 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
Hình 2.2 Time rở chế độ 1 (Trang 13)
Hình 2.3: Time rở chế độ 2. - 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
Hình 2.3 Time rở chế độ 2 (Trang 13)
Hình 2.4: Time rở chế độ 3. - 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
Hình 2.4 Time rở chế độ 3 (Trang 14)
Hình 5: Timer/counter chế độ 1       *Các bước lập trình cho Timer ở chế độ 1: - 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
Hình 5 Timer/counter chế độ 1 *Các bước lập trình cho Timer ở chế độ 1: (Trang 17)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w