Tải bản đầy đủ (.docx) (27 trang)

Lập trình hiệu ứng LED chạy hình trái tim sử dụng vi điều khiển

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (500.96 KB, 27 trang )

LỜI NÓI ĐẦU
Ngày nay với sự phát triển của khoa học kỹ thuật, kỷ nguyên công nghệ mới
đã và đang tiếp tục phát triển không ngừng nhằm thông minh hóa, hiện đại hóa các
hệ thống.
Hệ thống nhúng (tiếng Anh: Embedded system) là một thuật ngữ để chỉ mộ t hệ thống có
khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ, có vai trò
đảm nhận một phần công việc cụ thể của hệ thống mẹ. Hệ thống nhúng có thể là một hệ
thống phần cứng và cũng có thể là một hệ thống phần mềm. Phát triển các hệ nhúng và
phần mềm nhúng là quốc sách của nhiều quốc gia trên thế giới, nhất là vào giai đoạn
hậu PC hiện nay.
Thiết kế các hệ thống nhúng là thiết kế phần cứng và phần mềm phối hợp và
đòi hỏi kiến thức đa ngành về điện tử, xử lý tín hiệu, vi xử lý, thuật điều khiển và
lập trình thời gian thực. Qua đề tài bài tập lớn ” Lập trình hiệu ứng LED chạy hình
trái tim sử dụng vi điều khiển ” chúng em đã hiểu rõ thêm về mạch điện cơ bản, ứng
dụng của nó trong đời sống thực tế và trên hết là hiểu được cấu tạo, chức năng của
vi điều khiển 89c52.
Trong quá trình thực hiện do chưa có nhiều kinh nghiệm thực tế, lượng tài liệu
thu thập được còn hạn hẹp nên chúng em gặp rất nhiều khó khăn trong việc thực
hiện. Dù đã rất cố gắng nhưng chắc chắn bài tập của nhóm em sẽ không tránh khỏi
thiếu sót. Vậy chúng em mong nhận được các ý kiến đóng góp của thầy và các bạn.
Cuối cùng chúng em xin gửi lời cảm ơn tới thầy ……………..đã hướng dẫn
tận tình giúp chúng em hoàn thành bài tập này.
Em xin chân thành cảm ơn!


PHẦN 1: GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 89c52
1. Tổng quan về 89c52
AT89c52 là họ IC vi điều khiển do hãng Atmel sản xuất. Các sản phẩm
AT89c52 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên byte và các 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ảng 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 trên chip
dùng cho những biến một bit như là kiểu dữ liệu riêng biệt cho phép quản lý và
kiểm tra bit trực tiếp trong hệ thống điều khiển.
AT89c52 cung cấp những đặc tính chuẩn như: 8 KByte bộ nhớ chỉ đọc có thể
xóa



lập

trình

nhanh

(EPROM),

128

Byte

RAM,

32

đường

I/O,

3


TIMER/COUNTER 16 Bit, 5 vectơ ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp
bán song công, 1 mạch dao động tạo xung Clock và bộ dao động ON-CHIP.
Các đặc điểm của chip AT89c52 được tóm tắt như sau:

• 8 KByte bộ nhớ có thể lập trình nhanh, có khả năng tới 1000 chu kỳ ghi/xoá
• Tần số hoạt động từ: 0Hz đến 24 MHz
• 3 mức khóa bộ nhớ lập trình
• 3 bộ Timer/counter 16 Bit
• 128 Byte RAM nội.
• 4 Port xuất /nhập I/O 8 bit.
• Giao tiếp nối tiếp.
• 64 KB vùng nhớ mã ngoài


• 64 KB vùng nhớ dữ liệu ngoại.
• 4 µs cho hoạt động nhân hoặc chia


2- CẤU TRÚC VI ĐIỀU KHIỂN 89c52 – CHỨC NĂNG TỪNG CHÂN.
* Sơ đồ khối 89c52:


• Sơ đồ các chân.
2.1. Sơ đồ chân 89c52

AT
89
c5
AT8
2

9c5
2

Mặc dù các thành viên của họ 8051 (ví dụ 8751, 89c52, 89C51, DS5000) đều
có các kiểu đóng vỏ khác nhau, chẳng hạn như hai hàng chân DIP (Dual In-Line
Pakage), dạng vỏ dẹt vuông QPF (Quad Flat Pakage) và dạng chip không có chân đỡ
LLC (Leadless Chip Carrier) thì chúng đều có 40 chân cho các chức năng khác nhau
như vào ra I/O, đọc

RD

, ghi

WR

, địa chỉ, dữ liệu và ngắt. Cần phải lưu ý một số

hãng cung cấp một phiên bản 89c52 có 20 chân với số cổng vào ra ít hơn cho các
ứng dụng yêu cầu thấp hơn. Tuy nhiên vì hầu hết các nhà phát triển sử dụng chíp
đóng vỏ 40 chân với hai hàng chân DIP nên ta chỉ tập trung mô tả phiên bản này
.


2.2. Chức năng của các chân 89c52

Port 0 :từ chân 32 đến chân 39 (P0.0 _P0.7). Port 0 có 2 chức năng: trong
các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các
đường IO, đối với thiết kế lớn có bộ nhớ mở rộng nó được kết hợp giữa bus địa
chỉ và bus dữ liệu.
Port 1: từ chân 1 đến chân 9 (P1.0 _ P1.7). Port 1 là port IO dùng cho giao

tiếp với thiết bị bên ngoài nếu cần.
Port 2: từ chân 21 đến chân 28 (P2.0 _P2.7). Port 2 là một port có tác dụng
kép dùng như các đường xuất/nhập hoặc là byte cao của bus địa chỉ đối với các
thiết bị dùng bộ nhớ mở rộng.
Port 3: từ chân 10 đến chân 17 (P3.0 _ P3.7). Port 3 là port có tác dụng
kép. Các chân của port này có nhiều chức năng, có công dụng chuyển đổi có
liên hệ đến các đặc tính đặc biệt của 89c52 như ở bảng sau:
Bit

Tên

Chức năng chuyển đổi

P3.0

RXD

Ngõ vào dữ liệu nối tiếp.

P3.1

TXD

Ngõ xuất dữ liệu nối tiếp.

P3.2

INT0

Ngõ vào ngắt cứng thứ 0.


P3.3

INT1

Ngõ vào ngắt cứng thứ 1.

P3.4

T0

Ngõ vào TIMER/ COUNTER thứ 0.

P3.5

T1

Ngõ vào của TIMER/ COUNTER thứ 1.

P3.6

WR

Tín hiệu ghi dữ liệu lên bộ nhớ ngoài.

P3.7

RD

Tín hiệu đọc bộ nhớ dữ liệu ngoài.



3. Tổ chức bộ nhớ bên trong 89c52
Bộ nhớ trong 89c52 bao gồm ROM và RAM. RAM trong 89c52 bao gồm
nhiều thành phần: phần lưu trữ đa dụng, phần lưu trữđịa chỉ hóa từng bit, các bank
thanh ghi và các thanh ghi chức năng đặc biệt.
AT89c52 có bộ nhớ được tổ chức theo cấu trúc Harvard: có những vùng bộ
nhớ riêng biệt cho chương trình và dữ liệu. Chương trình và dữ liệu có thể chứa bên
trong 89c52 nhưng 89c52 vẫn có thể kết nối với 64K byte bộ nhớ chương trình và
64K byte dữ liệu bên ngoài.
Bản đồ bộ nhớ Data bên trong Chip 89c52 được tổ chức như sau:

Địa chỉ
byte

Địa chỉ

Địa chỉ bit

Địa chỉ bit


RAM bên trong AT89c52 được phân chia như sau:
 Các bank thanh ghi có địa chỉ từ 00H đến 1FH.
 RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH.
 RAM đa dụng từ 30H đến 7FH.
 Các thanh ghi chức năng đặc biệt từ 80H đến FFH
3.1. RAM đa dụng
RAM đa dụng có địa chỉ từ 30h – 7Fh có thể truy xuất mỗi lần 8 bit bằng cách
dùng chế độ định địa chỉ trực tiếp hay gián tiếp.

Các vùng địa chỉ thấp từ 00h – 2Fh cũng có thể sử dụng cho mục đích như
trên, ngoài các chức năng đặc biệt được đề cập ở phần sau.
3.2. RAM có thể định địa chỉ bit
Vùng địa chỉ từ 20h -2Fh gồm 16 byte có thể thực hiện như vùng RAM đa
dụng (truy xuât mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh xử
lý bit.
3.3. Các bank thanh ghi
Vùng địa chỉ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h –
07h, bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18h – 1Fh. Các bank
thanh ghi này được đại diện bằng các thanh ghi từ R0 đến R7. Sau khi khởi động thì
hệ thống bank 0 được chọn sử dụng.
Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được
truy xuất bởi các thanh ghi R0 đến R7. Viêc thay đổi bank thanh ghi được thực hiện
thông qua thanh ghi từ trạng thái chương trình (PSW).


3.4. Các thanh ghi có chức năng đặc biệt
Các thanh ghi trong 89c52 được định dạng như một phần của RAM trên chip
vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình và
thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp). Cũng như R0
đến R7, 89c52 có 21 thanh ghi có chức năng đặc biệt (SFR: Special Function
Register) ở vùng trên của RAM nội từ địa chỉ 80H đến 0FFH.
Sau đây là một vài thanh ghi đặc biệt thường được sử dụng:

3.4.1. Thanh ghi trạng thái chương trình (PSW: Program Status Word)
BIT

SYMBOL

ADDRESS


DESCRIPTION

PSW.7

CY

D7H

Cary Flag

PSW.6

AC

D6H

Auxiliary Cary Flag

PSW.5

F0

D5H

Flag 0

PSW4

RS1


D4H

Register Bank Select 1

PSW.3

RS0

D3H

Register Bank Select 0
00=Bank 0; address 00H÷07H
01=Bank 1; address 08H÷0FH
10=Bank 2; address 10H÷17H
11=Bank 3; address 18H÷1FH

PSW.2

OV

D2H

Overlow Flag

PSW.1

-

D1H


Reserved

PSW.0

P

DOH

Even Parity Flag

Chức năng từng bit trạng thái chương trình
- Cờ Carry CY (Carry Flag): Cờ nhớ thường nó được dùng cho các lệnh toán
học: C =1 nếu phép toán cộng có sự tràn hoặc phép trừ có mượn và ngược lại
C = 0 nếu phép toán cộng không tràn và phép trừ không có mượn.


- Cờ Carry phụ AC (Auxiliary Carry Flag): Khi cộng những giá trị BCD
(Binary Code Decimal), cờ nhớ phụ AC được set nếu kết quả 4 bit thấp nằm
trong phạm vi điều khiển 0AH - 0FH. Ngược lại AC = 0
- Cờ 0 (Flag 0):
Cờ 0 (F0) là 1 bit cờ đa dụng dùng cho các ứng dụng của người dùng.
- Những bit chọn bank thanh ghi truy xuất:
RS1 và RS0 quyết định dãy thanh ghi tích cực. Chúng được xóa sau khi reset
hệ thống và được thay đổi bởi phần mềm khi cần thiết.
Tùy theo RS1, RS0 = 00, 01, 10, 11 sẽ được chọn Bank tích cực tương ứng là
Bank 0, Bank1, Bank2 và Bank3.
RS1

RS0


BANK

0

0

0

0

1

1

1

0

2

1

1

3

- Cờ tràn OV (Over Flag):
Cờ tràn được set sau một hoạt động cộng hoặc trừ nếu có sự tràn toán học.
- Bit Parity (P):

Bit tự động được set hay Clear ở mỗi chu kỳ máy để lập Parity chẵn với thanh
ghi A. Sự đếm các bit 1 trong thanh ghi A cộng với bit Parity luôn luôn chẵn. Ví dụ
A chứa 10101101B thì bit P set lên một để tổng số bit 1 trong A và P tạo thành số
chẵn.
Bit Parity thường được dùng trong sự kết hợp với những thủ tục của Port nối
tiếp để tạo ra bit Parity trước khi phát đi hoặc kiểm tra bit Parity sau khi thu.


3.4.2. Thanh ghi TIMER
Vi Điều Khiển 89c52 có 3 timer 16 bit, mỗi timer có bốn cách làm việc. Người
ta sử dụng các timer để:

o Định khoảng thời gian.
o Đếm sự kiện.
o

Tạo tốc độ baud cho port nối tiếp trong 89c52.

Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở những
khoảng đều đặn và đặt cờ tràn timer. Cờ được dùng để đồng bộ hóa chương trình để
thực hiện một tác động như kiểm tra trạng thái của các ngõ vào hoặc gửi sự kiện ra
các ngõ ra. Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của timer
để đo thời gian trôi qua giữa hai sự kiện (ví dụ đo độ rộng xung).

3.4.3. Thanh ghi ngắt (INTERRUPT)
Một ngắt là sự xảy ra một điều kiện, một sự kiện mà nó gây ra treo tạm
thời thời chương trình chính trong khi điều kiện đó được phục vụ bởi một
chương trình khác.
Các ngắt đóng một vai trò quan trọng trong thiết kế và cài đặt các ứng dụng vi
điều khiển. Chúng cho phép hệ thống đáp ứng bất đồng bộ với một sự kiện và giải

quyết sự kiện đó trong khi một chương trình khác đang thực thi.
- Tổ chức ngắt của 89c52:
Có 5 nguồn ngắt ở 89c52: 2 ngắt ngoài, 2 ngắt từ timer và 1 ngắt port
nối tiếp. Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi reset hệ thống và được
cho phép từng cái một bằng phần mềm. Mức độ ưu tiên của các ngắt được lưu trong
thanh ghi IP (Interrupt Priority) hay nói cách khác thanh ghi IP cho phép chọn mức
ưu tiên cho các ngắt (giá trị thanh ghi IP khi reset là 00h).


Bit

Ký hiệu

Địa chỉ bit

Mô tả

IP.7

_

_

Không được mô tả

IP.6

_

_


Không được mô tả

IP.5

ET2

BDH

Chọn mức ưu tiên cao (=1) hay thấp (=0)
tại timer 2

IP.4

ES

BCH

Chọn mức ưu tiên cao (=1) hay thấp (=0)
tại cổng nối tiếp.

IP.3

ET1

BBH

Chọn mức ưu tiên cao (=1) hay thấp (=0)
tại timer 1


IP.2

EX1

BAH

Chọn mức ưu tiên cao (=1) hay thấp (=0)
tại ngắt ngoài 1

IP.1

ET0

B9H

Chọn mức ưu tiên cao (=1) hay thấp (=0)
tại timer 0

IP.0

EX0

B8H

Chọn mức ưu tiên cao (=1) hay thấp (=0)
tại ngắt ngoài 0

Tóm tắt thanh ghi IP

 Nếu 2 ngắt xảy ra đồng thời thì ngắt nào có nào có mức ưu tiên cao hơn sẽ

được phục vụ trước.
 Nếu 2 ngắt xảy ra đồng thời có cùng mức ưu tiên thì thứ tự ưu tiên được
thực hiện từ cao đến thấp như sau: ngắt ngoài 0 – timer 0 – ngắt ngoài 1 – timer 1 –
cổng nối tiếp – timer 2.


 Nếu chương trình của một ngắt có mức ưu tiên thấp đang chạy mà có một
ngắt xảy ra với mức ưu tiên cao hơn thì chương trình này tạm dừng để chạy một
chương trình khác có mức ưu tiên cao hơn.

- Cho phép và cấm ngắt:

Mỗi nguồn ngắt được cho phép hoặc cấm ngắt qua một thanh ghi chức
năng đặt biệt có định địa chỉ bit IE (Interrupt Enable: cho phép ngắt) ở địa
chỉ A8H.
Bit

Ký hiệu

Địa chỉ bit

Mô tả

IE.7

EA

AFH

Cho phép / Cấm toàn bộ


IE.6

_

AEH

Không được mô tả

IE.5

ET2

ADH

Cho phép ngắt từ Timer 2 (8052)

IE.4

ES

ACH

Cho phép ngắt port nối tiếp

IE.3

ET1

ABH


Cho phép ngắt từ Timer 1

IE.2

EX1

AAH

Cho phép ngắt ngoài 1

IE.1

ET0

A9H

Cho phép ngắt từ Timer 0

IE.0

EX0

A8H

Cho phép ngắt ngoài 0

-

Tóm tắt thanh ghi IE

Các cờ ngắt:

Khi điều kiện ngắt xảy ra thì ứng với từng loại ngắt mà loại cờ đó được đặt
lên mức cao để xác nhận ngắt
Ngắt

Cờ

Thanh ghi SFR và vị trí bit


Bên ngoài 0

IE0

TCON.1

Bên ngoài 1

IE1

TCON.3

Timer 1

TF1

TCON.7

Timer 0


TF0

TCON.5

Port nối tiếp

TI

SCON.1

Port nối tiếp

RI

SCON.0

Các loại cờ ngắt

- Các vectơ ngắt:

Khi chấp nhận ngắt, giá trị được nạp vào PC gọi là vector ngắt. Nó là địa
chỉ bắt đầu của ISR cho nguồn tạo ngắt, các vector ngắt được cho ở bảng sau :
Ngắt

Cờ

Địa chỉ vector

Reset hệ thống


RST

0000H

Bên ngoài 0

IE0

0003H

Timer 0

TF0

000BH

Bên ngoài 1

IE1

0013H

Timer 1

TF1

001BH

Port nối tiếp


TI và RI

0023H

Timer 2

002BH

Vector reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vì theo nghĩa
này, nó giống ngắt: nó ngắt chương trình chính và nạp cho PC giá trị mới.


PHẦN 2:
CODE CỦA ĐỀ TÀI BÀI TẬP LỚN” LẬP TRÌNH HIỆU ỨNG LED CHẠY HÌNH
TRÁI TIM”.
1-CODE-ASM
ORG 0000H
MAIN:
ACALL XUONG
ACALL NHAY_TRAI_TIM
ACALL LEN_
ACALL NHAY_XEN_KE
ACALL XUONG1LED
ACALL NHAY_TRAI_TIM
ACALL GIUA
ACALL NHAY_XEN_KE
ACALL HAI_DAU_VAO
ACALL LEN1LED
ACALL NHAY_TOAN_BO

SJMP MAIN
;-----------------------------------------------------XUONG:
MOV P2,#0
MOV P1,#0
SETB P2.0
ACALL DELAY
SETB P2.1


ACALL DELAY
SETB P2.2
ACALL DELAY
SETB P2.3
ACALL DELAY
SETB P2.4
ACALL DELAY
SETB P2.5
ACALL DELAY
SETB P2.6
ACALL DELAY
SETB P2.7
ACALL DELAY
SETB P1.0
ACALL DELAY
SETB P1.1
ACALL DELAY
SETB P1.2
ACALL DELAY
SETB P1.3
ACALL

DELAY
SETB P1.4
ACALL DELAY
RET
;-----------------------------------------------------------------LEN_:
MOV P1,#0
MOV P2,#0
SETB P1.4
ACALL DELAY
SETB P1.3
ACALL DELAY
SETB P1.2
ACALL DELAY
SETB P1.1
ACALL DELAY
SETB P1.0
ACALL DELAY
SETB P2.7
ACALL DELAY
SETB P2.6
ACALL DELAY
SETB P2.5


ACALL DELAY
SETB P2.4
ACALL DELAY
SETB P2.3
ACALL DELAY
SETB P2.2

ACALL DELAY
SETB P2.1
ACALL DELAY
SETB P2.0
ACALL DELAY
RET
;----------------------------------------------------------------------GIUA:
MOV P1,#0
MOV P2,#0
SETB P2.6
ACALL DELAY
SETB P2.7
SETB P2.5
ACALL DELAY
SETB P1.0
SETB P2.4
ACALL DELAY
SETB P1.1
SETB P2.3
ACALL DELAY
SETB P1.2
SETB P2.2
ACALL DELAY
SETB P1.3
SETB P2.1
ACALL DELAY
SETB P1.4
SETB P2.0
ACALL DELAY
RET

;---------------------------------------------------------------HAI_DAU_VAO:
MOV P2,#0
MOV P1,#0
SETB P2.0
SETB P1.4


ACALL DELAY
SETB P2.1
SETB P1.3
ACALL DELAY
SETB P2.2
SETB P1.2
ACALL DELAY
SETB P2.3
SETB P1.1
ACALL DELAY
SETB P2.4
SETB P1.0
ACALL DELAY
SETB P2.5
SETB P2.7
ACALL DELAY
SETB P2.6
ACALL DELAY
RET
;-----------------------------------------------------------------------LEN1LED:
MOV P1,#0
MOV P2,#0
MOV R1,#5

MOV A,#10H
DICH1:
MOV B,#2
MOV P1,A
DIV AB
ACALL DELAY
DJNZ R1,DICH1
CLR P1.0
MOV R1,#8
MOV A,#80H
DICH2:
MOV B,#2
MOV P2,A
DIV AB
ACALL DELAY
DJNZ R1,DICH2
RET
;-----------------------------------------------------------------------XUONG1LED:


MOV P1,#0
MOV P2,#0
MOV A,#1
MOV R1,#8
DICH3:
MOV B,#2
MOV P2,A
MUL AB
ACALL DELAY
DJNZ R1,DICH3

CLR P2.7
MOV A,#1
MOV R1,#5
DICH4:
MOV B,#2
MOV P1,A
MUL AB
ACALL DELAY
DJNZ R1,DICH4
RET
;------------------------------------------------------------------NHAY_TOAN_BO:
MOV R5,#3
NHAY1:
MOV P1,#0
MOV P2,#0
ACALL DELAY1
MOV P1,#0FFH
MOV P2,#0FFH
ACALL DELAY1
DJNZ R5,NHAY1
RET
;------------------------------------------NHAY_TRAI_TIM:
MOV R5,#2
NHAY2:
MOV P1,#0
MOV P2,#0
ACALL DELAY1
MOV P1,#0FFH
MOV P2,#0FFH
CLR P1.5

ACALL DELAY1


DJNZ R5,NHAY2
RET
;----------------------------------------NHAY_XEN_KE:
MOV R5,#8
NHAY_XEN_KE1:
MOV P1,#15H
MOV P2,#55H
ACALL DELAY1
MOV P2,#0AAH
MOV P1,#0AAH
ACALL DELAY1
DJNZ R5,NHAY_XEN_KE1
RET
;-------------------------------------------DELAY:
MOV R2,#255
L1: MOV R3,#255
L2: MOV R4,#1
L3: DJNZ R4,L3
DJNZ R3,L2
DJNZ R2,L1
RET
;----------------------------------------------------DELAY1:
MOV R2,#255
L4: MOV R3,#255
L5: DJNZ R3,L5
DJNZ R2,L4
RET

;---------------------------------------------END


• Hình mô phỏng qua Proteus



Bản mạch chính:


2- Linh kiện sử dụng cho bài tập.
a- Vi điều khiển 89c52.

b- Transistor H1061:


c- Điện trở.

d- Thạch anh.

e- Tụ 33 pF


×