1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Kỹ thuật vi điều khiển-p10 potx

51 274 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Kỹ thuật vi điều khiển-p10 potx
Trường học Trường Đại học Công Nghệ Thông Tin - Đại Học Quốc Gia Hà Nội
Chuyên ngành Kỹ thuật vi điều khiển
Thể loại Giáo trình hướng dẫn
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 51
Dung lượng 410,82 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bộ định thời Timer dùng như 1 bộ tạo trễ – Nguồn xung clock chính là dao động thạch anh bên trong 2.. Bộ đếm sự kiện Event Counter – Đầu vào từ chân bên ngoài để đếm số sự kiện – Có thể

Trang 1

1 Giới thiệu

2 Sơ đồ khối và chân

3 Tổ chức bộ nhớ

4 Các thanh ghi chức năng đặc biệt (SFR)

5 Dao động và hoạt động reset

Trang 2

• 8051 có 2 timers/counters: timer/counter 0 & timer/counter 1

Chúng có thể được dùng như:

1 Bộ định thời (Timer) dùng như 1 bộ tạo trễ

– Nguồn xung clock chính là dao động thạch anh bên trong

2 Bộ đếm sự kiện (Event Counter)

– Đầu vào từ chân bên ngoài để đếm số sự kiện

– Có thể dùng đếm số người đi qua cổng, số vòng quay của

bánh xe, hay bất kể các sự kiện mà chuyển được sang dạngxung

3 Tạo tốc độ baud (baud rate) cho port nối tiếp của 8051

10-1 Giới thiệu

Trang 3

• Khởi tạo giá trị ban đầu cho các thanh ghi

• Kích hoạt Timer, sau đó 8051 tính lên

• Ngõ vào là từ clock nội (machine cycle)

• Khi các thanh ghi bằng 0 thì 8051 sẽ set cờ tràn

toLCDP1

8051

TH0

P2Set

Timer 0

Trang 4

• Đếm số sự kiện:

– Chỉ ra số sự kiện trên các thanh ghi

– Counter 0: Ngõ vào từ chân bên ngoài T0 (P3.4)

– Counter 1: Ngõ vào từ chân bên ngoài T1 (P3.5)

T0

toLCDP3.4

P1

a switch

TL0 TH0

Trang 5

Các thanh ghi dùng truy xuất Timer/Counter

• TH0, TL0, TH1, TL1

• 8052 với 3 timers/counters sẽ có thêm các thanh ghi T2CON (Timer 2 control register), TH2 and TL2

8Bh Timer 1 Low Byte

TL1

8Dh Timer 1 High Byte

TH1

8Ah Timer 0 Low Byte

TL0

8Ch Timer 0 High Byte

TH0

SFR Address Description

SFR Name

Trang 6

TH0, TL0, TH1, TL1 (not bit addressable)

• Cả timer 0 & timer 1 đều có độ rộng 16 bits

– Các thanh ghi này lưu trữ

• Giá trị tạo thời gian trễ (time delay) (nếu là timer)

• Số sự kiện (number of events) (nếu là counter)– Timer 0: TH0 & TL0

• Timer 0 high byte, timer 0 low byte– Timer 1: TH1 & TL1

• Timer 1 high byte, timer 1 low byte– Mỗi bộ định thời 16-bit có thể được truy cập như 2 thanh ghi 8-bit tách biệt

Trang 8

10-2 Thanh ghi chế độ định thời TMOD

• Timer mode register: TMOD (not bit addressable)

– Thanh ghi 8-bit

– Thiết lập chế độ hoạt động cho các bộ định thời:

• 4 bits thấp dành cho Timer 0 (Set to 0000 if not used)

• 4 bits cao dành cho Timer 1 (Set to 0000 if not used)

Trang 9

Bit điều khiển cổng Khi set lên 1, timer chỉ hoạt động khi

chân /INTx ở mức cao và TRx = 1 Khi xóa, timer hoạt độngkhi TRx = 1

Trang 10

• Điều khiển bên ngoài (External control)

• Bật hay tắt timer bằng phần mềm & một nguồn bênngoài (external source)

• Timer được cho phép khi chân /INT ở mức cao & TR được set

Trang 12

M1, M0

3 2

1 0

Mode

Chế độ định thời chia sẻ

(Split timer mode)

1 1

Chế độ tự động nạp lại 8-bit

(auto reload mode)

8-bit auto reload timer/counter;

THx lưu trữ giá trị nạp lại cho TLx mỗikhi tràn (overflow)

0 1

Chế độ định thời 16-bit

8-bit THx + 8-bit TLx1

0

Chế độ định thời 13-bit

8-bit THx + 5-bit TLx (x= 0 or 1)0

0

Hoạt động M0

M1

Trang 13

Giải đáp:

VD: Tìm giá trị TMOD nếu muốn lập trình Timer 0 làm việc ở

mode 2 ? Dùng 8051 XTAL cho xung clock, & dùng lệnh để

Trang 14

10-3 Thanh ghi điều khiển định thời TCON

• Timer control register: TCON

– ½ byte cao cho timer/counter, ½ byte thấp cho interrupts

• TR (run control bit)

– TR0 for Timer/counter 0; TR1 for Timer/counter 1

– TR được set hay xóa bởi phần mềm để bật/tắt timer/counter

• TR=0: off (stop)

• TR=1: on (start)

Timer 1 Timer0 for Interrupt

Trang 15

• TF (timer flag, control flag)

– Cờ tràn của bộ định thời

– TF0 cho timer/counter 0; TF1 cho timer/counter 1

– Khởi đầu, TF=0 & được set bởi phần cứng khi có tràn – tứcTH-TL chuyển đếm về 0000 từ FFFFH

• Nếu cho phép ngắt, thì TF=1 sẽ kích khởi ISR– Được xóa bởi phần mềm (hoặc bởi phần cứng khi bộ xi xử

Timer 1 Timer0 for Interrupt

Trang 16

10-4 Các chế độ định thời

TLx

THx

TFx overflow flagreload

Trang 17

3 2

1 0

Mode

Chế độ định thời chia sẻ1

1

Chế độ tự động nạp lại 8-bit

(auto reload mode)

8-bit auto reload timer/counter;

THx lưu trữ giá trị nạp lại cho TLx mỗikhi tràn (overflow)

0 1

Chế độ định thời 16-bit

8-bit THx + 8-bit TLx1

0

Chế độ định thời 13-bit

8-bit THx + 5-bit TLx (x= 0 or 1)0

0

Hoạt động M0

M1

Trang 18

1 Chọn timer 0 làm việc ở mode 1 (định thời 16-bit)

Trang 19

5 Khi có xung clock đến, 8051 bắt đầu đếm lên bằng cách tăng

giá trị trong các thanh ghi TH0-TL0

Stop timer

TF Theo dõi TF đến khi TF = 1

Trang 21

C/T=0: up C/T=0: down

Nguồn xung clock cung cấp cho bộ định thời

Trang 22

EViết chương trình tạo sóng vuông có thời gian mức cao vàthấp bằng nhau trên chân P1.5 Dùng Timer 0 tạo trễ mode 1

; each loop is a half clock

MOV TMOD, #01 ;Timer 0,mode 1(16-bit) HERE: MOV TL0, #0F2H ;Giá trị Timer0 = FFF2H

MOV TH0, #0FFH CPL P1.5

ACALL DELAY SJMP HERE

Trang 23

TF0 = 0 TF0 = 0 TF0 = 0 TF0 = 0 TF0 = 1

Trang 24

Vài điểm cần chú ý trong VD trên:

1 TMOD = 0000 0001 được thực thi

2 FFF2H chuyển vào TH0 – TL0

3 Set và xóa P1.5 trong thời gian mức cao và thấp của xung

4 CTC DELAY dùng Timer được gọi

5 Trong CTC DELAY, bật timer 0 dùng lệnh “SETB TR0

6 Timer 0 đếm lên mỗi khi có xung clock (cung cấp bởi dao

Chú ý, làm việc với mode 1, nên để lặp lại tiến trình, ta phải nhập lại giá trị cho các thanh ghi TH-TL & bật lại Timer.

Trang 25

10-4-2 Chế độ định thời 13-bit (mode 0)

• Mode 0 tương tự mode 1, ngoại trừ nó là 13-bit timer thay vì16-bit

Trang 26

10-4-3 Chế độ tự nạp lại 8-bit (mode 2)

• Bộ định thời 8-bit

– Cho phép các giá trị từ 00 đến FFH lưu trong TH0

• Tự động nạp lại (Auto-reloading)

• TL0 được tăng lên khi TR0=1

TLx THx

TFx overflow flagreload TF goes high when FF à 0

Timer clock

Trang 28

6 8051 đếm lên TL0

TL0= 38H, 39H, 3AH,

7 Khi TL0 từ FFH à 00 thì 8051 set TF0=1 Bên cạnh đó,

TL0 được tự động nạp lại giá trị lưu giữ trong TH0

Trang 29

TH1

TF1 overflow flagreload

TF goes high when FF à 0

XTAL

oscillator ÷ 12

C/T=0: up C/T=0: down

Trang 30

10-5 Tính toán trễ dùng Timer

(a) Dạng hexa

(FFFF – YYXX + 1) * 1.085 ms

Trong đó YYXX là các giá

trị ban đầu của TH, TL

tương ứng

(b) Dạng thập phân

Chuyển các giá trị YYXX của TH, TL sang dạng thậpphân NNNNN, à ta có

(65536 – NNNNN) * 1.085 ms

XTAL = 11.0592 MHz

Áp dụng đ/v chế độ định thời 16-bit (mode 1)

Trang 31

EChương trình sau tạo sóng vuông trên chân P1.5 liên tục dùng

timer 1 tạo trễ mode 1 Tìm tần số?

(Không bao gồm overhead gây bởi các lệnh trong vòng lặp)

MOV TMOD,#10H ;timer 1, mode 1 AGAIN:MOV TL1,#34H ;timer value=7634H

MOV TH1,#76H SETB TR1 ;start BACK: JNB TF1,BACK

Trang 33

• ETìm KQ các bài toán trên trong trường hợp có tính đến

Trang 34

10-6 Tìm giá trị các thanh ghi định thời

• Giả định biết trước thời gian trễ, XTAL = 11.0592 MHz

• Làm sao tính toán các giá trị cần gán cho TH, TL?

1 Chia thời gian trễ cho 1.085 ms.

2 Thực hiện 65536 –n, với n (decimal) từ bước 1

3 Chuyển KQ trong bước 2 sang hex yyxx

4 Set TH = yy và TL = xx.

Trang 35

EXTAL = 11.0592 MHz, viết chương trình tạo sóng vuông 50

Trang 36

MOV TMOD,#10H ;timer 1, mode 1 AGAIN: MOV TL1,#00 ;Timer value = DC00H

MOV TH1,#0DCH SETB TR1 ;start BACK: JNB TF1,BACK

CLR TR1 ;stop CPL P2.3

CLR TF1 ;clear timer flag 1 SJMP AGAIN ;reload timer since

;mode 1 is not

;auto-reload

Trang 37

Tạo thời gian trễ lớn

• Độ lớn tdelay phụ thuộc 2 thông số:

Trang 38

EKhảo sát BT sau và tìm thời gian trễ? (Không tính overhead)

MOV TMOD,#10H

MOV R3,#200

AGAIN: MOV TL1,#08H

MOV TH1,#01H SETB TR1 BACK: JNB TF1,BACK

CLR TR1 CLR TF1 DJNZ R3,AGAIN

Giải đáp:

TH – TL = 0108H = 264 (decimal)

65536 – 264 = 65272

Trễ do timer = 65272 × 1.085 ms = 70.820 ms

Tổng thời gian trễ = 200 × 70.820 ms = 14.164024 seconds

Bài toán 10.5 Tính delay

Trang 39

ETìm tần số xung vuông trên chân P1.0 ?

MOV TMOD, #2H ;Timer 0,mode 2 MOV TH0, #0

AGAIN: MOV R5, #250 ;count 250 times

ACALL DELAY CPL P1.0

SJMP AGAIN

DELAY: SETB TR0 ;start

BACK: JNB TF0,BACK

CLR TR0 ;stop CLR TF0 ;clear TF

DJNZ R5,DELAY ;timer 2: auto-reload RET

Bài toán 10.6 Tính tần số xung vuông

Trang 40

Bài toán 10.7 Tìm giá trị gán cho TH

EGiả sử đang lập trình

cho Timer ở mode 2, tìm

giá trị hex gán cho thanh

ghi TH trong các trường

Trang 41

(a) Tìm tần số sóng vuông với đoạn code sau

(b) Thời gian mức cao và thấp

MOV TH0, #-150 ;Count=150 AGAIN:SETB P1.3

ACALL DELAY ACALL DELAY

CLR P1.3 ACALL DEALY

Bài toán 10.8 Tìm f

Trang 43

• Các bộ định thời (timers) cũng có thể dùng như những bộ đếm

(counters) để đếm sự kiện xảy ra bên ngoài 8051

• Khi đó, xung từ ngoài sẽ làm tăng giá trị các thanh ghi TH, TL

• Khi C/T=1, bộ đếm sẽ đếm lên khi có xung xuất hiện từ:

– T0: timer 0 input (Pin 14, P3.4)

– T1: timer 1 input (Pin 15, P3.5)

Timer/Counter 1 external input T1

P3.5 15

Timer/Counter 0 external input T0

P3.4 14

Description Function

Port Pin Pin

10-7 Bộ đếm

Trang 44

10-7-1 Chế độ đếm 16-bit (mode 1)

• Giá trị trong các thanh ghi TH0-TL0 tăng khi: TR0 được set lên 1 và một xung bên ngoài (T0) xuất hiện

• Khi bộ đếm (TH0-TL0) đạt tới giá trị lớn nhất là FFFFH, nóđược chuyển trạng thái về 0000, và TF0 được set lên 1

• Bằng cách nạp giá trị ban đẩu cho TH0-TL0, theo dõi TF0=1

để nhận biết 1 tình huống nào đó (vd: 100 người đã đến)

TF0 goes high when FFFF à 0

overflow flag C/T = 1

Timer 0 ngõ vào

từ bên ngoài

chân 3.4 (T0)

Trang 46

Bài toán 10.9 Đếm xung & xuất port

Giả định 1 xung clock được đưa vào chân T1, viết chương

trình bộ đếm 1 làm việc ở mode 2 để đếm xung & hiển thị giátrị của TL1 ra P2, khi Counter tràn thì kết thúc?

T1

toLEDsP3.5

P2

8051

Trang 47

BACK: MOV A,TL1

MOV P2,A ;display in P2JNB TF1,BACK ;overflow

Trang 48

• Giả sử 1 xung tần số 1Hz được cấp vào chân P3.4 Viết

chương trình hiển thị counter 0 trên LCD Khởi tạo giá trị ban đầu cho thanh ghi TH0 là -60

T0

toLCDP3.4

P1

8051

1 Hz clockBài toán 10.10 Đếm xung & Hiển thị LCD

Trang 49

ACALL LCD_SET_UP ;initialize the LCD MOV TMOD,#00000110B ;Counter 0,mode2 MOV TH0,#-60

SETB P3.4 ;make T0 as input AGAIN:

SETB TR0 ;starts the counter

BACK:

MOV A,TL0 ;every 60 events

ACALL CONV ;convert in R2,R3,R4 JNB TF0,BACK ;loop if TF0=0

CLR TR0 ;stop CLR TF0

SJMP AGAIN

Trang 50

;converting 8-bit binary to ASCII

CONV : MOV B,#10 ;divide by 10

DIV AB MOV R2,B ;save low digit MOV B,#10 ;divide by 10 once more DIV AB

ORL A,#30H ;make it ASCII MOV R4,A

MOV A,B

ORL A,#30H

MOV R3,A MOV A,R2

ORL A,#30H

MOV R2,A ;ACALL LCD_DISPLAY here RET

Trang 51

• Cải tiến ví dụ trên thực hiện 1 đồng hồ số đơn giản, chưa cầncác nút hiệu chỉnh giở, phút ?

• Việc sử dụng lệnh “JNB TF0,target” để giám sát cờ TF0

là sự hoang phí thời gian vô cùng lớn

– Giải pháp là dùng ngắt, đề cập trong phần 12 của bài giảng– Với ngắt, ta có thể thực thi nhiều việc

– Khi cờ TF được set, nó sẽ thông báo cho chúng ta

Bài toán 10.11 Đồng hồ số

Ngày đăng: 11/08/2014, 01:20

HÌNH ẢNH LIÊN QUAN

2. Sơ đồ khối và chân 3. Tổ chức bộ nhớ - Kỹ thuật vi điều khiển-p10 potx
2. Sơ đồ khối và chân 3. Tổ chức bộ nhớ (Trang 1)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w