1. Trang chủ
  2. » Giáo Dục - Đào Tạo

CHƯƠNG 5 GIỚI THIỆU về VI xử lý AT89C52

16 859 1

Đ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 16
Dung lượng 822 KB

Nội dung

Thiết bị này được chế tạo bằng cách sử dụng kỹ thuật bộ nhớ không bốc hơi mật độ cao của ATMEL và tương thích với chuẩn công nghiệp MCS-51TM về tập lệnh và các chân ra.. Port 0 cũng có t

Trang 1

Chương 5: GIỚI THIỆU VI XỬ LÝ AT89C52



1 VI ĐIỀU KHIỂN HỌ MCS-51MCS-51 tm

Là họ vi điều khiển do hãng intel sản xuất vào đầu những năm 80 và ngày nay đã trở thành một chuẩn trong công nghiệp bắt đầu từ ic tiêu biểu là

8051 đã cho thấy khả năng thích hợp với những ứng dụng mang tính điều khiển việc xử lí trên byte và các phép toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế độ truy xuất dữ liệu nhanh trên ram nội tập lệnh cung cấp một bản tiện dụng của những lệnh số học 8 bit gồm cả lệnh nhân và lệnh chia nó cung cấp những hỗ trợ mở rộng on-chip dùng cho những biến 1 bit như là kiểu dữ liệu riêng cho phép quản lí và kiểm tra bit trực tiếp trong điều khiển và những hệ thống logic đòi hỏi xử lí luận lí

Sau đây là bảng so sánh các IC trong họ MCS-51TM :

TÊN LINH

KIỆN

CHƯƠNGù TRÌNH

ON CHIP

BỘ NHỚ DỮ LIỆU

ON CHIP

TIMER

2 VI ĐIỀU KHIỂN AT89C52

Trang 2

Do họ MCS-51TM đã trở thành chuẩn công nghiệp nên có rất nhiều hãng sản xuất ra nó, điển hình là ATMEL Corporation Hãng này đã kết hợp rất nhiều tính năng dựa trên nền tảng kỹ thuật của mình để tạo ra các vi điều khiển tương thích với MCS-51TM nhưng mạnh mẽ hơn

AT89C52 là một vi điều khiển 8 bit do ATMEL sản xuất, chế tạo theo công nghệ CMOS, có chất lượng cao, công suất thấp với 8 KB Flash (flash programmable and erasable read only memory) Thiết bị này được chế tạo bằng cách sử dụng kỹ thuật bộ nhớ không bốc hơi mật độ cao của ATMEL và tương thích với chuẩn công nghiệp MCS-51TM về tập lệnh và các chân ra Flash on-chip cho phép bộ nhớ lập trình được lập trình trong hệ thống bởi một lập trình viên bình thường Bằng cách nối 1 CPU 8 bit với một Flash trên một chip đơn, AT89C52 là một vi điều khiển mạnh (có công suất lớn), cung cấp một sự linh động cao và giải pháp về giá cả đối với nhiều ứng dụng vi điều khiển

Các đặc điểm chủ yếu của AT89C52 :

• Tương thích hoàn toàn với họ MCS-51TM của Intel

• Bộ nhớ chương trình 8K Byte thuộc loại Flash Memory.Độ bền : 1000 lần ghi/xóa

• Tần số hoạt động : 0 Hz đến 24 MHz.3 chế độ khóa bộ nhớ

• 256 x 8-Bit RAM nội.32 đường I/O lập trình được (4 port)

• 3 timer/counter 16-bit.8 nguồn ngắt

• Chế độ hạ nguồn và chế độ lười tiêu tốn công suất thấp

2.1 Cấu tạo chân

Trang 3

Tùy theo khả năng (về kinh tế, kỹ thuật, …) mà các nhà sản xuất các sản phẩm ứng dụng có thể chọn một trong 3 kiểu chân do ATMEL đưa ra

2.2 Sơ đồ khối

Trang 4

2.3 Mô tả chức năng của các chân

Vcc : áp nguồn.

GND : đất.

Port 0 : là một port I/O 8-bit hai

chiều, cực máng hở Khi xuất ra, mỗi chân port có thể lái 8 đầu vào TTL

Trang 5

Nếu ghi các mức 1 ra các chân port thì các chân này có thể dùng như các đầu vào trở kháng cao

Port 0 cũng có thể được cấu hình thành một bus multiplex giữa địa chỉ thấp và dữ liệu khi truy cập chương trình hay dữ liệu từ bên ngoài Trong chế độ này, port 0 có điện trở pullup nội

Port 0 cũng nhận các byte mã chương trình khi lập trình Flash và xuất ra mã chương trình khi kiểm tra, khi đó cần có điện trở pullup bên ngoài

Port 1 : là một port I/O 8-bit hai chiều có pullup nội Đầu ra port 1 có

thể lái 4 đầu vào TTL Khi viết các mức 1 ra các chân port thì chúng được kéo lên do có điện trở nội và có thể dùng làm đầu vào Khi vai trò là cổng nhập, những chân của port 1 bị kéo xuống thấp sẽ đổ dòng vì có nội trở kéo lên

Hơn nữa, P1.0 và P1.1 có thể được dùng như là đầu vào bộ đếm timer/counter 2 bên ngoài (P1.0/T2) và xung kích (P1.1/T2EX)

Port 1 cũng nhận những byte địa chỉ thấp trong khi lập trình Flash và trong khi kiểm tra Flash

Port 2 : là một port I/O 8-bit hai chiều có pullup nội Đầu ra port 2 có

thể lái 4 đầu vào TTL Khi viết các mức 1 ra các chân port thì chúng được kéo lên do có điện trở nội và có thể dùng làm đầu vào Khi vai trò là cổng nhập, những chân của port 2 bị kéo xuống thấp sẽ đổ dòng vì có nội trở kéo lên

Port 2 phát byte địa chỉ cao trong khi nhận lệnh từ bộ nhớ chương trình

ngoài và trong lúc truy xuất đến bộ nhớ dữ liệu ngoài mà có sử dụng địa chỉ

16 bit (MOVX A, @DPTR) Trong ứng dụng này nó dùng điện trở nội kéo lên mạnh khi xuất 1 Khi truy xuất bộ nhớ dữ liệu ngoài dùng địa chỉ 8 bit, port 2 sẽ phát nội dung của thanh ghi P2

Port 2 cũng nhận byte địa chỉ cao trong lúc lập trình Flash và trong lúc kiểm tra Flash

Port 3 : là một port I/O 8-bit hai chiều có pullup nội Đầu ra port 3 có

thể lái 4 đầu vào TTL Khi viết các mức 1 ra các chân port thì chúng được kéo lên do có điện trở nội và có thể dùng làm đầu vào Khi vai trò là cổng nhập, những chân của port 3 bị kéo xuống thấp sẽ đổ dòng vì có nội trở kéo lên Port 3 cũng có những chức năng của họ MSC-51 được iệt kê ở bảng sau:

BIT

CHỨC NĂNG THAY THẾ

Trang 6

P3.0 RXD B0H Nhận dừ liệu cho port nối tiếp

P3.1 TXD B1H Truyền dừ liệu cho port nối tiếp

P3.4 T0 B4H Ngõ vào từ bên ngoài cho

timer/counter 0 P3.5 T1 B5H Ngõ vào từ bên ngoài cho

timer/counter 1 P3.6 WR B6H Xung ghi bộ nhớ dữ liệu ngoài

P3.7 RD B7H Xung đọc bộ nhớ dữ liệu ngoài

Port 3 cũng nhận vài tín hiệu điều khiển trong lúc lập trình Flash và

trong lúc kiểm tra Flash

RST : là ngõ vào Reset Khi ngõ này được đưa lên cao (trong ít nhất hai

chu kì máy), các thanh ghi bên trong AT89C51 được tải những giá trị thích hợp để khởi động hệ thống

ALE/PROG (Address Latch Enable) : ALE là xung xuất cho phép chốt

byte địa chỉ thấp khi truy cập bộ nhớ ngoài Chân này còn là ngõ vào của xung lập trình (PROG) khi lập trình Flash

Trong hoạt động bình thường, ALE được phát xung với tần số 1/6 tần số dao động on-chip và có thể được dùng như xung thời gian chuẩn bên ngoài Tuy nhiên, cần chú ý là một xung ALE sẽ bị mất khi truy cập bộ nhớ ngoài

Có thể hủy bỏ chức năng của ALE bằng cách set bit 0 của thanh ghi ở vị trí 8EH Một khi bit này được set, ALE chỉ tích cực khi có lệnh MOVX hoặc MOVC Nếu không có các lệnh này thì ALE ở mức cao Việc set bit 0 của thanh ghi ở vị trí 8EH không làm ảnh hưởng đến vi điều khiển khi truy cập bộ nhớ ngoài

PSEN (Program Store Enable) : PSEN là xung strobe báo hiệu việc đọc bộ

nhớ chương trình ngoài, PSEN tích cực hai lần (mức thấp) mỗi chu kì máy, ngoại trừ hai xung PSEN bị mất khi truy xuất dữ liệu ngoài Khi thi hành chương trình trong RAM nội, PSEN sẽ ở mức thụ động (mức cao)

Trang 7

EA/V PP (External Access) : EA là ngõ vào để cho phép truy xuất bộ nhớ

chương trình từ bên ngoài khi được nối với GND Khi EA được treo lên nguồn VCC, chương trình sẽ được thực thi trong ROM nội Chân này cũng nhận điện áp 12v (VPP) trong khi lập trình Flash

XTAL1 : Đầu vào của bộ khuếch đại dao động đảo và cũng là đầu vào đến

mạch tạo xung clock nội

XTAL2 : Đầu ra của bộ khuếch đại dao động đảo.

2.4 Các thanh ghi chức năng (SFR-Special Funtion Reisters)

AT89C52 có 26 thanh ghi chức năng được thiết kế như là một thành phần của RAM on-chip Do đó mỗi thanh ghi có một địa chỉ của nó, nằm trong vùng từ 80H đến FFH Tuy nhiên, vùng này cũng là vùng bộ nhớ nên việc truy cập các thanh ghi này thông qua các lệnh dùng định vị trực tiếp khác với việc truy cập vùng nhớ dùng định vị gián tiếp

Bảng vị trí các thanh ghi chức năng :

Trang 8

Chú ý là không phải tất cả các địa chỉ đều có các thanh ghi, những địa chỉ không có thanh ghi này có thể không có trên chip Đọc những địa chỉ này sẽ có những giá trị ngẫu nhiên và ghi những giá triï này có những tác động không xác định trước

Phần mềm của người dùng không nên ghi những giá trị 1 đến các vị trí này, bởi

vì chúng có thể được dùng trong tương lai Trong trường hợp đó, giá trị của các bit luôn là 0

Ngoài những thanh ghi tương tự 8051, AT89C52 có thêm :

Các thanh ghi Timer 2 các bit điều khiển và trạng thái chứa trong thanh ghi

T2CON và T2MOD cho Timer 2 Cặp thanh ghi RCAP2H và RCAP2L là những thanh ghi Capture/Reload trong chế độ capture 16 bit hay chế độ auto-reload 16

bit

Trang 9

hiệu

Chức năng

TF2 Cờ tràn Timer 2, set khi Timer 2 tràn và phải được clear

bằng phần mềm TF2 sẽ không set khi RCLK = 1 hoặc

TCLK = 1

EXF2 Cờ ngoài của Timer 2, set khi xảy ra capture hoặc reload do

T2EX xuống thấp và EXEN2 = 1 Nếu ngắt Timer 2 được

kích hoạt, EXF2 = 1 sẽ làm CPU trỏ đến ISR của Timer 2

EXF2 phải được xóa bằng phần mềm EXF2 không gây nên

ngắt trong chế độ đếm lên/xuống (DCEN = 1)

RCLK Kích hoạt xung clock bộ thu Khi set, các xung tràn Timer 2

sẽ là xung clock cho bộ thu port nối tiếp trong mode 1 và 3

RCLK = 0 thì bộ thu port nối tiếp sẽ dùng các xung tràn của

Timer 1

TCLK Kích hoạt xung clock bộ phát Khi set, các xung tràn Timer 2

sẽ là xung clock cho bộ phát port nối tiếp trong mode 1 và 3

TCLK = 0 thì bộ phát port nối tiếp sẽ dùng các xung tràn

của Timer 1

EXEN2 Kích hoạt bên ngoài Khi set, cho phép capture hay reload

khi T2EX xuống thấp (nếu Timer 2 không sử dụng cho port

nối tiếp) EXEN2 = 0 làm cho Timer 2 bỏ qua các sự kiện

trên T2EX

TR2 Khởi động/Dừng Timer 2 TR2 = 1 làm khởi động Timer 2

C/T2 Bit lựa chọn timer hay counter C/T2 = 0 : timer C/T2 = 1 :

counter đếm sự kiện bên ngoài (kích cạnh xuống)

CP/RL2 Lựa chọn capture hay reload CP/RL2 = 1: capture xảy ra khi

T2EX xuống thấp nếu EXEN2 = 1 CP/RL2 = 0 : reload xảy

ra khi Timer 2 tràn hoặc khi T2EX xuống thấp nếu EXEN2

= 1 Nếu TCLK hay RCLK = 1, bit này bị bỏ qua và timer bị

ép vào chế độ reload khi Timer 2 tràn

Các thanh ghi ngắt tập các bit riêng lẻ cho phép ngắt chứa trong thanh

ghi IE Thiết lập hai mức ưu tiên cho 6 nguồn ngắt bằng cách set các bit thanh ghi IP

2.5 Bộ nhớ dữ liệu

Trang 10

AT89C52 có 256 byte bộ nhớ RAM on-chip Trong đó, 128 byte trên có cùng địa chỉ với vùng thanh ghi chức năng nhưng có cấu tạo vật lý riêng biệt

Khi một lệnh truy cập một vị trí nội có địa chỉ trên 7FH, chế độ địa chỉ nó sử dụng sẽ báo cho CPU biết vùng địa chỉ nào nó cần truy cập : RAM hay SFR Các lệnh dùng địa chỉ trực tiếp sẽ truy cập vùng SFR Ví dụ như lệnh sau đây sẽ truy cập SFR ở địa chỉ 0A0H (port 2)

Lệnh dùng địa chỉ gián tiếp sẽ truy cập 128 byte trên của RAM Ví dụ như cũng truy cập địa chỉ 0A0H nhưng gián tiếp thông qua R0

Chú ý rằng các tác vụ của stack vốn đã sử dụng địa chỉ gián

tiếp nên vùng 128 byte trên của RAM rất tiện dụng để làm

vùng stack

2.6 Đặc tính bộ dao động

XTAL1 là đầu vào và đầu ra tương ứng của bộ khuếch đại

đảo được dùng làm bộ dao động nội on-chip Có thể dùng

thạch anh hay bộ cộng hưởng ceramic đều được

Để lái vi điều khiển từ nguồn xung clock bên ngoài, XTAL2

phải được để trống trong khi XTAL1 nối đến nguồn lái

Không có yêu cầu gì về duty cycle nhưng phải chú ý đến thời

gian tối đa và tối thiểu của mức điện áp cao cũng như mức

điện áp thấp

2.7 Chế độ lười

Trong chế độ lười, CPU rơi vào trạng thái “ngủ” trong khi tất

cả thiết bị ngoại vi vẫn còn tích cực Chế độ này được tạo ra

bằng phần mềm Nội dung của RAM on-chip và giá trị của các SFR vẫn được giữ nguyên Kết thúc chế độ lười bằng cách kích hoạt một ngắt hoặc reset phần cứng

Chú rằng khi kết thúc chế độ lười bằng cách reset phần cứng thì thông thường

vi điều khiển sẽ gọi lại chương trình mà nó vừa thoát, cho đến hai chu kỳ máy trước khi thuật toán reset chiếm quyền điều khiển Phần cứng cấm truy cập RAM nội trong trường hợp này nhưng không cấm truy cập đến các chân port, do đó có thể xảy ra những trường hợp không mong muốn Để loại bỏ trường hợp

Trang 11

này, lệnh ngay sau lệnh gọi chế độ lười không nên là lệnh ghi port hay ghi bộ nhớ ngoài

2.8 Chế độ hạ nguồn

Trong chế độ hạ nguồn, bộ dao động ngừng, và lệnh gọi hạ nguồn là lệnh cuối cùng được thực thi RAM on-chip và SFR duy trì giá trị của nó cho đến khi kết thúc chế độ hạ nguồn

Kết thúc chế độ hạ nguồn chỉ bằng một cách duy nhất : reset phần cứng Reset sẽ tạo lại giá trị cho SFR nhưng không thay đổi nội dung của RAM on-chip Không nên reset trước khi Vcc phục hồi mức điện áp thông thường của nó và phải giữ đủ lâu để bộ dao động phục hồi và ổn định

2.9 Trạng thái của một số chân trong chế độ lười và chế độ hạ nguồn

IX TẬP LỆNH CỦA 89C51:

AT89C51 có 255 lệnh chia thành các nhóm lệnh:

+ Nhóm lệnh chuyển dời

+ Nhóm lệnh số học

+ Nhóm lệnh logic

+ Nhóm lệnh chuyển điều khiển

Sau đây là tập lệnh cơ bản của vi xử lý AT89C51:

Các chỉ dẩn thiết lập lệnh

Rn : Thanh ghi R0 đến R7

Data : 8 bit địa chỉ vùng dữ liệu bên trong

@Ri : Định chỉ gián tiếp qua R0 hay R1

#data : Hằng số 8 bit

#data16 : Hằng số 16 bit

addr 16 : 16 bit địa chỉ đích

addr 11 : 11 bit địa chỉ đích

rel : Ofset 8 bit có dấu

Trang 12

bit : Bit được định địa chỉ trực tiếp

a) Nhóm lệnh xử lý số học :

ADD A,Rn (1 byte,1chu kỳ máy): (A) = (A)+(Rn) ADD A,data (2;1) : (A) = (A) + (data)

ADD A,@Ri (1;1) : (A) = (A) + ((Ri))

ADD A,#data (2;1) : (A) = ( A) + #data

ADDC A,Rn (1;1) : (A) = ( A) + (C) +(Rn) ADDC A,data ( 2;1) : (A) = (A) + (C) + (data) ADDC A,@Ri (1;1) : (A) = (A) + ((Ri)) + (C) ADDC A,#data ( 2;1) : (A) = (A) + (C) + #data SUBB A,Rn (1;1) : (A) = (A) - (C)- (Rn) SUBB A,data (2;1) : (A) = (A) - (C) -( data) SUBB A,@Ri (1;1) : (A) =(A) -(C) -((Ri))

SUBB A,#data (2;1) : (A) = (A) - (C) - #data

INC A (1;1) : (A) = (A) +1

INC Rn (1;1) : (Rn) = (Rn) +1

INC data (2;1) : (data) = (data) +1

INC @Ri (1;1) : ((Ri)) =((Ri))+1

DEC A (1;1) : (A) =(A) – 1

DEC Rn (1;1) : (Rn) =(Rn) -1

DEC data (2;1) : (data) =(data) –1

DEC @Ri (1;1) : ((Ri)) =((Ri)) –1

INC DPTR (1;2) : (DPTR) =(DPTR) +1

MUL AB (1;4) : (A) = byte cao của (A) * (B)

(B) = byte thấp của (A)* (B) DIV AB (1;4) : chia (A) cho (B) ,kết quả:

( A) = thương số (B) = số dư

DA A (1;1) : hiệu chỉnh thập phân thanh ghi A

b) Nhóm lệnh luận lý:

ANL A,Rn (1;1) : (A) =(A) and (Rn)

ANL A,data (2;1) : (A) =(A) and (data)

ANL A,@Ri (1;1) : (A) = (A) and ((Ri))

ANL A,#data (2;1) : (A) = (A) and #data

ANL data,A (2;1) : (data) = (data) and (A)

Trang 13

ANL data,#data (3;2) : (data) =(data) and #data

ANL C,bit (2;2) : (C) =(C) and (bit)

ANL C, bit (2;2) : (C) =(C) and not (bit)

ORL A,Rn (1;1) : (A) = (A) or (Rn)

ORL A,data (2;1) : (A) = (A) or data

ORL A,@Ri (1;1) : (A) = (A) or ((Ri))

ORL A,#data (2;1) : (A) = (A) or #data

ORL data,A (2;1) : (data) = (data) or (A)

ORL data,#data (3;2) : (data ) = (data) or # data

ORL C,bit (2;2) : (C) = (C) or bit

ORL C,/bit (2;2) : (C) = (C) or not bit

XRL A,Rn (1;1) : (A) =(A) xor (Rn)

XRL A,data (2;1) : (A) = (A) xor (data)

XRL A,@Ri (1;1) : (A) = (A) xor ((Ri))

XRL A,#data (2;1) : (A) = (A) xor #data

XRL data,A (2;1) : (data) = (data) xor (A)

XRL data,#data (3;2) : (data) = (data) xor #data

CPL bit (2;1) : (bit) = not (bit)

RL A (1;1) : quay trái nội dung thanh ghi A

RLC A (1;1) : quay trái nội dung thanh ghi A

RR A (1;1) : quay phải nội dung thanh ghi A

RRC A (1;1) : quay phải nội dung thanh ghi A qua cờ nhớ

SWAP A (1;1) : quay trái nội dung thanh ghi A một nibble

c) Nhóm lệnh chuyển dữ liệu :

Trang 14

MOV A,@Ri (1;1) : (A) = ((Ri))

MOV A,#data (2;1) : (A) = #data

MOV Rn,data (2;2) : (Rn) = (data)

MOV Rn,#data (2;1) : (Rn) = #data

MOV data,Rn (2;2) : (data) = (Rn)

MOV data,data (3;2) : (data) = (data)

MOV data,@Ri (2;2) : (data) = ((Ri))

MOV data,#data (3;2) : (data) = #data

MOV @Ri,data (2;2) : ((Ri)) = (data)

MOV @Ri,#data (2;1) : ((Ri)) = #data

MOV DPTR,#data16 (3;2) : (DPTR) = #data16

MOV C,bit (2;1) : (C) = (bit)

MOV bit,C (2;2) : (bit) = (C)

MOVC A,@A+DPTR (1;2) : (A) = ((A)+(DPTR))

MOVC A,@A+PC (1;2) : (A) = ((A)+(PC))

MOVX A,@Ri (1;2) : chuyển dữ liệu ngoài 8 bít vào thanh ghi A

MOVX A,@DPTR (1;2) : chuyển dữ kiệu ngoài 16 bit vào thanh ghi A

MOVX @Ri,A (1;2) : chuyển nội dung thanh ghi A ra dữ liệu ngoài 8 bit địa chỉ

MOVX @DPTR,A (1;2) : chuyển nội dung thanh ghi A ra dữ liệu ngoài 16 bit địa chỉ

PUSH data (2;2) : (SP) =(SP) +1

((SP)) = (data) POP data (2;2) : (data) = ((SP))

(SP) = (SP) -1 XCH A,Rn (1;1) : trao đổi dữ liệu giữa thanh ghi Rn

và thanh ghi A

XCH A,data (2;1) : trao đổi giửa thanh ghi A và data XCH A,@Ri (1;1) : trao đổi giữa thanh ghi A và một dữ liệu gián tiếp

Ngày đăng: 16/11/2015, 11:13

TỪ KHÓA LIÊN QUAN

w