Giáo trình Vi điều khiển: Phần 2 có kết cấu gồm 7 bài học. Nội dung phần này trình bày về bộ định thời, cổng nối tiếp, ngắt (Interrupt), phần mềm hợp ngữ. Giáo trình dành cho sinh viên trường nghề và những ai quan tâm đến vấn đề trên.
Trang 1Mỗi bộ Timer có 4 chế độ hoạt động khác nhau và được dùng để:
- Đếm sự kiện tại các chân T0 (chân 14) hay T1 (chân 15)
- Chờ một khoảng thời gian
- Tạo tốc độ cho port nối tiếp
Quá trình điều khiển hoạt động của Timer / Counter được thực hiện thông qua các thanh ghi sau:
Bảng 4.1 : Các thanh ghi điều khiển hoạt động timer Thanh ghi Địa chỉ byte Địa chỉ bit
Hoạt động cơ bản của Timer / Counter gồm có các thanh ghi timer THx
và TLx (x = 0, 1) mắc liên tầng tạo thành dạng thanh ghi 16 bit Khi set bit TRx trong thanh ghi TCON, timer tương ứng sẽ hoạt động và giá trị trong thanh ghi TLx tăng lên 1 sau mỗi xung đếm Khi TLx tràn (thay đổi từ 255 đến 0), giá trị của THx tăng lên 1 Khi THx tràn, cờ tràn tương ứng TFx (trong thanh ghi TCON) sẽ được đưa lên mức 1
Tuỳ theo nội dung của bit C/T xung đếm có thể lấy từ dao động nội (C/T
= 0) hay từ các chân Tx bên ngoài (C/T = 1) Lưu ý rằng phải xoá bit TRx khi thay đổi chế độ hoạt động của Timer
Khi xung đếm lấy từ dao động nội, tốc độ đếm = fOSC/12 hay fOSC/2 trong chế độ X2(nghĩa là nếu fOSC = 12 MHz thì tốc độ xung đếm là 1 MHz hay cứ 1
Trang 2µs thì có 1 xung đếm trong chế dộ chuẩn) hay tốc độ đếm = fPER/6 (fPER: tần số xung ngoại vi – peripheral clock)
Khi lấy xung đếm từ bên ngoài (các chân Tx), bộ đếm sẽ tăng lên 1 khi ngõ vào Tx ở mức 1 trong 1 chu kỳ và xuống mức 0 trong chu kỳ kế tiếp Do đó, tần số xung tối đa tại các chân Tx là fOSC/24 trong chế độ thường hay
fOSC/12 trong chế độ X2 (=fPER/12)
2 Thanh ghi SFR của timer
2.1 Thanh ghi chế độ 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 bít gồm có 4 bít thấp được thiết lập dành cho bộ Timer 0 và 4 bít cao dành cho Timer 1 Trong đó hai bít thấp của chúng dùng để thiết lập chế độ của bộ định thời, còn 2 bít cao dùng để xác định phép toán
Trang 3 Bit C/T ( Counter / Timer):
Bít 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
+ C/T = 1: Đếm xung từ bên ngoài
+ C/T = 0 : Đếm xung nội bên trong
Nguồn đồng hồ cho chế độ trễ thời gian là tần số thạch anh của 8051
Bit cổng GATE :
Một bít khác của thanh ghi TMOD là bít cổng GATE Để ý trên thanh ghi TMOD ta thấy cả hai bộ định thời Timer 0 và Timer 1 đều có bít GATE Mỗi bộ định thời thực hiện điểm khởi động và dừng Một số bộ định thời hực hiện điều này bằng phần mềm, một số khác bằng phần cứng và một số khác vừa bằng phần cứng vừa bằng phần mềm Các bộ định thời trên 8051 có cả hai Việc khởi động và dừng bộ định thời được khởi động bằng phần mềm bởi các bít khởi động bộ định thời TR là TR0 và TR1
2.2 Thanh ghi điều khiển TCON
MSB LSB
Bảng 4.2 :Hoạt động từng bit của thanh ghi TCON
Bit Ký hiệu Địa chỉ Chức năng
7 TF1 8FH Cờ tràn Time 1: TF1=1 khi timer 1 bị tràn và có
thể xóa bằng phần mềm hoặc khi vi điều khiển thực hiện chương trình con phục vụ ngắt timer 1 thì tự động xóa luôn cờ tràn TF1
Trang 46 TR1 8EH Bit điều khiển timer 1 đếm/ ngừng đếm:
TR1=1 thì timer 1 được phép đếm xung
TR1=0 thì timer 1 ngừng đếm xung
5 TF0 8DH Cờ tràn timer 0( hoạt động tương tự TF1)
4 TR0 8CH Bit điều khiển timer 0
3 IE1 8BH Cờ báo ngắt của ngắt INT1 Khi có ngắt xảy ra ở
ngõ vào INT1 ( cạnh xuống) thì cờ IE1 tác động lên mức 1
Khi vi điều khiển thực hiện chương trình con phục vụ ngắt INT1 thì tự động xóa luôn cờ báo ngắt IE1
2 IT1 8AH Bit điều khiển cho phép ngắt INT1 tác động bằng
mức hay bằng cạnh:
IT1=0 thì ngắt INT1 tác động bằng mức
IT1=1 thì ngắt INT1 tác động bằng cạnh xuống
1 IE0 89H Giống như IE1 nhưng phục vụ cho ngắt INT0
0 IT0 88H Giống như IT1 nhưng phục vụ cho ngắt INT0
Ví dụ:
Tìm giá trị của TMOD nếu muốn lập trình bộ Timer 1 ở chế độ 1 và
sử dụng thạch anh XTLA 8051 làm nguồn đồng hồ và sử dụng lệnh để khởi động và dừng bộ định thời
TMOD = 00010000
Chế độ 1 và chế độ 2 là hai chế độ được sử dụng khá phổ biến, vì vậy chúng ta sẽ nghiên cứu kỹ hơn
3 Các chế độ làm việc
8051 có 2 timer là timer 0 và timer 1 Ta dùng ký hiệu TLx và THx để chỉ
2 thanh ghi byte cao va byte thấp của timer 0 hoặc timer 1 Như đã trình bày ở trên các timer có 4 chế độ hoạt động, sau đây là chi tiết các kiểu hoạt động của timer :
Trang 53.1 Chế độ time 13 bit (Mode 0)
Chế độ 0 là chế độ 13 bit bao gồm 8 bit của thanh ghi THx và 5 bit của
thanh ghi TLx còn 3 bit cao của thanh ghi TLx không sử dụng Mỗi lần có xung đếm, giá trị trong thanh ghi 13 bit tăng lên 1 Khi giá trị này thay đổi từ 1 1111
1111 1111b đến 0 thì bộ đếm tràn làm cho TFx được đặt lên mức 1
Do chế độ 0 sử dụng 13 bit nên giá trị đếm tối đa là 213 = 8192 Chế độ này được cung cấp nhằm mục đích tạo khả năng tương thích với 8048 và thường không được sử dụng hiện nay
Hình 4.1: Timer chế độ 13 bit
3.2 Chế độ time 16 bit (Mode 1)
Dưới đây là những đặc trưng và những phép toán của Model 1
- Đó là bộ định thời 16 bit, do vậy các giá trị từ 0000 – FFFFH được nạp vào thanh ghi TL và TH của bộ định thời
- Sau đó bộ định thời được khởi động nhờ lệnh “SETB TR0” cho Timer
0 và “SETB TR1” cho Timer 1
- Sau khi được khởi động thì bộ định thời bắt đầu đếm tăng Bộ định thời đếm lên cho đến khi đạt giới hạn FFFFH Khi đó nó sẽ quay vòng từ FFFFH về 0
và bật cờ định thời TF (Timer Flag) lên mức cao
- Bộ định thời sau khi đạt giá trị giới hạn thì thực hiện quay vòng về 0 Để lặp lại quá trình đếm thì các thanh ghi TH và TL phải được nạp lại giá trị ban đầu
và cờ TF cần được xoá về 0
Trang 6Hình 4.2: Chế độ timer 16 bit Các bước lập trình chế độ 1:
Để tạo ra bộ trễ thời gian khi dùng chế độ 1 của bộ định thời thì cần phải thực hiện các bước dưới đây:
- Bước 1: Nạp giá trị cho thanh ghi TMOD xác định bộ định thời nào (Timer O hay Timer 1) và chế độ nào được chọn
- Bước 2: Nạp giá trị đếm ban đầu cho các thanh ghi TL và TH
- Bước 3: Khởi động bộ định thời
- Bước 4: Kiểm tra trạng thái bật của cờ bộ định thời Thoát khỏi vòng lặp khi TF được bật lên
- Bước 5: Dừng bộ định thời
- Bước 6: Xoá cờ TF cho vòng kế tiếp
- Bước 7: Quay trở lại bước 2 để nạp lại giá trị cho TL và TH.Để tính toán thời gian trễ chính xác (với XTAL cụ thể) ta có thể sử dụng một trong hai cách tính
Tính theo số hexa Tính theo số thập phân
Ví dụ 1: Viết chương trình tạo ra xung vuông độ dày 50% trên chân
P0.1 sử dụng bộ định thời Timer 0 để tạo trễ
MOV TMOD,#01H ;su dung Timer 0 che do 1
Trang 7HERE: MOV TL0,#0F2H ;TL0 = F2H, byte thap
MOV TH0,#0FFH ;TH0 = FFH, byte cao
ACALL DELAY ;tao tre
;************* Tao tre dung Timer 0
DELAY: SETB TR0 ;khoi dong bo dinh thoi Timer 0 AGAIN: JNB TF0,AGAIN ;kiem tra cờ bộ định thời
- Chu kỳ sóng vuông là: T = 1/f = 1/2KHz = O, 5ms = 5OO s
- Khoảng thời gian cao (hoặc thấp) là: O, 5T = O, 5.5OO = 25O s
- Số nhịp đếm cần trong khoảng thời gian đó là: 25O/1, O85 = 23O nhịp
- Giá trị cần nạp vào thanh ghi TH và TL là: 65536 – 23O = 653O6 = FF1AH
Chương trình được viết như sau:
Trang 8CLR TF0 ;xoa co Timer 0 MOV TMOD,#01H ;su dung Timer 0 che do 1 AGAIN: MOV TL0,#1AH ;TL0 = 1AH, byte thap
MOV TH0,#0FFH ;TH0 = FFH, byte cao
SETB TR0 ;khoi dong bo dinh
;thoi Timer 0 BACK: JNB TF0,BACK
3.3 Chế độ tự nạp lại 8 bit ( Mode 2)
Chế độ 2 là chế độ 8 bit trong đó sử dụng thanh ghi TLx đế chứa giá trị đếm còn thanh ghi THx chứa giá trị nạp lại (do đó chế độ này được gọi là chế độ
tự động nạp lại – autoreload)
Trong chế độ 2, mỗi khi giá trị trong thanh ghi TLx thay đổi từ 1111 1111b đến 0 thì cờ TFx được set lên mức 1 đồng thời giá trị trong thanh ghi THx được chuyển vào thanh ghi TLx Như vậy, giá trị đếm trong TLx và THx chỉ được nạp một lần khi khởi động timer (có thể không cần nạp cho TLx nhưng khi đó chu kỳ hoạt động đầu tiên của timer sẽ sai) Chế độ 2 sử dụng 8 bit đếm trong thanh ghi TLx nên giá trị đếm tối đa là 28 = 256
Hình 4.3: Chế độ tự nạp lại 8 bit
3.4 Chế độ tách biệt time ( Mode 3)
Ở chế độ này chức năng Timer 0 và chức năng Timer 1 khác nhau Bộ Timer 1 ở chế độ 3 chỉ chứa chức năng đếm của nó, kết quả giống khi đặt TR1 =
0 Bộ Timer 0 ở chế độ 3 thiết lập TH0, TL0 như là 2 bộ đếm riêng biệt Mạch
Trang 9logic đối với chế độ 3 của Timer 0 thể hiện ở hình 2.7 Bộ đếm TL0 được điều khiển bởi các bit: C/(/T), GATE, TR0, /INTO và khi đếm tràn nó thiết lập cờ ngắt TF0 Bộ đếm TH0 chỉ được điều khiển bởi bit TR1 và khi đếm tràn nó thiết lập cờ ngắt TF1 Vậy TH0 điều khiển ngắt Timer/Counter 1
Chế độ 3 thường được dùng khi yêu cầu cần có bộ thời gian hoặc bộ đếm ngoài 8 bit Đối với Timer 0 ở chế độ 3, AT89C51 có thể có 3 bộ Timer/Counter còn 8052 có thể có 4 bộ Khi Timer 0 hoạt động ở chế độ 3 thì Timer 1 có thể được bật hoặc tắt bằng chuyển mạch ngoài Ở chế độ này Timer1 có thể được sử dụng bởi cổng nối tiếp như một bộ tạo tốc độ Baud hoặc trong bất kỳ ứng dụng nào mà không yêu cầu một ngắt
Hình 4.4: Chế độ tách biệt timer
4 Nguồn cung cấp xung cho time
Có thể sử dụng hai nguồn tạo xung nhịp cung cấp cho các timer Chúng được chọn bằng cách ghi vào bit C/T ( count/timer) trong TMOD Một nguồn tạo xung nhịp dùng cho định khoảng thời gian, cái khác cho đếm sự kiện
4.1 Chức năng định thời
Nếu C/T = 0 hoạt động timer liên tục được chọn và timer được dùng cho việc định khoảng thời gian Lúc đó timer lấy xung nhịp từ bộ dao động trong chip Xung nhịp ngõ ra bộ tạo dao động được giảm tần số bằng bộ chia 12 trước khi cấp vào timer để thích hợp cho phần lớn các ứng dụng Như vậy với thạch anh 12 MHz, thì tốc độ xung nhịp cung cấp cho timer sẽ là 1 MHz Báo tràn timer xảy ra một số ( cố định) xung nhịp, tùy thuộc vào giá trị ban đầu được nạp vào các thanh ghi timer TLx / THx
Trang 10Nguồn xung nhịp ngoài được cung cấp bằng các chân cổng 3 Bit 4 của cổng 3 (P3.4) dùng là ngõ vào tạo xung nhịp bên ngoài cho timer 0 và được gọi
là “T0”, còn P3.5 hay “T1” là ngõ vào tạo xung nhịp cho timer 1
Trong các ứng dụng đếm, các thanh ghi timer được tăng thêm 1 tương ứng với sự chuyển trạng thái logic từ 1 xuống 0 ở ngõ vào bên ngoài (Tx) Ngõ vào bên ngoài được lấy mẫu trong S5P2 của mọi chu kỳ máy Như vậy, khi ngõ vào cao trong một chu kỳ và thấp trong một chu kỳ kế thì số đếm được tăng thêm 1 Giá trị mới xuất hiện trong các thanh ghi trong S3P1 của chu kỳ theo sau chu kỳ phát hiện sự chuyển trạng thái Do đó cần 2 chu kỳ máy ( 2µs) để ghi nhận một sự chuyển trạng thái 1 sang 0, tần số ngoài tối đa là 500 KHz ( giả sử
hệ thống hoạt động ở 12 MHz)
Hinh 4.5: Sơ đồ cung cấp xung nhịp cho timer
5 Khởi động, dừng, điều khiển timer
Phương pháp đơn giản nhất để bắt đầu ( cho chạy) và dừng các timer là dùng các bit điều khiển chạy ( TRx) trong TCON TRx bị xóa sau khi reset hệ thống, như vậy các timer theo mặc định là bị cấm ( bị dừng) sau khi reset TRx được đặt lên 1 bằng phần mềm để cho các timer chạy
Vì TRx ở trong thanh ghi TCON có địa chỉ theo bit, nên việc cho chạy và dừng timer có thể thực hiện dễ dàng trong chương trình Ví dụ :
Cho time 0 chạy bằng lệnh : SETB TR0
Dừng bằng lệnh : CLR TR0
Trình hợp dịch sẽ thực hiện việc chuyển đổi ký hiệu cần thiết từ “ TR0” sang địa chỉ bit tương ứng của nó Lệnh SETB TR0 sẽ giống như SETB 8CH Một cách khác để điều khiển các timer là dùng bit GATE trong TMOD và ngõ vào bên ngoài INTx Đặt GATE = 1 cho phép timer sẽ được điều khiển bằng INTx, cách này hữu dụng cho việc đo độ rộng xung Ví dụ để đo độ rộng xung ngõ vào INT0 có thể thực hiện như sau :
Trang 11Khởi động time 0 ở chế độ 2 ( chế độ timer 16 bit), với TL0/TH0 = 0000H, GATE = 1 và TR0 = 1 Khi INT0 xuống thấp, timer bị “ đóng cổng” và khoảng thời gian của xung tính bằng µs là số đếm được trong TL0/TH0 ( có thể lập trình INT0 để tạo ra một ngắt khi nó xuống thấp)
Hình dưới minh họa timer 1 hoạt động chế độ 1 như một timer 16 bit Sơ
đồ chỉ khả năng điều khiển việc cấp nguồn tạo xung nhịp cho timer
Hình 4.6: Sơ đồ điều khiển hoạt động của Timer 0 chế độ 1
6 Khởi tạo truy xuất thanh ghi timer
Các timer thường được khởi tạo một lần ở đầu chương trình để thiết lập chế độ hoạt động phục vụ cho các ứng dụng điều khiển liên quan đến định thời hay đếm xung ngoại Tùy thuộc vào yêu cầu cụ thể mà ta điều khiển các timer bắt đầu đếm , ngừng hay khởi động đếm lại từ đầu…
Thanh ghi TMOD là thanh ghi đầu tiên cần phải khởi tạo để thiết lập chế
độ hoạt động cho các timer Ví dụ khởi động cho timer 0 hoạt động ở chế độ 1 ( chế độ 16 bit) và hoạt động định thời đếm xung nội bên trong thì ta khởi tạo bằng lệnh :
MOV TMOD, # 000000001B
Trong lệnh này M1 = 0, M0 = 1 để vào chế độ 1 và C/T = 0, GATE = 0 để cho phép đếm xung nội bên trong đồng thời xóa các bit chế độ timer 1 Sau lệnh trên timer 0 chỉ đếm khi thiết lập bit điều khiển TR0
Nếu ta không thiết lập các giá trị bắt đầu đếm cho các thanh ghi TLx/ THx thì timer sẽ bắt đầu đếm từ 0000H lên và khi chuyển trạng thái từ FFFFH sang 0000H sẽ sinh ra tràn làm cho bit TFx = 1 rồi tiếp tục đếm từ 0000H lên tiếp…
Trang 12Nếu ta thiết lập giá trị bắt đầu đếm cho TLx/THx khác 0000H thì timer sẽ bắt đầu từ giá trị thiết lập đó lên nhưng khi chuyển trạng thái từ FFFFH sang 0000H thì timer lại đếm từ 0000H lên
Để timer luôn bắt đầu đếm từ giá trị ta gán thì ta có thể lập trình chờ sau mỗi lần tràn ta sẽ xóa cờ TFx và gán lại giá trị cho TLx/ THx để timer luôn luôn bắt đầu đếm từ giá trị cho TLx/ THx để timer luôn luôn bắt đầu đếm từ giá trị khởi gán lên
Đặc biệt nếu bộ định thời hoạt động trong phạm vi nhỏ hơn 256 µs thì ta nên dùng timer ở chế độ tự động nạp 8 bit Sau khi khởi tạo giá trị đầu cho thanh ghi THx và TLx khi set bit TRx thì timer sẽ bắt đầu đếm từ giá trị đã gán trong TLx và khi tràn từ FFH sang 00H trong TLx thì cờ tràn TFx tự động được thiết lập, đồng thời giá trị trong THx tự động nạp sang cho TLx và timer bắt đầu đếm
từ giá trị khởi gán này lên Nói cách khác sau mỗi lần tràn ta không cần gán lại cho các thanh ghi timer mà chúng vẫn đếm được lại từ giá trị đã gán
6.1 Đọc thời gian đang hoạt động
Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer khi nó đang chạy Vì phải đọc hai thanh ghi timer thì “sai pha” có thể xảy ra nếu byte thấp tràn vào byte cao giữa hai lần đọc Giá trị đọc được có thể không đúng Giải pháp là đọc byte cao trước kế đó đọc byte thấp rồi đọc byte cao lại một lần nữa Nếu byte cao đã thay đổi thì lặp lại các hoạt động đọc Các lệnh dưới đây đọc nội dung của các thanh ghi timer TL1/ TH1 vào các thanh ghi R6/ R7:
AGAIN : MOV A, TH1
MOV R6, TL1
CJNZ A, TH1, AGAIN
MOV R7, A
6.2 Thời gian ngắn và thời gian dài
Như ta đã biết từ các ví dụ trên là lượng thời gian trễ cần tạo ra phụ thuộc vào hai yếu tố:
- Tần số thạch anh XTAL
- Thanh ghi 16 bít của bộ định thời ở chế độ 1
Cả hai yếu tố này nằm ngoài khả năng điều chỉnh của lập trình viên 8051
Ví như ta đã biết giá trị lớn nhất của độ trễ thời gian có thể đạt được bằng cách đặt cả TH và TL bằng 0
Thời gian ngắn: Là khoảng thời gian mà bộ định thời có thể tạo ra nhỏ hơn giá trị tối đa của bộ định thời ở chế độ 16 bit
Thời gian dài: Là khoảng thời gian mà bộ định thời có thể tạo ra lớn hơn giá trị tối đa của bộ định thời ở chế độ 16 bit
Giả sử tần số thạch anh là 12 MHz do đó xung kích cho bộ định thời là
Trang 131 MHz.Khoảng thời gian định thời ngắn nhất không phụ thuộc tần số xung kích timer mà phụ thuộc vào phần mềm, có nghĩa là do thời gian thực hiện các lệnh, lệnh có thời gian thực hiện nhanh nhất của 8051 là một chu kỳ máy hoặc 1 μS
Ví dụ:
Viết chương trình tạo xung tuần hoàn tạI chân P1.0 với tần số cao nhất có thể được Cho biết tần số và tỉ số giữa độ rộng xung với chu kỳ
Bài làm:
Tần số cao nhất có nghĩa là chu kỳ ngắn nhất Do đó không thể dùng
bộ định thời mà chỉ dùng phần mềm Chương trình như sau:
LOOP : SETB P1.0 : 1 chu kỳ
CLR P1.0 : 1 chu kỳ
SJMP LOOP : 2 chu kỳ
Chu kỳ của xung là 4µs trong đó mức cao la 1 µs và mức thấp 3 µs
suy ra tần số 250 KHz và tỉ số độ rộng / chu kỳ là 25%
Chu kỳ tín hiệu ra có thể được kéo dài bằng cách thêm vào lệnh NOP (
No operation) vào trong vòng lặp mỗi lệnh NOP sẽ tăng lên 1 µS thêm 2 lệnh NOP sau lệnh SETB P1.0 sẽ làm xung ra có dạng hình vuông với chu kỳ là 6 µS tương đương tần số 166,7 KHz Tuy nhiên cách làm trên không hay lắm và cách tốt nhất để tạo thời gian trì hoãn là dùng bộ định thời
7 Time 2 của 8052
Timer 2 là bộ định thời 16 bit (chỉ có trong họ 8x52) Giá trị đếm của timer 2 chứa trong các thanh ghi TH2 và TL2 Giống như timer 0 và timer1, timer 2 cũng hoạt động như bộ định thời (timer) hay đếm sự kiện (counter) Chế
độ định thời đếm bằng dao động nội, chế độ đếm sự kiện đếm bằng xung ngoài tại chân T2 (P1.0) và chọn chế độ bằng bit C/ 2 của thanh ghi T2CON
Họ vi điều khiển 8052 có 3 timer T0,T1,T2 Các timer T0 và T1 có các thanh ghi và hoạt động giống như họ 8051 Ở đây chỉ trình bày thêm phần hoạt động của timer T2
Các thanh ghi điều khiển timer 2 bao gồm: T2CON, T2MOD, RCAP2H, RCAP2L, TH2 và TL2
Timer T2 của 8052 có 2 chế độ hoạt động: Chế độ tự động nạp lại, chế độ thu nhận Các bit chọn chế độ được mô tả như bảng sau :
Bảng 4.3 : Chức năng các bít chọn chế độ
Trang 14 Các thanh ghi điều khiển Timer T2
- Thanh ghi điều khiển T2CON
Bảng 4.4 : Chức năng các bit thanh ghi T2CON được mô tả trong bảng sau : Bit Ký hiệu Địa chỉ Chức năng
7 TF2 CFH Cờ tràn timer 2 : Hoạt động giống như
các timer trên ( TF2 sẽ không được thiết lập lên mức 1 nếu bit TCLK hoặc RCLK
ở mức 1)
6 EXF2 CEH Cờ ngoài của timer T2 : Chỉ được thiết
lập khi xảy ra sự thu nhận hoặc nạp dữ liệu bởi sự chuyển trạng thái từ 1 sang 0
ở ngõ vào T2EX và EXEN = 1 ; khi cho phép timer T2 ngắt, EXF2 = 1 thì CPU
sẽ thực hiện chương trình con phục vũ ngắt timer T2, bit EXF2 có thể bằng phần mềm
5 RCLK CDH Xung clock thu của timer 2 Khi RCLK =
1 thì timer T2 cung cấp tốc độ baud cho port nối tiếp để nhận dữ liệu về và timer T1 sẽ cung cấp tốc độ baud cho port nối tiếp để phát dữ liệu đi
4 TCLK CCH Xung clock phát của timer 2 Khi TCLK
= 1 thì timer T2 cung cấp tốc độ baud cho port nối tiếp để phát dữ liệu đi và timer T1 sẽ cung cấp tốc độ baud cho port nối tiếp để nhận dữ liệu về
Trang 153 EXEN2 CBH Bit điều khiển cho phép tác động từ bên
ngoài Khi EXEN2 = 1 thì hoạt động thu nhận và nạp lại của timer T2 chỉ xảy ra khi ngõ vào T2EX có sự chuyển trạng thái từ 1 sang 0
2 TR2 CAH Bit điều khiển timer 1 đếm/ ngừng đếm:
TR2 = 1 thì timer 1 được phép đếm xung
TR2 = 0 thì timer 1 không được phép đếm xung
Dùng lệnh điều khiển bit TR2 để cho phép timer 1 đếm hay ngừng đếm
1 C/T2 C9H Bit lựa chọn counter hay timer:
C/T2 = 1: Đếm xung từ bên ngoài đưa đến ngõ vào T2
C/T2 = 0 :Định thời đếm xung nội bên trong
0 CP/RL2 C8H Cờ thu nhận / nạp lại dữ liệu của timer
T2
Khi bit này bằng 1 thì thu nhận chỉ xảy
ra khi có sự chuyển trạng thái từ 1 sang 0
ở ngõ vào T2EX và EXEN2 = 1
Khi bit này bằng 0 thì quá trình nạp lại khi timer T2 tràn hoặc khi có sự chuyển trạng thái ở ngõ vào T2EX và bit EXEN
= 1; nếu bit RCLK hoặc TCLK = 1 thì bit này xem như bỏ
Thanh ghi TMOD
Bảng 4.5: Chức năng các bit thanh ghi TMOD được mô tả trong bảng sau :
Trang 16Giá trị khi reset : T2MOD = xxxx xx00b, MOD không cho phép định vị bit Các thanh ghi TH2, TL2, RCAP2H và RCAP2L không cho phép định vị bit
và giá trị khi reset là 00h Các chế độ hoạt động của timer 2 mô tả trong phần tiếp theo
7.1 Chế độ tự động nạp lại
Chế độ tự động nạp lại cũng có 2 trường hợp giống như chế độ giữ:
- Nếu EXEN2 = 0: khi Timer tràn, cờ tràn TF2 được đặt lên 1 và nạp lại giá trị cho TH2, TL2 (từ cặp thanh ghi RCAP2H, RCAP2L) đồng thời tạo ngắt
- Nếu EXEN2 = 1: hoạt động giống như trên nhưng khi có xung âm tại chân T2EX thì cũng nạp lại giá trị cho TH2, TL2 và đặt cờ EXF2 lên 1
Chế độ tự động nạp lại cũng cho phép thực hiện đếm lên hay xuống (điều khiển bằng bit DCEN trong thanh ghi T2MOD) Khi DCEN được đặt lên 1 và chân T2EX ở mức cao thì timer 2 sẽ đếm lên; còn nếu T2EX ở mức thấp thì timer 2 đếm xuống
Khi đếm lên, timer tràn tại giá trị đếm 0FFFFh Khi tràn, cờ TF2 được đặt lên mức 1 và giá trị trong cặp thanh ghi RCAP2H, RCAP2L chuyển vào căp thanh ghi TH2, TL2
Khi đếm xuống, timer tràn khi giá trị trong cặp thanh ghi TH2, TL2 bằng giá trị trong cặp thanh ghi RCAP2H, RCAP2L Khi tràn, cờ TF2 được đặt lên
1 và giá trị 0FFFFh được nạp vào cặp thanh ghi TH2, TL2
Trong chế độ này, khi timer tràn, giá trị trong cờ EXF2 sẽ chuyển mức và không tạo ngắt (có thể dùng thêm EXF2 để tạo giá trị đếm 17 bit)
1 T2OE Timer 2 Output Enable Bit
= 0 : T2 ( P1.0) là ngõ vào clock hay I/O port
= 1 : T2 là ngõ ra Clock
0 DCEN Down Counter Enable Bit
= 0 : Cấm timer 2 là bộ đếm lên / xuống
= 1 : Cho phép timer 2 là bộ đếm lên / xuống
Trang 17
Hình 4.7: Chế độ tự nạp lại 16 bit
7.2 Chế độ thu nhận
Chế độ thu nhận của Timer 2 có 2 trường hợp xảy ra:
- Nếu EXEN2 = 0: Timer 2 hoạt động giống như Timer 0 và 1, nghĩa là khi giá trị đếm tràn (TH2_TL2 thay đổi từ FFFFh đến 0) thì cờ tràn TF2 được đặt lên mức 1 và tạo ngắt tại Timer 2 (nếu cho phép ngắt)
- Nếu EXEN2 = 1: vẫn hoạt động như trên nhưng thêm một tính chất nữa là: khi xuất hiện cạnh âm tại chân T2EX (P1.1), giá trị hiện tại của TH2 và TL2 được chuyển vào cặp thanh ghi RCAP2H, RCAP2L (quá trình thu xảy ra); đồng thời, bit EXF2 = 1 (sẽ tạo ngắt nếu cho phép ngắt tại Timer 2)
Trang 18Hình 4.8: Hoạt động của timer T2 ở chế độ thu nhận dữ liệu
Để cho phép chế độ thu nhận hoạt động thì làm cho bit EXEN2 = 1 Nếu bit EXEN2 = 1 và khi có sự chuyển trạng thái từ 1 sang 0 ở ngõ vào T2EX thì chế độ thu nhận sẽ xảy ra : Giá trị đếm được trong thanh ghi TL2, TH2 sẽ được chuyển sang 2 thanh ghi RCAP2L và RCAP2H Cờ EXF2 cũng được chuyển lên mức 1 để báo hiệu quá trình thu nhận đã xảy ra , cờ EXF2 có thể kiểm tra bằng phần mềm hoặc tạo ngắt
8 Luyện tập
8.1 Phương pháp
Để điều khiển hoạt động của timer, cần thực hiện:
- Nạp giá trị cho thanh ghi TMOD để xác định chế độ hoạt động (thông thường chỉ dùng chế độ 1 – 16 bit và chế độ 2 – 8 bit tự động nạp lại)
- Nạp giá trị đếm trong các thanh ghi THx, TLx (thông thường sử dụng timer
0 và timer 1 nên quá trình đếm là đếm lên)
- Đặt các bit TR0, TR1 = 1 (cho phép timer hoạt động) hay xoá các bit này
8.2 Bài tập
Bài tập 1: Viết chương trình tạo sóng vuông tần số 10 KHz tại chân P1.0 dùng
timer 0 (tần số thạch anh là fOSC = 12MHz)
Bài làm :
Do fOSC = 12MHz nên chu kỳ máy = 1 µs
Trang 19f = 10 KHz → T = 1/f = 0.1 ms = 100 µs →một chu kỳ sóng vuông chiếm khoảng thời gian 100 chu kỳ máy →thời gian trì hoãn cần thiết là 50 chu kỳ máy
Chế độ 8 bit
TMOD = 0000 0010b (02h)
Giá trị đếm là 50 và do timer 0 đếm lên nên giá trị cần nạp cho TH0 là -50 (có thể không cần nạp cho TL0 nhưng lúc đó chu kỳ đầu tiên của xung sẽ sai) Chương trình thực hiện như sau:
Trang 20Bài làm :
f = 1 Hz → T = 1/f = 1 s = 1 000 000 µs → một chu kỳ sóng vuông chiếm khoảng thời gian 500 000 chu kỳ máy → thời gian trì hoãn cần thiết là
500 000 chu kỳ máy
Giá trị đếm là 500 000, vượt quá khả năng của timer (tối đa chỉ đếm được 65536 chu kỳ) nên phải thực hiện tạo vòng lặp đếm nhiều lần cho đến khi đạt đến giá trị 500 000 (có thể đếm mỗi lần 50 000 và thực hiện vòng lặp 10 lần)
Chương trình thực hiện như sau:
DJNZ R7,Lap ; Nếu R7 ≠ 0 thì lặp lại
CPL P1.2 ; Đảo bit để tạo xung
Trang 21Hình 5.1: Phương thức truyên thông song song va nối tiếp
Để truyền tin nối tiếp người ta sử dụng một đường dữ liệu thay thế bus dữ liệu 8 bit của truyền tin song song Nhờ vậy không chỉ làm giá thành hạ hơn nhiều mà còn mở ra một khả năng để 2 máy tính ở cách xa nhau vẫn có thể truyền thông với nhau
Để tổ chức truyền tin nối tiếp trước hết byte dữ liệu được chuyển thành các bit nối tiếp nhờ thanh ghi dịch vào song song ra nối tiếp Tiếp theo dữ liệu được truyền qua một đường truyền dữ liệu đơn Ở đầu thu cũng phải có một thanh ghi dịch vào nối tiếp ra song song để nhận dữ liệu nối tiếp và sau đó gói chúng lại thành từng byte một
Trang 22Truyền tin có 2 phương pháp: Đồng bộ và dị bộ Phương pháp đồng bộ chuyển một lần một khối dữ liệu, còn phương pháp dị bộ chỉ truyền từng byte một Bộ vi điều khiển 8051 được xây dựng sẵn một bộ thu phát dị bộ tổng hợp UART ( Universal Asynchronous Receiver Transmitter)
1.1 Khái niệm truyền dữ liệu đơn công và song công
- Truyền đơn công:
Máy phát chỉ có phát dữ liệu bên máy thu chỉ có thu dữ liệu
- Truyền song công:
Mỗi bên đều vừa có thể phát vừa có thể thu dữ liệu Truyền song công có 2 loại
+ Bán song công : Tại một thời điểm dữ liệu chỉ có thể truyền một chiều + Song công hoàn toàn : Dữ liệu có thể truyền cả hai chiều đồng thời
Hình 5.2: Các kiểu truyền dữ liệu
1.2 Truyền thông nối tiếp dị bộ và đóng khung dữ liệu
Dữ liệu đi vào ở đầu thu của đường dữ liệu trong truyền dữ liệu nói tiếp toàn là các số 0 và 1, nó thật là khó làm cho dữ liệu ấy có nghĩa là nếu bên phát
và bên thu không cùng thống nhất về một tệp các luật, một thủ tục, về cách dữ liệu được đóng gói, bao nhiêu bít tạo nên một ký tự và khi nào dữ liệu bắt đầu
và kết thúc
1.3 Các bít bắt đầu và dừng
Truyền thông dữ liệu nối tiếp dị bộ được sử dụng rộng rãi cho các phép truyền hướng kỹ tự, còn các bộ truyền dữ liệu theo khối thì sử dụng phương phát đồng bộ Trong phương pháp dị bộ, mỗi ký tự được bố trí giữa các bít bắt đầu (start) và bít dừng (stop) Công việc này gọi là đóng gói dữ liệu Trong đóng gói
dữ liệu đối với truyền thông dị bộ thì dữ liệu chẳng hạn là các ký tự mã ASCII được đóng gói giữa một bít bắt đầu và một bít dừng Bít bắt đầu luôn luôn chỉ là một bít, còn bít dừng có thể là một hoặc hai bít Bít bắt đầu luôn là bít thấp (0)
và các bít dừng luôn là các bít cao (bít 1) Ví dụ, hãy xét ví dụ trên hình 10.3 trong đó ký tự “A” của mã ASCII (8 bít nhị phân là 0100 0001) đóng gói khung
Trang 23giữa một bít bắt đầu và một bít dừng Lưu ý rằng bít thấp nhất LSB được gửi ra đầu tiên
Hình 5.3: Khung truyền dữ liệu
1.4 Tốc độ truyền dữ liệu
Tốc độ truyền tin nối tiếp được tính bằng bit/giây bps ( Bit per sencond)
Một thuật ngữ khác cũng được sử dụng là baud
Tuy nhiên khái niệm bps và baud không hoàn toàn giống nhau Baud là đơn vị dùng cho modem và được định nghĩa là số lần thay đổi tín hiệu trong một giây Còn đối với modem mỗi lần thay đổi tín hiệu có thể truyền được nhiều bit
dữ liệu Còn đối đường truyền thì tốc độ baud và bps là một
1.5 Chuẩn RS232
Để đảm bảo sự tương thích giữa các thiết bị truyền dữ liệu nối tiếp do các hãng khác nhau sản xuất năm 1960 Hiệp hội công nghiệp điện tử EIA đã xây dựng một chuẩn giao diện được gọi RS232 Ngày nay RS232 là chuẩn giao diện I/O được sử dụng rộng rãi nhất
Tuy nhiên do chuẩn ra đời khá lâu trước khi có họ vi mạch điện tử TTL vì vậy các mức điện áp vào/ra của nó không tương thích với TTL Ở RS232 mức logic 1 tương ứng -3V đến -25V, còn mức 0 tương ứng từ +3V đến +25V, khoảng -3V đến +3V không xác định
Do đó để kết nối RS232 với máy tính đều phải qua bộ biến đổi điện áp như MAX232 để chuyển mức TTL sang mức điện áp của RS232 và ngược lại
Trang 24Hình 5.4: Sơ đồ chân của cáp RS232 Bảng 5.1 : Mô tả chức năng các chân :
1 Data carrier detect (DCD) Tách tín hiệu dữ liệu
2 Received data (RxD) Dữ liệu được nhận
3 Transmitted data (TxD) Dữ liệu được gửi
4 Data terminal ready (DTR Đầu cuối dữ liệu sẵn sàng
5 Signal ground (GND) Đất của tín hiệu
6 Data set ready (DSR) Dữ liệu sẵn sàng
7 Request to send (RTS) Yêu cầu gửi
8 Clear to send (CTS) Xóa để gửi
9 Ring indicator (RL) Báo chuông
8051 có một cổng nối tiếp trong chip có thể hoạt động ở nhiều chế độ, trên một dải tần số rộng Chức năng chủ yếu của cổng nối tiếp là thực hiện chuyển đổi song song sang nối tiếp đối với dữ liệu xuất và chuyển đổi nối tiếp sang song song với dữ liệu nhập Việc truy xuất phần cứng qua cổng nối tiếp được thực hiện bằng các chân TXD và RXD Các chân này là hai bit của cổng 3
là P3.1 ( TXD) và P3.0 ( RXD)
2 Thanh ghi điều khiển
Hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến cổng nối tiếp là SCON và SBUF Bộ đệm cổng nối tiếp SBUF có địa chỉ 99H thực chất bao gồm hai bộ đệm Dữ liệu ghi vào SBUF sẽ được truyền ra thiết bị bên ngoài và đọc SBUF để truy xuất dữ liệu thu được Đây là hai thanh ghi riêng biệt một thanh ghi chỉ ghi để phát và một thanh ghi chỉ đọc để thu
2.1 Thanh ghi SCON
Thanh ghi điều khiển cổng nối tiếp SCON có địa chỉ 98H là thanh ghi địa chỉ hóa theo bit nó chứa các bit trạng thái và các bit điều khiển Các bit điều khiển cho phép thiết lập các chế độ hoạt động cho cổng nối tiếp và các bit trạng thái chỉ thị việc kết thúc phát hoặc thu ký tự Các bit trạng thái có thể được kiểm tra bằng phần mềm hoặc có thể được lập trình để tạo ngắt
Chế độ hoạt động của cổng nối tiếp được thiết lập bằng cách ghi dữ liệu vào thanh ghi điều khiển cổng nối tiếp SCON Cấu trúc thanh ghi SCON như sau :
MSB LSB
Trang 25Hình 5.3: Thanh ghi điều khiển SCON
Chức năng các bit điều khiển thanh ghi SCON như sau:
Các bit SM0, SM1 :
Đây là các bit D7, D6 của thanh ghi SCON Chúng được dùng để xác định chế độ đóng khung dữ liệu, trạng thái của 2 bit SM0 và SM1 trong thanh ghi này thiết lập nên 4 chế độ hoạt động giao tiếp nối tiếp chuẩn như sau:
- Chế độ 0
Dữ liệu nối tiếp vào và ra sẽ thông qua chân RxD Chân TxD đưa ra xung nhịp đồng hồ 8 bit dữ liệu được truyền/nhận nối tiếp, với bit LSB được thực hiện đầu tiên Tốc độ Baud được cố định bằng 1/12 tần số của bộ dao động
- Chế độ 1:
10 bit được truyền (thông qua TxD) hoặc nhận (thông qua RxD), trong đó gồm có: 1 bit khởi động (có giá trị 0), 8 bit dữ liệu (đầu tiên là LSB), và 1 bit dừng (có giá trị là 1) Khi nhận, bit dừng được chuyển vào RB8 của thanh ghi SCON Tốc độ Baud có thể thay đổi được
SM0 SM1 Chế độ Chức năng Tốc độ baud
0 0 0 Thanh ghi dịch Cố định( tần số dao động chia cho12)
0 1 1 8 bit UART Thay đổi ( theo giá trị timer)
1 0 2 9 bit UART Cố định ( tần số dao động chia cho 12
hoặc 64)
1 1 3 9 bit UART Thay đổi ( theo giá trị timer)
Trang 26Trong cả 4 chế độ trên, việc truyền được bắt đầu bởi bất kỳ một lệnh nào
mà sử dụng thanh ghi SBUF như là một thanh ghi đích Việc nhận được bắt đầu
ở chế độ 0 khi RI=0 và REN=1 Đối với các chế độ khác, việc nhận được bắt đầu khi bit REN=1
Bit SM2: bit D5 của thanh ghi SCON, bit này cho phộp khả năng đa xử lý của 8051 Đối với cỏc ứng dụng của chương trỡnh học ta đặt SM2 = 0 vỡ ta khụng sử dụng 8051 trong mụi trường đa xử lý
Bit REN
Đây là bit cho phộp thu, nằm vị trớ D4 của thanh ghi SCON Bit REN cũng được tham chiếu như là SCON.4 vỡ SCON là thanh ghi cú thể đánh địa chỉ theo bit Khi bit REN cao thỡ nú cho phộp 8051 thu dữ liệu trờn chõn RxD của
nú và kết quả là nếu ta muốn 8051 vừa truyền và nhận dữ liệu thỡ bit REN phải được đặt lờn 1
Khi đặt REN bộ thu bị cấm, việc đặt REN = 1 hay REN = 0 cú thể đạt được bằng lệnh: SETB SCON.4 và CLR SCON.4 tương ứng Bit này cú thể dựng khống chế mọi việc nhận dữ liệu nối tiếp và nố là bit cực kỳ quan trọng trong thanh ghi SCON
Bit TB8 và RB8
Bit TB8 là bit SCON.3 của thanh ghi SCON Nó được dựng để cho chế
độ nối tiếp 2 và 3 Ta đặt TB8 vỡ nỳ khụng được sử dụng trong cỏc ứng dụng của mỡnh
Bit RB8 ( bit thu 8) là bit SCON.2 của thanh ghi SCON Trong chế độ nối tiếp 1 thỡ bit này nhận một bản sao của bit stop khi một dữ liệu 8 bit được nhận Bit này cũng như bit TB8 rất hiếm được sử dụng Trong cỏc ứng dụng của mỡnh
ta đặt RB8 = 0 vỡ nú được sử dụng cho chế độ nối tiếp 2 và 3
Các bít TI và RI
Các bit ngắt truyền TI và ngắt thu RI là các bit D1 và D0 của thanh ghi SCON, các bit này là cực kỳ quan trọng của thanh ghi SCON Khi 8051 kết thúc truyền một ký tự 8 bit thì nó bật TI để báo rằng nó sẵn sàng truyền một byte khác, bit TI được bật lên trước bit stop
2.2 Thanh ghi SBUF
SBUF là thanh ghi 8 bit được dựng cho truyền thụng nối tiếp của 8051
Để byte dữ liệu được truyền qua đường TxD thỡ cần đặt dữ liệu trong thanh ghi SBUF Tương tự SBUF lưu một byte dữ liệu khi nó được nhận qua đường RxD của 8051 SBUF có thể được lưu mọi thanh ghi của 8051 truy cập
MOV SBUF, # ”A”
MOV A, SBUF
MOV SBUF, A
Trang 27Khi byte dữ liệu được ghi vào thanh ghi SBUF thỡ byte sẽ được định khung dữ liệu với bit start và stop và được truyền nối tiếp qua chân RxD Tương
tự như vậy khi các bit được nhận nối tiếp qua từ RxD thỡ 8051 mở khung loại trừ các bit start và stop để lấy ra một byte dữ liệu nhận được và đặt vào thanh ghi SBUF
Còn khi 8051 nhận được dữ liệu nối tiếp qua chân RxD và nó tách các bit start và stop để lấy ra 8 bit dữ liệu để đặt vào SBUF, sau khi hoàn tất nó bật cờ
RI để báo rằng nó đó nhận xong một byte và cần phải lấy đi kẻo nó bị mất cờ RI được bật khi đang tách bit stop
3 Chế độ làm việc
Cổng nối tiếp có 4 chế độ hoạt động, có thể chọn được bằng cách lập trình cho các bit SM0 và SM1 trong SCON Có 3 chế độ cho phép truyền cận đồng bộ ( UART) trong chế độ này mỗi ký tự được thu nhận hoặc phát đều nằm trong khung có 1 bit start và 1 bit stop Ở chế độ 0 cổng nối tiếp hoạt động như một thanh ghi dịch thông thường
3.1 Thanh ghi dịch 8 bit
Để định cấu hình cho truyền dữ liệu ở chế độ thanh ghi dịch 8 bit ( chế độ 0) thì các bit SM0 và SM1 trong SCON được chọn bằng 0 Dữ liệu nối tiếp nhận vào và dữ liệu truyền đi đều thông qua chân RxD còn chân TxD thì dùng để dịch chuyển xung clock 8 bit dữ liệu để truyền đi hay nhận về thì luôn bắt đầu với bit có trọng số nhỏ nhất LSB Tốc độ baud được thiết lập cố định ở tần số bằng 1/12 tần số dao động của thạch anh trên chip
Khi thực hiện lệnh ghi dữ liệu lên thanh ghi SBUF thì quá trình truyền dữ liệu bắt đầu Dữ liệu được dịch ra ngoài thông qua chân RxD cùng các xung nhịp cũng được gởi ra ngoài thông qua chân TxD Mỗi bit truyền đi chỉ có xuất hiện trên chân RxD trong khoảng thời gian một chu kỳ máy Trong khoảng thời gian của mỗi chu kỳ máy tín hiệu xung clock xuống mức thấp tại thời điểm S3P1 và lên mức cao tại thời điểm S6P1 trong giản đồ thời gian:
Một ứng dụng cụ thể sử dụng chế độ 0 để mở rộng thêm số lượng ngõ ra cho 8051 với cách thực hiện như sau:
Một thanh ghi dịch từ nối tiếp thành song song được nối đến các đường TxD và RxD của 8051 để mở rộng thêm 8 đường Nếu dùng thêm nhiều thanh ghi dịch mắc nối tiếp vào thanh ghi dịch đầu tiên sẽ mở rộng được nhiều ngõ ra
Trang 28Hình 5.5 : Tăng thêm cổng vào ra song song sử dụng cổng nối tiếp ở chế độ 0
3.2 Chế độ UART 8 bit có tốc độ baud thay đổi
Trong chế độ này truyền dữ liệu nối tiếp hoạt động bất đồng bộ UART 8 bit có tốc độ baud thay đổi được, UART là bộ thu và phát dữ liệu nối tiếp với mỗi ký tự dữ liệu luôn bắt đầu bằng 1 bit start ( ở mức 0) và kết thúc bằng 1 bit stop ( ở mức 1), bit parity đôi khi được ghép vào giữa bit dữ liệu sau cùng và bit stop
Trong kiểu này 10 bit dữ liệu sẽ phát đi ở chân TxD và nếu nhận thì sẽ nhận ở chân RxD 10 bit đó bao gồm:
Trong 8051 tốc độ baud được thiết lập bởi tốc độ tràn của timer T1 Đối
8052 có 3 timer thì tốc độ baud có thể thiết lập bởi tốc độ tràn của timer T1 hoặc timer T2 hoặc cả 2 timer T1 và T2 một timer cho máy phát và một timer cho máy thu
Nguồn cung cấp xung clock để đồng bộ các thanh ghi truyền dữ liệu nối tiếp hoạt động ở kiểu 1,2,3 được thiết lập bởi bộ đếm 16, ngõ ra của bộ đếm là xung clock tạo tốc độ baud, xung ngõ vào của bộ đếm có thể lập trình bằng phần mềm
Khi có một lệnh ghi dữ liệu lên thanh ghi SBUF thì quá trình truyền dữ liệu bắt đầu nhưng nó chưa truyền mà chờ cho đến khi bộ chia 16 ( cung cấp tốc
độ baud cho truyền dữ liệu nối tiếp) bị tràn Dữ liệu được xuất ra trên chân TxD bắt đầu với bit start theo sau là 8 bit data và sau cùng là bit stop Các cờ TI được nâng lên mức 1 cùng lúc với thời điểm xuất hiện bit stop trên chân TxD
Quá trình nhận dữ liệu được khởi động khi có sự chuyển đổi từ mức 1 sang mức 0 ở ngõ vào RxD Bộ đếm 4 bit được reset ngay lập tức để sắp xếp bit
Trang 29dữ liệu đang đến từ ngõ vào RxD Mỗi bit dữ liệu đến được lấy mẫu ở trạng thái đếm thứ 8 trong một chu kỳ 16 trạng thái của bộ đếm 4 bit
Khi có sự chuyển trạng thái từ 1 xuống 0 ở ngõ vào RxD của bộ thu thì trạng thái 0 này phải tồn tại trong 8 trạng thái liên tục của bộ đếm 4 bit Nếu trường hợp này không đúng thì bộ thu xem như bị tác động bởi tín hiệu nhiễu
Bộ thu sẽ reset và trở về trạng thái nghỉ và chờ sự chuyển trạng thái tiếp theo Giả sử việc kiểm tra bit start là hợp lệ thì bit start sẽ được bỏ qua và 8 bit data được nhận vào thanh ghi dịch nối tiếp
Khi tất cả 8 bit được ghi vào thanh ghi dịch thì 3 công việc sau sẽ được thực hiện tiếp theo:
- Bit thứ 9 được dịch vào bit RB8 trong SCON
- 8 bit data được nạp vào thanh ghi SBUF
- Cờ ngắt nhận RI = 1
- Tuy nhiên 3 công việc trên chỉ xảy ra nếu hai điều kiện sau tồn tại:
- RI = 0
- SM2 = 1
3.3 UART 9 bit với tốc độ baud cố định
Khi SM1 = 1 và SM0 = 0 thì truyền dữ liệu hoạt động kiểu 2 có tốc độ baud cố định Có 11 bit được phát hoặc thu:
3.4 Chế độ UART với tốc độ baud cố định
Khi SM1 = 1 và SM0 = 1 thì truyền dữ liệu hoạt động ở kiểu 3 là kiểu UART 9 bit có tốc độ baud thay đổi Kiểu 3 tương ứng kiểu 2 ngoại trừ tốc độ baud được lập trình và được cung cấp bởi timer Các kiểu 1, kiểu 2, kiểu 3 rất giống nhau, nhưng điểm khác nhau là ở tốc độ baud ( kiểu 2 cố định, kiểu 1 và kiểu 3 thay đổi) và số bit dữ liệu ( kiểu 1 có 8 bit, kiểu 2 và kiểu 3 có 9 bit data)
4 Khởi tạo và truy xuất thanh ghi PORT nối tiếp
Trang 30Hoặc : MOV SCON, #xxx1xxxB
Sẽ lập REN lên 1 và lập hoặc xóa các bit khac trong SCON tùy theo yêu cầu khác nhau ( Các x phải là 0 hoặc 1 để khởi động các chế độ hoạt động)
4.2 Bit dữ liệu thứ 9
Bit dữ liệu thứ 9 được phát trong kiểu 2 và kiểu 3 phải được nạp vào bit TB8 bằng phần mềm có nghĩa là người lập trình phải thực hiện công việc này trước khi dữ liệu truyền đi, còn bit dữ liệu thứ 9 của dữ liệu thu được thì tự động đặt vào trong bit RB8
Phần mềm có thể hoặc không đòi hỏi bit dữ liệu thứ 9 tham gia vào quá trình truyền dữ liệu tùy thuộc vào đặc tính của các thiết bị nối tiếp kết nối với nhau thiết lập ra quy định Bit dữ liệu thứ 9 đóng vai trò quan trọng truyền thông nhiều vi xử lý
4.3 Thêm vào bit chẵn – lẻ
Bit thứ 9 thường được dùng là bit kiểm tra chẵn – lẻ Ở mỗi chu kỳ máy bit P trong thanh ghi trạng thái PSW bằng 1 hay bằng 0 tùy thuộc vào quá trình kiểm tra chẵn 8 bit dữ liệu chứa trong thanh ghi A
Nếu hệ thống truyền dữ liệu yêu cầu 8 bit data cộng thêm 1 bit kiểm tra chẵn thì các lệnh sau đây sẽ phát 8 bit trong thanh ghi A cộng với bit kiểm tra chẵn được cộng vào bit thứ 9:
MOV C, P : Chuyển cờ chẵn lẻ P sang cờ C
MOV TB8, C : Chuyển cờ C sang bit TB8 để chuẩn
bị truyền đi
MOV Sbuf, A : Truyền dữ liệu 8 bit trong A và bit thứ 9
trong TB8 đi
Nếu kiểm tra lẻ được yêu cầu thì các lệnh trên được sửa lại là :
MOV C, P : Chuyển cờ chẵn lẻ P sang cờ C
CPL C : Ngịch đảo chẵn thành lẻ
MOV TB8, C : Chuyển cờ C sang bit TB8 để chuẩn
bị truyền đi
MOV Sbuf, A : Truyền dữ liệu 8 bit trong A
và bit thứ 9 trong TB8 đi
Trong kiểu 1 ta vẫn có thể sử dụng bit kiểm tra chẵn lẻ như sau: 8 bit data được phát trong kiểu 1 có thể bao gồm 7 bit dữ liệu và 1 bit kiểm tra chẵn lẻ Để phát một mã ASCII 7 bit với 1 bit kiểm tra chẵn vào 8 bit các lệnh sau đây được dùng:
MOV C, P : Đưa cờ chẵn vào C
Trang 31MOV ACC.7, C : Đưa cờ chẵn vào bit MSB của A
MOV SBUF, A : Gửi bit data cùng bit cờ chẵn
4.4 Các cờ ngắt
Cờ ngắt nhận RI và phát TI trong thanh ghi SCON đóng vai trò quan trong truyền dữ liệu của 8051 Cả hai bit đều được thiết lập bởi phần cứng nhưng phải được xóa bằng phần mềm
Điển hình là cờ RI được thiết lập ở mức 1 khi kết thúc quá trình nhận đầy
đủ 1 kí tự và cho biết thanh ghi đệm thu đã đầy Trạng thái của cờ RI có thể kiểm tra bằng phần mềm hoặc có thể lập trình để sinh ra ngắt Nếu muốn nhận một ký tự từ một thiết bị đã được kết nối đến Port nối tiếp thì chương trình phải chờ đến khi cờ RI = 1, sau đó xóa cờ RI và đọc ký tự từ thanh ghi SBUF Quá trình này được lập trình như sau:
WAIT : JNB RI, WAIT : Kiểm tra RI xem có bằng 1 hay không CLR RI : Khi cờ RI = 1 thì đã nhận xong dữ liệu
và xóa cờ RI
MOV A, SBUF : Đọc ký tự nhận được thanh ghi SBUF
Cờ TI lên mức 1 cho biết đã phát xong ký tự và cho biết thanh ghi đệm SBUF đã rỗng Nếu muốn gởi 1 ký tự đến một thiết bị đã được đã kết nối đến Port nối tiếp thì trước tiên phải kiểm tra xem Port nối tiếp đã sẵn sàng chưa Nếu
ký tự trước đang được gửi đi thì phải chờ cho đến khi kết thúc quá trình gửi Các lệnh sau đây dùng để phát một ký tự trong thanh ghi A :
WAIT : JNB TI, WAIT : Kiểm tra TI có bằng 1 hay không
và chờ nếu bằng 0 CLR TI : Xóa cờ ngắt thu TI
MOV SBUF, A : Gửi nội dung trong thanh ghi A
Các đoạn chương trình trên là một phần của các hàm nhập và xuất ký tự chuẩn
5 Truyền thông đa xử lý
Chế độ 2 và 3 có một chức năng đặc biệt cho việc truyền thông đa xử lý
Ở các chế độ 2 và chế độ 3 thì 9 bit dữ liệu thu và bit thứ 9 được lưu vào bit RB8 Truyền dữ liệu có thể lập trình sao cho khi thu được bit stop thì ngắt của truyền dữ liệu nối tiếp tác động chỉ khi bit RB8 = 1 Cấu trúc này được phép bởi cách thiết lập bit SM2 = 1trong thanh ghi SCON Kiểu này được ứng dụng trong mạng sử dụng 8051 được tổ chức theo cấu hình máy chủ và máy tớ như hình sau:
Trang 32Hình 5.6: Truyền thông tin nối tiếp trong hệ thống đa xử lý
Quá trình truyền dữ liệu mô tả như sau:
- Khi khởi động, các vi điều khiển slave có bit SM2 = 1 (trong thanh ghi SCON) và hoạt động ở chế độ UART 9 bit Như vậy, slave chỉ nhận được dữ liệu khi bit truyền thứ 9 (TB8 của master) là 1
- Mỗi slave được gán trước một địa chỉ Khi cần trao đổi thông tin với slave nào, master sẽ gởi dữ liệu 9 bit gồm 8 bit địa chỉ của slave và bit 9 = 1 Dữ liệu này sẽ được tất cả các slave nhận về (do bit 9 = 1) Chương trình trong slave sẽ kiểm tra giá trị địa chỉ tương ứng, nếu trùng với địa chỉ đã cài đặt sẵn thì đảo bit SM2 (= 0), nếu khác thì bỏ qua
- Tiếp tục, master sẽ gởi dữ liệu đến slave nhưng lúc này bit 9 = 0 Khi đó, chỉ có slave nào có bit SM2 = 0 mới nhận được dữ liệu
- Sau khi truyền xong dữ liệu, master gởi lại 8 bit địa chỉ và bit 9 = 1 Slave nhận được sẽ đảo bit SM2 lần nữa để khôi phục trạng thái ban đầu
Như vậy, trong quá trình truyền thông đa xử lý, có 2 loại thông tin gởi: byte địa chỉ nếu bit 9 = 1 và byte dữ liệu nếu bit 9 = 0
Nhận dạng địa chỉ động:
Trong các phiên bản mới của 8051, địa chỉ của các slave có thể nhận dạng bằng các thanh ghi SADDR và thanh ghi mặt nạ SADEN (các bit không quan tâm trong thanh ghi địa chỉ SADDR sẽ tương ứng với các bit 0 trong thanh ghi SADEN)
Xét hệ thống có 1 master và 3 slave:
Slave 1: SADDR = 1111 0001b, SADEN = 1111 1010b
Slave 2: SADDR = 1111 0011b, SADEN = 1111 1001b
Trang 33Slave 3: SADDR = 1111 0001b, SADEN = 1111 1010b
Nếu chỉ cần gởi dữ liệu cho slave 1, địa chỉ cần sử dụng có bit 0 = 0 (do địa chỉ của slave 2 và slave 3 có bit 0 = 1 còn địa chỉ của slave 1 có bit 0 tuỳ ý), giả sử là 1111 0000b
Nếu cần gởi cho slave 2 và slave 3 mà không gởi cho slave 1 thì địa chỉ cần dùng có bit 1 = 1 (do địa chỉ của slave 1 có bit 1 = 0 còn slave 2 và 3 thì tuỳ ý), giả sử như 1111 0011b
Nhận dạng địa chỉ Broadcast
Địa chỉ broadcast tạo thành từ phép toán OR giữa các thanh ghi SADDR và SADEN trong đó các bit 0 xác định đó là các bit không quan tâm Giả sử SADDR = 0101 0000b và SADEN = 1111 1101b thì:
Địa chỉ broadcast là 1111 11x1
6 Tốc độ Baud
Tốc độ truyền dữ liệu của một hệ máy tính đã cho phụ thuộc vào các cổng truyền thông kết nối vào trong hệ thống đo Ví dụ, các máy tính PC/XT trước đây của IBM có thể truyền dữ liệu với tốc độ 100 đến 9600 bps Tuy nhiên, trong những năm gần đây thì các máy tính PC dựa trên Pentium truyền dữ liệu với tốc độ lên tới 56kbps Cần phải nói thêm rằng trong truyền thông dữ liệu nối tiếp dị bộ thì tốc độ baud nhìn chung là bị giới hạn ở 100.000 bps
Tốc độ baud mỗi chế độ cụ thể như sau:
- Chế độ 0:
Tốc độ baud cố định = 1/12 tần số thạch anh
- Chế độ 2:
Trang 34Tốc độ baud = 1/32 tần số thạch anh khi SMOD = 1
Tốc độ baud = 1/64 khi SMOD = 0
(SMOD: nằm trong thanh ghi PCON)
- Chế độ 1 và 3: tốc độ baud xác định bằng tốc độ tràn của timer 1 Trong họ
8052 có thể dùng timer 2 để tạo tốc độ baud còn trong các phiên bản mới, có thể dùng bộ tạo tốc độ nội (INT_BRG – Internal Baud Rate Generator) Việc xác định nguồn tạo tốc độ baud mô tả như hình:
MOV PCON, A ; Ghi giá trị mới vào PCON
6.1 Tạo tốc độ baud bằng Timer 1
Khi bộ Timer 1 được dùng để tạo tốc độ Baud, thì các tốc độ Baud ở các chế độ 1 và 3 do tốc độ tràn của timer 1 và giá trị của SMOD quyết định:
Tốc độ Baud ở chế độ 1 và 3 = (2SMOD*(Tốc độ tràn của timer 1))/32
Ngắt của Timer 1 sẽ mất tác dụng trong ứng dụng này Bản thân bộ Timer
có thể được thiết lập để thực hiện chức năng thời gian hay bộ đếm ở bất kỳ một trong 3 chế độ hoạt động Trong hầu hết các kiểu ứng dụng, nó thường được
thiết lập để thực hiện chức năng thời gian, hoạt động ở chế độ Auto-reload (nửa byte cao của TMOD = 0010b) Trong trường hợp này, tốc độ baud được tính
bằng công thức:
Trang 35Tốc độ Baud chế độ 1 và 3 = (2SMOD*Tần số bộ dao (TH1)])
động)/(32*(12*[256-Ta có thể nhận được các tốc độ Baud rất thấp với bộ Timer 1 bằng cách làm cho ngắt của timer 1 có tác dụng, và thiết lập Timer 1 để hoạt động như một
bộ đếm thời gian 16 bit (Nửa byte cao của TMOD=0001b) Bảng 2.8 liệt kê các tốc độ Baud khác nhau thường được sử dụng và cách chúng có thể nhận được từ Timer 1
Tốc độ Baud
(Hz)
Tần số d.động (MHz)
Trang 361, các bit khác bằng 0 vì chúng điều khiển các đặc tính khác và các chế độ
không cần dùng trong ví dụ này
Tốc độ tràn của Timer 1 là 2400 baud x 32 = 76,8 Khz Giả sử tần số thạch anh của 8051 là 12 MHz nên xung kích timer 1 là 1 MHz = 1.000KHz do
đó xung cho mỗi lần tràn là 1.000KHz ÷ 76,8 KHz = 13,02 ( làm tròn 13) vậy giá trị nạp lại là -13 hoặc 0F3H đoạn lệnh khởi tạo như sau :
INIT : MOV SCON,#52H ; cổng nối tiếp ở mode 1
MOV TMOD,# 20H ; timer 1,mode 2 MOV TH1,# -13 ; trị nạp lại tương ứng 2.400 baud SET TR1 ; khởi động timer 1
6.2 Tạo tốc độ baud bằng Timer 2
Timer 2 được dùng để tạo tốc độ baud khi đặt các bit TCLK, RCLK lên 1 (trong thanh ghi T2CON) Công thức liên quan giữa tốc độ baud
và giá trị nạp như sau (lưu ý rằng giá trị nạp chứa trong cặp thanh ghi RCAP2H_RCAP2L):
Khi dùng Timer 2 để tạo tốc độ baud, xung clock thu và phát có thể tách riêng bằng cách chỉ dùng TCLK hay RCLK Lúc đó, xung clock còn lại được xác định theo Timer 1 Ngoài ra, cũng có thể tạo ngắt cho Timer 2 bằng cách đặt bit EXEN2 = 1 và ngắt tạo ra khi xuất hiện cạnh âm tại chân T2EX
7 Luyện tập
Những bài tập sau đây là các chương trình điển hình trong yêu cầu giao tiếp giữa các thiết bị đầu cuối (hoặc các thiết bị nối tiếp khác) với máy tính Giả sử cổng nối tiếp của 8051 được khởi tạo ở chế độ UART 8 bít
và tốc độ buade được cung cấp bởi timer 1
1 Viết chương trình con có tên là OUTSTR để gởi một chuỗi mã ASCII kết thúc bằng ký tự null đến thiết bị kết nối với cổng nối tiếp
Trang 37của 8051 Giả sử chuỗi mã ASCII được chứa ở bộ nhớ chương trình ngoài và chương trình gọi đặt địa chỉ của chuỗi vào con trỏ dử liệu trước khi gọi OUTSTR Chuuỗi này là các byte ASCII nối tiếp và kết thúc bằng byte 00H
2 Viết chương trình con có tên INLINE để nhập một dòng mã ASCII từ một thiết bị nối với cổng nối tiếp của 8051 và lưu vào RAM nội tại địa chỉ 50H Giả sử dòng dử liệu được kết thúc bằng ký tự xuống dòng Đặt mã của ký tự xuống dòng trong bộ đệm dòng theo sau các
mã khác và sau đó kết thúc bộ đệm dòng bằng byte 00H
3 Viết chương trình gởi liên tục các chử cái (chử nhỏ) đến thiết bị kết nối với port nối tiếp 8051 Dùng chương trình con OUTCHAR ở phần trên
4 Dựa trên chương trình con OUTCHAR viết chương trình gởi liên tục các mã ASCII hiển thị được (20H – 7EH) đến thiết bị kết nối với ccổng nối tiếp của 8051
5 Sửa lại lời giải của bài tập trên để đưa ngỏ ra đến màn hình bằng cách dùng mã XOFF và XON nhập vào từ bàn phím Bỏ qua các mã nhập vào khác (lưu ý:
XOFF = CONTROL-S; XON = CONTROL-Q)
6 Dựa trên các chương trình con INCHAR và OUTCHR, viết chương trình nhập các ký tự từ bàn phím và hiển thị chúng trên màn hình Biến đổi chử nhỏ thành chử in
7 Dựa trên các chương trình con INCHAR và OUTCHR, viết chương trình nhập các ký tự từ một thiết bị kết nối với port nối tiếp của 8051
và hiển thị trên màn hình bằng cách thay thế bằng dấu chấm (.) đối với các ký tự điều khiển (có mã ASCII 00H đến 1FH và 7FH)
8 Dùng chương trình con OUTCHR viết chương trình xóa màn hình kết nối với port nối tiếp 8051 sau đó gởi tên của bạn ra màn hình 10 lần trên 10 dòng khác nhau Chức năng xóa màn hình được thực hiện bằng cách gởi mã CONTROL-Z đối với đa số thiết bị hoặc <ESC> đối với các thiết bị hổ trợ chuẩn ANSI (american national standarts institute)
9 Trong hình 5.1 cho thấy một kỹ thuật mở rộng ngỏ ra của 8051 Giả
sử với cấu hình như thê viết một chương trình khởi tạo port nối tiếp
8051 ở chế độ thanh ghi dịch và sau đó ánh xạ nội dung của RAM nội tại địa chỉ 20H đến 8 ngỏ ra mở rộng, mỗi giây 10 lần
Trang 38Bài 6: Ngắt (Interrupt)
1 Mở dầu
Ngắt là sự xuất hiện của một điều kiện, một sự kiện làm tạm dừng chương trình trong khi điều kiện này được phục vụ bởI một chương trình khác Ngắt có một vai trò quan trọng trong thiết kế và thực hiện các ứng dụng của vi điều khiển Chúng cho phép hệ thống đáp ứng không đồng bộ vớI một sự kiện
và xử lý sự kiện trong khi một chương trình khác đang hoạt động Một hệ thống được điều khiển bằng ngắt tạo một ảo giác thực hiện đồng thờI nhiều công việc cùng một lúc Dỉ nhiên, tạI một thờI điễm CPU không thể thực hiện nhiều hơn một lệnh nhưng nó có thể tạm dừng chương trình để thực hiện một chương trình khác và sau đó trở lạI chương trình đầu tiên Điễm khác là trong một hệ thống điều khiển bằng ngắt, các ngắt không xảy ra như là kết quả của một lệnh (như lệnh gọI chương trình con) mà là đáp ứng vớI một sự kiện xảy ra một cách không đồng bộ vớI chương trình chính có nghĩa là không biết trước chương trình chính sẻ bị ngắt lúc nào
Chương trình xử lý ngắt được gọI là chương trình phục vụ ngắt (Interrupt service routine) viết tắt là ISR hay quản lý ngắt ISR hoạt động để đáp ứng một ngắt và thường thực hiện một thao tác vào hoặc ra đến một thiết bị Khi xảy ra một ngắt thì chương trình chính tạm thờI dừng lạI và rẻ nhánh đến ISR ISR thực hiện các thao tác cần thiết và kết thúc vớI lệnh trở về từ ngắt và chương trình chính lạI tiếp tục từ nơi tạm dừng Như vậy có thể nói chương trình chính hoạt động ở mức cơ sở và các ISR hoạt động ở mức ngắt cũng có dùng các thuật ngữ: “phía trước” (foreground) để chỉ mức cơ sở và “phía sau” (backgrround) để chỉ mức ngắt, trong hình 6.1a trình bày hoạt động của một chương trình không có ngắt và 6.1b là hoạt động của chương trình chính ở mức
Trang 39Hình 6.1 Thực hiện chương trình
2 Tổ chức ngắt của 8051
8051 có năm nguồn tín hiệu ngắt: 2 ngắt ngoài, 2 ngắt định thời và 1 ngắt cổng nối tiếp 8052 có thêm ngắt thứ sáu của timer thứ ba Trạng thái mặc định của các ngắt là không hoạt động sau khi reset hệ thống và chuyển sang hoạt động từng ngắt riêng rẻ bằng phần mềm
Trong trường hợp có hai hoặc nhiều ngắt xuất hiện đồng thời hoặc một ngắt xảy ra trong khi một ngắt khác đang được phục vụ Có hai sơ đồ sắp xếp
ưu tiên các ngắt đó là: Chuỗi pooling và ưu tiên hai cấp, thứ tự theo chuỗi pooling thì cố định nhưng sơ đồ ưu tiên hai cấp thì lập trình được Sau đây là phương pháp cho phép và không cho phép sự hoạt động của các ngắt
2.1 Cho phép và không cho phép các ngắt
Mỗi một tín hiệu ngắt được cho phép hoặc không cho phép bởi địa chỉ bít trong thanh ghi chức năng đặc biệt IE (Interrupt enable) tại địa chỉ 0A8H, có một bít cho phép toàn cục, bít này khi bị xóa sẻ ngăn tất cả các ngắt (bảng 6.1)
Để cho phép một ngắt cần phải set hai bít: Một bít cho phép riêng và bít cho phép toàn cục VD Ngắt timer 1 được cho phép như sau:
SETB ET1 SETB EA Hoặc
MOV IE,#10001000B
Mặc dù hai cách trên có cùng kết quả sau khi reset hệ thống nhưng kết quả sẻ khác nhau nếu IE được ghi ở giữa chương trình trong khi đang chạy Cách thứ nhất không ảnh hưỡng đến 5 bít còn lại trong thanh ghi IE còn cách thứ hai sẻ xóa các bít còn lại khác Tốt nhất nên dùng cách thứ hai tại vị trí bắt đầu chương trình (nghĩa là khi bắt đầu mở máy hoặc reset hệ thống) nên dùng
Thời gian
Chương trình chính a) Thực hiện không có chương trình ngắt
a) Thực hiện có chương trình ngắt
Trang 40lệnh SETB và CLR trong khi chương trình đang chạy để tránh ảnh hưỡng các bít khác trong thanh ghi IE
2.2 Mức ưu tiên
Mỗi ngắt được lập trình ở một trong hai mức ưu tiên bằng thanh ghi IP (Interrupt priority) tại địa chỉ oB8H (bảng 6.2) Thanh ghi IP tự động xóa sau khi reset hệ thống để đặt các ngắt ở mức ưu tiên thấp
Bảng 6.1 Thanh ghi IE
(1=cho phép, 0=không cho phép) IE.7
ES ET1 EX1 ET0 EX0
AFH AEH ADH ACH ABH AAH A9H A8H
Cho phép toàn cục Không dùng Cho phép ngắt timer 2 (8052) Cho phép ngắt cổng nối tiếp Cho phép ngắt timer 1 Cho phép ngắt 1 ngoài Cho phép ngắt timer 0 Cho phép ngắt 0 ngoài Bảng 6.1 Thanh ghi IP
(1=cho phép, 0=mức thấp) IP.7
PS PT1 PX1 PT0 PX0
-
- 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H
Không dùng Không dùng
Ưu tiên ngắt timer 2 (8052)
Ưu tiên ngắt cổng nối tiếp
Ưu tiên ngắt timer 1
Ưu tiên ngắt 1 ngoài
Ưu tiên ngắt timer 0
Ưu tiên ngắt 0 ngoài Khái niệm “ưu tiên” cho phép một ISR bị dừng bởi một ngắt khác nếu ngắt mới xuất hiện này có mức ưu tiên cao hơn ngắt đang được phục vụ, điều này phù hợp với 8051 vì chỉ có hai mức ưu tiên, nếu một ISR ưu tiên thấp đang chạy nhưng lại xảy ra một ngắt ưu tiên cao thì ISR sẻ bị dừng Một ISR ưu tiên