Tải bản đầy đủ (.pdf) (105 trang)

ứng dụng ngôn ngữ lập trình c vào vi điều khiển thiết kế mạch đồng hồ điện tử led hiển thị thời gian thực rtc

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 (3.91 MB, 105 trang )

TRƢỜNG ĐẠI HỌC CẦN THƠ
KHOA SƢ PHẠM
BỘ MÔN SƢ PHẠM VẬT LÝ

ỨNG DỤNG NGÔN NGỮ LẬP TRÌNH C VÀO VI ĐIỀU KHIỂN THIẾT
KẾ MẠCH ĐỒNG HỒ ĐIỆN TỬ LED HIỂN THỊ THỜI GIAN THỰC
RTC
Luận văn tốt nghiệp
Ngành: SƢ PHẠM VẬT LÝ

GVHD:

SVTH:

Vƣơng Tấn Sĩ

Nguyễn Long Phƣớc Đƣờng
MSSV: 1110193
Lớp: Sƣ Phạm Vật Lý - TL11012A1
Khóa: 37

Cần Thơ, năm 2015


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

LỜI CẢM ƠN

Em xin bày tỏ lòng biết ơn chân thành và sâu sắc đến


Ban chủ nhiệm Khoa Sư Phạm và toàn thể các thầy (cô)
trong Khoa đã giúp em có những kiến thức cơ bản và đặc
biệt là thầy (cô) của bộ môn Vật Lý khoa Sư Phạm của
trường ĐH Cần Thơ đã truyền đạt kiến thức chuyên
nghành và tạo điều kiện để cho em hoàn thành luận văn
tốt nghiệp này. Và đây cũng là hành trang chuẩn bị cho
em bước vào đời.
Em xin cám ơn thầy Vương Tấn Sĩ (giáo viên hướng
dẫn) đã giúp đỡ và chỉ bảo tận tình cho em trong suốt quá
trình làm luận văn.

Tp. Cần Thơ, ngày 24 tháng 4 năm 2015

Sinh viên
Nguyễn Long Phước Đường

Luận văn tốt nghiệp


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

LỜI CAM ĐOAN

Tôi xin cam đoan đây là công trình nghiên cứu do chính tôi thực hiện. Các số liệu, kết
quả phân tích trong luận văn là hoàn toàn trung thực và chưa từng được công bố trong bất kỳ
công trình nghiên cứu nào trước đây.

Mọi tham khảo, trích dẫn đều được chỉ rõ nguồn trong danh mục tài liệu tham khảo của

luận văn.

Cần Thơ, ngày 24 tháng 4 năm 2015
Tác giả

Nguyễn Long Phƣớc Đƣờng

Luận văn tốt nghiệp


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

MỤC LỤC
Mục lục……………………………………………………………………………... i
Danh mục ký hiệu, chữ viết tắt…………………………………………………….iii
PHẦN 1: MỞ ĐẦU………………………………………………………………….1
1.
2.
3.
4.

Lý do chọn đề tài…………………………………………………………1
Mục tiêu của đề tài……………………………………………………….2
Giới hạn đề tài……………………………………………………………2
Phƣơng pháp và phƣơng tiện thực hiện đề tài…………………………2
4.1 Phƣơng pháp…………………………………………………………2
4.2 Phƣơng tiện…………………………………………………………..3


PHẦN 2: NỘI DUNG……………………………………………………………….4
1. Chƣơng 1 Giới thiệu chung về họ vi điều khiển 8051………………....4
1.1 Sơ lƣợc về vi điều khiển……………………………………………...4
1.2 Sơ lƣợc về các khối trong vi điều khiển……………………………..5
1.3 Giới thiệu về họ vi điều khiển 8051………………………………….7
2. Chƣơng 2 Vi điều khiển IC 89S52……………………………………….9
2.1 Sơ lƣợc về vi điều khiển 89S52………………………………………9
2.2 Sơ đồ chân và chức năng của IC 89S52……………………………..9
2.3 Bộ nhớ dữ liệu………………………………………………………...14
2.4 Các bƣớc lập trình cho 89S52………………………………………..15
2.5 Hoạt động ngắt………………………………………………………..19
3. Chƣơng 3 Lập trình nhúng và ngôn ngữ C trong lập trình
vi điều khiển……………………………………………………21
3.1 Ngôn ngữ lập trình…………………………………………………….21
3.2 Lập trình……………………………………………………………….21
3.3 Lập trình nhúng………………………………………………………21
Luận văn tốt nghiệp
i


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

3.4 Ngôn ngữ C …………………………………………………………..22
4. Chƣơng 4 Giới thiệu trình biên dịch Dev C++ và trình biên
dịch Keil C µVision 4 (Compiler)……………………………34
4.1 Trình biên dịch Dev C++ ……………………………………………34
4.2 Trình biên dịch Keil C µVision 4 (Compiler)……………………….41
PHẦN 3: THI CÔNG MẠCH THỰC TẾ………………………………………….47

1. Chƣơng 1 Giới thiệu các khối và các linh kiện trong mạch…………...47
1.1 Giới thiệu các linh kiện trong mạch…………………………………47
1.2 Các khối trong mạch………………………………………………….62
2. Chƣơng 2 Sơ đồ nguyên lý và mạch mô phỏng………………………….67
2.1 Sơ đồ nguyên lý………………………………………………………..67
2.2 Mạch in………………………………………………………………...68
2.3 Mạch mô phỏng……………………………………………………….68
3. Chƣơng 3 Lƣu đồ giải thuật và chƣơng trình…………………………..70
3.1 Lƣu đồ giải thuật……………………………………………………..70
3.2 Mã nguồn chƣơng trình……………………………………………...77
PHẦN 4: KẾT LUẬN………………………………………………………………92
1. Kết quả đạt đƣợc của đề tài……………………………………………..92
2. Đề nghị……………………………………………………………………93
3. Hƣớng phát triển…………………………………………………………93
Danh mục tài liệu tham khảo……………………………………………………….94
Phụ lục……………………………………………………………………………….95
Phụ lục 1……………………………………………………………………………..95
Phụ lục 2……………………………………………………………………………..96
Phụ lục 3……………………………………………………………………………..97
Luận văn tốt nghiệp
ii


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

DANH MỤC KÍ HIỆU, CHỮ VIẾT TẮT

AC


Auxiliary Carry Flag

Cờ nhớ phụ

A/D

Analog/Digital

Tương tự/số

ALE

Address Latch Enable

Tín hiệu điều khiển chốt địa chỉ

CLK

Clock

Xung đồng hồ

CP/RL2

Capture/ Reload Select

Chế độ thu nhận

CPU


Central Processing Unit

Đơn vị xử lý trung tâm

CS

Chip Select

Chọn chip

CTS

Clear to Send

Xoá để gửi

C/T

Timer/Counter

Bộ định thời/ đếm

DCD

Data Carrier Detect

Tách tín hiệu mang dữ liệu

DCE


Data Comnication Equipment

Thiết bị tiếp nhận

DPTR

Data Pointer

Con trỏ ngăn xếp

DTR

Data Terminal Realy

Đầu cuối dữ liệu

DSR

Data Set Realy

Dữ liệu sẵn sàng

DTE

Data Terminal Equipment

Thiết bị đầu cuối

EA


External Access

Tín hiệu cho phép chọn bộ nhớ

EIA

Electronics Industry
Asscociation

Hiệp hội công nghiệp điện tử

EN

Enable

Chân cho phép

Luận văn tốt nghiệp
iii


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

GND

Ground


Đất

I2C

Intergrated Circuit

Chuẩn giao tiếp I2C

IE

Interupt Enable

Thanh ghi cho phép ngắt

I/O

Input/Output

Vào/Ra

INT

Interrrupt

Ngắt

IP

Interrupt priority


Thanh ghi ưu tiên ngắt

ISR

Interrupt Service Routine

Chương trình con phục vụ ngắt

LCHCLK

Latch Clock

Xung cock chốt dữ liệu

Luận văn tốt nghiệp
iv


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

PHẦN 1: MỞ ĐẦU
1. LÝ DO CHỌN ĐỀ TÀI
Ngày nay công nghệ kỹ thuật vi điều khiển và lập trình nhúng đã trở nên quen thuộc
trong các ngành kỹ thuật và trong dân dụng từ các dây truyền sản xuất lớn đến các thiết bị gia
dụng nhỏ chúng ta đều thấy sự hiện diện của vi điều khiển. Các bộ vi điều khiển có khả năng
xử lý nhiều hoạt động phức tạp mà chỉ cần sử dụng một chip vi mạch nhỏ, nó đã thay thế các
hệ thống điều khiển lớn và phức tạp bằng những mạch điện nhỏ và gọn nhẹ, dễ dàng thao tác
và sử dụng.

Lâp trình nhúng ứng dụng vào vi điều khiển không những góp phần vào kỹ thuật điều khiển
mà còn góp phần to lớn vào việc phát triển thông tin, giáo dục v.v... Đó chính là sự ra đời của
hàng loạt thiết bị hiện đại trong ngành viễn thông, truyền hình, giáo dục, đặc biệt là sự ra đời
và phát triển của Internet đã góp phần phát triển các phương pháp – phương tiện giáo dục trở
nên tiện lợi hơn, chính vì lý do trên việc tìm hiểu về lập trình nhúng và khảo sát vi điều khiển,
chế tạo các mạch điện tử ứng dụng trong giảng dạy là điều mà các sinh viên ngành Sư Phạm
đặc biệt là ngành Sư Phạm Vật Lý rất quan tâm. Đó chính là một nhu cầu cần thiết và cấp bách
đối với mỗi sinh viên. Luận văn này được thực hiện chính là đáp ứng nhu cầu đó. Các bộ điều
khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành và sử dụng chúng là một điều rất
phức tạp. Các bộ vi điều khiển chủ yếu vẫn phụ thuộc vào con người đó là chương trình hay
phần mềm. Hiện nay đã có những loại máy tính rất thông minh có thể giải quyết được những
bài toán phức tạp trong vài phần triệu giây nhưng thành quả đạt được cũng là dựa trên sự hiểu
biết của con người. Nếu không có sự tham gia của con người thì hệ thống cũng chỉ như những
vật vô tri. Khi nói đến vi điều khiển cũng giống như máy tính bao gồm hai phần: phần cứng và
phần mềm.
Các bộ vi điều khiển phát triển theo thời gian cùng với sự phát triển của công nghệ bán dẫn đã
phát triển rất nhanh. Từ bộ vi điều khiển 4 bit đơn giản đã phát triển lên bộ vi điều khiển 32
bit. Với công nghệ tiên tiến hiện nay các máy tính có thể suy nghĩ và hành động gần giống con
người nhưng để tiếp cận và hiểu được công nghệ này cần phải nghiên cứu trong thời gian rất
dài.
Để tìm hiểu bộ vi điều khiển một cách khoa học và mang lại hiệu quả làm nền tảng cho sự phát
triển sau này thì việc trang bị những kiến thức về vi điều khiển và ngôn ngữ lập trình cho sinh
viên là rất cần thiết.
Luận văn tốt nghiệp
1


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường


Một trong những ứng dụng thiết thực của lâp trình nhúng vào vi điều khiển đó là thiết kế đồng
hồ hiển thị thời gian. Đây là một ứng dụng thường thấy nhất trong cuộc sống.
Qua các môn đã được học: kỹ thuật điện tử 1, thực tập kỹ thuật điện tử 1, CAD, cảm
biến….Với mục đích kiểm tra lại kiến thức về điện tử nên ở luận văn này, em chọn thi công
mạch đồng hồ số hiện thời gian thực dùng DS1307 để vận dụng tất cả các kiến thức cơ bản đã
được học.
Ở đây, do được học cơ bản về AT89S52 nên sẽ sử dụng vi xử lý AT89S52 để thi công mạch.
Về phần hiển thị thời gian có thể dùng led 7 đoạn, led đơn,led ma trận, hay LCD để hiển thị.
Đối với led ma trận thì khá phức tạp cho việc hiển thị, do đó em sử dụng led 7 đoạn cho việc
hiển thị. Xuất phát từ thực tiễn này em đã chọn đề tài “Ứng dụng ngôn ngữ lập trình C vào vi
điều khiển thiết kế mạch đồng hồ Led 7 đoạn hiển thị thời gian thực RTC”

2. MỤC TIÊU CỦA ĐỀ TÀI
Kiến thức vật lý luôn là 1 phần rất quan trọng trong các môn khoa học tự nhiên và trong
mọi ngành kỹ thuật – đời sống, là nền tảng cho mọi ngành công nghiệp hiện đại như tin học,
điện tử,… Việc ứng dụng các kiến thức đó vào việc chế tạo các thiết bị phục vụ đời sống
thường ngày cũng như nghiên cứu và dạy học nói chung nhằm đáp ứng các yêu cầu của việc
dạy và học về điện tử cho sinh viên ngành Sư Phạm Vật Lý. Thực hiện nghiên cứu và chế tạo
mạch đồng hồ Led là sự ứng dụng các kiến thức vật lý vào cuộc sống thường ngày, qua đó cho
thấy rằng Vật Lý không đơn thuần là những định luật khô khan hàn lâm mà luôn hiện diện
xung quanh ta ở mọi khía cạnh.

3. GIỚI HẠN ĐỀ TÀI
Trước sự phát triển mạnh mẽ của công nghệ phần cứng và công nghệ phần mềm có rất
nhiều vi điều khiển và phần mềm hỗ trợ lập trình và biên dịch nhưng đề tài của em chỉ nghiên
cứu về vi điều khiển AT89S52 và ngôn ngữ lập trình C mà thôi.

4. PHƢƠNG PHÁP VÀ PHƢƠNG TIỆN THỰC HIỆN ĐỀ TÀI
4.1 Phƣơng pháp

- Nghiên cứu lý thuyết:
Vi điều khiển AT89S52 là vi điều khiển có cấu tạo tương đối phức tạp nhưng có nguyên tắc
làm việc cũng như xuất nhập dữ liệu tương đối đơn giản.
Tìm hiểu về lập trình nhúng và ngôn ngữ lập trình C.
Luận văn tốt nghiệp
2


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

Sử dụng các trình biên dịch và các phần mềm mô phỏng trước khi ráp mạch thực tế giúp giảm
thiểu tối đa các sai sót và tổn hao thiết bị khi ráp mạch thực tế.
- Thực hành: Thực hiện thi công ráp mạch thực tế.
4.2 Phƣơng tiện
- Vi điều khiển AT89S52.
- Các linh kiện điện tử khác cần thiết cho luận văn như: thạch anh 12MHz, DS 1307, tụ hóa,
pin CMOS 3V, v.v…
- Ngôn ngữ lập trình C và các phần mềm viết code như Dev C ++
- Các bo mạch, mạch nạp và 1 số phần mềm mô phỏng, nạp mạch, biên dịch, v.v…

Luận văn tốt nghiệp
3


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường


PHẦN 2: NỘI DUNG
CHƢƠNG 1: GIỚI THIỆU CHUNG VỀ HỌ VI ĐIỀU KHIỂN 8051
1.1 Sơ lƣợc về vi điều khiển:
Năm 1976, hãng Intel giới thiệu bộ vi điều khiển 8748 – mở đầu cho họ vi điều khiển MCS-48.
8748 là một vi mạch chứa hơn 17.000 transistor bao gồm một CPU, 1 kbyte bộ nhớ EPROM,
64B RAM, một bộ đếm/định thời 8 bit và 27 chân vào/ra. 8748 và các vi điều khiển tiếp theo
của nó trong họ MCS-48 đã được sử dụng phổ biến trong các ứng dụng hướng điều khiển như
máy giặt, ôtô, các thiết bị ngoại vi của máy tính… Sau 8748, các bộ vi điều khiển mới liên tục
được các hãng sản xuất như Intel, Atmel, Siemens… giới thiệu cho các ứng dụng nhúng.
Vi mạch tích hợp, hay vi mạch, hay mạch tích hợp (integrated circuit) hay vi điều khiển, gọi tắt
IC, hay chip là các mạch điện chứa các linh kiện bán dẫn (như transistor) và linh kiện điện tử
thụ động (như điện trở) được kết nối với nhau, kích thước nhỏ và chế tạo bởi công nghệ silicon
cho lĩnh vực điện tử.
Vi điều khiển là những vi mạch điện tử tích hợp (chip) mà chúng ta có thể lập trình để thực
hiện những nhiệm vụ mà bạn muốn. Khác với vi xử lý, các vi điều khiển ngoài chức năng xử
lý dữ liệu thuật toán nó còn được tích hợp các bộ chức năng đặc biệt khác, các vi điều khiển
ngõ vào để nhận và xuất dữ liệu, các bộ timer xử lý thời gian, các bộ trao đổi dữ liệu theo một
số chuẩn giao tiếp, thậm chí có một số loại vi điều khiển còn có cả bộ chuyển đổi AD, bộ điều
khiển động cơ…
Vi điều khiển (MCU – viết tắt của cụm từ “Micro Control Unit”) có thể được coi như một máy
tính thu nhỏ trên một chip, nó có thể hoạt động với vài linh kiện phụ trợ ở bên ngoài.Vi điều
khiển khác với vi xử lý ở những điểm sau:
+ Về phần cứng: Vi xử lý cần ghép thêm các thiết bị ngoại vi bên ngoài như bộ nhớ và các
thiết bị ngoại vi khác để có thể tạo thành một bản mạch hoàn chỉnh. Với vi điều khiển bản thân
nó là một hệ máy tính hoàn chỉnh với CPU, bộ nhớ, mạch giao tiếp, các bộ định thời và mạch
điều khiển ngắt được tích hợp bên trong.
+ Về ứng dụng: Các bộ vi xử lý chủ yếu được dùng làm CPU trong các máy tính còn các bộ vi
điều khiển dùng làm trong các ứng dụng hướng điều khiển.
+ Về các đặc trưng tập lệnh: Do ứng dụng khác nhau nên các bộ vi xử lý và vi điều khiển cũng
có những yêu cầu khác nhau đối với tập lệnh của chúng. Tập lệnh của các vi xử lý thường

Luận văn tốt nghiệp
4


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

mạnh về các kiểu địa chỉ với các lệnh cung cấp các hoạt động trên các lượng dữ liệu lớn như 1
byte, ½ byte, word, double word…Ở các vi điều khiển, các tập lệnh rất mạnh trong việc xử lý
các kiểu dữ liệu nhỏ như bit hoặc một vài bit.[1]

Hình 1.1 Các loại vi điều khiển (chip)
1.2 Sơ lƣợc về các khối trong vi điều khiển:
1.2.1 Bộ nhớ
Bộ nhớ là một bộ phận của vi điều khiển, chức năng của nó là lưu trữ dữ liệu. Hoạt động của
bộ nhớ được so sánh với tủ lớn có nhiều ngăn kéo, cần đánh dấu ngăn kéo để không xảy ra
sự nhầm lẫn và nội dung được truy cập một cách thuận lợi chính xác.
Bộ nhớ bao gồm các địa chỉ và việc định địa chỉ để có thể lựa chọn chính xác một trong các
ô nhớ ngoài ra còn cần đến khả năng ghi dữ liệu lên ô nhớ. Với mức logic bằng 1 có nghĩa là
việc ghi đọc đã hoàn tất và ngược lại. Bộ nhớ là phần tử đầu tiên ta cần nắm rõ để làm việc
với vi điều khiển.
Bộ nhớ được tạo ra từ các vi mạch nhớ ROM và RAM.
ROM (Read Only Memory) bộ nhớ chỉ đọc, nội dung bên trong không bị mất khi mất nguồn
nuôi. ROM dùng để chứa các chương trình điều khiển hệ thống như chương trình kiểm tra
các thiết bị khi bật nguồn, chương trình trao đổi thông tin với các thiết bị ngoại vi như bàn
phím, màn hình…
RAM (Random Access Memory) bộ nhớ truy cập ngẫu nhiên, bộ nhớ có thể ghi/đọc được, ta
có thể đọc, xóa thông tin từ bộ nhớ, ghi thông tin mới vào bộ nhớ. Thông tin trong RAM sẽ
Luận văn tốt nghiệp

5


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

bị mất khi mất nguồn nuôi, RAM để lưu trữ toán hạng mã lệnh, kết quả của chương trình khi
nó đang thực hiện. RAM có dung lượng là 1, 2, 4, 8, 16, 32, 64, 128, 256, 512MB.
1.2.2 Đơn vị xử lý trung tâm
Giả sử đã có ít nhất là 3 ô nhớ ta thêm vào một khối có cấu tạo đặc biệt, khối này có khả
năng thực hiện các phép toán cộng, trừ, nhân, chia và di chuyển nội dung từ ô nhớ này đến ô
nhớ khác. Khối ta vừa thêm vào gọi là “đơn vị xử lí trung tâm” và ô nhớ của nó gọi là các
thanh ghi. Do đó những thanh ghi là những ô nhớ và vai trò của nó là hỗ trợ ta thực hiện
nhiều phép toán bất kì trên dữ liệu được tìm thấy trên vi điều khiển. Như vậy hiện tại có hai
khối thực hiện độc lập (bộ nhớ và bộ xử lí trung tâm) được kết nối với nhau.
1.2.3 BUS hệ thống
Các đường dẫn để di chuyển dữ liệu từ khối này sang khối khác gọi là bus. Về mặt vật
lí bus là một nhóm các đường dẫn có thể có 8,16 hoặc nhiều hơn. Bus chia làm 3 loại: bus
điều khiển, bus địa chỉ và bus dữ liệu. Bus điều khiển là các đường dây mang tín hiệu điều
khiển hoạt động hoặc phản ánh trạng thái của các khối như /RD (read - đọc bộ nhớ hoặc thiết
bị vào), /WR (write - ghi dữ liệu vào bộ nhớ hoặc xuất ra thiết bị ra), INT (interrup – ngắt vi
xử lí để trao đổi dữ liệu)… Bus dữ liệu là các đường dây mang số liệu mà vi xử lí đang trao
đổi với bộ nhớ hoặc thiết bị vào ra
Bus địa chỉ bao gồm số đường dẫn tương xứng với dung lượng bộ nhớ ta muốn định địa chỉ.
Bus địa chỉ mang thông tin về địa chỉ ô nhớ. Bus địa chỉ để truyền địa chỉ từ CPU tới bộ nhớ
còn bus dữ liệu để kết nối tất cả các khối trong vi điều khiển.
1.2.4 Khối vào và ra
Có ba loại cổng là vào, ra, cổng hai chiều. Khi làm việc với cổng trước tiên ta phải
chọn cổng cần giao tiếp sau đó truyền dữ liệu tới hoặc nhận dữ liệu từ cổng. Khi làm việc

cổng đóng vai trò như một ô nhớ ghi vào hoặc đọc ra từ các cổng nó được chỉ ra trên các
chân của vi điều khiển.
1.2.5 Truyền thông cổng nối tiếp
Bên cạnh các khối ở trên ta bổ sung thêm khả năng truyền thông với thế giới bên ngoài.
Tuy nhiên cách truyền thông có phần hạn chế. Điểm hạn chế cơ bản là số lượng đường dẫn
cần được dùng để truyền dữ liệu. Khi có hai đường dẫn truyền và nhận dữ liệu tách biệt nhau
ta sẽ có khả năng truyền và nhận dữ liệu cùng một lúc. Vì thế gọi là chế độ song công, khối
cho phép thực hiện việc truyền thông này gọi là khối truyền thông nối tiếp. Không giống với
Luận văn tốt nghiệp
6


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

truyền song song dữ liệu được truyền từng bit một, hoặc là một chuỗi các bit vì vậy mà có
thuật ngữ truyền thông nối tiếp. Sau khi nhận dữ liệu ta chuyển sang bước đọc dữ liệu từ bên
nhận và lưu vào bộ nhớ. Dữ liệu tới bộ nhớ thông qua bus để tới ô nhớ truyền rồi tới khối
nhận phù hợp.
1.2.6 Bộ định thời
Đây là khối cung cấp cho ta thông tin về thời gian, khoảng thời gian mà một sự kiện
tồn tại, v.v… Khối cơ bản của bộ định thời là bộ đếm tự do, thực tế bộ đếm này là một thanh
ghi mà giá trị của nó tăng thêm một sau những khoảng thời gian bằng nhau ta có thể xác
định được khoảng thời gian đã trôi qua là bao nhiêu. Đây là phần quan trọng của vi điều
khiển ứng dụng quan trọng trong việc đóng ngắt.
1.2.7 Watchdog
Đây là bộ đếm tự do khác, trong trường hợp chương trình gặp bất thường nó sẽ khởi
động lại vi điều khiển khi đạt giá trị đếm cực đại. Điều này sẽ dẫn tới kết quả thực hiện lại
chương trình một lần nữa và lần này sẽ chạy chính xác. Nó là phần tử quan trọng làm cho

chương trình trở nên tin cậy hơn mà không cần sự giám sát của người dùng.
1.3 Giới thiệu về họ vi điều khiển 8051
Năm 1981, hãng Intel giới thiệu bộ vi điều khiển 8051, bộ vi điều khiển này có 128
byte RAM, 4 kbyte ROM, hai bộ định thời, một cổng nối tiếp và bốn cổng vào/ra song song,
tất cả được đặt trên một chip. 8051 là bộ xử lý 8 bit có nghĩa là CPU chỉ có thể làm việc với
8 bit tại một thời điểm. Dữ liệu lớn hơn 8 bit được chia ra thành các dữ liệu 8 bit để xử lý,
8051 cung cấp những đặc tính chuẩn như: 8 KByte bộ nhớ chỉ đọc có thể xóa và 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. [2]
Bảng 1.1 Các đặc tính của 8051 đầu tiên
Đặc tính
Số lượng
ROM

4 Kbyte

RAM

128 byte

Bộ định thời

2

Luận văn tốt nghiệp
7


GVHD: Thầy Vương Tấn Sĩ


SVTH: Nguyễn Long Phước Đường

Chân vào/ra

32

Cổng nối tiếp

1

Nguồn ngắt

6

Luận văn tốt nghiệp
8


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

CHƢƠNG 2: VI ĐIỀU KHIỂN IC 89S52
2.1 Sơ lƣợc về vi điều khiển 89S52 [3]
Năm 1980 khi Intel tung ra chip 8051, bộ Vi điều khiển đầu tiên của họ MCS-51 và là
chuẩn công nghệ cho nhiều họ Vi điều khiển được sản xuất sau này.
Năm 1980 Intel công bố chíp 8051(80C51), bộ vi điều khiển đầu tiên của họ vi điều khiển
MCS-51bao gồm :
- 4KB ROM,

- 128 byte RAM,
- 32 đường xuất nhập,
- 1 port nối tiếp và 2 bộ định thời 16 bit.
Tiếp theo sau đó là sự ra đời của chip 8052,8053,8055 với nhiều tính năng được cải tiến .
Hiện nay Intel không còn cung cấp các loại Vi điều khiển họ MCS-51 nữa, thay vào đó các
nhà sản xuất khác như Atmel, Philips/Signetics, AMD, Siemens, Matra&Dallas,
Semiconductors được cấp phép làm nhà cung cấp thứ hai cho các chip của họ MSC-51.
Chip Vi điều khiển được sử dụng rộng rãi trên thế giới cũng như ở Việt Nam hiện nay là Vi
điều khiển của hãng Atmel. Các mã số chip được thay đổi chút ít khi được Atmel sản xuất.
Mã số 80 chuyển thành 89, chẳng hạn 80C52 của Intel khi sản xuất ở Atmel mã số thành
89C52 (Mã số đầy đủ: AT89C52) với tính năng chương trình tương tự như nhau. Tương tự
8051,8053,8055 có mã số tương đương ở Atmel là 89C51, 89C53, 89C55.
Sau khoảng thời gian cải tiến và phát triển, hãng Atmel tung ra thị trường dòng Vi điều
khiển mang số hiệu 89Sxx với nhiều cải tiến và đặc biệt là có thêm khả năng nạp chương
trình theo chế độ nối tiếp rất đơn giản và tiện lợi cho người sử dụng.

89S51
89S52
89S53
89S55

Dung lƣợng RAM Dung lƣợng ROM
128 byte
4 Kbyte
128 byte
8 Kbyte
128 byte
12 Kbyte
128 byte
20 Kbyte


2.2 Sơ đồ chân và chức năng của IC 89S52
Luận văn tốt nghiệp
9

Chế độ nạp:
nối tiếp
nối tiếp
nối tiếp
nối tiếp


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

2.2.1 Sơ đồ chân


Port 1 (P1.0 – P1.7)
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 1 có thể xuất nhập theo bit và theo byte.
Riêng dòng 89Sxx, ba chân P1.5, P1.6, P1.7 được dùng để nạp ROM theo chuẩn ISP. Hai chân
P1.0 và P1.1 được dùng cho bộ timer 2. Sơ đồ kết nối AT89S52 với cổng song song để nạp
chương trình (file .hex).

Luận văn tốt nghiệp
10



GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

Hình 0.1 Cấu trúc của các chân trên port 1 và port 3

Port 2 (P2.0 – P2.7)
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.

Hình 2.4 Cấu trúc của các chân trên Port 2.
Luận văn tốt nghiệp
11


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường


Port 3 (P3.0 – P3.7)
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
89S52 như ở bảng 2.1.

Bit

Bảng 2.1 Chức năng của Port 3.
Tên
Chức năng


P3.0

RXD

Dữ liệu nhận cho port nối tiếp

P3.1

TXD

Dữ liệu truyền cho port nối tiếp

P3.2

INT0

Ngắt bên ngoài 0

P3.3

INT1

Ngắt bên ngoài 1

P3.4

T0

Ngõ vào của timer/counter0


P3.5

T1

Ngõ vào của timer/counter1

P3.6

/WR

Xung ghi bộ nhớ dữ liệu ngoài

P3.7

/RD

Xung đọc bộ nhớ dữ liệu ngoài

 PSEN (Program store enable)
PSEN là tín hiệu ngõ ra có tác dụng cho phép đọc chương trình ở bộ nhớ ngoài và thường được
nối đến chân OE để cho phép đọc các byte mã lệnh trên ROM ngoài. Nối với chân PSEN ở
mức thấp trong thời gian 89S52 lấy lệnh. Các mã lệnh của chương trình được đọc từ EPROM
qua bus dữ liệu, được chốt vào thanh ghi lệnh bên trong 89S52 để giải mã lệnh. Khi 89S52 thi
hành chương trình trong ROM nội, PSEN ở mức cao.
 ALE (Address Latch Enable)
ALE là tín hiệu điều khiển chốt địa chỉ có tần số bằn 1/6 lần tần số dao động của vi điều
khiển. Tín hiệu ALE được dùng để cho phép vi mạch chốt bên ngoài như 74373, 74573 chốt
byte địa chỉ thấp ra khỏi bus đa hợp địa chỉ/dữ liệu (Port 0).



Chân /EA (External Access)

Luận văn tốt nghiệp
12


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

Tín hiệu /EA cho phép chọn bộ nhớ chương trình là bộ nhớ trong hay ngoài vi điều khiển. Nếu
/EA ở mức cao (nối với Vcc), thì vi điều khiển thi hành chương trình trong ROM nội. Nếu /EA
ở mức thấp (nối với GND) thì vi điều khiển thi hành chương trình từ bộ nhớ ngoài.

RST (Reset)
Ngõ vào RST trên chân 9 là ngõ reset của 8051. Khi tín hiệu này được đưa lên mức cao (trong
ít nhất hai chu kỳ máy ), các thanh ghi trong vi điều khiển được tải những giá trị thích hợp để
khởi động hệ thống.

Hình 2.5 Mạch Reset.

XTAL1, XTAL2
AT89S52 có một bộ dao động trên chip, nó thường được nối với bộ dao động thạch anh có tần
số lớn nhất là 33MHz, thông thường là 12MHz.

Hình 2.6 Mạch tạo dao động.


VCC, GND

AT89S52 dùng nguồn một chiều có dải điện áp từ 4V đến 5.5V được cấp qua chân 40 và
chân 20.
2.2.2 Chức năng:
Chức năng: Là vi điều khiển chính của mạch.
Luận văn tốt nghiệp
13


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

- 8 KB EPROM bên trong.
- 256 Byte RAM nội.
- 4 Port xuất /nhập I/O 8 bít.
- 3 bô ̣ đinh
̣ thời 16 bit
- Watch dog timer
- Các đặc điểm khác giố ng AT89C51.
AT89S52 có 8kbyte Flash ROM trên chip, khi chân /EA (chân số 31) được đặt ở mức logic
cao (+5V), bộ vi điều khiển sẽ thực hiện chương trình trong bộ nhớ này bắt đầu từ địa chỉ
0000H. Số lần lập trình cho bộ nhớ này khoảng 1000 lần. Khi chân /EA ở mức logic thấp, bộ
nhớ chương trình sẽ thực hiện ở bộ nhớ ngoài (EPROM ngoài), tuy nhiên cần có mạch phối
ghép AT89S52.
2.3 Bộ nhớ dữ liệu
Bộ nhớ dữ liệu ngoài là RAM được đọc hoặc được ghi bởi tín hiệu /RD và /WR.RAM bên
trong AT89S52 được phân chia như sau:
Các bank thanh ghi có địa chỉ từ 00H đến 1FH: 32 byte thấp của bộ nhớ nội được dành cho các
bank thanh ghi. Bộ lệnh 8951 hỗ trợ 8 thanh ghi có tên là R0 – R7 và mặc định sau khi reset hệ
thống thanh ghi có địa chỉ từ 00H – 07H. Do có 4 bank thanh ghi nên tại một thời điểm chỉ có

một bank được truy xuất bởi thanh ghi R0 – R7. RAM địa chỉ hóa từng bit có địa chỉ từ 20H
đến 2FH: AT89S52 có 128 bit chứa các byte định địa chỉ. Các bit có thể được đặt xóa bằng
phần mềm với 1 lệnh đơn. RAM đa dụng từ 30H đến 7FH.
Các thanh ghi chức năng đặc biệt từ 80H đến FFH.
AT89S52 có 21 thanh ghi chức năng ở vùng trên của RAM nội từ địa chỉ 80H đến FFH.
Thanh ghi trạng thái chương trình:
Bảng 2.2 Thanh ghi trạng thái chương trình.
Bit
Ký hiệu
Địa chỉ
Ý nghĩa
PSW.7
CY
D7H
cờ nhớ
PSW.6
AC
D6H
cờ nhớ phụ
PSW.5
F0
D5H
cờ 0
PSW.4
RS1
D4H
Bit 1 chọn bank thanh ghi
Bit 0 chọ bank thanh ghi
PSW.3
RS0

D3H
00= Bank 0 địa chỉ: 0H÷07H
Luận văn tốt nghiệp
14


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường
01= Bank 1 địa chỉ: 08H÷0FH
10= Bank 2 địa chỉ: 10H÷1FH
11= Bank 3 địa chỉ: 18H÷1FH
cờ tràn
dự trữ
cờ chẵn lẻ

PSW.2
0V
D2H
PSW.1
D1H
PSW.0
P
D0H
2.4 Các bƣớc lập trình cho 89S52
2.4.1 Giới thiệu
Lập trình cho IC là việc thiết kế các thuật toán bằng cách sử dụng các tập lệnh để IC giải
quyết các nhiệm vụ cụ thể tùy theo yêu cầu của mạch điện tử. Vì mạch đồng hồ của luận văn
đặt ra đa phần liên quan đến việc định thời và đếm sự kiện nên ở đây đi sau phân tích các vấn
đề liên quan đến việc định thời và đếm sự kiện.

2.4.2 Hoạt động định thời
Các bộ định thời (Timer) được sử dụng rất rộng rãi trong các ứng dụng đo lường và điều
khiển. Có thể coi bộ định thời n bit được tạo bởi n Flip-Flop mắc nối tiếp với nhau. Đầu vào
của bộ định thời là đầu vào của Flip-Flop đầu tiên, đầu ra báo tràn (Over Flow) của bộ định
thời phản ánh trạng thái tràn của nó. Đầu ra của các Flip-Flop phản ánh giá trị hiện thời của bộ
đếm. Tuỳ thuộc vào ứng dụng đầu vào của bộ định thời có thể lấy nguồn xung lấy từ xung nhịp
của vi điều khiển hoặc là lấy từ nguồn xung từ bên ngoài đưa đến. Vi điều khiển AT89S52 có
ba bộ định thời 16 bit trong đó có hai bộ Timer 0 và Timer 1 có bốn chế độ hoạt động, Timer 2
có ba chế độ hoạt động. Các bộ định thời được dùng để khẳng định thời gian (hẹn giờ), đếm sự
kiện xảy ra bên ngoài vi điều khiển hoặc tạo tốc độ Baud cho cổng nối tiếp của vi điều khiển.
2.4.3 Thanh ghi timer 1 và timer 0
Thanh ghi chế độ định thời (TMOD):
+ Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho Timer 0 và
Timer 1.Thanh ghi chứa giá trị của các bộ định thời của Timer 0 và Timer 1 là THx và TLx, là
thanh ghi 8 bit để chứa giá trị khởi tạo hoặc giá trị hiện thời của Timer. Thanh ghi này không
được định địa chỉ bit.
Bảng 2.3 Thanh ghi TMOD.
Bit

Tên

Mô tả

Timer

Luận văn tốt nghiệp
15


GVHD: Thầy Vương Tấn Sĩ


7

GATE1

SVTH: Nguyễn Long Phước Đường

1

6

C/#T1

1

5

M1

1

4

M0

1

3

GATE0


0

2
1
0

C/#T0
M1
M0

0
0
0

Bit mở cổng cho timer 1, khi được đặt
bằng 1 thì timer 1 chỉ chạy khi chân INT1 ở
mức cao. Nếu bit này được đặt là 0 thì
hoạt động của timer 1 không bị ảnh
hưởng bởi mức logic trên chân INT1
Bit chọn chế độ timer/couter của timer 1.
1= bộ đếm sự kiện.
0= bộ định khoảng thời gian.
Bit 1 chọn chế độ (mode) của timer 1
Bit 0 chọn chế độ của timer 1:
00: chế độ 0 - timer 13 bit
01: chế độ 1 - timer 16 bit
10: chế độ 2 - timer 8 bit tự nạp lại
11: chế độ 3 - tách timer
Bit mở cổng cho timer 0. Khi được đặt

bằng 1 thì timer 0 chỉ chạy khi chân INT0 ở
mức cao.
Bit chọn chế độ couter/timer của timer 0
Bit 1 chon chế độ của timer 0
Bit 0 chọn chế độ của timer 0

TF2: Cờ báo tràn của timer 2. TF2 không được thiết lập khi TCLK hoặc RCLK được đặt bằng
1.
EXF2: Cờ ngắt ngoài của timer 2. EXF2 = 1 khi xảy ra sự nạp lại hoặc thu nhận. EXF2 = 1
cũng gây ra ngắt do Timer 2 nếu như ngắt này được lập trình cho phép.
RCLK: Bit chọn timer cung cấp xung nhịp cho đường nhận của cổng nối tiếp.
TCLK: Bit chọn timer cung cấp xung nhịp cho đường truyền của cổng nối tiếp.
EXEN2: Bit điều khiển hoạt động của Timer 2. Khi EXEN2=1 việc nạp lại hoặc thu nhận
(Capture) diễn ra khi có sự chuyển trạng thái từ 1 sang 0 ở chân T2EX nếu Timer 2 không sử
dụng để cung cấp tốc độ Baud cho cổng nối tiếp.
TR2: Bit điều khiển hoạt động của timer 2 (tương tự như TR0, 1).
C/#T2: Bit chọn chế độ đếm hoặc định thời của Timer 2 (tương tự như C/#T0,1).
CP/#RL2: Bit chọn chế độ thu nhận hay nạp lại của Timer 2.

Luận văn tốt nghiệp
16


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

Khi CP/#RL2C được thiết lập bằng 1 việc thu nhận được thực hiện khi có sườn xuống ở chân
T2EX và bit EXEN1 được đặt là 1.
Khi CP/#RL2C được đặt bằng 0, việc nạp lại được thực hiện khi có sườn xuống ở chân T2EX

và bit EXEN2 được đặt là 1. Nếu RCLK hoặc TCLK = 1, bit này được bỏ qua, Timer 2 tự nạp
lại khi tràn.
Thanh ghi T2MOD:
Thanh ghi TMOD có địa chỉ 0C9H, thanh ghi này không định địa chỉ bit.
Bit

Ký hiệu

Mô tả

T2MOD.7

Không sử dụng

T2MOD.6

Không sử dụng

T2MOD.5

Không sử dụng

T2MOD.4

Không sử dụng

T2MOD.3

Không sử dụng


T2MOD.2

Không sử dụng

T2MOD.1

T2OE

Cho phép đầu ra khi sử dụng Timer 2 để chế tạo
xung (chế tạo xung – clock out).

T2MOD.0

DCEN

Bit cho phép Timer 2 hoạt động như bộ đếm
tiến/lùi

2.4.4 Chế độ hoạt động của bộ định thời
Timer 0 và timer 1:
+ Chế độ 0: Chế độ 0 là chế độ định thời 13 bit (8 bit của TH và 5 bit cao của TL) để chứa các
giá trị đếm, 3 bit thấp của TL không được sử dụng.
+ Chế độ 1: Trong chế độ 1, bộ Timer dùng cả hai thanh ghi TH và TL để chứa giá trị đếm, vì
vậy chế độ này được gọi là chế độ định thời 16 bit. Với chế độ 1, giá trị lớn nhất mà Timer
chứa được là 65535 (tương ứng với FFFFFH), khi đếm quá giá trị này sẽ xảy ra tràn, khi cờ
tràn TF sẽ được đặt bằng 1. Sau khi xảy ra tràn nếu muốn Timer tiếp tục đếm, chương trình
phải có câu lệnh nạp lại giá trị khởi tạo sau khi đã dừng Timer bằng cách xoá bit TR.
+ Chế độ 2:Trong chế độ 2 bộ Timer dùng TL để chứa các giá trị đếm và TH để chứa các giá
trị nạp lại vì vậy chế độ này được gọi là chế độ tự nạp lại 8 bit. Sau khi đếm quá 255 sẽ xảy ra
tràn, khi đó TF được đặt bằng 1 đồng thời giá trị của timer tự động được nạp lại bằng nội dung

của TH.
Luận văn tốt nghiệp
17


GVHD: Thầy Vương Tấn Sĩ

SVTH: Nguyễn Long Phước Đường

+ Chế độ 3:Trong chế độ 3, Timer 0 được tách thành 2 bộ Timer hoạt động độc lập. Timer thứ
nhất với nguồn xung clock được lấy từ bộ chia tần hoặc trên chip hoặc từ bộ tạo xung bên
ngoài qua chân T0. Giá trị đếm của Timer chứa trong TL0, khi xảy ra tràn, cờ TF0 được đặt
bằng 1 và gây ra ngắt do timer 0 (nếu được đặt).Bộ Timer thứ hai với nguồn xung clock được
lấy từ bộ chia tần trên chip. Việc điều khiển hoạt động của Timer thứ hai chỉ là việc đặt giá trị
của bit TR0. Giá trị đếm của Timer chứa trong TH0, khi xảy ra tràn cờ TF được đặt bằng 1 và
gây ra ngắt do Timer 1 (nếu được đặt).Khi Timer 0 được tách thành 2 Timer 8 bit thì timer 1
vẫn có thể hoạt động bình thường ở các chế độ 0, 1, 2. Tuy nhiên khi xảy ra tràn cờ TF1 không
được thiết lập bằng 1. Như vậy trong trường hợp này Timer 1 chỉ có thể sử dụng cho các ứng
dụng không cần thiết ngắt (TF1= 1).
Timer 2: Timer 2 có ba chế độ hoạt động đó là chế độ thu nhận (Capture), chế độ tự nạp lại
(Auto-reload) và chế độ cung cấp tốc độ baud cho cổng nối tiếp (Baud Rate Generator).
ổng nối tiếp (Baud Rate Generator).
Bảng 2.6 Chế độ hoạt động của timer 2.
RCLK+TCLK
TR2
CP/#RL2
Chế độ
0
0
1

16 bit Auto-reload:16 bit tự nạp lại
0
1
1
16 bit Capture:16 bit thu nhận
Baud Rate Generator:cung cấp tốc
1
X
1
độ baud.
X
X
0
Off
2.4.5 Cổng nối tiếp
AT89S52 có một cổng nối tiếp (UART) trên chip có thể hoạt động ở nhiều chế độ khác
nhau với các tốc độ khác nhau. Chức năng chủ yếu của cổng nối tiếp là chuyển đổi song song
sang nối tiếp với dữ liệu xuất và chuyển đổi nối tiếp sang song song với dữ liệu nhận.Dữ liệu
đi và về hoàn toàn độc lập với nhau, do đó có thể truyền nhận đồng thời, và cổng nối tiếp có
đặc tính như vậy còn gọi là cổng song cổng (Full Duplex).

Máy tính

Cổng RS232

Bộ
chuyển
mức

Luận văn tốt nghiệp

18

89S52


×