Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

ngat trong 89c51



1.2         Tóm tắt phần cứng

1.2.1      Tổng quan

MC-51 là họ vi điều khiển của Intel. Vi mạch tổng quát của họ MC-8051 là chip 8051, linh kiện đầu tiên của họ này được đưa ra thị trường. Chip 8051 có các đặc điểm được tóm tắt như sau:

-         4KB ROM

-         128 byte RAM

-         4 port xuất nhập (I/O port) 8-bits

-         2 bộ định thời 16-bit

-         Mạch giao tiếp nối tiếp

-         Không gian nhớ chương trình (mã) ngoài 64K

-         Không gian nhớ dữ liệu ngoài 64K

-         Bộ xử lý bit (thao tác trên các bit riêng rẽ)

-         210 vị trí nhớ được định địa chỉ, vị trí 1 bit

-         Nhân/chia trong 4 µs

Thuật ngữ “8051” được dùng để chỉ rộng rãi các chip của họ MCS-8051.

Như thấy trong hình trên, trong số 40 chân của 8051 có công dụng xuất/nhập, tuy nhiên 24 trong 32 đường này có 2 công dụng. Mỗi đường có thể hoạt động xuất/nhập hoặc hoạt động như một đường điều khiển hoặc hoạt động như một đường địa chỉ/dữ liệu của bus địa chỉ dữ liệu đa hợp.

32 chân nêu trên hình thành 4 port 8-bit. Ta có thể sử dụng các port này làm nhiệm vụ xuất nhập. 8 đường cho mỗi port có thể được xử lý như một đơn vị giao tiếp với các thiết bị song song như máy in, bộ biến đổi D-A,v.v…hoặc mỗi đường có thể hoạt động độc lập giao tiếp với một thiết bị đơn bit như chuyển mạch, LED, BJT, FET, cuộn dây, động cơ, loa,v.v…

1.2.2      Chân của 8051

Pins 1-8: Port 1 Mỗi chân có thể được làm cổng xuất hoặc cổng nhập.

Pin 9: RS  Mức luận lý 1 ở chân này sẽ làm dừng quá trình thực thi của vi điều khiển và xóa nội dung của tất cả các thanh ghi. Bằng cách áp mức tín hiệu 0 và cổng này, thì chương trình sẽ bắt đầu thực thi từ vị trí đầu. Trong một vài trường hợp khác, tín hiệu 1 sẽ reset vi điều khiển.

Pins10-17: Port 3 Tương tự như port1, mỗi chân này có thể dùng làm cổng nhập hoặc cổng xuất. Bên cạnh đó, tất cả các chân này đề có một vài lựa chọn khác:

Pin 10: RXD Có thể làm ngõ nhập của truyền thông nối tiếp không đồng bộ, hoặc ngõ ra của truyền thông nối tiếp đồng bộ..

Pin 11: TXD Ngõ ra truyền thông nối tiếp không đồng bộ, hoặc ngõ vào truyền thông nối tiếp đồng bộ.

Pin 12: INT0 Interrupt 0 input

Pin 13: INT1 Interrupt 1 input

Pin 14: T0 Counter 0 clock input

Pin 15: T1 Counter 1 clock input

Pin 16: WR Tín hiệu cho việc ghi vào dữ liệu ngọai RAM

Pin 17: RD Tín hiệu cho việc đọc dữ liệu ngoại RAM

Pin 18, 19: X2, X1 8051 có bộ giao động trên chip nhưng vẫn cần có một bộ đồng hồ bên ngoài để kích hoạt. Bộ đao động thạch anh ngoài thường được nối vào hai chân này

Pin 20: GND Chân đất.

Pin 21-28: Port 2 Nếu không có mục đích sử dụng bộ nhớ ngoài thì Port này được cấu hình như một cổng vào hoặc ra. Trong trường hợp có bộ nhớ ngoại thì được sử dụng như byte cao, địa chỉ A8-A15 sẽ xuất hiện trên port này.

Pin 29: PSEN Nếu ROM ngoại được sử dụng để lưu chương trình thì cổng này sẽ mang giá trị 0 mỗi lần vi điều khiển đọc một byte từ bộ nhớ.

Pin 30: ALE Cho phép chốt địa chỉ là chân ra có mức tích cực cao. Chân này được sử dụng để phân kênh địa chỉ và dữ liệu bằng cách nối chân G của chip 74LS373.

Pin 31: EA Truy cập bộ nhớ ngoài là chân vào. Đối với các thành viên họ 8051 có ROM chương trình trên chip như 8751,89C51 hoặc DS5000 thì chân ngày được nối tới nguồn VCC. Trường hợp không có ROM trên chip như 8031 và 8032 thì mã chương trình được lưu cất ở bộ nhớ ROM ngoài, khi đó chân này được nối đất. Như vậy thì chân EA hoặc sẽ được nối nguồn hoặc sẽ được nối đất chứ không bao giờ để hở.

Pin 32-39: Port 0 Tương tự như port2, nếu không sử dụng bộ nhớ ngoài, thì port này được sử dụng như một cổng vào hoặc ra. Còn nếu không, thì P0 được cấu hình như một địa chỉ xuất (A0-A7) khi cổng ALE ở mức luận lý cao và như cổng xuất dữ liệu nếu cổng ALE ở mức luận lý 0.

Pin 40: VCC Power supply +5V

1.2.3 Tổ chức bộ nhớ.

Hầu hết các bộ vi xử lý (CPU) đều có không gian nhớ chung cho dữ liệu và chương trình. Điều này cũng hợp lý vì các chương trình thường được lưu trên đĩa và được nạp vào RAM để thực thi; vậy thì cả hai, dữ liệu và chương trình, đều lưu trữ trong RAM.

Các chip vi điều khiển hiếm khi được sử dụng giống như các CPU trong các hệ máy tính, thay vào đó chúng được dùng làm thành phần trung tâm trong các thiết kế hướng điều khiển, trong đó bộ nhớ có dung lượng giới hạn, không có ổ đĩa và hệ điều hành. Chương trình điều khiển thường trú trong ROM.

Do lý do trên, 8051 có không gian nhớ riêng cho chương trình và dữ liệu.

a.      Bộ nhớ cho chương trình (Program Memory)

Các model cũ của họ vi điều khiển 8051 không có bộ nhớ nội dành cho chương trình. Nó được nạp vào từ bên ngoài giống như một chip riêng biệt. Các model này được đánh dấu bởi nhản bắt đầu với 803 (ví dụ như 8031 hoặc 8032). Tất cả các model sau này đều có vài Kbyte ROM được nhúng vào, và mặc dù các bộ nhớ này thậm chí nó đủ để viết hầu hết các chương trình, nhưng trong một vài trường hợp nào đó thì việc sử dụng bộ nhớ ngoài cũng cần thiết. Một ví dụ điển hình là việc sử dụng cái gọi là: “lookup tables”. Chúng được sử dụng trong trường hợp một vài thứ quá phức tạp hoặc khi không có thời gian cho việc giải quyết các phương trình miêu tả các tiến trình.

Một ví dụ cho trường hợp này là các trường hợp thông dụng như đo lường nhiệt độ sử dụng các dụng cụ phi tuyến hay điều khiển tốc độ cho motor. Trong những trường hợp đó thì tất cả đều sử dụng phương pháp đánh giá ước lượng, được giải quyết một cách hữu hiệu thông qua các kết quả được lưu trong bảng.

Cách vi điều khiển sử dụng bộ nhớ ngoại dựa vào trạng thái cổng EA:

EA =0 trong trường hợp này, bộ nhớ nội của chương trình đã hoàn toàn mất tác dụng, chỉ có chương trình được lưu ở ở bộ nhớ ngoại mới được thực thi.

EA=1 trong trường hợp này, chương trình được xây dựng trong ROM sẽ được thực thi đầu tiên, sau đó, thì chương trình ở bộ nhớ ngoài (Additional ROM Memory) sẽ được thực thi tiếp theo.

a.      Bộ nhớ cho dữ liệu (Data Memory)

Data Memory được sử dụng để lưu trữ tạm thời, giữ giá trị dữ liệu cũng như các kết quả trung gian được tạo ra trong suốt quá trình hoạt động của vi điều khiển. Bên cạnh đó, các họ vi điều khiển này cũng bao gồm nhiều thanh ghi khác như: bộ đếm và bộ định thời, các port vào ra, truyền nối tiếp… Các phiên bản trước đó có dung lượng bộ nhớ là 256 đường địa chỉ, trong khi các model sau này con số đó đã được tăng lên bởi 128 thanh ghi được thêm vào. Trong cả hai phiên bản trên, 256 đường địa chỉ (có địa chỉ từ 0-FFh) đều thuộc  bộ nhớ. Một điều rất thông dụng cho tất cả họ vi điều khiển 8051. Các đường địa chỉ luôn có sẵn cho người sử dụng với không gian bộ nhớ từ 0 tới 7Fh, 128 thanh ghi đầu và phần này của RAM được chia ra thành nhiều block.

Block đầu tiên bao gồm 4 bank, mỗi bank bao gồm 8 thanh ghi từ R0 tới R7. Trước khi truy cập chúng, một bank bao gồm thanh ghi đó sẽ phải được chọn. Đến block tiếp theo (ở địa chỉ từ 20h tới 2Fh) là bit-addressable, có nghĩa là mỗi bit sẽ được đánh địa chỉ ở đó từ 0 đến 7Fh.

b.      Additional Memory Block của Data Memory

Vấn đề ở đây là sự giải quyết định địa chỉ  1 byte đã được sắp xếp, và chính vì vậy cho nên nó chỉ sử dụng được 256 đường địa chỉ đầu mà thôi. Để có thể sử dụng được 8-bit kiến trúc này và kết hợp nó với các model trước đó ta cần sử dụng một vài mẹo nhỏ. Sử dụng mẹo trong trường hợp này có nghĩa là Additional Memory chia sẽ cùng một địa chỉ với các đường địa chỉ đã tồn tại khác nằm trong bảng các thanh ghi hữu dụng SFR (80h-FFh). Để phân biệt sự khác nhau giữa hai không gian địa chỉ vật lý naỳ, thì các cách định địa chỉ khác nhau đã được sử dụng. Địa chỉ tuyệt đối được dùng cho các thanh ghi chức năng SFR, trong khi địa chỉ tương đối được sử dụng để định địa chỉ của các RAM.

a.      Địa chỉ tuyệt đối

Trong định địa chỉ tuyệt đối, dữ liệu được lấy từ một vùng nhớ trong khi địa chỉ của vùng nhớ thì được chỉ rõ trong câu lệnh. Sau đó thì chương trình có thể tác động lên dữ liệu này. Ví dụ:

MOV  A,33h  ; di chuyển mộ số ở địa chỉ 33 hex đến accumulator

b.      Địa chỉ tương đối

Trong định địa chỉ tương đối, thì thanh ghi sẽ giữ địa chỉ của các thanh ghi khác sẽ được chỉ định trong câu lệnh. Ví dụ:

MOV A,@R0; lưu giá trị từ thanh ghi mà địa chỉ của nó nằm ở trong thanh ghi R0 vào accumulator  

1.1.1      Các thanh ghi chức năng (special function register – SFR)

SFR là một loại của bảng điều khiển được sử dụng để thực thi và theo dõi quá trình hoạt động của một chương trình vi điều khiển. Mỗi một thanh ghi, thậm chí là mỗi bit của mỗi thanh ghi, đều được đặt tên, được định địa chỉ trong vùng của RAM và được xác định mục đích một cách rõ ràng (ví dụ: điều khiển định thời, ngắt, truyền thông nối tiếp…).

A Register (Accumulator)

Đây là thanh ghi đa chức năng được sử dụng cho việc lưu trữ các kết quả trung gian trong quá trình thực thi. Một số nên được lưu vào trong A trước khi thực thi lệnh kế tiếp. Một khi một phép toán nào đó được thực hiện bởi ALU, kết quả được gắn vào trong thanh ghi A. Nếu dữ liệu được truyền đến một thanh ghi khác thì nó cũng phải được truyền thông qua thanh ghi này. Vì có nhiều mục đích thông dụng như vậy, nên đây là thanh ghi được sử dụng phổ biến mà vi điều khiển không thể không có nó.

                                                                                                         

B Register

Thanh ghi B được sử dụng trong việc nhân, chia các toán hạng. Các toán hạng có thể được lưu trữ ở thanh ghi A hoặc B. Tất cả các lệnh khác của chương trình đều có thể sử dụng thanh ghi này giống như thanh ghi A.

Trong suốt chương trình, mỗi thanh ghi được gọi thông qua tên của nó, chính vì vậy địa chỉ chính xác của các thanh ghi không quan trọng đối với người sử dụng.

R Registers (R0-R7)

Đây là một tên thông dụng cho tổng cộng 8 thanh ghi đa chức năng (R0, R1, R2…R7). Tương tự như accumulator, chúng được sử dụng cho việc lưu trữ dữ liệu tạm thời cho các biến hoặc các kết quả trung gian.

Ví dụ sau đây sẽ minh họa một cách rõ ràng chức năng của các thanh ghi này. Giả sử các toán hạng đã được lưu trữ ở các thanh ghi R sẽ được thực thi như sau: (R1+R2) – (R3+R4). Rõ ràng là các thanh ghi dùng để lưu các kết quả tạm thời sẽ cần tới. Chương tr�

 

Chương IV: HOẠT ĐỘNG NGẮT. 2. Tổ Chức Ngắt Của 8051.

2.  . Tổ chức ngắt của 8051

Có 5 nguyên nhân tạo ra ngắt (gọi tắt là nguyên nhân ngắt) đối với 8051: hai ngắt do bên ngoài, hai ngắt do bộ định thời và một ngắt do port nối tiếp. Song cũng có nhiều tài liệu kỹ thuật nói rằng có 6 ngắt, nguyên nhân là do họ tính cả lệnh RESET, khi ta thiết lập trạng thái ban đầu cho hệ thống (gọi tắt là reset hệ thống), tất cả các ngắt đều bị vô hiệu hóa (cấm) và sau đó chúng được cho phép riêng rẽ bằng phần mềm.

Khi xảy ra hai hay nhiều ngắt đồng thời hoặc xảy ra một ngắt trong khi một ngắt khác đang được phục vụ, ta có 2 sơ đồ xử lý các ngắt: sơ đồ chỗi vòng và sơ đồ hai mức ưu tiên. Sơ đồ chuổi vòng là sơ đồ cố định, còn sơ đồ ưu tiên ngắt được lập trình bởi người sử dụng.

Ta sẽ khảo sát cách thức cho phép và không cho phép ngắt sau đây.

2.1      Cho phép và không cho phép ngắt

Khi Reset 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 nếu chúng được kích hoạt. Các ngắt phải được cho phép bằng phần mềm để bộ vi điều khiển có thể đáp ứng được. Có một thanh ghi được gọi là cho phép ngắt (Interrupt Enable) chịu trách nhiệm về việc cho phép (không che) và cấm (che) các ngắt.

IE Register (Interrupt Enable)

EA – bit enable hoặc disable tất cả các interrupt.

                  EA=0 thì không ngắt nào được nhận.

                  EA=1 thì từng nguồn ngắt sẽ được mở hoặc cấm bằng cách bật hoặc xóa bit cho phép tương ứng.

ES – bit enable hoặc disable ngắt cổng nối tiếp.

                  ES=0 thì không cho phép ngắt nối tiếp.

                  ES=1 cho phép ngắt nối tiếp.

ET1 – bit enable hoặc disable ngắt tràn của của Timer1.

                  ET1=0 Timer1 không ảnh hưởng đến ngắt.

                  ET1=1 Timer1 kích hoạt ngắt.

EXT1 – cho phép hoặc cấm ngắt ngoài của Timer1.

                  EXT1=0 thì sự thay đổi trạng thái của cổng INT0 không ảnh hưởng đến việc ngắt.

                  EXT1=1 enable ngắt ngoại ngay tại thời điểm INT0 thay đổi trạng thái.

ET0 – bit enable hoặc disable ngắt tràn của Timer0.

                  ET0=0 Timer0 không ảnh hưởng đến ngắt.

                  ET0=1 Timer0 kích hoạt ngắt.

EX0 – bit enable hoặc disable ngắt ngòai của Timer0.

                  EX0=0 thì sự thay đổi trạng thái của INT1 không ảnh hưởng đến việc ngắt.

                                EX0=1 enable ngắt ngoại ngay tại thời điểm INT1 thay đổi trạng thái.

2.2      Các bước thực hiện khi cho phép một ngắt

Để cho phép một ngắt, trình tự thực hiện các bước sau:

1.  Bit7 của thanh ghi IE là EA phải bật lên cao cho phép các bit còn lại của thanh ghi có hiệu lực

2.      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 ngắt này trong IE có mức cao. Nếu IE=0 thì không có ngắt nào được đáp ứng, cho dù bit tương ứng trong IE có giá trị cao.

Ví dụ:

a.      Lệnh cho phép ngắt nối tiếp, ngắt Timer0 và ngắt phần cứng ngòai 1 (EXT1)

MOV IE,#100101110B ;

Vì IE là thanh ghi định đỉa chỉ bit, nên có thể sử dụng các lệnh sau đây để truy cập đến các bit riêng rẽ của thanh ghi:

SETB   IE.7                 ;EA=7 cho phep moi ngat

SETB   IE.4                 ; cho phep ngat noi tiep

SETB   IE.1                 ; cho phep ngat timer 1

SETB   IE.2                 ; cho phep ngat phan cung ngoai

Tất cả các lệnh này tương đượng với lệnh “MOV IE,#10010110B” trên.

b.      Lệnh cấm (che) ngắt Timer0:         CLR        IE.1

2.3      Ưu tiên ngắt

Mỗi một nguyên nhân ngắt được lập trình riêng để có một trong hai mức ưu tiên thông qua thanh ghi chức năng đặc biệt được định địa chỉ bit, thanh ghi ưu tiên ngắt IP (interrupt priority), thanh ghi này có địa chỉ byte là 0B8H như mô tả dưới đây.

IP Register (Interrupt Priority) – 0: mức thấp, 1: mức cao.

PS   – ưu tiên cho ngắt port nối tiếp.

PT1 – ưu tiên cho ngắt bộ định thời 1. 

PX1 – ưu tiên cho ngắt ngòai 1. 

PT0 – ưu tiên cho ngắt do bộ định thời 0.

PX0 – ưu tiên cho ngắt ngoài  0.

Khi hệ thống được thiết lập lại trạng thái ban đầu, thanh ghi IP sẽ mặc định đặt tất cả các ngắt ở mức ưu tiên thấp. Ý tưởng “các mức ưu tiên” cho phép một trình phục vụ ngắt được tạm thời dừng bỏi một ngắt khác nếu ngắt mới này có mức ưu tiên cao hơn mức ưu tiên của ngắt hiện đang được phục vụ. Điều này hoàn toàn hợp lý đối với 8051 vì ta chỉ có 2 mức ưu tiên. Nếu có ngắt với mức ưu tiên cao xuất hiện,  trình phục vụ ngắt cho ngắt có mức ưu tiên thấp phải tạm dừng (nghĩa là bị ngắt). Ta không thể tạm dừng một chương trình phục vụ ngắt có mức ưu tiên  cao.

Chương trình chính do được thực thi ở mức nền và không được kết hợp với một ngắt nào nên luôn luôn bị ngắt cho dù các ngắt này có mức ưu tiên thấp hay cao. Nếu có 2 ngắt với mức ưu tiên ngắt khác nhau xuất hiện đồng thời, ngắt có ưu tiên cao sẽ được phục vụ trước.

Nếu có 2 ngắt có cùng mức ưu tiên xuất hiện đồng thời, chuỗi vòng cố định sẽ xác định ngắt nào được phục vụ trước. Chuỗi vòng này sẽ là: ngắt ngoài 0, ngắt do bộ định thời 0, ngắt ngoài 1, ngắt do bộ định thời 1, ngắt do port nối tiếp, ngắt do bộ định thời 2.

2.4      Xử lý ngắt

Khi có một ngắt chương trình xuất hiện và được CPU chấp nhận, chương trình chính bị ngắt. Các thao tác sau đây xảy ra:

-         Hoàn tất việc thực thi lệnh hiện hành.

-         Bộ đếm chươn trình PC được cất vào stack.

-         Trạng thái của ngắt hiện hành được lưu giữ lại.

-         Các ngắt được chận lại ở mức ngắt.

-         Bộ đếm chương trình PC được nạp địa chỉ vector của trình phục vụ ngắt ISR.

-         ISR được thực thi.

ISR được thực thi để đáp ứng công việc của ngắt. Việc thực thi ISR kết thúc khi gặp lệnh RET1 (trở về từ một trình phục vụ ngắt). Lệnh này lấy lại giá trị cũ của bộ đếm chương trình PC từ stack và phục hồi trạng thái của ngắt cũ. Việc thực thi chương trình chính được tiếp tục ở nơi bị tạm ngưng.

2.5      Vecto ngắt

Khi một ngắt được chấp nhận, giá trị được nạp cho bộ đếm chương trình được gọi là vector ngắt. Vector ngắt là địa chỉ bắt đầu của trình phục vụ ngắt của nguyên nhân ngắt tương ứng. Các vector ngắt được cho ở bảng  sau.

Ngắt do

Cờ

Địa chỉ vector

Reset hệ thống

RST

0000H

Ngắt ngoài 0

IE0

0003H

Bộ định thời 0

TF0

000BH

Ngắt ngoài 1

IE1

0013H

Bộ định thời 1

TF1

001BH

Port nối tiếp

RI hoặc T1

0023H

Bộ định thời 2

TF2 hoặc EXF2

002BH

Vecto reset hệ thống (RST ở địa chỉ 0000H) được chứa trong bảng này vì vậy cũng được xem như là 1 ngắt: chương trình chính bị ngắt và bộ đếm chương trình PC được nạp giá trị mới.

Khi một trình phục vụ ngắt được trỏ tới, cờ gây ra ngắt sẽ tự động bị xóa về 0 bởi phần cứng. Các ngoại lệ bao gồm các cờ RI và TI đối với các ngắt do port nối tiếp; TF2 và EXF2 đối với các ngắt do bộ định thời 2. Các nguyên nhân ngắt thuộc 2 ngoại lệ vừa nêu trên do có 2 khả năng tạo ra ngắt nên trong thực tế CPU không xóa cờ ngắt.

Lập Trình 8051

Chương IV: HOẠT ĐỘNG NGẮT. 3. Các Ngắt Do PORT Nối Tiếp.

3.         Các ngắt do PORT nối tiếp

Các ngắt do port nối tiếp xuất hiện khi cờ ngắt phát TI hoặc cờ ngắt thu RI được set bằng 1. Một số ngắt xuất hiện khi việc phát một ký tự đã ghi vào SBUF hoàn tất. Một ngắt thu xuất hiện khi một ký tự được thu nhận đầy đủ và đang ở trogn SBUF để chờ được đọc. Như vậy ngắt phát xảy ra khi bộ đệm phát SBUF rỗng còn ngắt thu xảy ra khi bộ đệm thu SBUF đầy.

Các ngắt do port nối tiếp có khác với các ngắt do bộ định thời. Cờ gây ra ngắt ở port nối tiếp không được xóa bởi phần cứng khi CPU trỏ tới trình phục vụ ngắt. Lý do là vì ở đây ta có 2 nguyên nhân tạo ra ngắt ở port nối tiếp, cụ thể là 2 ngắt tạo ra bởi 2 cờ TI và RI (cờ ngắt phát và cờ  ngắt thu). Nguyên nhân ngắt phải được xác định trong tình phục vụ ngắt và cờ tạo ra ngắt được xóa bởi phần mềm. Cần nhắc lại với các ngắt do bộ định thời, cờ tạo ra ngắt được xóa bởi phần cứng khi CPU trỏ tới trình phục vụ ngắt.

3.1      Cờ RI, cờ TI và ngắt

Cờ ngắt phát T1 được bật lên 1 khi bit cuối cùng của khung dữ liệu bit Stop được phát đi báo rằng thanh ghi SBUF sẵn sàng phát byte kế tiếp. Trái lại, cờ ngắt thu RI được bật lên 1 khi toàn bộ khung dữ liệu kể cả bit Stop đã được nhận. Nói cách khác, khi thanh ghi SBUF đang lưu một byte, thì cờ RI bật lên báo rằng byte dữ liệu thu được cần cất đi vào nơi an toàn trước khi bị mất (bị ghi đè) bởi dữ liệu tiếp theo sẽ được nhận. Cần nhấn mạnh rằng, đói với truyền thông nối tiếp thì tất cả các bước thực hiện trên đây đều được áp dụng cho cả phương pháp thăm dò lẫn phương pháp ngắt. Sự khác nhau duy nhất giữa hai phương pháp này là ở cách phục vụ quá trình truyền thông nối tiếp. Đối với phương pháp thăm dò, chúng ta phải đợi cho cờ (TI hay RI) được bật lên và trong lúc chờ đợi thì bộ vi điều khiển không thể làm việc khác. Còn đối với phương pháp ngắt, thì mỗi khi 8051 vừa nhận được 1 byte hoặc đã sẵn sàng để gửi byte tiếp theo thì đều được thông báo, do vậy chúng ta có thể làm được các công việc khác nhau trogn thời gian chờ truyền thông nối tiếp phục vụ.

Ở 8051 chỉ có một ngắt dành riêng cho truyền thông nối tiếp, ngắt này được dùng cho cả ngắt và thu dữ liệu. Nếu bit ngắt trong thanh ghi IE (là bit IE4) được phép khi RI và TI bật lên, thì 8051 nhanạ được ngắt này và nhảy đến địa chỉ trình phục vụ ngắt dành cho truyền thông nối tiếp 0023H trong bảng vector ngắt và thực hiện nó.Lúc đó, chúng ta cần kiểm tra cờ TI và RI để xem cờ nào gây ngắt để có đáp ứng phù hợp.

3.2      Sử dụng cổng com ở 8051

Ở phần lớn các ứng dụng, ngắt nối tiếp chủ yếu được dùng để nhận dữ liệu và không dùng để phát dữ liệu. Vấn đề này cũng tương tự như chuông báo nhận điện thoại. Để báo có cuộc gọi đến, điện thoại đổ chuông, còn để gọi điện thoại thì có nhiều cách khác chứ không cần đến đổ chuông. Tuy nhiên, khi điên thoại đã đổ chuông thì dù bạn đang bận hay rỗi đều phải nhấc máy ngay nếu không sẽ mất cuộc gọi, tương tự như vậy, ngắt nối tiếp được sử dụng để nhận dữ liệu.

   Thí dụ:

                   Hãy viết chương trình, trong đó 8051 đọc dữ liệu từ cổng P1 và ghi liên tục lên cổng P2 đồng thời đưa một bản sao dữ liệu tới cổng COM nối tiếp để thực hiện truyền nối tiếp. Giả thiết tần số XTAL là 11.0592MHz và tốc độ truyền là 9600 baud.

Giải:

                   ORG       0

                   LJMP     MAIN

                   ORG       23h

                   LJMP     SERIAL                 ;nhảy đến ISR nối tiếp

MAIN:      MOV      P1, #0FFH                             ;lấy cổng P1 làm cổng đầu vào

                   MOV      TMOD,#20H                        ; timer 1, chế độ 2 tự nạp lại;

                   MOV      TH1,#0FDH                         ; chọn tốc độ baud = 9600

                   MOV      SCON, #50H                        ; khung 8 bit, 1 stop, cho phép REN

                   MOV      IE,#10010000B   ; cho phép ngắt nối tiếp

                   SETB     TR1                                        ; khởi động timer 1

BACK:      MOV      A, P1                                      ; đọc dữ liệu từ cổng P1

                   MOV      SBUF,A                 ; lấy một bản sao tới SBUF

                   MOV      P2,A                                       ; gởi nó đến cổng P2

                   SJMP      BACK                                    ; ở lại trong vòng lặp

   ;----trình phục vụ ngắt cổng nối tiếp

                    ORG       100H

SERIAL:               JB           TI, TRANS                            ; nhảy nếu cờ TI cao

                                MOV      A,SBUF                 ; nếu khôgn thì nhận dữ liệu

                                CLR       RI                                           ; xóa cờ RI

                                RETI                                                      ;trở về chương trình chính

TRANS:CLR       TI                                            ;xóa cờ TI

                                RETI                                                      ;trở về chương trình chính

                                END

3.3  Xóa cờ RI và TI trước khi thực hiện lệnh REPI

Có thể thấy ở thí dụ trên, trước lệnh trở về chương trình RETI của ISP là các lệnh xóa cờ  RI và TI. Việc xóa cờ là không thể thiếu, bởi vì ngắt dùng để 8051 thu và phát không biết được nguồn gây ra ngắt. Do vậy, trình phục vụ ngắt phải xóa các cờ này để cho phép ngắt tiếp theo được đáp ứng sau khi kết thúc ngắt. Đây là điểm khác với ngắt ngoài và ngắt bộ định thời, ở đó 8051 đề thực hiện việc xóa các cờ. Xóa cờ ngắt bằng phần mềm thực hiện nhờ lệnh “CLR TI” và “CLR RI”. Xem ví dụ sau đây và để ý đến lệnh xóa cờ ngắt trước lệnh RETI.

Ví dụ:

                Hãy viết chương trình sử dụng các ngắt để thực hiện các công việc sau:

a.       Thu dữ liệu nối tiếp và gởi đến cổng P0.

b.      Từ cổng P1 đọc và truyền nối tiếp và sao vào cổng P2

c.       Sử dụng Timer0 tạo sóng vuông tần số 5kHz trên chân P1.0

Giả thiết tần số ngắt XTAL = 11.0592 MHz và tốc độ baud 4800.

                Giải:

                                ORG       0

                                LJMP     MAIN

                                ORG       000BH

                                CPL        P0.1

                                RETI

                                ORG       23H

                                LJMP     SERIAL

                                ORG       30H       

MAIN:                   MOV      P1,#0FFH

                                MOV      TMOD,#22H

                                MOV      TH1,#0F6H

                                MOV      SCON,#50H

                                MOV      TH0,#-92

                                MOV      IE, #10010010B

                                SETB     TR1

                                SETB     TR0

BACK:   MOV      A,P1

                                MOV      SBUF,A

                                MOV      P2,A

                                MOV      BACK

;-----TRINH PHUC VU NGAT CONG NOI TIEP

                                ORG       100H

SERIAL:               JE            TI,TRANS

                                MOV      A,SBUF

                                MOV      P0,A

                                CLR       RI

                                RETI

TRANS:     CLRTI

                                RETI

                                END

Chương IV: HOẠT ĐỘNG NGẮT. 4. Các Ngắt Ngoài.

4.         Các ngắt ngoài

Ngắt ngoài xả ra khi có mức thấp hoặc có cạnh âm trên chân INT0 hoặc INT1 của 8051. Đây là các chân đa hợp với 2 chân P3.2 và P3.3 của port 3.

Thực tế nhờ các cờ tạo ra các ngắt này là các bit IE0 và IE1 của thanh ghi TCON. Khi một ngắt ngoài được tạo ra, cờ tạo ra ngắt được xóa bỏi phần cứng khi CPU trỏ đến trình phục vụ ngắt chỉ nếu ngắt thuộc loại tác động cạnh. Nếu ngắt thuộc loại tác động mức, nguyên nhân ngắt ngoài sẽ điều khiển mức của cờ thay vì là phần cứng trên chip.

Việc chọn các ngắt loại tác động cạnh hay các ngắt loại tác động mức được lập trình thông qua các bit IT0 và IT1 của thanh ghi TCON. Lấy ví dụ nếu IT1=0, ngắt ngoài 1 được kích khởi cạnh, ở chế độ này nếu các mẫu liên tiếp ở chân INT1 cho thấy chân này ở mức cao trong một chu kỳ và ở mức thấp trong chu kỳ kế, cờ ngắt IE1 trong thanh ghi TCON được set bằng 1; kế đến IE1 yêu cầu một ngắt.

Vì các chân ngắt ngoài được lấy mẫu một lần ở mỗi một chu kỳ máy, các ngõ vào này phải được duy trì tối thiểu 12 chu kỳ dao động để bảo đảm việc lấy mẫu là đúng. Nếu ngắt ngoài thuộc loại tác động cạnh, nguyên nhân ngắt ngoài phải được duy trì tại chân yêu cầu ở mức cao tối thiểu một chu kỳ và sau đó ở mức thấp tối thiệt một chu kỳ nữa để đảm bảo rằng sự chuyển trạng thái được phát hiện. IE0 và IE1 tự động được xóa khi CPU trỏ tới trình phục vụ ngắt tương ứng.

Nếu ngắt ngoài thuộc loại tác động mức, nguyên nhân ngắt ngoài phải được duy trì trạng thái tích cực cho đến khi ngắt theo yêu cầu thực sự được tạo ra. Sau đó nguyên nhân ngắt phải ở trạng thái thụ động trước khi trình phục vụ ngắt được thực thi xong hoặc trước khi có một ngắt khác được tạo ra.

Thông thường, một công việc được thực thi bên trong trình phục vụ ngắt làm cho nguyên nhân ngắt trả tín hiệu yêu cầu ngắt trở về trạng thái không tích cực.

                Thí dụ phần này xem ở phần bài tập.

Chương III : PORT GIAO TIẾP NỐI TIẾP. 3. Khởi Động và Truy Xuất Thanh Ghi.

3.         Khởi động và truy xuất các thanh ghi

a)      Cho phép thu:bit cho phép thu REN được

Set lên 1.ta có thể dùng lệnh sau:

                                                 SETB             REN      hoặc

                                                 MOVE           SCON,#xxx1xxxxB

b)      Bit dữ liệu thứ 9: khi phát bit nay phải được nạp cho bit TB8, khi thu, thì nạp cho RB8.

c)      Thêm vào bit chẳn lẻ:

Thông thường, bit 9 được lấy làm bit chẳng lẻ. Bit ptrong từ trạng thái  PSW được set hoặc xóa để thiết lập kiểm tra chẳn lẻ. 

Để đưa 8bit dữ liệu cùng với bit thứ 9 để kiểm tra chẳn  ta dùng lệnh sau:

                                                     MOV     C,P                ;đưa bit kiểm tra chẳn vàoTB8

                                                     MOV     TB8,C           ;bit này thành bit 9

                                                     MOV     SBUF,A        ;chuyển 8bit dử liệu từ Acc đến  SBUF

Với kiểm tra lẻ ta thêm một dòng lệnh:

                                                    MOV     C,P

                                                    CPL       C                 ;biến đổi thành kiểm tra lẻ

                                                    MOV     TB8,C

                                                    MOV     SBUF,A 

Đối với chế độ 1, 8bit dử liệu,việc kiểm tra chẳn lẻ ta dùng các dòng lệnh sau:

                                                    CLR     ACC.7          ;xóa bit ACC.7

                                                    MOV    C,P

                                                     MOV    ACC.7,C      ;bit  ACC.7 là bit kiểm tra

                                                    MOV SBUF,A

Trang:   Đầu  Trước  Tiếp  Cuối.

Lượt xem 511

Lập Trình 8051
Chương IV: HOẠT ĐỘNG NGẮT. 4. Các Ngắt Ngoài.
Chương IV: HOẠT ĐỘNG NGẮT. 3. Các Ngắt Do PORT Nối Tiếp.
Chương IV: HOẠT ĐỘNG NGẮT. 2. Tổ Chức Ngắt Của 8051.

Chương IV: HOẠT ĐỘNG NGẮT. 1. Mở Đầu.
Chương III : PORT GIAO TIẾP NỐI TIẾP. 4. Truyền Thông Đa Xử Lý.
Chương III : PORT GIAO TIẾP NỐI TIẾP. 2. Các Chế Độ Hoạt Động.
Chương III : PORT GIAO TIẾP NỐI TIẾP. 1. Các Thanh Ghi Điều Khiển.
Chương II: ĐỊNH THÌ. 2. Timer SFRs.

Chương III : PORT GIAO TIẾP NỐI TIẾP. 4. Truyền Thông Đa Xử Lý.

4.         Truyền thông đa xử lí

Truyền thông đa xử lí là một môi trường mạng sử dụng nhiều 8051 được sắp xếp theo mô hình chủ tớ,sử dụng chế độ 2 và 3 của port nối tiếp.

Khi bộ xử lí chủ muốn truyền dữ liệu đến một bộ xử lí tớ, nó sẽ gửi đi một byte xác định địa chỉ bộ xử lí tớ,byte địa chỉ có bit thứ 9 bằng 0. Các bộ xử lí khác bị ngắt.Bộ xử lí được định địa chỉ sẽ set bit  SM2 và bắt đầu nhận dữ liệu.

Bit SM2 không ảnh hưởng đến chế độ 0, và trong chế độ 1 bit này có thể được dùng để kiểm tra tính hợp lệ của bit stop. Khi SM2 bằng 1, ngắt thu sẽ không được tích cực trừ khi bit stop la hợp lệ.

Bạn đang đọc truyện trên: Truyen247.Pro