Tạo độ trễ sử dụng vi điều khiển 8051

TẠO ĐỘ TRỄ SỬ DỤNG 8051

 

Bộ vi điều khiển 8051 có hai bộ định thời đếm ngược 16 bit độc lập có tên Timer 0 và Timer 1 và bài viết này là về việc tạo ra độ trễ thời gian bằng cách sử dụng bộ định thời 8051. Tạo độ trễ sử dụng bộ định thời (timer) của 8051 là phương pháp có chính xác nhất

 

Một bộ định thời có thể hiểu như một bộ đếm nhiều bit, tăng / giảm bit khi nhận tín hiệu xung vào và tạo ra tín hiệu ngắt khi xung vào mãi ở mức cao theo thời gian. Khi bộ đếm đang chạy trên bộ xử lý định thời, hay còn được gọi là bộ đếm thời gian, số xung có đếm của bộ xử lý được xác định trước và tạo ra độ trễ lập trình. Khi bộ đếm đang chạy nhờ nguồn xung bên ngoài (có thể là xung với tính định kỳ hoặc không định kỳ), bộ đếm (Counter) này có thể được sử dụng để đếm các sự kiện bên ngoài tác động vào.

 

Bên trong 8051, dao động đầu ra được chia cho 12 bằng cách chia cho 12 đường dây đầu ra và sau đó được đưa đến Timer làm tín hiệu xung. Điều đó có nghĩa là đối với 8051 chạy ở tần số 12 MHz, đầu vào xung của Timer (bộ định thời) sẽ là 1 MHz. Tóm lại là bộ định thời đếm lên một lần sau mỗi 1uS trễ và độ trễ thời gian tối đa có thể sử dụng một bộ định thời 8051 là (2 ^ 16) x (1 uS) = 65536 uS. Độ trễ lâu hơn mức này có thể được thực hiện bằng cách viết chương trình tạo độ trễ cơ bản sử dụng bộ đếm thời gian và sau đó lặp nó trong một khoảng thời gian cần thiết. Chúng ta sẽ thấy tất cả những điều này một cách chi tiết trong các phần tiếp theo của bài viết này.

 

Thiết kế chương trình tạo độ trễ sử dụng bộ đếm (timer) của 8051

 

Khi thiết kế các chương trình trì hoãn của 8051, việc tính toán giá trị ban đầu phải được tải vào các thanh ghi TH và TL. Giả sử bộ xử lý được xung nhịp là 12 MHz. Nghĩa là, đầu vào đồng hồ hẹn giờ sẽ là 12 MHz / 12 = 1 MHz, thời gian dành cho bộ định thời để tăng một giá trị thập phân = 1 / 1MHz = 1uS. Gọi X uS là thời gian trễ thì Timer phải đếm giá trị trễ tăng đến X rồi mới tăng số đếm ngõ ra một giá trị thập phân, với 2 ^ 16 = 65536 là số đếm tối đa có thể có cho bộ định thời 16 bit.Đặt TH là giá trị giá trị phải được tải vào thanh ghi TH và TL là giá trị phải được tải vào thanh ghi TL.

Vì vậy, THTL là dạng thập lục phân của (65536-X) trong đó (65536-X) được ở dạng thập phân.

 

Ví dụ:

 

Đặt độ trễ yêu cầu là 1000uS (tức là 1mS). Đồng nghĩa cho X = 1000 => 65536 – X =64536

 

Mà dạng thập lục phân của 64536 là FC18 nên THTL = FC18. Nghĩa là TH = FC và TL = 18

 

Viết chương trình tạo độ trễ 1mS dùng 8051

 

Chương trình hiển thị dưới đây có thể được sử dụng để tạo độ trễ 1mS và nó được viết dưới dạng chương trình con để bạn có thể gọi nó ở bất cứ đâu trong chương trình. Ngoài ra, bạn có

 

thể đặt chương trình con này trong một vòng lặp để tạo độ trễ thời gian dài hơn (bội số của 1mS). Ở đây Timer 0 của 8051 được sử dụng và nó đang hoạt động trong trạng thái MODE1 (bộ hẹn giờ 16 bit):

 

DELAY: MOV TMOD,#00000001B // Sets Timer 0 to MODE1 (16 bit timer). Timer 1 is not used

       MOV TH0,#0FCH // Loads TH0 register with FCH

       MOV TL0,#018H // LOads TL0 register with 18H

       SETB TR0 // Starts the Timer 0

HERE: JNB TF0,HERE // Loops here until TF0 is set (ie;until roll over)

Module điện tử 932*50

      CLR TR0 // Stops Timer 0

      CLR TF0 // Clears TF0 flag

      RET

 

Thời gian trễ ở trên có thể được lặp lại hai lần để có độ trễ 2mS và nó được hiển thị trong chương trình bên dưới:

 

MAIN: MOV R6,#2D
LOOP: ACALL DELAY
      DJNZ R6,LOOP
      SJMP MAIN
 
DELAY: MOV TMOD,#00000001B 
       MOV TH0,#0FCH
       MOV TL0,#018H 
       SETB TR0 
HERE: JNB TF0,HERE 
      CLR TR0 
      CLR TF0 
      RET

 

Vài điều cần nhớ khi sử dụng bộ định thời 8051:

 

Khi cờ hẹn giờ (TF) được đặt, lập trình viên phải xóa nó trước khi có thể đặt lại.

 

Bộ hẹn giờ không dừng sau khi đặt cờ hẹn giờ. Lập trình viên phải xóa bit TR để dừng bộ hẹn giờ.

 

Khi bộ đếm thời gian tràn, lập trình viên phải tải lại các giá trị bắt đầu vào các thanh ghi TH và TL để bắt đầu đếm từ đó.

 

Chúng ta có thể cấu hình bộ hẹn giờ mong muốn để tạo ngắt khi cờ TF được đặt.

 

Nếu ngắt không được sử dụng, thì chúng ta phải kiểm tra cờ hẹn giờ (TF) được đặt bằng một số lệnh rẽ nhánh có điều kiện.

 

Độ trễ tối đa có thể sử dụng một bộ đếm thời gian 8051 là 65536 uS và tối thiểu là 1uS với điều kiện đang sử dụng tinh thể 12 MHz để tạo xung nhịp cho vi điều khiển.

 

 Tạo xung vuông sử dụng bộ đếm 8051

Sóng vuông có tần số bất kỳ (giới hạn bởi thông số kỹ thuật của bộ điều khiển) có thể được tạo bằng bộ định thời 8051. Cách thức rất đơn giản: viết chương trình con trễ với độ trễ bằng một nửa khoảng thời gian của sóng vuông, đặt bất kỳ chân Port nào lên mức cao và gọi chương trình con trễ, sau khi chương trình con trễ kết thúc, làm cho chân Port tương ứng ở mức thấp, sau đó lặp lại chu trình một lần nữa. Kết quả sẽ là một sóng vuông có tần số mong muốn ở chân cổng được chọn. Sơ đồ mạch được hiển thị bên dưới và nó có thể được sử dụng cho bất kỳ sóng vuông nào, nhưng chương trình phải phù hợp. Các chương trình cho các sóng vuông khác nhau được hiển thị bên dưới sơ đồ mạch.

 

 

Xung vuông 1KHz sử dụng bộ đếm 8051

MOV P1,#00000000B
MOV TMOD,#00000001B
MAIN: SETB P1.0
      ACALL DELAY
      CLR P1.0
      ACALL DELAY
      SJMP MAIN
DELAY: MOV TH0,#0FEH
       MOV TL0,#00CH
       SETB TR0
HERE: JNB TF0,HERE
      CLR TR0
      CLR TF0
      SETB P1.0
      RET
      END 

 

Xung vuông 2KHz sử dụng bộ đếm 8051

MOV P1,#00000000B
MOV TMOD,#00000001B
MAIN: SETB P1.0
      ACALL DELAY
      CLR P1.0
      ACALL DELAY
      SJMP MAIN
DELAY: MOV TH0,#0FCH
       MOV TL0,#018H
       SETB TR0
HERE:JNB TF0,HERE
     CLR TR0
     CLR TF0
     SETB P1.0
RET
END

Ở cả 2 chương trình trên các câu lệnh hầu như đều giống nhau nhưng phần bôi đỏ thì khác nhau giữa 2 chương trình

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *