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