1. Trang chủ
  2. » Giáo án - Bài giảng

vi xu ly bui minh thanh vxl ch06 laptrinhc8051 p2 cuuduongthancong com

31 4 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 đề Lập trình C cho 8051 (Phần 2)
Tác giả Bùi Minh Thành
Trường học Trường Đại Học Bách Khoa, Đại Học Quốc Gia TP.Hồ Chí Minh
Chuyên ngành Kỹ Thuật Điện Tử
Thể loại Chương
Thành phố TP.Hồ Chí Minh
Định dạng
Số trang 31
Dung lượng 1,28 MB

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

Nội dung

Bộ môn Kỹ Thuật Điện Tử - ĐHBK0 – Timer dùng để định thời hoặc đếm sự kiện.. Thanh ghi TCONTFx: Cờ báo tràn của timer, đặt lên 1 bởi phần cứng khi timer tràn, được xoá về 0 bằng phần mề

Trang 1

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA

Trang 2

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 2

Trang 4

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Giới thiệu

• Hàm sau dùng để tạo trễ theo đơn vị ms (Cho

tần số xung nhịp của 8051 là 12Mhz) Ví dụ

muốn trễ 1s ta gọi Delay_ms(1000);

• Rất khó để tạo khoảng thời gian trễ chính xác

nếu không có sự hỗ trợ của Compiler.

4

Hàm này được phát triển bằng cách sử dụng chức năng Performance Analyzer của Keil C

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 5

Giới thiệu

• Hàm DELAY_ms(1000);

Trang 6

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

0 – Timer dùng để định thời hoặc đếm sự kiện Timer chạy khi bit TR ở mức cao

C/T: Bit chọn counter hay timer

0 - Chế độ định thời với tốc độ đếm bằng 1/12 tốc độ xung clock hệ thống

1 - Chế độ đếm sự kiện (thông qua chân T0 hoặc T1) với tốc độ đếm tối đa là 500kHz vớithạch anh 12MHz

M1, M0: dùng để xác định chế độ hoạt động của timer.

00 - chế độ 0, timer 13 bit

01 - chế độ 1, timer 16 bit

10 - chế độ 2, timer 8 bit, tự động nạp lại giá trị đầu

11 - chế độ 3, tách timer TL0 là timer 8 bit, điều khiển bởi các bit chế độ của timer0, TH0 làtimer 8 bit, điều khiển bởi các bit chế độ của timer1

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 7

Thanh ghi TCON

TFx: Cờ báo tràn của timer, đặt lên 1 bởi phần cứng khi timer tràn, được xoá về 0

bằng phần mềm hoặc bằng phần cứng nếu cờ tràn làm cho chương trình phục vụ ngắt (ISR) được gọi.

TRx: Bit điều khiển timer chạy Được đặt/xoá bằng phần mềm để cho timer

dừng/chạy

(x = 1: timer1, x = 0: timer0)

IEx: Cờ cạnh ngắt ngoài Đặt bởi phần cứng khi phát hiện cạnh xuống ở chân INTx,

xoá bằng phần mềm hoặc phần cứng khi CPU chỉ đến ISR.

ITx: Cờ kiểu ngắt Được thiết lập bằng phần mềm:

1 - Ngắt ngoài tích cực cạnh xuống.

0 - Ngắt ngoài tích cực mức thấp.

(x = 1: ngắt ngoài 1, x = 0: ngắt ngoài 0)

Trang 8

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Các ví dụ

8

VD1: Viết chương trình để bật tắt các bit của port 1 liên tục với một

khoảng thời gian trễ (sử dụng timer 0)

Cho thạch anh 12Mhz Tính khoảng

thời gian trễ của hàm T0Delay()?

FFFFH-3500H+1=CB00H=51968

1 ms  51968  52ms

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 9

Các ví dụ

VD2: Một SW được nối vào P1.0 và LED được nối vào P1.7 Viết

chương trình giám sát trạng thái SW và tạo các xung sau trên chân P1.7

SW=0: 500 Hz;

SW=1: 750 Hz Dùng timer với thạch anh 11.059Mhz

f = 500Hz -> T = 2000us -> Tdelay = 1000us = 921TM= 399H TMTH0:TL0 = FFFF + 1 – 399 = FC67H

f = 750Hz -> T = 1333us -> Tdelay = 666us = 614TM = 266H TMTH0:TL0 = FFFF + 1 – 266A = FD9AH

Trang 10

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

VD 2

10CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 11

VD 3 VD3: Viết chương trình tạo xung 1Hz trên chân P1.7 Thạch anh 12Mhz

Trang 12

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Trang 13

VD4: Giả sử xung 1Hz được nối đến chân T1 (P3.5) của timer Viết chương trình cho counter 1 hoạt động ở mode 2 đếm lên và hiển thị giá trị của TL1 lên P1.

Trang 14

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 14

Trang 15

Giới thiệu

• Hai thanh ghi truy cập đến cổng nối tiếp là SBUF và SCON

SM0 SM1 SM2 REN TB8 RB8 TI RI

SM0,SM1: xác định chế độ hoạt động cho cổng nối tiếp

00 - chế độ 0, cổng nối tiếp trở thành thanh ghi dịch, dữ liệu vào và ra trên chân RXD, chân TXD

là ngõ ra của xung nhịp dịch Tốc độ baud cố định và bằng 1/12 lần tần số mạch dao động trên chip

01 - chế độ 1, hoạt động ở chế độ UART 8 bit, tần số thay đổi được, chỉnh bằng timer

10 - chế độ 2, hoạt động ở chế độ UART 9 bit, tần số cố định và bằng 1/12 tần số dao động trên chip

11 - chế độ 3, UART 9 bit, tần số thay đổi được, chỉnh bằng timer

SM2: sử dụng trong truyền thông đa xử lý trong các chế độ 2 và 3 sẽ không được kích hoạt nếu bit 9 của

bộ thu là 0

REN: bit cho phép bộ thu, phải đặt lên 1 để thu các ký tự

TB8: bit truyền 8, là bit thứ 9 được phát đi trong các chế độ 2 và 3 Được đặt xóa bằng phần mềm

RB8: bit nhận 8, là bit thứ 9 nhận được

TI: cờ ngắt phát Được đặt lên 1 khi kết thúc truyền ký tự, xoá bằng phần mềm

RI: cờ ngắt thu Được đặt lên 1 khi kết thúc nhận ký tự, xoá bằng phần mềm

Trang 16

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Hoạt động

• Bước 1: Cài đặt chế độ hoạt động trong thanh ghi SCON

• Bước 2: Thiết lập tốc độ baud (tốc độ tràn của timer 1)

• Bước 3: Đọc/ghi byte dữ liệu (SBUF)

• Bước 4: Đợi RI/TI được bật lên 1

16CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 17

Ví dụ

Viết chương trình dùng để truyền ký tự “A” nối tiếp với tốc độ baud là

4800 Sử dụng 8-bit dữ liệu và 1 stop bit

Trang 18

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 18

Trang 19

Giới thiệu

• Trong 8051 có tất cả 5 nguồn ngắt gồm: ngắt

ngoài 0, ngắt timer0, ngắt ngoài 1, ngắt timer1

và ngắt của cổng nối tiếp.

• Khi sử dụng cần quan tâm đến hai thanh ghi:

– Thanh ghi cho phép ngắt (IE)

– Thanh ghi điều khiển chế độ ưu tiên (IP)

Trang 20

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Thanh ghi IE và IP

EA ET2 ES ET1 EX1 ET0 EX0 EA: Cấm hoặc cho phép tất cả các ngắt không bị che.

ET2: Cấm hoặc cho phép ngắt timer2 (8052)

ES: Cấm hoặc cho phép ngắt từ cổng nối tiếp.

ET1: Cấm hoặc cho phép ngắt timer1.

EX1: Cấm hoặc cho phép ngắt ngoài 1.

ET0: Cấm hoặc cho phép ngắt timer0.

EX0: Cấm hoặc cho phép ngắt ngoài 0.

(0 = Cấm, 1 = cho phép)

20

PT2 PS PT1 PX1 PT0 PX0

PT2: Ưu tiên cho ngắt timer2 (8052).

PS: Ưu tiên cho ngắt nối tiếp.

PT1: Ưu tiên cho ngắt timer1.

PX1: Ưu tiên cho ngắt ngoài 1.

PT0: Ưu tiên cho ngắt timer0.

PX0: Ưu tiên cho ngắt ngoài 0.

(mức 0 = không ưu tiên, mức 1 = ưu tiên)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 21

Địa chỉ vector ngắt

Interrupt Vector address Interrupt number

External 0 0003h 0 Timer 0 000Bh 1 External 1 0013h 2 Timer 1 001Bh 3 Serial 0023h 4

Cú pháp chương trình phục vụ ngắt:

void ngat_noi_tiep(void) interrupt 4 using 1 {

/* Cac lenh can thuc thi */

}

interrupt 4 using 1 dùng để khai báo cho trình biên dịch biết đây là ISR của cổng

Trang 22

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

Ngắt timer

VD1: Tạo xung vuông trên chân P1.0 dùng ngắt timer

22CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 23

Ngắt timer

VD 2: Viết chương trình liên tục đọc 1 bit từ dữ liệu từ P1.0 và xuất

nó ra P1.3 Trong khi đó đồng thời tạo xung vuông có chu kz 200us trên chân P1.7.

Sử dụng timer 0 để tao xung, giả sử thạch anh là 11.059MHz.

Trang 24

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

VD 2

24CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 25

Ngắt timer và cổng nối tiếp

VD3: Viết chương trình liên tục đọc 1 bit dữ liệu từ P1.0

và xuất nó ra P1.3 Trong khi đó liên tục:

- Tạo xung vuông có chu kz 400us trên chân P1.7

- Gửi k{ tự ‘A’ đến cổng nối tiếp

Sử dụng ngắt timer 0 để tạo xung vuông, thạch anh

11.059Mhz, tốc độ baud là 9600

LED

8051

P1.3

Trang 26

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

VD 3

26CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 28

Bộ môn Kỹ Thuật Điện Tử - ĐHBK 28

R E

A13 A14 A15

GND VDD

XTAL2 18

XTAL1 19

RST 9

P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15

AD[0 7]

A[8 15]

ALE 30

EA 31PSEN 29

P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8

U1

8051 PROGRAM=TN8051.hex SRCFILE=P1_toggle.c

D0

3 Q0 2 D1

4 Q1 5 D2

7 Q2 6 D3

8 Q3 9 D4

13 Q4 12 D5

14 Q5 15 D6

17 Q6 16 D7

18 Q7 19 OE

1 LE 11

1

U3:A

74LS28

A 1 B 2 C 3

E1 6 E2 4 E3 5

Y0 15Y1 14Y2 13Y3 12Y4 11Y5 10Y6 9Y7 7

Trang 29

Bài tập 3: Viết chương trình tạo xung 1Khz, duty

cycle là 40% trên chân P1.7, trong khi đó liên tục phát chuỗi k{ tự “Hello world” ra LCD 16x2.

Trang 30

Bộ môn Kỹ Thuật Điện Tử - ĐHBK

- Ngược lại thì phát nó ra cổng nối tiếp.

- Trong khi đó liên tục tao xung vuông 500Hz trên chân

P1.3

Yêu cầu dùng ngắt cổng nối tiếp, thạch anh 12Mhz, tốc độ baud 9600.

30CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 31

Tài liệu tham khảo

• Hồ Trung Mỹ, Vi xử l{, Nhà xuất bản Đại học Quốc Gia

Tp HCM - 2003

• I Scott MacKenzie , The 8051 Microcontroller, 2nd

Edition, Prentice-Hall, 1995

• Derek Molloy, EE402 - Lecture note

• Slide bài giảng thầy Hồ Trung Mỹ

• Thomas W.Schultz, C and the 8051 – Second Edition.

• Dogan Ibrahim, Microcontroller Projects in C for the

8051, Newnes – 2000.

Ngày đăng: 27/12/2022, 13:48

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