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

bai giang vi dieu khien

142 539 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

Định dạng
Số trang 142
Dung lượng 0,94 MB

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

Nội dung

• ALE/PROG Program Store Enable– ALE Address Latch Enable là tín hiệu chốt byte thấp của địa chỉ trong suốt quá trình truy xuất bộ nhớ ngoài – Chân này cũng được làm ngõ vào xung lập t

Trang 1

VI ĐIỀU KHIỂN 89C51

Trang 2

GIỚI THIỆU PHẦN CỨNG

Chương 1

Trang 4

SƠ ĐỒ CHÂN

Trang 7

MÔ TẢ CÁC CHÂN

• Port 0: là port 8 bit có 2 chức năng

– Là I/O port đối với các thiết kế cỡ nhỏ ( không

sử dụng bộ nhớ mở rộng)

– Là byte thấp của address/data bus khi thiết kế

có sử dụng bộ nhớ mở rộng

• Port 1: là I/O port 8 bit

• Port 2: là port 8 bit có 2 chức năng

– Là I/O port đối với các thiết kế cỡ nhỏ ( không

sử dụng bộ nhớ mở rộng)

– Là byte cao của address/data bus khi thiết kế

có sử dụng bộ nhớ mở rộng

Trang 8

• Port 3: là port 8 bit có nhiều chức năng

– Là I/O port

– Có công dụng chuyển đổi có liên hệ với các tính năng đặc biệt của 89C51 được mô tả bởi bảng sau:

Trang 9

CÁC TÍN HIỆU ĐIỀU

KHIỂN

– Là tín hiệu để cho phép đọc bộ nhớ chương trình mở rộng ( bộ nhớ ngoài)

– Khi 89C51 đọc mã lệnh từ bộ nhớ chương trình mở rộng thì PSEN được tích cực (mức thấp) 2 lần trong mỗi chu kỳ máy

– Khi 89C51 thi hành chương trình trong ROM nội thì PSEN sẽ ở mức cao

Trang 10

• ALE/PROG ( Program Store Enable)

– ALE ( Address Latch Enable) là tín hiệu chốt byte thấp của địa chỉ trong suốt quá trình truy xuất bộ nhớ ngoài

– Chân này cũng được làm ngõ vào xung lập trình (PROG) cho EPROM

– Ở chế độ họat động bình thường thì xung ALE có tốc độ bằng 1/6 tần số dao động trên chip và có thể được dùng làm nguồn xung nhịp cho các phần khác của hệ thống

Trang 11

nhất 2 chu kỳ máy thì sẽ khởi động lại hệ thống

Trang 12

TỔ CHỨC BỘ NHỚ

• 89C51 có cả ROM nội và RAM nội, tuy nhiên có thể mở rộng thêm bằng các thiết

bị nhớ bên ngoài

– RAM lưu trữ đa dụng

– RAM được địa chỉ hóa từng bit

– Các bank thanh ghi

– Các thanh ghi chức năng đặc biệt

Trang 14

• RAM đa dụng có địa chỉ từ 30H đến 7FH

có thể được truy xuất tự do dùng cách đánh địa chỉ trực tiếp hoặc gián tiếp.

từ 20H đến 2FH và một phần trong các thanh ghi chức năng đặc biệt Các bit có thể được đặt, xóa, and, or…với một lệnh đơn.

ghi từ R0 đến R7.

Trang 15

– Các bit RS1 và RS0 trong thanh ghi PSW sẽ được dùng để chọn bank thanh ghi tích cực

– Trạng thái mặc định thì các thanh ghi này sẽ ở bank 0

và nhanh hơn các lệnh tương ứng sử dụng địa chỉ trực tiếp

Trang 16

ghi PSW (từ trạng thái chương

trình)

Trang 17

– Cờ carry (CY) được xác lập khi phép cộng có nhớ ở bit 7 và phép trừ có mượn ở bit 7

• Ví dụ : thanh ghi A đang chứa giá trị FFH, sau khi thực hiện lệnh ADD A,#1 thì kết quả của phép tóan là 00H được chứa trong thanh ghi A đồng thời bit CY của thanh ghi PSW sẽ được xác lập (đặt lên mức 1)

– Cờ AC được xác lập khi phép cộng trên số BCD có nhớ

– Cờ F0 là cờ có công dụng tổng quát dành cho các ứng dụng của người lập trình

– Cờ báo tràn OV được xác lập khi có sự tràn

số học trong các phép toán cộng, trừ Khi thực hiện các phép toán với số không dấu thì không cần quan tâm đến cờ này

Trang 18

– Bit parity chẵn P: tổng số các bit 1 trong thanh ghi A và bit P phải là một số chẵn

– P0, P1, P2, P3

– Tất cả các port này đều được địa chỉ hóa từng bit

Trang 19

• Thanh ghi định thời gian

– 89C51 có 2 timer/counter 16 bit có chức năng định thời gian và đếm sự kiện

– Timer 0 có 2 thanh ghi TH0 (byte cao) và TL0 (byte thấp)

– Timer 1 có 2 thanh ghi TH1 (byte cao) và TL1 (byte thấp)

– Hoạt động của timer được thiết lập bởi thanh ghi chế độ TMOD và thanh ghi điều khiển TCON

Trang 20

TẬP LỆNH

Chương 2

Trang 22

CÁC CÁCH ĐỊNH ĐỊA

CHỈ

• Định địa chỉ thanh ghi (Rn):

– 89C51 có 8 thanh ghi làm việc được kí hiệu

từ R0 đến R7

– Trong định địa chỉ thanh ghi, mã lệnh

luôn luôn có 3 bit để chỉ thị một thanh ghi

– Ví dụ: MOV A, R0

Trang 24

• Định địa chỉ trực tiếp (direct):

– Lệnh hiện hành sẽ cung cấp địa chỉ tuyệt đối của ô nhớ sử dụng

– Lệnh có ít nhất 2 byte, trong đó địa chỉ ô nhớ chiếm 1byte

– Ví dụ : MOV A, 40H

Trang 25

• Định địa chỉ gián tiếp thanh ghi (@Ri):

– i = 0,1

– Ri hoạt động như một con trỏ thanh ghi,nội dung của Ri chỉ ra một ô nhớ trong Ram nội

– Mã lệnh có bit thấp nhất được dùng đểxác định con trỏ thanh ghi nào được sử dụng– Ví dụ : MOV A, @R0

Trang 26

• Định địa chỉ tức thời (#data):

– Với lệnh này thì data không phải là địa chỉ mà

là dữ liệu thật, dữ liệu 8bit (hằng số)

– Ví dụ: MOV A, #12

– Khi sử dụng con trỏ dữ liệu DPTR thì

cần phải có dữ liệu 16bit (#data16)

– Ví dụ : MOV DPTR, #8000H

Trang 27

NHÓM LỆNH CHUYỂN DỮ LiỆU

– Chuyển dữ liệu trong không gian bộ nhớ nội

– Hướng chuyển dữ liệu là từ Nguồn đến Đích

 MOV A, Rn: chuyển nội dung thanh ghi Rn vào A

 MOV A, @Ri: chuyển dữ liệu gián tiếp vào A

 MOV A, direct: chuyển dữ liệu trực tiếp

từ ô nhớ vào A

 MOV A, #data: chuyển giá trị dữ liệu tức thời vào A

Trang 28

 MOV Rn, A: chuyển nội dung thanh ghi A vào thanh ghi Rn

 MOV Rn, direct: chuyển dữ liệu trực tiếp từ ô nhớ vào thanh ghi Rn

 MOV Rn, #data: chuyển giá trị dữ liệu tức thời vào thanh ghi Rn

 MOV direct, A

 MOV direct, Rn

 MOV direct, direct

 MOV direct, @Ri

 MOV direct, #data

Trang 29

 MOV @Ri, A

 MOV @Ri, direct

 MOV @Ri, #data

Trang 30

• MOVX đích, nguồn

– Chuyển dữ liệu giữa RAM nội và RAM bên ngoài

– Hướng chuyển dữ liệu là từ Nguồn đến Đích

– Địa chỉ của ngọai vi (ô nhớ ngoài) sẽ là nội dung của thanh ghi DPTR

– Khi làm việc với bộ nhớ ngoài có dung lượng thấp ( <256byte) thì chỉ cần 8bit địa chỉ thấp và

ta sẽ sử dụng cách định địa chỉ gián tiếp thanh ghi @Ri để chứa địa chỉ 8bit này

Trang 31

 MOVX @Ri, A: ghi dữ liệu từ A ra ô nhớ

Trang 32

Ví dụ áp dụng:

• Ở trạng thái ban đầu thanh ghi R1 chứa giá trị 40H, ô nhớ Ram nội ở địa chỉ 40H chứa giá trị FFH, sau khi thực thi lệnh các thanh ghi và ô nhớ

sẽ có giá trị như thế nào?

Trang 33

NHÓM LỆNH SỐ HỌC VÀ LUẬN

– Lệnh cộng sẽ lưu kết quả tính tóan vào thanh ghi A

– Lệnh cộng sẽ tác động đến cờ CY trong thanh ghi PSW

– Lệnh ADDC sẽ cộng cả nội dung của cờ nhớ CY

– Ví dụ : A chứa giá trị là 12H, sau khi thực hiện lệnh ADD A, #36H thì giá trị của A sẽ là 48H và bit cờ CY=0

Trang 34

• SUBB: lệnh trừ dữ liệu

– Lệnh trừ sẽ lưu kết quả tính tóan vào thanh ghi A

– Lệnh trừ sẽ tác động đến cờ CY trong thanh ghi PSW

– Để cho kết quả của phép toán được chính xác thì trước khi dùng lệnh trừ ta nên xóa cờ CY

– Ví dụ lệnh SUBB A, R1 sẽ thực hiện phép tóan: nội dung của thanh ghi A - nội dung của thanh ghi R1 - nội dung bit cờ CY Kết quả cất trở lại vào thanh ghi A

Trang 35

• INC: lệnh tăng lên 1 đơn vị

– Lệnh này không tác động đến cờ CY

– Lệnh này không tác động đến cờ CY

– Lệnh này lấy nội dung của thanh ghi A nhân với nội dung của thanh ghi B Byte thấp của kết quả được cất vào A, byte cao của kết quả được cất vào B

– Lệnh này lấy nội dung của thanh ghi A chia cho nội dung của thanh ghi B Phần nguyên của kết quả được cất vào A, phần dư của kết quả được cất vào B

Trang 36

• Nhóm lệnh luận lý

– ANL : lệnh AND

– ORL : lệnh OR

– XRL : lệnh XOR

– RL A: lệnh quay trái thanh ghi A đi 1 bit

– RR A: lệnh quay phải thanh ghi A đi 1 bit

– RLC A: quay trái thanh ghi A có cờ CY

– RRC A: quay phải thanh ghi A có cờ CY

– SWAP A: hóan đổi nội dung 4 bit cao và 4 bit thấp của thanh ghi A ( tương đương với quay

4 lần)

Trang 37

NHÓM LỆNH THỰC HIỆN TRÊN

BIT

• CLR bit : xóa bit về 0

• SETB bit : đặt bit lên 1

• CPL bit : lấy bù 1 của bit

Trang 38

• MOV C, bit : chuyển bit vào cờ carry

Trang 39

NHÓM LỆNH ĐIỀU KHIỂN

– ACALL : gọi chương trình con dùngđịa chỉ tuyệt đối

– LCALL : gọi chương trình con dùng địa chỉ dài

Trang 40

• Lệnh nhảy không điều kiện

– AJMP : lệnh nhảy tuyệt đối

– JB bit: nhảy nếu bit=1

– JNB bit: nhảy nếu bit=0

Trang 41

– CJNE A, direct, rel : so sánh dữ liệu trong ô nhớ trực tiếp với nội dung của A và nhảy đến nhãn rel nếu kết quả không bằng nhau

– CJNE A, #data, rel : so sánh dữ liệu tức thời với nội dung của A và nhảy đến nhãn rel nếu kết quả không bằng nhau

– CJNE Rn, #data, rel : so sánh dữ liệu tức thời với nội dung của thanh ghi Rn và nhảy đến nhãn rel nếu kết quả không bằng nhau

– CJNE @Ri, #data, rel : so sánh dữ liệu tức thời với gián tiếp thanh ghi và nhảy đến nhãn rel nếu kết quả không bằng nhau

Trang 42

– DJNZ Rn, rel: giảm nội dung thanh ghi Rn đi 1 đơn vị sau đó so sánh với 0 và nhảy đến nhãn rel nếu kết quả khác 0

– DJNZ direct, rel: giảm nội dung ô nhớ trực tiếp

đi 1 đơn vị sau đó so sánh với 0 và nhảy đến nhãn rel nếu kết quả khác 0

– NOP: lệnh này không làm gì cả nhưng PC vẫn tăng lên 1

Trang 43

BÀI TẬP ÁP DỤNG

Chương 2: TẬP LỆNH

Trang 44

• Bài 1:

Hãy cho biết các lệnh dưới đây thực hiện công việc gì? Các địa chỉ bit nào được đặt lên 1 sau khi thực hiện xong lệnh

Trang 45

• Bài 2:

Hãy cho biết các lệnh dưới đây thực hiện công việc gì? Giá trị của thanh ghi và ô nhớ sau khi thực hiện xong lệnh?

Trang 47

Bài 4:

a Viết chương trình cho 8 led sáng

b Viết chương trình cho 4 led D1-D4 sáng

c Viết chương trình cho 2 led D3-D4

Trang 48

Bài 5:

a Viết chương trình cho 8 led sáng

b Viết chương trình cho 4 led D1-D4 sáng

c Viết chương trình cho 2 led D3-D4

Trang 49

TIMER- BỘ ĐỊNH THÌ

Chương 3

Trang 50

GIỚI THIỆU

độ làm việc

– Định khoảng thời gian

– Đếm sự kiện

– Phát tốc độ baud cho port nối tiếp

thanh ghi chức năng đặc biệt:

TCON, TMOD, TH0, TL0, TH1, TL1

Trang 51

THANH GHI TMOD (Timer Mode Register)

• Thanh ghi TMOD dùng để xác định chế độ làm việc cho Timer 0 và Timer 1

• TMOD không được địa chỉ hóa từng bit

• Nạp bằng phần mềm khi bắt đầu chương trình

Trang 52

• Gate: bit mở cổng cho timer

– Khi Gate=1: Timer/Counterx chỉ hoạt động khi chân INTx ở mức 1(phần cứng) và bit TRx =1 (trong thanh ghi TCON)

– Khi Gate=0: Timerx họat động khi bit TRx=1

• Ghi chú: X = 0,1

– TRx : TR0 hoặc TR1 – Timerx: Timer 0 hoặc Timer 1

– C/T=1 : chọn Counter (đếm sự kiện)

– C/T=0 : chọn Timer (định khoảng thời gian)

Trang 53

• M1,M0 : các bit chọn chế độ

Trang 54

THANH GHI TCON (Timer Control Register)

• Thanh ghi TCON chứa các bit trạng thái và điều khiển cho Timer 0 và Timer 1

• Được địa chỉ hóa từng bit

• TFx: cờ báo tràn timer Cờ này được đặt bởi phần cứng khi tràn timer, được xóa bằng phần mềm

Ví dụ: timer 16bit sẽ đếm lên từ 0000H đến

FFFFH, do đó tràn timer xảy ra khi số đếm tràn

từ FFFFH sang 0000H

Trang 55

•TRx: bit điều khiển timer chạy, được đặt/xóa bằng phần mềm để điều khiển timer chạy/dừng

Trang 56

– TRx=1: cho phép timer chạy

– TRx=0: dừng timer

cứng khi phát hiện một cạnh xuống hay một mức thấp ở ngõ INT1, xóa bằng phần cứng khi xử lý ngắt

hay xóa bằng phần mềm để xác định ngắt ngoài 1 tích cực khi có một cạnh xuống hay khi có một mức thấp ở chân INT1

Trang 57

• IE0: cờ ngắt ngoài 0, được đặt bởi phần cứng khi phát hiện một cạnh xuống hay một mức thấp ở ngõ INT0, xóa bằng phần cứng khi xử lý ngắt

hay xóa bằng phần mềm để xác định ngắt ngoài 1 tích cực khi có một cạnh xuống hay khi có một mức thấp ở chân INT0

Trang 58

CÁC CHẾ ĐỘ HOẠT ĐỘNG CỦA

TIMER

– Chế độ timer 13bit, tương thích với 8048

– Trong chế độ này không sử dụng 3bit cao của thanh ghi TLx, chỉ sử dụng THx và 5bit thấp của TLx

– Giá trị đếm được là từ 0 đến ( 213 -1)Ttimer

nghiã là từ 0 đến 8191Ttimer

Trang 59

– Các thanh ghi timer có thể được đọc/ghi bất

cứ lúc nào bằng phần mềm

– Giá trị đếm được là từ 0 đến ( 216 -1)Ttimer

nghiã là từ 0 đến 65535Ttimer

Trang 60

– Khi số đếm tràn từ FFH sang 00H thì cờ tràn timer được đặt lên 1 đồng thời giá trị trong THx được nạp lại vào TLx và chu trình đếm mới được bắt đầu

– Chế độ này rất thông dụng vì sự tràn timer

xảy ra trong những khoảng thời gian nhất

định và tuần hòan một khi đã khởi động bộ

đếm

– Giá trị đếm được là từ 0 đến ( 28 -1)Ttimer

nghiã là từ 0 đến 255Ttimer

Trang 61

• Chế độ 3:

– Chế độ tách timer Timer 0 được tách thành

2 timer 8bit: TH0 và TL0.Timer 1 dừng

– TL0 có cờ báo tràn là TF0; TH0 có cờ

báo tràn là TF1

Trang 62

NGUỒN TẠO XUNG NHỊP CHO

TIMER

Có 2 nguồn xung nhịp có thể được sử dụng

và nó được chọn bằng bit C/T trong thanh ghi TMOD khi khởi động timer.

– Khi C/T =0 thì timer được dùng để định khoảng thời gian

– Nguồn xung nhịp được lấy từ bộ dao động trên chip đưa qua một bộ chia 12 để giảm đến tần

số thích hợp cho phần lớn các ứng dụng

Trang 63

– Giá trị trong các thanh ghi timer (THx và TLx)

sẽ tăng lên 1 khi có một sự kiện xảy ra

– Số sự kiện được xác định bằng phần mềm bằng cách đọc các thanh ghi timer

Trang 64

CÁC BƯỚC CƠ BẢN ĐỂ KHỞI

ĐỘNG TIMER

lựa chọn chế độ cho timer, cho bit Gate=0, C/T=0

• Nạp các giá trị thích hợp cho các thanh ghi THx và TLx

– JNB TFx, $

– Wait: JNB TFx, Wait

Trang 65

Viết chương trình tạo trễ (delay)100µs dùng

Timer 0, biết rằng bộ dao động trên chip sử dụng thạch anh 12MHz

Trang 66

• Bước 1: Tìm tần số dao động và chu kỳ xung nhịp timer:

– Ta có fosc =12MHz

– Suy ra: ftimer = fosc/12 =12MHz/12 =1MHz

– Ttimer = 1/ ftimer = 1/106 = 1µs

thanh ghi timer

– Ta có tdelay =100µs

– Mà Ttimer = 1µs

– Suy ra : tdelay =100Ttimer

Trang 67

– Do timer họat động như là một bộ đếm lên và khi bộ đếm bị tràn thì nó sẽ quay lại về giá trị

0 nên giá trị phải nạp cho các thanh ghi timer

là -100

cho thanh ghi chế độ timer TMOD

– Do tdelay =100Ttimer , giá trị này <255 nênchúng ta có thể chọn timer ở chế độ 1(16bit) hay chế độ 2 (8bit tự động nạp lại)

Trang 68

• Chương trình hoàn chỉnh khi sử dụng Timer 0 ở chế độ 2:

Trang 69

• Chương trình hoàn chỉnh khi sử dụng Timer

0 ở chế độ 1:

MOV TMOD,# 0000 0001 B

MOV TH0,# high(-100) ; lệnh này sẽ chuyển giá trị -100

sang mã nhị phân và sau đó lấy 8bit cao của giá trị này gán vào thanh ghi TH0

MOV TL0,# low(-100) ; lệnh này sẽ chuyển giá trị -100

sang mã nhị phân và sau đó lấy 8bit thấp của giá trị này gán vào thanh ghi TL0

Trang 70

 Ví dụ 2: Viết chương trình tạo trễ 10ms,

sử dụng timer 1, tần số dao động trên chip là 12MHz

xung nhịp timer:

– Ta có fosc =12MHz

– Suy ra: ftimer = fosc/12 =12MHz/12 =1MHz

– Ttimer = 1/ ftimer = 1/106 = 1µs

Trang 71

• Bước 2: Xác định giá trị cần nạp cho các thanh ghi timer

– Ta có tdelay =10ms

– Mà Ttimer = 1µs

– Suy ra : tdelay =10000Ttimer

cho thanh ghi chế độ timer TMOD

– Do tdelay =10000Ttimer , nên ta chọn timer ởchế độ 1(16bit)

Trang 72

• Chương trình hoàn chỉnh khi sử dụng Timer 1 ở chế độ 1:

Trang 73

 Ví dụ 3: Viết chương trình tạo sóng

vuông 50% có tần số 10KHz ở ngõ ra P1.0, biết tần số dao động trên chip là 12MHz

xung nhịp timer:

– Ta có fosc =12MHz

– Suy ra: ftimer = fosc/12 =12MHz/12 =1MHz

– Ttimer = 1/ ftimer = 1/106 = 1µs

Trang 74

• Bước 2: Xác định giá trị cần nạp cho các thanh ghi timer

– Ta có tần số xung vuông là 10KHz nên chu kỳ của xung vuông là T=1/(10.103)=10-4s=100µs– Do xung vuông 50% nên thời gian xung

ở mức cao bằng thời gian xung ở mức thấp :

tH = tL = T/2 = 50µs

– Ở đây ta có thể sử dụng 1 timer để tạo thời gian trể là 50µs

Trang 75

• Cách 1:

MOV TMOD, # 0000 0010B MOV TH0,# -50

SETB TR0 LOOP: JNB

TF0,$

CLR TF0 CPL P1.0 SJMP LOOP END

Trang 76

• Cách 2:

LOOP: SETB P1.0

ACALL Delay_50us CLR P1.0

ACALL Delay_50us SJMP LOOP

Delay_50us:

MOV TMOD, # 0000 0010B MOV TH0,# -50

SETB TR0 JNB

TF0,$

CLR TF0 RET

END

Trang 77

 Ví dụ 4: Hãy cho biết đoạn chương trình

sau làm công việc gì? biết tần số dao động trên chip là 12MHz

LOOP: SETB P1.0

CLR P1.0 SJMP LOOP END

Trang 78

 Ví dụ 5: Hãy cho biết đoạn chương trình

con SUB làm công việc gì? biết tần số dao động trên chip là 12MHz

SUB: MOV R0,#250

DJNZ R0,$

RET END

Trang 79

 Ví dụ 6: Hãy cho biết đoạn chương trình

con SUB làm công việc gì? biết tần số dao động trên chip là 12MHz

R0,#250 LOOP:

NOP

NOP DJNZ R0,LOOP RET

END

Ngày đăng: 18/11/2017, 23:16

TỪ KHÓA LIÊN QUAN

w