Vi điều khiển AT89S52

Một phần của tài liệu đồ án kỹ thuật điện điện tử NGHIÊN CỨU VỀ CẢM BIẾN,ỨNG DỤNG THIẾT KẾ MÔ HÌNH NHÀ THÔNG MINH (Trang 31)

2.1.2.1 Giới thiệu chung

Bộ vi điều khiển AT89S52 gồm các chức năng chính sau đây : • CPU (Central Processing Unit) bao gồm :

- Thanh ghi tích lũy A

- Thanh ghi tích lũy B, dùng cho phép nhân và phép chia - Đơn vị logic học (ALU : Arithmetic Logical Unit)

- Thanh ghi từ trạng thái chương trình (PSw : Program Status Word) Các chân vào ra Cổng nối tiếp Nguồn ngắt 32 1 6

- Bốn băng thanh ghi - Con trỏ ngăn xếp

• Bộ nhớ chương trình (bộ nhớ ROM) gồm 8kbyte Flash

• Bộ nhớ dữ liệu (bộ nhớ RAM) gồm 256 byteBộ UART (Universal Ansynchronous Receiver and Tranmistter) có chức năng truyền nhận, AT89S52 có thể giao tiếp với cổng nối tiếp của máy tính thông qua

• 3 bộ Timer/Counter 16 bit thực hiện các chức năng định thời và đếm sự kiện

• WDM (Watch Dog Timer) : WDM được dùng để phục hồi lại hoạt động của của CPU khi nó bị treo bởi một nguyên nhân nào đó.WDM ở AT89S52 gồm 1 bộ timer 14 bit , 1 bộ 7 bit ,thanh ghi WDTPRG (WDT programable). Timer 14 bit của WDT sẽ đếm tăng dần sau mỗi chu kỳ đồng hồ cho đến giá trị 16383 thì xảy ra tràn. Khi xảy ra tràn , chân Reset sẽ được đặt ở mức cao trong khoảng thời gian 98*TOSC (TOSC = 1/FOSC) và AT89S52 sẽ được reset .Khi WDT hoạt động , ngoại trừ Reset phần cứng và Reset cho WDT tràn thì không có cách nào để cấm được WDT .

• Khối điều khiển ngắt với 2 nguồn ngắt ngoài và 4 nguồn ngắt trong.

• Bộ lập trình(ghi chương trình lên Flash ROM) cho phép người sử dụng có thể nạp các chương trình cho chíp mà không cần đến bộ nạp chuyên dụng

• Bộ chia tần số với hệ số chia là 12 • 4 cổng xuất nhập với 32 chân

Sơ đồ chân , chức năng của các chân của AT89S52

- Port 3 : ngoài chức năng xuất nhập còn có chức năng riêng sau :

Bit Tên Chức năng

P3.0 RXD Dữ liệu nhận cho port

nối tiếp

P3.1 TXD Dữ liệu truyền cho port

nối tiếp

P3.2 INT0 Ngắt bên ngoài 0

P3.3 INT1 Ngắt bên ngoài 1

P3.4 T0 Ngõ vào của

Timer/counter 0

P3.5 T1 Ngõ vào của

Timer/counter 1

P3.6 /WR Xung ghi nhớ dữ liệu

ngoài

P3.7 /RD Xung đọc bộ nhớ dữ liệu

- Chân /PSEN (Program Store Enable) : là chân điều khiển đọc chương trình ở bộ nhớ ngoài, nó được phép đọc các byte mã lệnh trên ROM ngoài. /PSEN sẽ ở mức thấp trong thời gian đọc mã lệnh. Mã lệnh được đọc từ bộ nhớ ngoài qua bus dữ liệu (port 0) thanh ghi lệnh để được giải mã.khi thực hiện chương trình ROM nội thì /PSEN ở mức cao.

- Chân ALE (Address Latch Enable) : ALE là tín hiệu điều khiển chốt địa chỉ có tần số bằng 1/6 tần số dao động của vi điều khiển.Tín hiệu ALE được dùng để cho phép vi mạch chốt bên ngoài như 74373, 74573 chốt byte địa chỉ thấp ra khỏi bus đa hợp địa chỉ/dữ liệu (Port 0).

- Chân /EA(External Access) : tín hiệu cho phép chọn bộ nhớ chương trình là bộ nhớ trong hay ngoài vi điều khiển. Nếu /EA ở mức cao (nối với VCC), thì vi điều khiển thi hành chương trình trong ROM nội. Nếu /EA ở mức thấp(nối

2.1.2.2 Cấu trúc bên trong vi điều khiển

Hình 2. 1 Cấu trúc bên trong vi điều khiển

2.1.2.3 Hoạt động định thời của AT89S52

Các bộ định thời (Timer) được sử dụng rộng rãi trong các ứng dụng đo lường và điều khiển.Vi điều khiển AT89S52 có 3 bộ định thời 16 bit trong đó 2 bộ timer 0 và 1 có 4 chế độ hoạt động, timer 2 có 3 chế độ hoạt động. Các bộ định thời dùng để định khoảng thời gian(hẹn giờ), đếm sự kiện xảy ra bên ngoài bộ vi điều khiển hoặc tạo tốc độ baud cho công nối tiếp của vi điều khiển.

Trong các ứng dụng định hoảng thời gian, timer được lập trình sao cho sẽ tràn sau một khoảng thời gian và thiết lập cờ tràn bằng 1. Cờ tràn được sử dụng bởi chương trình để thực hiện một hành động tương ứng như kiểm tra trạng thái

Thanh ghi TMOD

7 6 5 4 3 2 1 0

GATE1 C/#T1 M1 M0 GATE0 C/#T0 M1 M0

Bit Ký hiệu Chức năng

7 GATE1 Bit điều khiển

cổng.Khi set lên 1,bộ định thời chỉ hoạt động trong khi INT1 ở mức cao

6 C/#T1 Bit chọn chức năng

đếm hoặc định thời 1=đếm sự kiện

0=định thời trong 1 khoảng thời gian

5 M1 Bit chọn chế độ thứ nhất 4 M0 Bit chọn chế độ thứ 2 00 chế độ 0 – Timer 13 bit 01 chế độ 1 – Timer 16 bit

10 chế độ 2 – 8 bit tự động nạp lại

11 chế độ 3 – tách Timer

3 GATE0 Bit điều khiển cổng

cho bộ định thời 0 2 C/#T0 Bit chọn chức năng đếm hoặc định thời cho bộ định thời 0 1 M1 Bit chọn chế độ thứ nhất cho bộ định thời 0 0 M0 Bit chọn chế độ thứ 2 cho bộ định thời 0

Bảng 2. 3 Thanh ghi TMOD

TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0

1.Bit này được set hay xóa bằng phần mềm để điều khiển bộ định thời hoạt động hay ngưng

TCON.5 TF0 Cờ tràn của bộ định thời 0

TCON.4 TR0 Bit điều khiển hoạt động của bộ định thời TCON.3 IE1 Cờ ngắt bên ngoài 1(kích khởi cạnh).Cờ này

được set bởi phần cứng khi có cạnh âm (cuống) xuất hiện trên chan INT1,được xóa bởi phần mềm,hoặc phần cứng khi CPU trỏ đến trình phục vụ ngắt

TCON.2 IT1 Cờ ngắt bên ngoài 1(kích khởi cạnh hoặc mức).Cờ này được set hay xóa bởi phần mềm khi xảy ra cạnh âm hoặc mức thấp ở chân ngắt ngoài

TCON.1 IE0 Cờ ngắt bên ngoài 0(kích khởi cạnh)

TCON.0 IT0 Cờ ngắt bên ngoài 0(kích khởi cạnh hoặc mức)

Bảng 2. 4 Thanh ghi TCON

2.1.2.5 Các chế độ định thời của timer 1 và timer 0

- Chế độ 0 : là chế độ định thời 13 bit , chế độ này tương thích với các bộ vi điều khiển trước đó. Trong chế độ này bộ định thời dùng 13 bit(8 bit của TH và 5 bit cao của TL) để chứa giá trị đếm, 3 bit thấp của TL không được sử dụng.

- Chế độ 1 : Trong chế độ này , bộ timer dùng cả 2 thanh ghi TH và TL để chứa giá trị đếm , vì vậy chế độ này còn được gọi là chế độ định thời 16 bit . Bit MSB sẽ là bit D7 của TH còn bit LSB là D0 của TL

- Chế độ 2 : Trong chế độ 2 , bộ định thời dùng TL để chứa giá trị đếm và TH để chứa giá trị nạp lại vì vậy chế độ này còn gọi là chế độ tự nạp lại 8 bit.Sau khi đếm 255 sẽ xảy ra tràn,khi đó TF được đặt bằng 1 đồng thời giá trị của timer tự động được nạp lại bằng nội dung của TH.

- Chế độ 3 : Trong chế độ 3 , Timer 0 được tách thành 2 bộ Timer hoạt động độc lập , chế độ này sẽ cung cấp cho bộ vi điều khiển thêm một Timer nữa.

Bộ timer thứ nhất với nguồn xung clock được lấy từ bộ chia tần trên chip hoặc từ bộ tạo xung bên ngoài qua chân T0 tùy thộc vào giá trị của bit C-/T0. Việc điều khiển hoạt động của bộ thứ nhất do bit GATE , bit TR0 và mức logic trên chân INT0 (giống chế độ 0 , 1 ,2). Giá trị đếm của Timer được chứa trong TL0, khi xảy ra tràn cờ TF0 được đặt bằng một và gây ngắt do Timer 0 (nếu được đặt).

Bộ Timer thứ hai với nguồn xung clock lấy từ bộ chia tần trên chip. Việc hoạt động của bộ thứ hai chỉ là việc đặt giá trị của bit TR0. Giá trị đếm của Timer được chứa trong TH0, khi xảy ra tràn cờ TF1 được đặt bằng một và gây ra ngắt do Timer 1 (nếu được đặt).

2.1.2.6 Tổ chức ngắt của AT89S52

AT89S52 chỉ có 6 nguồn ngắt:  Ngắt ngoài đến từ chân #INT0.

nhiên trong hầu hết các trường hợp, chương trình xử lý ngắt có dung lượng mã tạo ra lớn hơn 8byte nên tại vector ngắt, ta chỉ đặt lệnh nhảy tới chương trình xử lý ngắt nằm ở vùng nhớ khác. Nếu không làm vậy, mã chương trình xử lý ngắt này sẽ lấn sang, đè vào vector ngắt kế cận

Cho phép ngắt và cấm ngắt :

Mỗi nguồn ngắt được cho phép hoặc cấm qua một thanh ghi chức năng đặc biệt có địa chỉ bit IE ở địa chỉ A8H

Bit Ký hiệu Địa chỉ bit Mô tả

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

IE.6 _ AEH Không được miêu tả

IE.5 ET2 ADH Cho phép ngắt từ Timer 2 (8052) IE.4 ES ACH Cho phép ngắt từ port nối tiếp IE.3 ET1 ABH Cho phép ngắt từ Timer 1 IE.2 EX1 AAH Cho phép ngắt ngoài 1 IE.1 ET0 A9H Cho phép ngắt từ Timer 0 IE.0 EX0 A8H Cho phép ngắt ngoài 0

Thanh ghi IE là thanh ghi đánh địa chỉ bit, do đó có thể dùng các lệnh tác động bit để tác động riêng rẽ lên từng bit mà không làm ảnh hưởng đến giá trị các bit khác. Cờ ngắt hoạt động độc lập với việc cho phép ngắt, điều đó có nghĩa là cờ ngắt sẽ tự động đặt lên bằng 1 khi có sự kiện gây ngắt xảy ra, bất kể sự kiện đó có được cho phép ngắt hay không. Do vậy, trước khi cho phép một ngắt, ta nên xóa cờ của ngắt đó để đảm bảo sau khi cho phép, các sự kiện gây ngắt trong quá khứ không thể gây ngắt nữa. Ví dụ trước khi cho phép ngắt timer 0 mà timer 0 đã chạy và tràn (dù là tràn một hay nhiều lần) thì cờ TF0 sẽ bằng 1, nếu sau đó ta cho phép ngắt timer0 thì sẽ gây ra ngắt ngay do cờ tràn đang bằng 1 (sự kiện tràn gây ngắt trong trường hợp này là tràn trong quá khứ, không phải sự kiện ta quan tâm đến). Vì vậy hãy xóa cờ TF0 trước khi cho phép ngắt tràn timer0. Ngoại trừ cờ của của ngắt nối tiếp và cờ của ngắt timer2, các cờ ngắt khác đều tự động được xóa khi CPU thực hiện chương trình ngắt .

Ngắt ngoài (External Interrupt)

Như đã nói ở trên, AT89S52 có 2 ngắt ngoài là INT0 và INT1. Ngắt ngoài được hiểu là ngắt được gây ra bởi sự kiện mức lôgic 0 (mức điện áp thấp, gần 0V) hoặc sườn xuống (sự chuyển mức điện áp từ mức cao về mức thấp) xảy ra ở chân ngắt tương ứng (P3.2 với ngắt ngoài 0 và P3.3 với ngắt ngoài Việc lựa chọn kiểu ngắt được thực hiện bằng các bit IT (Interrupt Type) nằm

trong thanh ghi TCON. Đây là thanh ghi điều khiển timer nhưng 4 bit LSB (bit0..3) được dùng cho các ngắt ngoài.

TF1 TR1 TF0 TR1 IE1 IT1 IE0 IT0

Khi bit ITx = 1 thì ngắt ngoài tương ứng được chọn kiểu là ngắt theo sườn xuống, ngược lại nếu bit ITx = 0 thì ngắt ngoài tương ứng được sẽ có kiểu ngắt là ngắt theo mức thấp. Các bit IE là các bit cờ ngắt ngoài, chỉ có tác dụng trong trường hợp kiểu ngắt được chọn là ngắt theo sườn xuống.

Khi kiểu ngắt theo sườn xuống được chọn thì ngắt sẽ xảy ra duy nhất một lần khi có sườn xuống của tín hiệu, sau đó khi tín hiệu ở mức thấp, hoặc có sườn lên, hoặc ở mức cao thì cũng không có ngắt xảy ra nữa cho đến khi có sườn xuống tiếp theo. Cờ ngắt IE sẽ dựng lên khi có sườn xuống và tự động bị xóa khi CPU bắt đầu xử lý ngắt.

Khi kiểu ngắt theo mức thấp được chọn thì ngắt sẽ xảy ra bất cứ khi nào tín hiệu tại chân ngắt ở mức thấp. Nếu sau khi xử lý xong ngắt mà tín hiệu vẫn ở mức thấp thì lại ngắt tiếp, cứ như vậy cho đến khi xử lý xong ngắt lần thứ n, tín hiệu đã lên mức cao rồi thì thôi không ngắt nữa.Cờ ngắt IE trong trường hợp này không có ý nghĩa gì cả.

Thông thường kiểu ngắt hay được chọn là ngắt theo sườn xuống.

Ngắt do timer

AT89S52 có 3 Timer là Timer 0 và Timer 1 và Timer 2. Các Timer này đều là Timer 16 bit, giá trị đếm max do đó bằng 65535 (đếm từ 0 đến 65535). Ba timer có nguyên lý hoạt động hoàn toàn giống nhau và độc lập.

Các ngắt do các bộ Timer xảy ra do sự kiện tràn ở các Timer, khi đó các cờ tràn TFx sẽ đươc đặt bằng 1. Khi ISR được đáp ứng, các cờ TFx sẽ tự động được xóa bởi phần mềm.

2.2 HIỂN THỊ NHIỆT ĐỘ BẰNG LCD 2.2.1 Phân loại LCD

Có thể chia các module LCD làm hai loại chính là:

- Loại hiển thị kí tự gồm có các kích cỡ 16x1 (16 ký tự trên 1 dòng), 16x2, 16x4, 20x1, 20x2, 20x4, 40x1, 40x2, 40x4. Mỗi ký tự được tạo bởi một ma trận các điển sáng kích thước 5x7 hoặc 5x10 điểm ảnh.

- Loại hiển thị đồ họa đen trắng hoặc màu, gồm có các kích cỡ 1,47inch (128x128 điểm ảnh); 1,8 inch(128x160 điểm ảnh)... được dùng trong điện thoại di động, máy ảnh số, camera...

2.2.2 Giới thiệu sơ đồ chân LCD

Cụ thể tên gọi và mô tả chức năng các chân được tổng kết trong bảng sau:

Giao diện kết nối chân

Chân số

hiệu Tên Mô tả chức năng

1 VSS Cấp nguồn 0V (GND)

2 VDD Cấp nguồn Nối với dương nguồn (+4.5V~+5.5V)

3 VEE Contrast

điều chỉnh điện áp chân này sẽ tăng giảm độ tương phản của LCD. cho nên nó thường được nối với biến trở. 4 RS Chọn thanh ghi Nếu RS=0 : LCD nhận lệnh từ VĐK Nếu RS=1: LCD nhận dữ liệu từ VĐK để hiển thị

5 RW Read/Write Chọn chức năng ghi/ đọc

RS=1 : chọn chức năng đọc dữ liệu từ LCD vào VĐK

Bảng 2. 6 Giới thiệu sơ đồ chân LCD

2.2.3 Khả năng hiển thị của LCD

LCD có khả năng hiển thị rất linh hoạt Thiết lập chế độ hiển thị :

Hiển thị trên 1 dòng hay cả 2 dòng. - Chọn cỡ chữ hiển thị (5x7 hay5x10).

- Chọn kiểu con trỏ màn hình (có/không gạch chân , có/không nhấp nháy) Thiết lập kiểu trao đổi thông tin :

- Trao đổi thông tin với Vi điều khiển dùng 4 bit hay 8 bít. Trình bày nội dung hiển thị.

Tập lệnh của LCD

Mã hexa Lệnh đến thanh ghi của LCD

1 Xóa màn hinh hiển thị

2 Trở về đầu dòng

4 Dịch con trỏ sang trái 6 Dịch con trỏ sang phải 5 Dịch hiển thị sang phải 7 Dịch hiển thị sang trái 8 Tắt con trỏ, tắt hiển thị

A Bật con trỏ, tắt hiển thị C Tắt con trỏ, bật hiển thị

E Bật hiển thị, nhấp nháy con trỏ F Tắt hiển thị, nhấp nháy con trỏ 10 Dịch vị trí con trỏ sang trái 14 Dịch vị trí con trỏ sang phải 18 Dịch toàn bộ hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phải 80 Đưa con trỏ về đầu dòng thứ nhất C0 Đưa con trỏ về đầu dòng thứ nhất hai 38 Hai dòng và ma trận 5 × 7

Bảng 2. 7 nội dung hiển thị

Để thực hiện được các khả năng hiển thị ở trên, ta cần ra lệnh cho LCD thực hiện các thao tác, tức là phải sử dụng tập lệnh của LCD.

hiệu Chức năng Chú thích

X bít nhị phân (0,1)tuỳ ý

1/D Địa chỉ con trỏ 1= tự động tăng; 0= tự động giảm

S Dịch con trỏ sau khi hiển thị

Có (1); Không (0)

D =1: bật LCD; =0: tắt LCD

U Con trỏ được gạch chân Có (1); Không (0) B Con trỏ nhấp nháy Có (1); Không (0)

2.2.4 Nguyên tắc hiển thị kí tự trên LCD

Một chương trình hiển thị ký tự trên LCD sẽ đi theo bốn bước sau:  Xóa toàn bộ màn hình.

 Đặt chế độ hiển thị

 Đặt vị trí con trỏ (noi bắt đầu của ký tự hiển thị).  Hiển thị ký tự.

Chú ý:

 Các bước 3, 4 có thể lặp lại nhiều lần nếu cần hiển thị nhiều ký tự.

 Mỗi khi thực hiện ghi lệnh hoặc ghi dữ liệu hiển thị trên LCD phải kiểm tra cờ bận (hàm busy_ flag). Tuy nhiên có một số loại LCD không cho phép kiểm tra cờ bận, vì vậy bộ vi điều khiển cần phải chủ động phân phối thời gian khi ra lệnh cho LCD (ví dụ sau khi xóa màn hình thì sau khoảng 2s mới ra lệnh khác vì thời gian để LCD xóa màn hình là 1,64ms).  Chế độ hiển thị mặc định sẽ là hiển thị dịch, vị trí con trỏ mặc định sẽ là

 Để điều khiển hoạt động của LCD nên sử dụng Port 2 hoặc Port 1 cho việc xuất nhập dữ liệu, các chân tạo tín hiệu điều khiển RS,RW, EN_LCD

Một phần của tài liệu đồ án kỹ thuật điện điện tử NGHIÊN CỨU VỀ CẢM BIẾN,ỨNG DỤNG THIẾT KẾ MÔ HÌNH NHÀ THÔNG MINH (Trang 31)

Tải bản đầy đủ (DOC)

(92 trang)
w