Top Banner
z ĐỀ TÀI Nghiên cu vVi điu khin 8051. Thiết kế mô hình đồng hthi gian thc hin thtrên Led 7 thanhGiáo viên hướng dn : Sinh viên thc hin : Trn ThCnh
130

Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Aug 05, 2015

Download

Documents

Linh Nguyen
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

z

ĐỀ TÀI

“ Nghiên cứu về Vi điều khiển 8051. Thiết kế

mô hình đồng hồ thời gian thực hiển thị trên

Led 7 thanh”

GGiiááoo vviiêênn hhưướớnngg ddẫẫnn ::

SSiinnhh vviiêênn tthhựựcc hhiiệệnn :: TTrrầầnn TThhịị CCảảnnhh

Page 2: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

MỤC LỤC LỜI NÓI ĐẦU .......................................................................................................5 CHƯƠNG 1. TỔNG QUAN VỀ HỌ VI ĐIỀU KHIỂN 8051 ..............................6

1.1 Tóm tắt về lịch sử của 8051 ..........................................................................6 1.2 Sơ đồ khối chung của họ 8051 ......................................................................7 1.3 Các thành viên khác của 8051.......................................................................8

1.3.1 Bộ vi điều khiển 8052 ............................................................................8 1.3.2 Bộ vi điều khiển 8031 ............................................................................8

1.4 Các phiên bản của 8051 ................................................................................8 1.4.1 Bộ vi điều khiển 8751 ............................................................................9 1.4.2 Bộ vi điều khiển AT8951 từ Atmel Corporation.....................................9 1.4.3 Bộ vi điều khiển DS5000 từ hãng Dalas Semiconductor ......................11 1.4.4 Phiên bản OTP của 8051 ......................................................................12 1.4.5 Họ 8051 từ hãng Philips.......................................................................12

1.5 Kiến trúc phần cứng của họ Vi điều khiển 8051..........................................13 1.5.1 Sơ đồ khối của 8051/8052/ AT89S52..................................................13 1.5.2 Chức năng các khối của 8051/8052/AT89S52......................................13

1.5.2.1 CPU ..............................................................................................13 1.5.2.2 Bộ nhớ chương trình (bộ nhớ Rom)...............................................14 1.5.2.3 Bộ nhớ dữ liệu (bộ nhớ Ram) ........................................................14 1.5.2.4 Bộ UART (Universal Ansynchronous Receiver and Transmitter)...14 1.5.2.5 Ba bộ Timer/Counter 16 bit...........................................................14 1.5.2.6 WDM (Watch Dog Timer) ............................................................14 1.5.2.7 Điều khiển ngắt .............................................................................15 1.5.2.8 Bộ lập trình (ghi chương trình lên Flash Rom) ..............................16 1.5.2.9 Bộ chia tần số................................................................................16 1.5.2.10 Bốn cổng xuất nhập.....................................................................16

1.6 Tổ chức bộ nhớ bên trong của 8051 ............................................................16 1.7 Hoạt động định thời ....................................................................................21

1.7.1 Giới thiệu .............................................................................................21 1.7.2 Các thanh ghi của bộ định thời .............................................................21

1.7.2.1 Các thanh ghi của Timer 0, Timer 1 ..............................................21 1.7.2.2 Các thanh ghi của Timer 2.............................................................24

Page 3: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.7.3 Các chế độ của bộ định thời .................................................................27 1.7.4 Các nguồn xung Clock .........................................................................30

1.8 Cổng nối tiếp ..............................................................................................31 1.8.1 Giới thiệu .............................................................................................31 1.8.2 Các thanh ghi của cổng nối tiếp............................................................32 1.8.3 Các chế độ hoạt động ...........................................................................34 1.8.4 Tốc độ baud của Port nối tiếp...............................................................37

1.9 Ngắt và xử lý ngắt.......................................................................................38 1.9.1 Giới thiệu .............................................................................................38 1.9.2 Tổ chức ngắt ........................................................................................39 1.9.3 Xử lý ngắt ............................................................................................41

CHƯƠNG 2. CÁC LINH KIỆN LIÊN QUAN...................................................43 2.1 Tìm hiểu về IC thời gian thực DS1307........................................................43

2.1.1 Giới thiệu .............................................................................................43 2.1.2 Sơ đồ và chức năng các chân................................................................43 2.1.3 Tài nguyên và cách xuất nhập dữ liệu vào DS1307 ..............................44 2.1.4 Thuật toán giao tiếp I2C với Vi điều khiển AT89S52...........................48

2.1.4.1 Điều kiện Start và Stop..................................................................48 2.1.4.2 Chế độ hoạt động ..........................................................................50 2.1.4.3 Cách thức giao tiếp với DS1307 ....................................................51 2.1.4.4 Thuật toán thiết kế phần mềm .......................................................52

2.2 Bộ biến đổi tương tự sang số (ADC0804) ...................................................55 2.2.1 Giới thiệu .............................................................................................55 2.2.2 Sơ đồ và chức năng các chân ADC0804...............................................56

2.2.2.1 Sơ đồ chân ....................................................................................56 2.2.2.2 Chức năng các chân.......................................................................56

2.3 Vi điều khiển AT89S52 ..............................................................................58 2.3.1 Giới thiệu..............................................................................................58 2.3.2 Sơ đồ chân và chức năng các chân của AT89S52 ................................59

2.3.2.1 Sơ đồ chân của AT89S52 ..............................................................59 2.3.2.2 Chức năng các chân của AT89S52 ................................................60

2.4 IC ghi dịch 74HC595 ..................................................................................64 2.4.1 Giới thiệu .............................................................................................64 2.4.2 Sơ đồ chân và chức năng các chân .......................................................64

Page 4: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

2.4.2.1 Sơ đồ chân ....................................................................................64 2.4.2.2 Chức năng các chân.......................................................................65

2.5 Led 7 đoạn ..................................................................................................65 2.5.1 Giới thiệu .............................................................................................65 2.5.2 Kết nối với vi điều khiển ......................................................................66 2.5.3 Bảng mã của Led Anode chung (các led đơn sáng ở mức 0).................67 2.5.4 Bảng mã của Led Cathode chung (các led đơn sáng ở mức 1) ..............69 2.5.5 Giao tiếp Vi điều khiển với led 7 đoạn (minh họa và thực hành với 8 led 7 đoạn)...........................................................................................................69

CHƯƠNG 3. THIẾT KẾ MÔ HÌNH..................................................................72 3.1 Sơ đồ nguyên lý ...........................................................................................72 3.2 Sơ đồ mạch in ..............................................................................................76 3.3 Mô hình thực tế...........................................................................................79 3.4 Ứng dụng....................................................................................................79

KẾT LUẬN..........................................................................................................80 TÀI LIỆU THAM KHẢO ...................................................................................81 PHỤ LỤC.............................................................................................................82

Page 5: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

DANH SÁCH HÌNH VẼ

Hình 1.1 Bố trí bên trong của họ 8051 ....................................................................7

Hình 1.2 Sơ đồ khối của vi điều khiển AT89S52 ..................................................13

Hình 1.3 Hoạt động của Timer 0 và Timer 1 ở chế độ 0........................................27

Hình 1.4 Hoạt động của Timer0 và Timer1 ở chế độ 1..........................................27

Hình 1.5 Hoạt động của Timer0 và Timer1 ở chế độ 2..........................................28

Hình 1.6 Hoạt động của Timer0 ở chế độ 3 ..........................................................29

Hình 1.7 Sơ đồ khối cổng nối tiếp của 8051 .........................................................32

Hình 1.8 Giản đồ truyền nhận dữ liệu ở chế độ 0 ..................................................34

Hình 1.9 Tốc độ baud ở chế độ 0 ..........................................................................34

Hình 1.10 Giản đồ truyền nhận dữ liệu của chế độ 1.............................................35

Hình 1.11 Dùng Timer 1 và Timer 2 cung cấp tốc độ baud cho cổng nối tiếp .......35

Hình 1.12 Tốc độ baud ở chế độ 1 ........................................................................36

Hình 1.13 Tốc độ baud ở chế độ 2 ........................................................................36

Hình 1.14 Tốc độ baud ở chế độ 3 ........................................................................37

Hình 1.15 Chương trình trước (a) và sau (b) khi có ngắt xảy ra ............................39

Hình 2.1 Các dạng đóng gói của chip DS1307......................................................43

Hình 2.2 Sơ đồ chân của DS1307 .........................................................................43

Hình 2.3 Sơ đồ mắc cơ bản của DS1307...............................................................44

Hình 2.4 Sơ đồ cấu trúc của các thanh ghi trong DS1307 .....................................45

Hình 2.5 Cách cập nhật dữ liệu cho DS1307.........................................................46

Hình 2.6 Tổ chức theo bit của các thanh ghi .........................................................46

Hình 2.7 Sơ đồ cấu trúc bên trong của DS1307 ....................................................48

Hình 2.8 Điều kiện Start và Stop ..........................................................................49

Hình 2.9 Quá trình đọc và ghi dữ liệu của DS1307 ...............................................50

Hình 2.10 Sơ đồ tổng quát của đồng hồ ................................................................52

Hình 2.11 Thuật toán giao tiếp của DS1307 với Vi Điều Khiển............................52

Hình 2.12 Quá trình đọc dữ liệu từ DS1307 được lưu vào Ram AT89S52 ............53

Hình 2.13 Thuật toán cài đặt giờ...........................................................................54

Hình 2.14 Thuật toán cập nhật dữ liệu cho DS1307 ..............................................55

Page 6: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 2.15 Sơ đồ chân thực tế của ADC0804 ........................................................56

Hình 2.16 Cách mắc tạo xung đồng hồ cho chíp ADC0804 ..................................57

Hình 2.17 Sơ đồ chân của AT89S52 .....................................................................59

Hình 2.18 Cấu trúc của các chân trên Port0 ..........................................................60

Hình 2.19 Cấu trúc của các chân trên Port 1 và Port 3 ..........................................61

Hình 2.20 Cấu trúc của các chân trên Port2 ..........................................................61

Hình 2.21 Mạch reset AT89S52 ...........................................................................63

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

Hình 2.23 Mạch tạo xung cho Vi điều khiển.........................................................64

Hình 2.24 Sơ đồ chân thực tế 74HC595................................................................64

Hình 2.25 Sơ đồ chân 7 SEG-COM-ANODE và hình ảnh minh họa.....................66

Hình 3.1 Mạch điều khiển ....................................................................................72

Hình 3.2 Mạch đo nhiệt độ ...................................................................................73

Hình 3.3 Mạch hiển thị .........................................................................................73

Hình 3.4 Mạch hiển thị 1 ......................................................................................74

Hình 3.5 Mạch nguồn 5V .....................................................................................74

Hình 3.6 Mạch quét phím .....................................................................................75

Hình 3.7 Mạch điều khiển ....................................................................................76

Hình 3.8 Mạch đo nhiệt độ ...................................................................................76

Hình 3.9 Mạch hiển thị .........................................................................................77

Hình 3.10 Mạch hiển thị 1 ....................................................................................77

Hình 3.11 Mạch nguồn 5V ...................................................................................78

Hình 3.12 Mạch quét phím ...................................................................................78

Hình 3.13 Mô hình đồng hồ thực tế ......................................................................79

Page 7: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

DANH SÁCH CÁC BẢNG BIỂU

Bảng 1.1 Các đặc tính của 8051 đầu tiên ................................................................6

Bảng 1.2 So sánh các đặc tính của các thành viên họ 8051 .....................................8

Bảng 1.3 Các phiên bản của 8051 do hãng Atmel cung cấp (Flash Rom)..............10

Bảng 1.4 Các phiên bản 8051 từ hãng Dalas Semiconductor ................................11

Bảng 1.5 Một số thành viên của họ 8051 ..............................................................12

Bảng 1.6 Số chu kì máy WDT đếm tùy theo giá trị S0, S1, S2..............................15

Bảng 1.7 Thời gian tràn của WDT ........................................................................15

Bảng 1.8 Các thanh ghi trạng thái chương trình (PSW: Program Status Word)......19

Bảng 1.9 Thanh ghi chức năng TMOD .................................................................22

Bảng 1.10 Thanh ghi chức năng TCON ................................................................23

Bảng 1.11 Thanh ghi chức năng T2CON ..............................................................25

Bảng 1.12 Thanh ghi chức năng T2MOD .............................................................26

Bảng 1.13 Vị trí và ý nghĩa các bit của thanh ghi SCON.......................................33

Bảng 1.14 Các chế độ của cổng nối tiếp phụ thuộc SM1, SM0 .............................33

Bảng 1.15 Bảng tốc độ baud khác nhau ................................................................35

Bảng 1.16 Các giá trị của thanh ghi TH1 tạo tốc độ baud .....................................38

Bảng 1.17 Vị trí và công dụng các bit của thanh ghi IE ........................................40

Bảng 1.18 Vị trí và công dụng các bit của thanh ghi IP.........................................40

Bảng 1.19 Các cờ gây ngắt ...................................................................................41

Bảng 1.20 Các Vector ngắt ...................................................................................42

Bảng 2.1 Bảng so sánh điện áp .............................................................................58

Bảng 2.2 Tên chân và chức năng các chân của Port 3 ...........................................62

Bảng 2.3 Bảng mã cho Led Anode chung (a là MSB, dp là LSB) .........................67

Bảng 2.4 Bảng mã cho Led Anode chung (a là LSB, dp là MSB) .........................68

Bảng 2.5 Bảng mã của Led Cathode chung...........................................................69

Page 8: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

DANH SÁCH CÁC TỪ VIẾT TẮT

Từ viết tắt Tên tiếng anh Tên tiếng việt

E EA External Access Truy cập bên ngoài

I IC Intergrated Circuit Vi mạch tích hợp IE Interrupt Cho phép ngắt IP Interrupt Priority Thanh ghi ngắt

O OV Over Flag Cờ tràn

P PSW Program Status Word Thanh ghi từ trạng thái chương

trình PSEN Program Store Enable Tín hiệu ngõ ra

R RAM Random Access Memory Bộ nhớ truy cập ngẫu nhiên

ROM Read Only Memory Bộ nhớ chỉ đọc RST Reset Reset

S SFR Special Function Register Thanh ghi có chức năng đặc biệt

Page 9: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

LỜI CAM ĐOAN

Trong quá trình thực hiện đề tài tốt nghiệp này, em xin đảm bảo bài báo cáo

tốt nghiệp này là do chính em thực hiện, không có sự sao chép nguyên văn của bất

kì tài liệu nào. Nếu sai em xin chịu mọi hình thức kỷ luật của nhà trường.

Hà Nội, Ngày 13 tháng 6 năm 2012

Người cam đoan

(Ký, ghi rõ họ tên)

Trần Thị Cảnh

Page 10: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 5 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

LỜI NÓI ĐẦU Ngày nay ngành kỹ thuật điện tử có vai trò rất quan trọng trong cuộc sống

của con người. Các hệ thống điện tử ngày nay rất đa dạng và đang thay thế các công

việc hàng ngày của con người từ những công việc đơn giản đến phức tạp như điều

khiển tín hiệu đèn giao thông, các biển quảng cáo, đo tốc độ động cơ hay các đồng

hồ số… Các hệ thống này có thể thiết kế theo hệ thống tương tự, hệ thống số hay là

dùng vi điều khiển. Tuy nhiên trong các hệ thống điện tử thông minh hiện nay

người ta thường sử dụng vi điều khiển hơn là các hệ thống tương tự hay hệ thống số

bởi một số ưu điểm vượt trội mà vi điều khiển mang lại đó là: độ tin cậy cao, giá

thành thấp, dễ dàng thiết kế, lắp đặt và vận hành… Để làm được điều đó chúng ta

phải có kiến thức về vi điều khiển, hiểu được cấu trúc và chức năng của nó.

Sau gần 3 năm học tập và nghiên cứu tại trường, với sự giảng dạy của các thầy,

cô giáo trong trường cùng với sự hướng dẫn tận tình của thầy Hoàng Văn Quang, em đã

chọn đề tài: “ Nghiên cứu về Vi điều khiển 8051. Thiết kế mô hình đồng hồ thời

gian thực hiển thị trên Led 7 thanh” để làm đồ án tốt nghiệp với mong muốn áp dụng

những kiến thức đã học vào thực tế phục vụ nhu cầu đời sống con người. Nội dung của

đề tài bao gồm 3 chương:

- Chương 1: Tổng quan về họ Vi điều khiển 8051

- Chương 2: Các linh kiện liên quan

- Chương 3: Thiết kế mô hình

Do kiến thức và trình độ năng lực còn hạn hẹp nên việc thực hiện đề tài này

không thể tránh được thiếu sót, kính mong nhận được sự thông cảm và góp ý của tất cả

các thầy, cô giáo và các bạn để đồ án này được hoàn thiện hơn.

Em xin chân thành cảm ơn.

Page 11: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 6 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

CHƯƠNG 1. TỔNG QUAN VỀ HỌ VI ĐIỀU KHIỂN 8051

1.1 Tóm tắt về lịch sử của 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 chứa

trên 60.000 transistor bao gồm 128 byte Ram, 4 kbyte Rom, 2 bộ định thời, một

cổng nối tiếp và bốn cổng vào/ra song song (độ rộng 8 bit) tất cả đều đượ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 được 8 bit dữ

liệu tại một thời điểm.

Dữ liệu lớn hơn 8 bit được chia thành các dữ liệu 8 bit để xử lý, 8051 đã trở lên phổ

biến sau khi Intel cho phép các nhà sản xuất khác sản xuất và bán các biến thể của

8051. Điều này dẫn đến sự ra đời nhiều phiên bản 8051 với tốc độ khác nhau và

dung lượng Rom trên chíp khác nhau, nhưng các lệnh đều tương thích với 8051 ban

đầu. Như vậy, nếu ta viết chương trình cho một phiên bản của 8051 thì cũng chạy

được với mọi phiên bản khác không phụ thuộc vào hãng sản xuất.

Vi điều khiển 8051 là loại vi điều khiển 8 bit, công suất tiêu thụ thấp nhưng tính

năng tương đối mạnh và trở thành bộ vi điều khiển hàng đầu trong những năm gần

đây.

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

Chân vào/ra 32

Cổng nối tiếp 1

Nguồn ngắt 6

Ngoài ra 8051 còn có các thông số đặc tính sau:

+ Không gian nhớ chương trình (mã) ngoài 64 kbyte.

+ Không gian nhớ dữ liệu ngoài 64 kbyte.

Page 12: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 7 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

+ Bộ nhớ xử lý bit (thao tác trên các bit riêng rẽ).

+ 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit.

+ Nhân/chia trong 4µs.

1.2 Sơ đồ khối chung của họ 8051

- Interrupt Control: điều khiển ngắt

- Other Register: các thanh ghi khác

- 128 byte Ram

- Bộ định thời: 0, 1, 2

- CPU: đơn vị điều khiển trung tâm

- Oscillator: mạch dao động

- Bus Control: điều khiển Bus

- Input/output: các chân vào ra

- Serial port: cổng nối tiếp

- INT1/INT0: các ngắt 1/0

Hình 1.1 Bố trí bên trong của họ 8051

Page 13: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 8 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.3 Các thành viên khác của 8051

Có hai bộ vi điều khiển là các thành viên khác của họ 8051 là 8052 và 8031.

1.3.1 Bộ vi điều khiển 8052

Bộ vi điều khiển 8052 là một thành viên của họ 8051, 8052 có tất cả các đặc

tính chuẩn của 8051 ngoài ra nó có thêm 128 byte Ram và một bộ định thời nữa.

Bảng 1.2 So sánh các đặc tính của các thành viên họ 8051

Đặc Tính 8051 8052 8031

Rom 4 kbyte 8 kbyte Không có

Ram 128 byte 256 byte 128 byte

Bộ định thời 2 3 2

Chân vào/ra 32 32 31

Cổng nối tiếp 1 1 1

Nguồn ngắt 6 6 1

* Dựa vào bảng 1.2 có thể thấy các chương trình viết cho 8051 đều chạy trên 8052

nhưng điều ngược lại là không đúng.

1.3.2 Bộ vi điều khiển 8031

Một thành viên khác nữa của 8051 là chíp 8031. Chíp được coi như là 8051

không có Rom trên chíp. Để sử dụng chíp này phải bổ sung Rom ngoài cho nó,

Rom ngoài phải chứa chương trình mà 8031 sẽ nạp và thực hiện. Với 8051, chương

trình được chứa trong Rom trên chíp bị giới hạn bởi 4 kbyte, còn Rom ngoài gắn

với 8031 thì có thể lớn đến 64 kbyte. Khi sử dụng Rom ngoài chỉ có thể còn lại

hai cổng để sử dụng cho mục đích vào ra, để giải quyết vấn đề này giải pháp có thể

là mở rộng cổng vào ra cho 8031 bằng cách sử dụng vi mạch PPI 8255.

1.4 Các phiên bản của 8051

Mặc dù 8051 là thành viên phổ biến nhất của họ 8051 nhưng còn có rất nhiều

phiên bản của nó với những tên gọi khác nhau tùy thuộc vào kiểu bộ nhớ chương

trình, công nghệ chế tạo, tần số làm việc…

Page 14: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 9 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Ví dụ: Phiên bản của 8051 với bộ nhớ UV-PROM được kí hiệu 8751. Phiên bản

Flash Rom cũng được bán bởi nhiều hãng khác nhau, chẳng hạn như Atmel với tên

gọi AT89C51 còn phiên bản NV-RAM của 8051 do Dalas Semiconductor cung cấp

thì được gọi là DS5000. Ngoài ra còn có phiên bản OTP (lập trình được một lần)

cũng được sản xuất bởi nhiều hãng.

1.4.1 Bộ vi điều khiển 8751

Chíp 8751 chỉ có 4 kbyte bộ nhớ UV-EPROM trên chíp. Để sử dụng chíp

này cần có bộ đốt PROM và bộ xóa UV-EPROM để xóa nội dung của bộ nhớ

UV-EPROM bên trong 8751 trước khi ta có thể lập trình lại nó. Do ROM trên chíp

đối với 8751 là UV-EPROM nên cần phải mất 20 phút để xóa 8751 trước khi nó

có thể được lập trình trở lại. Vì điều này dẫn đến nhiều nhà sản xuất giới thiệu các

phiên bản FLASH-ROM và UV-RAM. Ngoài ra còn có nhiều phiên bản với các tốc

độ khác nhau của 8751 từ nhiều hãng khác nhau.

8751 được sử dụng trong công việc phát triển và bộ nhớ chương trình trên

các vi mạch này được xóa bằng ánh sáng từ nguồn tử ngoại.

1.4.2 Bộ vi điều khiển AT8951 từ Atmel Corporation

AT8951 là phiên bản 8051 có Rom trên chíp ở dạng bộ nhớ Flash. Phiên bản

này là lý tưởng đối với những phát triển nhanh vì bộ nhớ Flash có thể được xóa

trong vài giây. Dùng AT89C51 để phát triển một hệ thống dựa trên bộ vi điều

khiển yêu cầu một bộ đốt Rom hỗ trợ bộ nhớ Flash, không yêu cầu bộ xóa Rom.

Hãng Atmel đã cho ra đời một phiên bản của AT89C51 có thể lập trình qua cổng

truyền thông Com của máy tính IBM PC.

Page 15: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 10 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 1.3 Các phiên bản của 8051 do hãng Atmel cung cấp (Flash Rom)

Kí hiệu Rom Ram Chan

I/O Timer Ngắt VCC Đóng vỏ

AT89C51 4 kbyte 128

byte

32 2 6 5 v 40 chân/2

hàng

AT89LV51 4 kbyte 128

byte

32 2 6 3 v 40 chân/2

hàng

AT89C1051 1 kbyte 64

byte

15 1 3 3 v 20 chân/2

hàng

AT89C2051 2 kbyte 128

byte

15 2 6 3 v 20 chân/2

hàng

AT89C52 8 kbyte 128

byte

32 3 8 5 v 40 chân/2

hàng

AT89LV52 8 kbyte 128

byte

32 3 8 3 v 40 chân/2

hàng

AT89C2051 là bộ vi điều khiển 8 bit được chế tạo theo công nghệ CMOS, có thể

hoạt động được ở dải điện áp 2,7V đến 6V. Bộ vi điều khiển được đóng gói DIP 20

chân, khá nhỏ gọn so với 89S52 nhưng vẫn có đủ tài nguyên thông dụng như:

+ Bộ nhớ: 2 kbyte Flash có thể ghi/xóa 1000 lần, 128x8-bit Ram

+ Có thể hoạt động ở tần số thạch anh lên tới 24MHz

+ 15 chân xuất/nhập

+ 2 bộ Timer/Counter 16 bit

+ 6 nguồn ngắt

+ 1 cổng nối tiếp

+ 1 bộ so sánh (Analog Comparator)

AT89C4051 có sơ đồ chân và các tài nguyên giống AT89C2051, ngoại trừ bộ nhớ

Rom có dung lượng lớn hơn (4 kbyte). AT89S52 là một bộ vi điều khiển thông

dụng, giá rẻ, có khá nhiều chức năng hay, đặc biệt là có tích hợp sẵn bộ nạp ISP trên

Page 16: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 11 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

chíp giúp người sử dụng có thể dễ dàng thực hiện các bài thí nghiệm với chi phí rất

thấp.

Cũng có rất nhiều phiên bản kí hiệu thể hiện kiểu đóng vỏ và tốc độ khác nhau của

sản phẩm. Ví dụ chữ C đứng trước 51 trong AT89C51-12PC là kí hiệu cho CMOS,

”12” kí hiệu cho 12MHz, và “P” là kiểu đóng vỏ DIP và chữ “C” cuối cùng là kí

hiệu cho thương mại (ngược với chữ “M” là quân sự).

1.4.3 Bộ vi điều khiển DS5000 từ hãng Dalas Semiconductor

Một phiên bản phổ biến khác nữa của 8051 là DS5000 của hãng

Semiconductor. Bộ nhớ Rom trên chíp của DS5000 ở dưới dạng NV-RAM. Khả

năng đọc/ghi của nó cho phép chương trình được nạp vào Rom trên chíp trong khi

nó vẫn ở trong hệ thống (không phải lấy ra). Điều này còn có thể được thực hiện

thông qua cổng nối tiếp của máy tính IBM-PC. Việc nạp chương trình trong hệ

thống (in-system) của DS5000 thông qua cổng nối tiếp của PC làm cho nó trở thành

một hệ thống phát triển tại chỗ lý tưởng. Một ưu việt của NV-RAM là khả năng

thay đổi nội dung của Rom theo từng byte tại một thời điểm. Điều này tương phản

với bộ nhớ Flash và EPROM mà bộ nhớ của chúng phải được xóa sạch trước khi

lập trình lại cho chúng.

Bảng 1.4 Các phiên bản 8051 từ hãng Dalas Semiconductor

Chữ “T” đứng sau 5000 là có đồng hồ thời gian thực

Mã linh kiện Rom Ram Chân

I/O Timer Ngắt Vcc

Đóng

vỏ

DS5000-8 8kbyte 128 32 2 6 5V 40

DS5000-32 32kbyte 128 32 2 6 5V 40

DS5000T-8 8kbyte 128 32 2 6 5V 40

DS5000T-8 32kbyte 128 32 2 6 5V 40

* Đồng hồ thời gian thực RTC là khác với bộ định thời Timer. RTC tạo và giữ thời

gian 1 phút, giờ, ngày, tháng, năm kể cả khi tắt nguồn.

Còn có nhiều phiên bản DS5000 với những tốc độ và kiểu đóng gói khác nhau.

Ví dụ DS5000-8-8 có 8 kbyte NV-RAM và tốc độ 8MHz.

Thông thường DS5000-8-12 hoặc DS5000T-8-12 là lý tưởng với những dự án

của sinh viên.

Page 17: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 12 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 1.5 Một số thành viên của họ 8051

Mã linh kiện NV-RAM Tốc độ

DS5000-8-8 8kbyte 8MHz

DS5000-8-12 8kbyte 12MHz

DS5000-32-8 32kbyte 8MHz

DS5000T-32-12 32kbyte 8MHz(with RTC)

DS5000-32-12 32kbyte 12MHz

DS5000-8-12 8kbyte 12MHz(with RTC)

1.4.4 Phiên bản OTP của 8051

Các phiên bản OTP của 8051 là các chíp 8051 có thể lập trình được một lần

và được cung cấp từ nhiều hãng khác nhau. Các phiên bản Flash và NV-RAM

thường được sử dụng để phát triển sản phẩm mẫu. Khi một sản phẩm được thiết kế

và được hoàn thiện tuyệt đối thì phiên bản OTP của 8051 được dùng để sản xuất

hàng loạt vì giá thành một đơn vị sản phẩm sẽ rẻ hơn.

1.4.5 Họ 8051 từ hãng Philips

Một nhà sản xuất chính của họ 8051 khác nữa là Philips Corporation. Thật

vậy, hãng này có một dải lựa chọn rộng lớn cho các bộ vi điều khiển 8051. Nhiều

sản phẩm của hãng đã có kèm theo đặc tính như các bộ chuyển đổi ADC, DAC,

cổng I/O mở rộng và các phiên bản OTP và Flash.

Page 18: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 13 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.5 Kiến trúc phần cứng của họ Vi điều khiển 8051

1.5.1 Sơ đồ khối của 8051/8052/AT89S52

Hình 1.2 Sơ đồ khối của vi điều khiển AT89S52

1.5.2 Chức năng các khối của 8051/8052/AT89S52

1.5.2.1 CPU

- Thanh ghi tích lũy A.

- Thanh ghi tích lũy phụ B, dùng cho phép nhân và phép chia.

- Đơn vị logic học (ALU: Arithmetic logical unit).

- Thanh ghi từ trạng thái chương trình (PSW: Prorgam status Word).

- Bốn băng thanh ghi.

- Con trỏ ngăn xếp.

Page 19: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 14 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.5.2.2 Bộ nhớ chương trình (bộ nhớ Rom)

Gồm 8kbyte Flash.

1.5.2.3 Bộ nhớ dữ liệu (bộ nhớ Ram)

Gồm 256byte.

1.5.2.4 Bộ UART (Universal Ansynchronous Receiver and

Transmitter)

Có chức năng truyền nhận nối tiếp, AT89S52 có thể giao tiếp với cổng nối

tiếp của máy tính thông qua bộ UART.

1.5.2.5 Ba bộ Timer/Counter 16 bit

Thực hiện các chức năng định thời và đếm sự kiện.

1.5.2.6 WDM (Watch Dog Timer)

WDM được dùng để phục hồi lại hoạt động của CPU khi nó bị treo bởi

nguyên nhân nào đó. WDM ở AT89S52 gồm một bộ Timer 14 bit, 1 bộ Timer 7 bit,

thanh ghi WDTPRG ( WDT programable ), điều khiển Timer 7 bit và một thanh

ghi chức năng WDTRST (WDM register). Bình thường WDT không hoạt động, để

cho phép WDT, các giá trị 1EH và E1H cần phải ghi liên tiếp vào thanh ghi

WDTRST. Timer 14 bit của WDT sẽ đếm tăng dần sau mỗi chu kì đồng hồ cho đến

giá trị 16383 thì xảy ra tràn. Khi xảy ra tràn chân Reset sẽ được đặt ở mức cao trong

khoảng thời gian 98*Tosc ( Tosc=1/Fosc ) và AT89S52 sẽ được Reset. Khi WDT

hoạt động, ngoài trừ Reset phần cứng và Reset do WDT tràn thì không có cách nào

có thể cấm được WDT, vì vậy khi sử dụng WDT thì các đoạn mã của chương trình

phải được đặt trong các khe thời gian giữa các lần WDT được khởi tạo lại.

Thanh ghi WDTPRG:

7 6 5 4 3 2 1 0

- - - - - S2 S1 S0

Page 20: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 15 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Tùy theo các giá trị khác nhau được ghi vào S0, S1, S2, số chu kì máy mà WDT

sẽ đếm và thời gian trong các bảng 1.6, bảng 1.7

Bảng 1.6 Số chu kì máy WDT đếm tùy theo giá trị S0, S1, S2

S2 S1 S0 Số chu kì máy WDT đếm

0 0 0 2^14

0 0 1 2^15

0 1 0 2^16

0 1 1 2^17

1 0 0 2^18

1 0 1 2^19

1 1 0 2^20

1 1 1 2^21

Bảng 1.7 Thời gian tràn của WDT

S2 S1 S0 Fosc=12MHz Fosc=16MHz Fosc=20MHz

0 0 0 16,38ms 12,28ms 9,82ms

0 0 1 32,77ms 24,57ms 19,66ms

0 1 0 65,54ms 49,14ms 39,32ms

0 1 1 131,01ms 98,28ms 76,64ms

1 0 0 262,14ms 196,56ms 157,28ms

1 0 1 524,29ms 393,12ms 314,56ms

1 1 0 1,54s 788,24ms 629,17ms

1 1 1 2,10s 1,57s 1,25s

1.5.2.7 Điều khiển ngắt

Với hai nguồn ngắt ngoài và 4 nguồn ngắt trong.

Page 21: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 16 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.5.2.8 Bộ lập trình (ghi chương trình lên Flash Rom)

Cho phép người sử dụng có thể nạp chương trình cho chip mà không cần các

bộ nạp chuyên dụng.

1.5.2.9 Bộ chia tần số

Với hệ số chia là 12.

1.5.2.10 Bốn cổng xuất nhập

Gồm 32 chân.

1.6 Tổ chức bộ nhớ bên trong của 8051

Bộ nhớ trong 89S52 bao gồm ROM và RAM. RAM trong 89S52 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.

AT89S52 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 89S52 nhưng 89S52 vẫn có thể kết nối với 64Kbyte bộ nhớ chương trình và

64Kbyte dữ liệu bên ngoài.

Page 22: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 17 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bản đồ bộ nhớ Data bên trong Chip 89S52 được tổ chức như sau:

Địa chỉ byte

Địa chỉ bit

Địa chỉ bit

Địa chỉ byte

Page 23: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 18 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

RAM bên trong AT89S52 đượ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.

- 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.

- 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.

- 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ừ 18 – 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).

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

Các thanh ghi trong 89S52 đượ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, 89S52 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.

Page 24: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 19 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Sau đây là một vài thanh ghi đặc biệt thường được sử dụng:

Bảng 1.8 Các 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 00H07H

01=Bank 1; address 08H0FH

10=Bank 2; address 10H17H

11=Bank 3; address 18H1FH

PSW.2 OV D2H Overlow Flag

PSW.1 - D1H Reserved

PSW.0 P DOH Even Parity Flag

Page 25: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 20 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

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

Page 26: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 21 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

- 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.

1.7 Hoạt động định thời

1.7.1 Giới thiệu

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 một bộ định thời n bit là bộ đếm n bit được tạo ra

bởi n flip_flop mắc nối tiếp với nhau. Đầu ra của bộ định thời chính là đầu vào của

flip_flop đầu tiên...

AT89S52 có 3 bộ định thời 16 bit trong đó hai bộ Timer 0, Timer 1 có 4 chế

độ hoạt động. Timer 2 có 3 chế độ hoạt động. Các bộ định thời dùng để định

khoảng thời gian (hẹn giờ), đếm sự kiện xảy ra bên ngoài bộ vi điều khiển hoặc tạo

tốc độ baud cho cổng nối tiếp.

Trong các ứng dụng định khoảng thời gian, Timer được lập trình sao cho sẽ

tràn sau một khoảng thời gian và thiết lập cờ tràn bằng 1. Cờ tràn được sử dụng bởi

chương trình để thực hiện một hành động tương ứng như kiểm tra trạng thái của các

ngõ vào hoặc gửi các sự kiện ra các ngõ ra.

Đếm sự kiện dùng để xác định số lần xảy ra của một sự kiện. Trong ứng

dụng này người ta tìm cách quy các sự kiện thành sự chuyển mức từ 1 xuống 0 trên

các chân T0 hoặc T1 hoặc T2 để dùng các Timer tương ứng đếm các sự kiện đó.

1.7.2 Các thanh ghi của bộ định thời

1.7.2.1 Các thanh ghi của Timer 0, Timer 1

-Thanh ghi chế độ định thời (TMOD)

Page 27: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 22 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho

Timer 0 và Timer 1.

7 6 5 4 3 2 1 0

GATE1 C/#T1 M1 M0 GATE0 C/#T0 M1 M0

Thanh ghi TMOD

Bảng 1.9 Thanh ghi chức năng TMOD

Bit Tên Timer Mô tả

7 GATE1 1 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

6 C/#T1 1 Bit chọn chế độ Counter/Timer 1

1=bộ đếm sự kiện

0=bộ định khoảng thời gian

5 M1 1 Bit 1 chọn chế độ của Timer 1

4 M0 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-8 bit tự động nạp lại

11: chế độ 3-tách Timer

3 GATE0 0 Bit mở cổng Timer 0, khi được đặt bằng

1 thì Timer 0 chỉ chạy khi chân INT0 ở

mức cao

2 C/#T0 0 Bit chọn chế độ Counter/Timer của

Timer 0

1 M1 0 Bit 1 chọn chế độ của Timer 0

0 M0 0 Bit 0 chọn chế độ của Timer 0

Page 28: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 23 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

TMOD không có bit định vị, nó thường load một lần bởi phần mềm ở đầu chương

trình để khởi động mode Timer. Sau đó sự định giờ có thể dừng lại, được khởi động

lại như thế bởi truy xuất của các thanh ghi chức năng đặc biệt của Timer khác.

-Thanh ghi điều khiển Timer (TCON)

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

Bốn bit cao trong TCON ( TCON.4-TCON.7 ) được dùng để điều khiển các bộ

định thời hoạt động hoặc ngưng ( TR0, TR1) hoặc để báo các bộ định thời tràn

(TF0, TF1).

Bốn bit thấp của TCON ( TCON.0-TCON.3 ) không dùng để điều khiển các bộ

định thời, chúng được dùng để phát hiện và khởi động các ngắt ngoài.

TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0

TF1 TR1 TF0 TR0 IT1 IE1 IT0 IE0

Thanh ghi TCON

Bảng 1.10 Thanh ghi chức năng TCON

Bit Kí hiệu Địa chỉ Mô tả

TCON.7 TF1 8F Cờ báo tràn của T1, được đặt bởi

phần cứng khi có tràn, được xóa bởi

phần mềm hoặc bởi phần cứng khi

bộ VXL chỉ đến chương trình phục

vụ ngắt

TCON.6 TR1 8EH Bit điều khiển T1 hoạt động được

đặt xóa bởi phần mềm để điều khiển

cho Timer chạy/dừng

TCON.5 TF0 8DH Cờ báo tràn T0

TCON.4 TR0 8CH Bit điều khiển T0 hoạt động

TCON.3 IT1 8BH Cờ ngắt do T1

TCON.2 IE1 8AH Cờ ngắt ngoài 1

TCON.1 IT0 89H Cờ ngắt do T0

TCON.0 IE0 88H Cờ ngắt ngoài 0

Page 29: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 24 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

- Các thanh ghi chứa giá trị của các bộ định thời.

Các Timer 0 và Timer 1 đều là các Timer 16 bit, mỗi Timer có thanh ghi 8 bit

dùng để chứa giá trị khởi tạo hoặc giá trị hiện thời của các Timer.

Cụ thể như sau :

Timer 0 có TH0 và TL0, Timer 1 có TH1 và TL1.

* Các thanh ghi này không được định địa chỉ bit.

Timer 1

TH1(8bit) TL1(8bit)

Timer 0

TH0(8bit) TL0(8bit)

1.7.2.2 Các thanh ghi của Timer 2

- Thanh ghi T2CON

T2CON.7 T2CON.6 T2CON.5 T2CON.4 T2CON.3 T2CON.2 T2CON.1 T2CON.0

TF2 EXF2 RCLK TCLK EXEN2 TR2 C/#T2 CP/#RL2

Page 30: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 25 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 1.11 Thanh ghi chức năng T2CON

Bit Kí hiệu Địa chỉ Mô tả

T2CON.7 TF2 CFH Cờ báo tràn của Timer 2, TF2 được đặt khi

Timer 2 tràn và được xóa bằng phần mềm, TF2

không được thiết lập khi TCLK và RCLK được

đặt bằng 1

T2CON.6 EXF2 CEH Cờ ngắt ngoài Timer 2, TXF2=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, EXF2 được xóa bởi phần mềm

T2CON.5 RCLK CDH Bit chọn Timer cung cấp xung nhịp cho đường

nhận của cổng nối tiếp

- RCLK=1 thì Timer 2 sẽ cung cấp tốc độ baud

cho cổng nối tiếp (ở chế độ 1 và 3).

- RCLK=0 thì Timer 1 sẽ cung cấp tốc độ baud

cho cổng nối tiếp (ở chế độ 1 và 3).

T2CON.4 TCLK CCH Bit chọn Timer cung cấp xung nhịp cho đường

truyền của cổng nối tiếp

- TCLK=1 thì Timer 2 sẽ cung cấp tốc độ baud

cho cổng nối tiếp ở đường truyền.

- TCLK=0 thì Timer 1 sẽ cung cấp tốc độ baud

cho cổng nối tiếp ở đường truyền.

T2CON.3 EXEN2 CBH 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 T2 không sử dụng để cung cấp

tốc độ baud cho cổng nối tiếp

T2CON.2 TR2 CAH Bit điều khiển hoạt động của Timer 2 (tương tự

Page 31: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 26 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

TR0,TR1)

T2CON.1 C/#T2 C9H Bit chọn chế độ đếm hoặc định thời của Timer 2

T2CON.0 CP/#RL2 C8H Bit chọn chế độ thu nhận hay nạp lại của Timer

2.

- Khi CP/#RL2=1, việc thu nhận được thực hiện

khi có sườn xuống ở chân T2EX và bit

EXEN2=1.

- Khi CP/#RL2=0, việc nạp lại được thực hiện

khi Timer 2 tràn hoặc là khi có sườn xuống ở

chân T2EX và bit EXEN2=1. Nếu RCLK

(TCLK) bằng 1, bit này được bỏ qua, Timer 2 tự

nạp lại khi tràn

- Thanh ghi T2MOD

T2MOD có địa chỉ 0C9H.

Bảng 1.12 Thanh ghi chức năng T2MOD

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 để tạo xung

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

* Thanh ghi này không định địa chỉ bit .

- Thanh ghi TH2 và TL2, RCAP2H và RCAP2L.

Cũng giống như TH0, TH1 và TL0, TL1, TH2 và TL2 chứa giá trị đếm của Timer

2, tuy nhiên khác nhau là Timer 0, Timer 1 có thể dùng THx để chứa giá trị nạp lại

còn Timer 2 dùng RCAP2H và RCAP2L để chứa giá trị cần nạp lại.

Page 32: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 27 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.7.3 Các chế độ của bộ định thời

- Chế độ 0

Hình 1.3 Hoạt động của Timer 0 và Timer 1 ở chế độ 0

Chế độ 0 là chế độ định thời 13 bit, chế độ này tương thích với các bộ vi điều

khiển trước đó, trong các ứng dụng hiện nay chế độ này không còn thích hợp.

- 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òn được gọi là chế độ định thời 16 bit. Bit MSB sẽ là bit D7 của

TH còn bit LSB là D0 của TL.

Hình 1.4 Hoạt động của Timer0 và Timer1 ở chế độ 1

Hình 1.4 mô tả hoạt động của các Timer ở chế độ 1: Nguồn xung clock được đưa

tới Timer từ một trong cách phụ thuộc vào bit C/#T trong thanh ghi TMOD.

+ Nếu C/#T=1, xung clock sẽ được lấy từ bên ngoài qua chân Tx (T0, T1, T2).

+ Nếu C/#T=0, xung clock sẽ được lấy từ bộ chia tần trong chip, tần số của xung

ở đây là 1/12 tần số của dao động thạch anh.

Page 33: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 28 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Nguồn xung clock trên sẽ được điều khiển để đưa tới các Timer bằng các bit: TR,

GATE và mức logic trên các chân INTx.

+ Nếu TRx= 0, các Timer sẽ bị cấm mà không cần quan tâm tới GATE và mức

logic trên các chân INTx (thể hiện bằng cổng “AND”).

+ Nếu TRx= 1, các Timer sẽ hoạt động khi hoặc là bit GATE=0 hoặc là bit

GATE=1 và trên chân /INTx có mức logic 1.

Với chế độ 1, giá trị lớn nhất mà các Timer chứa được là 65535, khi đếm quá giá trị

này sẽ xảy ra tràn, khi cờ tràn TF sẽ được đặt =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 xóa bit TR.

- Chế độ 2

Trong chế độ 2, bộ Timer dùng TL để chứa giá trị đếm và TH để chứa 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.

Hình 1.5 Hoạt động của Timer0 và Timer1 ở chế độ 2

Page 34: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 29 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

- Chế độ 3

Hình 1.6 Hoạt động của Timer0 ở chế độ 3

Trong chế độ 3, Timer 0 được tách thành hai bộ Timer hoạt động độc lập (Hình

1.6), chế độ này sẽ cung cấp cho bộ vi điều khiển thêm bộ Timer nữa.

Bộ Timer thứ nhất với nguồn xung clock được lấy từ bộ chia tần trên chip hoặc từ

bộ tạo xung bên ngoài qua chân T0 tùy thuộc vào giá trị của bit C-/T0. Việc điều

khiển hoạt động của bộ thứ nhất do bit GATE, bit TR0 và mức logic trên chân INT0

( giống chế độ 0, 1, 2).

Giá trị đếm của Timer được chứa trong TL0, khi xảy ra tràn, cờ TF0=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 bộ thứ hai chỉ là việc đặt giá trị của bit TR0. Giá trị đếm

của Timer được chứa trong TH0, khi xảy ra tràn, cờ TF1=1 và gây ra ngắt do Timer

1 ( nếu được đặt).

Khi Timer 0 được tách thành hai 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 đến ngắt (TF1=1), chẳng hạn như tạo tốc độ baud cho port nối tiếp.

Page 35: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 30 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.7.4 Các nguồn xung Clock

Có hai nguồn xung clock có thể đếm giờ là sự đếm giờ bên trong và sự đếm sự

kiện bên ngoài. Bit C/T trong TMOD cho phép chọn 1 trong 2 khi Timer khởi động.

- Sự bấm giờ bên trong

Nếu bit C/T = 0 thì hoạt động của Timer liên tục được chọn vào bộ Timer được

ghi giờ từ dao động trên chip. Một bộ chia 12 được thêm vào để giảm tần số clock

đến một giá trị phù hợp hầu hết các ứng dụng. Các thanh ghi THx và TLx tăng tốc

độ 1/12 lần tần số dao động trên chip. Nếu dùng thạch anh 12MHz thì đưa đến tốc

độ clock là 1MHz.

Các sự tràn Timer sinh ra sau khi con số cố định của những xung clock, nó phụ

thuộc vào giá trị khởi tạo được load vào các thanh ghi THx và TLx.

- Sự đếm các sự kiện

Nếu bit C/T = 1 thì bộ Timer được ghi giờ từ bộ nguồn bên ngoài trong nhiều ứng

dụng, bộ nguồn bên ngoài này cung cấp 1 sự định giờ với 1 xung trên sự xảy ra của

sự kiện. Sự định giờ là sự đếm sự kiện. Con số sự kiện được xác định trong phần

mềm bởi việc đọc các thanh ghi Timer TLx/THx, bởi vì giá trị 16 bit trong các

thanh ghi này tăng lên cho mỗi sự kiện.

Nguồn xung clock bên ngoài đưa chân P3.4 là ngõ nhập của xung clock bởi Timer

0 (T0) và P3.5 là ngõ nhập của xung clock bởi Timer 1 (T1).

Trong các ứng dụng đếm, các thanh ghi Timer được tăng trong đáp ứng của sự

chuyển trạng thái từ 1 sang 0 ở ngõ nhập Tx. Ngõ nhập bên ngoài được thử trong

suốt S5P2 của mọi chu kì máy. Do đó khi ngõ nhập đưa tới mức cao trong một chu

kì và mức thấp trong một chu kì kế tiếp thì bộ đếm tăng lên 1. Giá trị mới xuất hiện

trong các thanh ghi Timer trong suốt S5P1 của chu kì theo sau một sự chuyển được

khám thấy. Bởi vì nó chiếm 2 chu kì máy (2µs) để nhận ra sự chuyển đổi từ 1 sang

0, nên tần số bên ngoài lớn nhất là 500kHz nếu dao động thạch anh 12MHz.

Page 36: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 31 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.8 Cổng nối tiếp

1.8.1 Giới thiệu

AT89S52 có một cổng nối tiếp trên chíp 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à thực

hiện 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ập để có thể giao tiếp với máy tính.

Phần cứng truy xuất tới Port nối tiếp qua các chân TXD (P3.1) và RXD (P3.0)

Cổng nối tiếp có thể hoạt động song công (full duplex:thu và phát đồng thời) và

đệm lúc thu ( receiver buffering ) cho phép một kí tự sẽ được thu và được giữ trong

khi kí tự thứ hai được nhận. Nếu CPU đọc kí tự thứ nhất trước khi kí tự thứ hai

được thu đầy đủ thì dữ liệu sẽ không bị mất.

Hai thanh ghi chức năng đặc biệt cung cấp cho phần mềm truy xuất đến Port nối

tiếp là SBUF và SCON. Sự đệm Port nối tiếp ( SBUF ) ở địa chỉ 99H là hai sự đệm

thực sự: ghi lên SBUF load dữ liệu phát và đọc SBUF truy xuất dữ liệu đã nhận.

Đây là hai thanh ghi riêng biệt và rõ rệt, mà thanh ghi phát chỉ ghi còn thanh ghi thu

chỉ đọc. Thanh ghi Port nối tiếp SCON (98H) là thanh ghi được được định vị bit

bao gồm các trạng thái và các bit điều khiển. Các bit điều khiển Set Mode của Port

nối tiếp, còn các bit trạng thái cho biết sự kết thúc việc thu phát 1 kí tự. Các bit

trạng thái có thể được kiểm tra trong phần mềm hoặc có thể lập trình để sinh ra sự

ngắt.

Tần số hoạt động của Port nối tiếp hoặc tốc độ Baud có thể được lấy dao động

trên chip 8051 hoặc thay đổi.

Page 37: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 32 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Sơ đồ của Port nối tiếp như sau:

Hình 1.7 Sơ đồ khối cổng nối tiếp của 8051

1.8.2 Các thanh ghi của cổng nối tiếp

Có hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến cổng

nối tiếp là SBUF và SCON.

- Thanh ghi điều khiển cổng nối tiếp ( SCON-Serial Controller ).

Thanh ghi điều khiển cổng nối tiếp (SCON) ở địa chỉ 98H là thanh ghi 8 bit được

dùng để lập trình việc đóng khung bit bắt đầu Start, bit dừng Stop, các bit dữ liệu

cùng với việc khác và chứa các bit trạng thái và các bit điều khiển liên quan tới

cổng nối tiếp. Các bit điều khiển đặt chế độ hoạt động cho cổng nối tiếp, các bit

trạng thái báo cáo kết thúc việc phát hoặc thu một kí tự. Các bit trạng thái có thể

được kiểm tra bằng phần mềm hoặc có thể được lập trình để tạo ngắt.

Page 38: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 33 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 1.13 Vị trí và ý nghĩa các bit của thanh ghi SCON

SM0 SM1 SM2 REN TB8 RB8 TI RI

Bit Ý nghĩa

REN Bit cho phép cổng được phép nhận dữ liệu

TB8 Bit dữ liệu truyền thứ 9 khi cổng làm việc ở chế độ truyền và

nhận 9 bit

RB8 Bit dữ liệu nhận thứ 9 khi cổng làm việc ở chế độ truyền và nhận

9 bit

TI Cờ báo ngắt khi hoàn thành quá trình truyền 1 byte dữ liệu, cờ

phải được xóa bởi phần mềm

RI Cờ báo ngắt khi 1 byte dữ liệu được nhận về đầy đủ, cờ phải được

xóa bởi phần mềm

SM2 Bit cho phép chế độ truyền thông giữa nhiều vi điều khiển với

nhau (Mode2 và 3)

Bảng 1.14 Các chế độ của cổng nối tiếp phụ thuộc SM1, SM0

* Trước khi sử dụng cổng, phải khởi động SCON để chọn chế độ hoạt động cho

cổng nối tiếp.

* Thanh ghi này được định địa chỉ theo bit.

- Thanh ghi đệm truyền nhận ở cổng nối tiếp (SBUF-Serial Buffer).

SBUF là thanh ghi 8 bit được dùng riêng cho truyền thông nối tiếp của 8051.

Thanh ghi này có chức năng đệm các kí tự khi chúng được nhận về từ cổng nối tiếp

hoặc được truyền đi từ cổng nối tiếp, việc truyền nhận qua cổng nối tiếp thực chất là

việc truy xuất thanh ghi này.

Page 39: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 34 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.8.3 Các chế độ hoạt động

- Chế độ 0

Chế độ 0 là chế độ mà cổng nối tiếp được dùng như một thanh ghi dịch 8 bit. Dữ

liệu được truyền/nhận nối tiếp trên chân RXD, chân TXD được dùng để phát xung

clock dịch bit. Khi truyền/nhận các byte dữ liệu 8bit,bit có giá trị thấp nhất(LSB)

được truyền/nhận trước tiên và bit MSB được truyền/nhận sau cùng.Việc truyền dữ

liệu được bắt đầu bằng việc ghi một byte dữ liệu vào SBUF còn việc nhận dữ liệu

được bắt đầu khi bit REN đã được đặt ở mức 1 và cờ thu RI= 0. Tốc độ baud ở chế

độ 0 cố định bằng Fosc/12.

Hình 1.8 Giản đồ truyền nhận dữ liệu ở chế độ 0

Tốc độ baud của chế độ 0:

Hình 1.9 Tốc độ baud ở chế độ 0

- Chế độ 1

Trong chế độ 1, cổng nối tiếp hoạt động như một bộ UART 8 bit có tốc độ thay

đổi.

Dữ liệu được truyền nối tiếp trên chân TXD và nhận nối tiếp trên chân RXD,

chế độ này cung cấp cho AT89S52 một công cụ giao tiếp với máy tính qua cổng

Com.

Page 40: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 35 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 1.10 Giản đồ truyền nhận dữ liệu của chế độ 1

Với chế độ 1, 1 khung truyền sẽ gồm 10 bit, ngoài 8 bit dữ liệu ra còn một bit start

(ở mức thấp) và 1 bit stop (ở mức cao), LSB cũng được truyền trước, MSB được

truyền sau.

Tốc độ baud của cổng nối tiếp trong chế độ 1 có thể được cung cấp bởi Timer 1

và Timer 2 hoặc đồng thời cả hai nếu muốn tốc độ truyền và nhận khác nhau.

AT89S52 truyền và nhận dữ liệu nối tiếp theo nhiều tốc độ khác nhau. Tốc độ

truyền của nó có thể lập trình được. Khi sử dụng các bộ Timer cung cấp tốc độ baud

cho cổng nối tiếp thì thạch anh có tần số 11,0592 MHz được khuyến cáo nên dùng

vì với tần số này sẽ tạo được tốc độ baud chuẩn sai số 0%.

Bảng 1.15 Bảng tốc độ baud khác nhau

Hình 1.11 Dùng Timer 1 và Timer 2 cung cấp tốc độ baud cho cổng nối tiếp

Page 41: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 36 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Trên hình 1.11, khi TCLK= RCLK= 1 tốc độ baud của cổng nối tiếp được cung

cấp bởi Timer 2. Khác với Timer 1, Timer 2 được cung cấp xung clock có tần số ½

tần số của bộ dao động thạch anh.

Khi cần tốc độ baud khác nhau cho đường truyền và được nhận thì có thể sử dụng

cả hai bộ Timer. Nếu đặt TCLK= 1 và RCLK=0 thì tốc độ baud của đường truyền

sẽ được cung cấp bởi Timer 2, tốc độ baud của đường nhận sẽ được cung cấp bởi

Timer 1.

Nếu đặt TCLK=0 và RCLK=1 thì tốc độ baud của đường truyền sẽ được cung cấp

bởi Timer 1, tốc độ baud của đường nhận sẽ được cung cấp bởi Timer 2.

Tốc độ baud của chế độ 1:

Hình 1.12 Tốc độ baud ở chế độ 1

- Chế độ 2

Chế độ này, cổng nối tiếp hoạt động như một bộ UART 9 bit, một khung truyền

gồm 11 bit, trong đó bắt đầu bằng bit Start, tiếp theo là 8 bit dữ liệu, tiếp theo là bit

dữ liệu thứ 9 ( là bit TB8 nếu là khung truyền, là bit RB8 nếu là khung nhận ), cuối

cùng là bit Stop. Chế độ này thường được dùng khi cần chèn thêm bit kiểm tra chẵn

lẻ vào trong khung truyền để giảm bớt bit lỗi đường truyền.

Tốc độ baud trong chế độ 2 :

Hình 1.13 Tốc độ baud ở chế độ 2

Page 42: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 37 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

- Chế độ 3

Chế độ 3 là sự kết hợp của chế độ 1 và chế độ 2, nghĩa là cổng nối tiếp hoạt động

như 1 bộ UART 9 bit và tốc độ baud của UART thay đổi giống như chế độ 1 ( được

cung cấp bởi Timer1 và Timer2).

Tốc độ baud của chế độ 3:

Hình 1.14 Tốc độ baud ở chế độ 3

1.8.4 Tốc độ baud của Port nối tiếp

- Dùng Timer 1 làm xung clock tạo tốc độ baud.

Thông thường khởi động thanh ghi TMOD ở chế độ tự động nạp lại 8 bit

(mode 2) và đặt giá trị nạp lại thích hợp vào thanh ghi TH1 để có tốc độ tràn đúng,

từ đó tạo ra tốc độ baud

TMOD=0x20;

Baud rate=Timer1 overflow/32 hay /16 tùy theo giá trị bit SMOD

- Tính toán các giá trị nạp lại cho thanh ghi TH1 đối với các tốc độ baud 9600,

4800, 2400, 1200 (XTAL=11.0592MHz)

Page 43: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 38 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 1.16 Các giá trị của thanh ghi TH1 tạo tốc độ baud

1.9 Ngắt và xử lý ngắt

1.9.1 Giới thiệu

Interrupt là một sự cố có điều kiện mà nó gây ra sự ngưng lại tạm thời của

chương trình để phục vụ một chương trình khác. Các Interrupt vận hành một Relay

rất quan trọng trong thiết bị và sự cung cấp đầy đủ các ứng dụng vi điều khiển.

Chúng cho phép một hệ thống đáp ứng đồng bộ đến sự kiện quan trọng và giải

quyết sự kiện đó trong khi chương trình khác đang thực thi. Một hệ thống được lái

bởi Interrupt cho một kĩ xảo làm nhiều công việc cùng một lúc. Tất nhiên CPU

không thể thực thi nhiều lệnh tại một thời điểm, nhưng nó có thể tạm thời treo công

việc thực thi của chương trình chính để thực thi chương trình khác và sau đó quay

lại chương trình chính.

Khi chương trình chính đang thực thi mà có một sự ngắt xảy đến thì chương trình

chính ngưng thực thi và rẽ nhánh đến thủ tục phục vụ ngắt ISR. ISR thực thi để thực

hiện hoạt động và kết thúc với lệnh “trở lại từ sự ngắt”. Chương trình tiếp tục nơi

mà nó dừng lại.

Page 44: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 39 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 1.15 Chương trình trước (a) và sau (b) khi có ngắt xảy ra

1.9.2 Tổ chức ngắt

AT89S52 có 6 nguồn ngắt:

- Ngắt ngoài đến từ chân #INT0.

- Ngắt ngoài đến từ chân #INT1.

- Ngắt do bộ Timer 0.

- Ngắt do bộ Timer 1.

- Ngắt do bộ Timer 2.

- Ngắt do Port nối tiếp.

6 nguồn ngắt này được xóa khi reset và được đặt riêng bằng phần mềm bởi các bit

trong thanh ghi cho phép ngắt (IE), thanh ghi ưu tiên ngắt (IP).

* Thanh ghi cho phép ngắt IE (Interrupt Enable):

EA - ET2 ES ET1 EX1 ET0 EX0

Page 45: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 40 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 1.17 Vị trí và công dụng các bit của thanh ghi IE

* Thanh ghi ưu tiên ngắt IP:

Mỗi nguồn ngắt được lập trình riêng để đặt vào một trong hai mức ưu tiên qua

thanh ghi chức năng đặc biệt được địa chỉ bit IP ở địa chỉ B8H.

- - PT2 PS PT1 PX1 PT0 PX0

Bảng 1.18 Vị trí và công dụng các bit của thanh ghi IP

Page 46: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 41 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

1.9.3 Xử lý ngắt

- Khi có một ngắt xuất hiện và được CPU chấp nhậncó các thao tác sau:

+ Hoàn tất lệnh thực thi hiện hành.

+ PC được cất vào Stack.

+ (Trạng thái của ngắt hiện hành được lưu giữ lại)

+ Các ngắt được chặn lại ở mức ngắt.

+ PC nạp địa chỉ vector ngắt của ISR.

+ Thực thi ISR.

- Các cờ gây ngắt.

Bảng 1.19 Các cờ gây ngắt

- Các vector ngắt.

Page 47: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 42 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 1.20 Các Vector ngắt

- Các ngắt do Port nối tiếp.

+ Các ngắt này xuất hiện khi cờ ngắt phát TI hoặc cờ ngắt thu RI được set bằng 1.

+ Cờ gây ra ngắt ở port nối tiếp không được xóa bởi phần cứng khi CPU trỏ tới

ISR.

- Các ngắt ngoài.

+ Xảy ra khi có mức thấp hoặc có cạnh âm trên chân /INT0 và /INT1.

+ Các cờ gây ra ngắt này là các bit IE0, IE1 của TCON.

+ Việc chọn các ngắt loại tác động mức hay cạnh được lập trình thông qua các bit

IT0 và IT1 của TCON.

+ Các cờ gây ngắt IE0, IE1 tự động được xóa khi CPU trỏ tới ISR tương ứng.

Page 48: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 43 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

CHƯƠNG 2. CÁC LINH KIỆN LIÊN QUAN

2.1 Tìm hiểu về IC thời gian thực DS1307

2.1.1 Giới thiệu

DS1307 là chip đồng hồ thời gian thực ( RTC: Real-time clock ), khái niệm

thời gian thực ở đây được dùng với ý nghĩa thời gian tuyệt đối mà con người đang

sử dụng tính bằng giây, phút, giờ… DS1307 là sản phẩm của Dallas Semiconductor

(một công ty thuộc Maxim Integrated Products ). Chip này có 7 thanh ghi 8 bit chứa

thời gian là: giây, phút, giờ, thứ (trong tuần), ngày, tháng, năm. Ngoài ra chip này

còn có một thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống có thể dùng như

Ram. DS1307 được đọc và ghi thông qua giao tiếp nối tiếp I2C nên cấu tạo bên

ngoài rất đơn giản. DS1307 xuất hiện ở hai gói SIOC và DIP có 8 chân.

Hình 2.1 Các dạng đóng gói của chip DS1307

2.1.2 Sơ đồ và chức năng các chân

Hình 2.2 Sơ đồ chân của DS1307

- X1 và X2: là hai ngõ kết nối với 1 thạch anh 32.768kHz làm nguồn tạo dao động

cho chip.

- Vbat: cực dương của một nguồn Pin 3V nuôi chip.

Page 49: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 44 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

- GND: chân mass chung cho cả Pin 3V và Vcc.

- Vcc: nguồn cho giao diện I2C, thường là 5V dùng chung với vi điều khiển.

- SQW/OUT: một ngõ phụ tạo xung vuông ( Square Ware / Output Driver ), tần số

của xung được tạo có thể được lập trình. Chân này có thể phát đi 1 trong 4 tần số

(1Hz, 4kHz , 8kHz, 32kHz). Như vậy chân này hầu như không liên quan đến chức

năng của DS1307 là đồng hồ thời gian thực, có thể bỏ trống chân này khi nối mạch.

- SCL và SDA : là hai đường giao xung nhịp và dữ liệu của giao diện I2C.

* Nếu Vcc không được cấp nguồn nhưng Vbat được cấp thì DS1307 vẫn hoạt động

(nhưng không ghi và đọc được).

* Chân SQW/OUT hoạt động được khi cả Vcc và Vbat được cấp.

Có thể kết nối DS1307 bằng một mạch điện đơn giản như sau:

Hình 2.3 Sơ đồ mắc cơ bản của DS1307

2.1.3 Tài nguyên và cách xuất nhập dữ liệu vào DS1307

Cấu tạo bên trong của DS1307 bao gồm một số thành phần như mạch nguồn,

mạch dao động, mạch điều khiển logic, mạch giao diện I2C, con trỏ địa chỉ và các

thanh ghi (hay Ram ). Do đa số các thành phần bên trong DS1307 là thành phần

cứng nên chúng ta không có quá nhiều việc khi sử dụng DS1307. Sử dụng DS1307

chủ yếu là việc đọc và ghi các thanh ghi của chip này. Vì thế cần hiểu rõ hai vấn đề

cơ bản đó là cấu trúc các thanh ghi và cách truy xuất các thanh ghi này thông qua

giao diện I2C.

Bộ nhớ DS1307 có tất cả 64 thanh ghi 8 bit được đánh địa chỉ từ 0 đến 63 ( từ 0x00

đến 0x3f). Tuy nhiên, thực chất chỉ có 8 thanh ghi đầu là dùng cho chức năng “đồng

hồ” ( RTC ) còn lại 56 thanh ghi bỏ trống có thể được dùng chứa biến tạm như Ram

nếu muốn. Bảy thanh ghi đầu tiên chứa thông tin về thời gian của đồng hồ bao gồm

Page 50: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 45 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

giây (SECONDS), phút (MINUETS), giờ (HOURS), thứ (DAY), ngày (DATE),

tháng (MONTH), Năm (YEAR). Việc ghi giá trị vào 7 thanh ghi này tương đương

với việc “cài đặt” thời gian khởi động cho RTC. Việc đọc giá trị từ 7 thanh ghi là

đọc thời gian thực mà chip tạo ra.

Tổ chức bộ nhớ của DS1307 được trình bày như sau:

Hình 2.4 Sơ đồ cấu trúc của các thanh ghi trong DS1307

Vì 7 thanh ghi đầu tiên quan trọng nhất trong hoạt động của DS1307, nên khảo sát

các thanh ghi này một cách chi tiết.

Điều đầu tiên cần chú ý là giá trị thời gian lưu trong các thanh ghi theo dạng

BCD. BCD là viết tắt của cụm từ Binary-Coded Decimal, tạm dịch là các số thập

phân theo mã nhị phân.

Ví dụ: muốn cài đặt cho thanh ghi MINUTES giá trị 42. Nếu quy đổi 42 sang mã

thập lục phân thì thu được 42= 0x2A . Theo cách hiểu thông thường thì cần gán giá

trị MINUTES= 42. Nhưng vì các thanh ghi này chứa các giá trị BCD lên mọi

chuyện sẽ khác .

Page 51: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 46 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 2.5 Cách cập nhật dữ liệu cho DS1307

Với số 42, trước hết nó tách thành hai chữ số 4 và 2. Mỗi chữ số sau đó được đổi

thành mã nhị phân 4 bit. Chữ số 4 được đổi thành mã nhị phân 4 bit là 0100 trong

khi 2 đổi thành 0010. Ghép mã nhị phân của hai chữ số lại thu được một số 8 bit,

đó là số BCD. Với trường hợp này, số BCD thu được là 01000010 ( nhị phân )=66.

Như vậy, để đặt số phút 42 cho DS1307 cần ghi vào thanh ghi MINUTES giá trị 66

( mã BCD của 42 ). Tất cả các phần mềm lập trình hay các thanh ghi của chip điều

khiển đều sử dụng mã nhị phân thông thường, không phải mã BCD, do đó cần phải

viết các chương trình con để quy đổi từ số thập lục phân (hoặc thập phân thường)

sang BCD.

Hình 2.6 Tổ chức theo bit của các thanh ghi

Page 52: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 47 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Tổ chức các thanh ghi thời gian:

- Thanh ghi giây ( SECONDS ): thanh ghi này là thanh ghi đầu tiên trong bộ nhớ

của DS1307, địa chỉ của nó là 0x00. Bốn bit thấp của thanh ghi này chứa mã BCD

4-bit của chữ số hàng đơn vị của giá trị giây. Do giá trị cao nhất của chữ số hàng

chục là 5 (không có giây 60) nên chỉ cần 3 bit (các bit SECONDS 6:4) là có thể mã

hóa được (số 5 =101, 3 bit). Bit cao nhất, bit 7, trong thanh ghi này là 1 điều khiển

có tên CH (Clock halt – treo đồng hồ ), nếu bit này được set bằng 1 bộ dao động

trong chip bị vô hiệu hóa, đồng hồ không hoạt động. Vậy, nhất thiết phải reset bit

này xuống 0 ngay từ đầu.

- Thanh ghi phút (MINUTES): có địa chỉ 01H, chứa giá trị phút của đồng hồ.

Tương tự thanh ghi SECONDS, chỉ có 7 bit của thanh ghi này được dùng lưu mã

BCD của phút, bit 7 luôn luôn bằng 0.

- Thanh ghi giờ (HOURS): có thể nói đây là thanh ghi phức tạp nhất trong DS1307.

Thanh ghi này có địa chỉ 02H. Trước hết 4-bit thấp của thanh ghi này được dùng

cho chữ số hàng đơn vị của giờ. Do DS1307 hỗ trợ 2 loại hệ thống hiển thị giờ (gọi

là mode) là 12h (1h đến 12h) và 24h (1h đến 24h), bit 6 (hình 2.6) xác lập hệ thống

giờ. Nếu bit 6= 0 thì hệ thống 24h được chọn, khi đó 2 bit cao 5 và 4 dùng mã hóa

chữ số hàng chục của giá trị giờ. Do giá trị lớn nhất của chữ số hàng chục trong

trường hợp này là 2 ( = 10, nhị phân) nên 2 bit 5 và 4 là đủ để mã hóa. Nếu bit 6= 1

thì hệ thống 12h được chọn, với trường hợp này chỉ có bit 4 dùng mã hóa chữ số

hàng chục của giờ, bit 5 (màu orange trong hình 2.6) chỉ buổi trong ngày, AM hoặc

PM. Bit 5=0 là AM và bit 5=1 là PM. Bit 7 luôn bằng 0.

- Thanh ghi thứ ( DAY – ngày trong tuần ): nằm ở địa chỉ 03H. Thanh ghi DAY chỉ

mang giá trị từ 1 đến 7 tương ứng từ Chủ nhật đến thứ 7 trong 1 tuần. Vì thế, chỉ có

3 bit thấp trong thanh ghi này có nghĩa.

- Các thanh ghi còn lại có cấu trúc tương tự, DATE chứa ngày trong tháng (1 đến

31), MONTH chứa tháng (1 đến 12) và YEAR chứa năm (00 đến 99). Chú ý,

DS1307 chỉ dùng cho 100 năm, nên giá trị năm chỉ có 2 chữ số , phần đầu của năm

do người dùng tự thêm vào (ví dụ 20xx). Ngoài các thanh ghi trong bộ nhớ, DS1307

còn có một thanh ghi khác nằm riêng gọi là con trỏ địa chỉ hay thanh ghi địa chỉ

Page 53: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 48 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

(Address Register). Giá trị của thanh ghi này là địa chỉ của thanh ghi trong bộ nhớ

mà người dùng muốn truy cập.

Cấu trúc của DS1307 như sau:

Hình 2.7 Sơ đồ cấu trúc bên trong của DS1307

2.1.4 Thuật toán giao tiếp I2C với Vi điều khiển AT89S52

2.1.4.1 Điều kiện Start và Stop

Điều kiện START và STOP START và STOP là những điều kiện bắt buộc phải

có khi một thiết bị chủ muốn thiết lập giao tiếp với một thiết bị nào đó trong mạng

I2C. START là điều kiện khởi đầu, báo hiệu bắt đầu của giao tiếp, còn STOP báo

hiệu kết thúc một giao tiếp. Hình 2.8 mô tả điều kiện START và điều kiện STOP

khi giao tiếp I2C giữa DS1307 với Vi điều khiển.

Page 54: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 49 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 2.8 Điều kiện Start và Stop

Ban đầu khi chưa thực hiện quá trình giao tiếp, cả hai đường SDA và SCL đều ở

mức cao (SDA = SCL = HIGH). Lúc này bus I2C được coi là “rỗi” (“ bus free ”),

sẵn sàng cho một giao tiếp. Hai điều kiện START và STOP là không thể thiếu trong

việc giao tiếp giữa các thiết bị I2C, tất nhiên là trong giao tiếp này cũng không

ngoại lệ.

• Điều kiện START: một sự chuyển đổi trạng thái từ cao xuống thấp trên đường

SDA trong khi đường SCL đang ở mức cao (cao = 1, thấp = 0) báo hiệu một điều

kiện START.

• Điều kiện STOP: Một sự chuyển đổi trạng thái từ mức thấp lên cao trên đường

SDA trong khi đường SCL đang ở mức cao.

• Cả hai điều kiện START và STOP đều được tạo ra bởi thiết bị chủ. Sau tín hiệu

START, bus I2C coi như đang trong trạng thái làm việc (busy). Bus I2C sẽ rỗi , sẵn

sàng cho một giao tiếp mới sau tín hiệu STOP từ phía thiết bị chủ.

• Sau khi có một điều kiện START, trong quá trình giao tiếp, khi có một tín hiệu

START được lặp lại thay vì một tín hiệu STOP thì bus I2C vẫn tiếp tục trong trạng

thái bận. Tín hiệu START và lặp lại START đều có chức năng giống nhau là khởi

tạo một giao tiếp.

Page 55: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 50 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

2.1.4.2 Chế độ hoạt động

Hình 2.9 Quá trình đọc và ghi dữ liệu của DS1307

Chế độ hoạt động của I2C DS1307 có thể hoạt động ở 2 chế độ sau:

• Chế độ slave nhận ( chế độ DS1307 ghi): chuỗi dữ liệu và chuỗi xung

clock sẽ được nhận thông qua SDA và SCL. Sau mỗi byte được nhận thì 1 bit

acknowledge sẽ được truyền. Các điều kiện START và STOP sẽ được nhận dạng

khi bắt đầu và kết thúc truyền 1 chuỗi. Nhận dạng địa chỉ được thực hiện bởi phần

cứng sau khi chấp nhận địa chỉ của slave và bit chiều. Byte địa chỉ là byte đầu tiên

nhận được sau khi điều kiện START được phát ra từ master. Byte địa chỉ có chứa 7

bit địa chỉ của DS1307, là 1101000, tiếp theo đó là bit chiều (R/ W) cho phép ghi

khi nó bằng 0. Sau khi nhận và giải mã byte địa chỉ thì thiết bị sẽ phát đi 1 tín hiệu

acknowledge lên đường SDA. Sau khi DS1307 nhận dạng được địa chỉ và bit ghi

thì master sẽ gửi một địa chỉ thanh ghi tới DS1307, tạo ra một con trỏ thanh ghi trên

DS1307 và master sẽ truyền từng byte dữ liệu cho DS1307 sau mỗi bit

acknowledge nhận được. Sau đó master sẽ truyền điều kiện STOP khi việc ghi hoàn

thành.

• Chế độ slave phát ( chế độ DS1307 đọc): byte đầu tiên slave nhận được

tương tự như chế độ slave ghi. Tuy nhiên trong chế độ này thì bit chiều lại chỉ chiều

truyền ngược lại. Chuỗi dữ liệu được phát đi trên SDA bởi DS1307 trong khi chuỗi

xung clock vào chân SCL. Các điều kiện START và STOP được nhận dạng khi bắt

đầu hoặc kết thúc truyền một chuỗi. Byte địa chỉ nhận được đầu tiên khi master phát

đi điều kiện START. Byte địa chỉ chứa 7 bit địa chỉ của slave và 1 bit chiều cho

phép đọc là 1. Sau khi nhận và giải mã byte địa chỉ thì thiết bị sẽ nhận 1 bit

Page 56: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 51 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

acknowledge trên đường SDA. Sau đó DS1307 bắt đầu gửi dữ liệu tới địa chỉ con

trỏ thanh ghi thông qua con trỏ thanh ghi. Nếu con trỏ thanh ghi không được viết

vào trước khi chế độ đọc được thiết lập thì địa chỉ đầu tiên được đọc sẽ là địa chỉ

cuối cùng chứa trong con trỏ thanh ghi. DS1307 sẽ nhận được một tín hiệu Not

Acknowledge khi kết thúc quá trình đọc. Đọc dữ liệu - chế độ slave phát.

2.1.4.3 Cách thức giao tiếp với DS1307

Để làm việc với DS1307, thực hiện các bước như sau:

• START I2C

Ghi: 0DxH ( Đây là địa chỉ của DS1307 do nhà sản xuất quy định trong giao tiếp

I2C ) với: x=0: Ghi dữ liệu vào DS1307, x=1: Đọc dữ liệu vào DS1307.

Ghi tham số x này vào, có nghĩa là việc tiếp theo chúng ta ghi hay đọc dữ liệu từ

con DS1307 tùy vào giá trị x=0 (ghi dữ liệu) hay x=1 (đọc dữ liệu).

Ghi vào địa chỉ thanh ghi cần ghi hoặc cần đọc.

Ghi hoặc đọc dữ liệu.

STOP I2C

Nếu muốn ghi vào địa chỉ 01H rồi kế tiếp ghi vào địa chỉ 04H chẳng hạn thì

chúng ta phải START lại từ đầu→Ghi vào 0D0H ( để xác định sẽ Ghi vào DS1307

_ hướng giao tiếp là Ghi vào ) →Ghi tiếp 04H→Ghi dữ liệu của thanh ghi cần cài

đặt→STOP I2C.

Tương tự, nếu muốn đọc thì trước hết phải ghi vào địa chỉ cần đọc : tức là vẫn tiếp

tục tiến hành 3 thủ tục START→Ghi 0D0H→Ghi vào địa chỉ ( địa chỉ của thanh

ghi mà muốn đọc dữ liệu ). Sau đó, mới START lại rồi ghi lại 0D1H (lúc này mới

thông báo là sẽ đọc từ DS1307 ), tiếp theo cứ đọc bình thường ( thanh ghi đọc được

sẽ là thanh ghi có địa chỉ mới vừa ghi vào), tiếp tục đọc thì địa chỉ cần đọc sẽ tự

động tăng lên cho đến khi STOP I2C.

Page 57: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 52 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Sơ đồ tổng quát của mạch đồng hồ:

Hình 2.10 Sơ đồ tổng quát của đồng hồ

2.1.4.4 Thuật toán thiết kế phần mềm

Như đã trình bày trong phần thuật toán giao tiếp và sơ đồ khối tổng quát, thì

chương trình MAIN sẽ gồm 3 mục chính được mô tả cụ thể trong lưu đồ của

chương trình MAIN ở hình 2.11

Hình 2.11 Thuật toán giao tiếp của DS1307 với Vi Điều Khiển

Page 58: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 53 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Giải thích lưu đồ chính này: Bắt đầu, chương trình sẽ gọi chương trình con đọc

dữ liệu từ con DS1307 với chuẩn giao tiếp I2C, sau đó sẽ gọi chương trình con để

quét Led 7 đoạn hiển thị 15 số: 2 số hiển thị giá trị của Giờ, 2 số hiển thị giá trị của

Phút, 2 số hiển thị giá trị của Giây, 1 số hiển thị thứ, 2 số hiển thị ngày, 2 số hiển thị

tháng, 4 số hiển thị năm. Nếu phím MODE (chọn chế độ cài đặt) không được nhấn

thì vòng lặp của chương trình này sẽ chạy vô tận. Nếu phím MODE được nhấn, nó

sẽ nhảy tới chương trình con cài đặt giờ hay phút còn tùy thuộc vào số lần nhấn

phím MODE. Sau đây ta đi vào chi tiết của từng khối nhỏ:

ĐỌC DỮ LIỆU TỪ DS1307 LƯU VÀO TRONG RAM CỦA 89S52. Xem lưu đồ

chương trình như hình dưới. Ở đây, các chương trình con nhỏ hơn, chẳng hạn như :

CTC Start, Stop…

Hình 2.12 Quá trình đọc dữ liệu từ DS1307 được lưu vào Ram AT89S52

Page 59: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 54 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

- Cài đặt thời gian.

Hình 2.13 Thuật toán cài đặt giờ

Trong lưu đồ giải thuật trên hình 2.13 cho thấy, vòng lặp của chương trình sẽ chạy

vô tận cho đến khi có phím MODE được ấn xuống. Khi đó, nó nhảy đến CTC để

giải quyết việc cài đặt thời gian.

Lưu đồ CTC cài đặt giờ CTC cài đặt phút cũng có nguyên tắc tương tự như cài đặt

giờ nên không được nói ra ở đây. Nhìn vào lưu đồ chúng ta thấy, thanh ghi= 02H, là

địa chỉ của thanh ghi giờ trong con DS1307, như vậy, mục đích của việc định nghĩa

ô nhớ thanh ghi là để xác định địa chỉ thay đổi giá trị trong ô nhớ RAM của

DS1307. CTC cài đặt giờ sẽ lặp vô tận và CTC hiển thị giờ sẽ chỉ cho hiển thị 2 Led

7 đoạn, chỉ hiển thị giờ trong khi cài đặt, tất cả các đèn Led còn lại đều tắt hết.

Trong khi CTC cài đặt đang chạy vô tận, nếu có phím INC hoặc DEC được nhấn thì

nó sẽ nhảy đến CTC tăng hoặc giảm tùy vào phím được nhấn.

Page 60: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 55 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 2.14 Thuật toán cập nhật dữ liệu cho DS1307

2.2 Bộ biến đổi tương tự sang số (ADC0804)

2.2.1 Giới thiệu

Chíp ADC0804 là bộ chuyển đổi tương tự sang số thuộc họ ADC800 của

hãng National Semiconductor. Chíp này cũng được nhiều hãng khác sản xuất. Chíp

có điện áp nuôi +5V và độ phân giải 8 bit. Ngoài độ phân giải thì thời gian chuyển

đổi cũng là một tham số quan trọng khi đánh giá bộ ADC. Thời gian chuyển đổi

được định nghĩa là thời gian mà bộ ADC cần chuyển một đầu vào tương tự thành

một số nhị phân. Đối với ADC 0804 thì thời gian chuyển đổi phụ thuộc vào tần số

đồng hồ được cấp chân CLK và CLK IN và không bé hơn 110µs.

Page 61: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 56 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

2.2.2 Sơ đồ và chức năng các chân ADC0804

2.2.2.1 Sơ đồ chân

Hình 2.15 Sơ đồ chân thực tế của ADC0804

2.2.2.2 Chức năng các chân

Chân CS (Chip select).

Chân số 1, là chân chọn chip, đầu vào tích cực mức thấp được sử dụng để kích

hoạt chip ADC0804. Để truy cập ADC0804 thì chân này phải ở mức thấp.

Chân RD (Read).

Chân số 2 là một tín hiệu vào, tích cực ở mức thấp. Các bộ chuyển đổi đầu vào tương tự thành số nhị phân và giữ nó một thanh ghi trong. RD được sử dụng để có dữ liệu đã được chuyển đổi tới đầu ra của ADC0804. Khi CS = 0 nếu có một xung cao xuống thấp đến chân RD thì dữ liệu ra dạng số 8 bit được đưa tới các chân dữ liệu (DB0-DB7).

Chân WR (Write). Chân số 3, đây là chân tích cực mức thấp được dùng để báo cho ADC biết bắt đầu quá trình biến đổi. Nếu CS=0 khi WR tạo ra xung cao xuống thấp thì bộ ADC0804 bắt đầu quá trình chuyển đổi giá trị đầu vào tương tự Vin về số nhị phân 8 bit. Khi việc chuyển đổi hoàn tất thì chân INTR được ADC hạ xuống thấp.

Chân CLKIN và CLKR. CLKIN (chân số 4), là chân vào nối tới đồng hồ ngoài được sử dụng để tạo thời gian. Tuy nhiên ADC0804 cũng có một bộ tạo đồng hồ riêng. Để dùng đồng hồ riêng thì các chân CLKIN và CLKR (chân 19) được nối với một tụ điện và một điện trở (như hình 2.16). Khi đó tần số được xác định bằng biểu thức: f=1/(RC)

Page 62: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 57 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Với R=15kΩ, C=151pF

Hình 2.16 Cách mắc tạo xung đồng hồ cho chíp ADC0804

Chân Ngắt INTR (Interrupt).

Chân số 5 là chân ra tích cực mức thấp. Bình thường chân này ở trạng thái cao

và khi việc chuyển đổi hoàn tất thì nó xuống thấp để báo cho CPU biết dữ liệu

chuyển đổi sẵn sàng lấy đi. Sau khi INTR xuống thấp, cần đặt CS = 0 và gửi

một xung cao xuống thấp tới chân RD để đưa dữ liệu ra.

Chân Vin(+) và Vin(-).

Chân số 6 và chân số 7, đây là hai đầu vào tương tự vi sai, trong đó Vin =

Vin(+) - Vin(-). Thông thường Vin(-) được nối với đất và Vin(+) được dùng

làm đầu vào tương tự và sẽ được chuyển đổi về dạng số.

Chân Vcc.

Chân số 20 là chân nguồn nuôi +5V. Chân này còn được dùng làm điện áp

tham chiếu khi đầu vào Vref/2 để hở.

Chân Vref/2.

Chân số 9 là chân điện áp đầu vào được dùng làm điện áp tham chiếu. Nếu

chân này hở thì điện áp đầu vào tương tự cho ADC0804 nằm trong dải 0 - +5V.

Page 63: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 58 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Tuy nhiên, có nhiều ứng dụng mà đầu vào tương tự đến Vin khác với dải 0-5V.

Chân Vref/2 được dùng để thực hiện các điện áp đầu ra khác 0-5V.

Bảng 2.1 Bảng so sánh điện áp

Vref/2 (V) Vin (V) Kích thước bước (mV) Hở 0 - 5 5/256 = 19.53 2.0 0 - 4 4/256 = 15.62 1.5 0 - 3 3/256 = 11.71 1.28 0 - 2.56 2.56/256 = 10 1.0 0 - 2 2/256 = 7.81 0.5 0 - 1 1/256 = 3.90

Chân dữ liệu (DB0-DB7).

D0-D7, chân 18-11, là các chân ra dữ liệu số (D7 là bit cao nhất MSB và D0 là

bit thấp nhất LSB). Các chân này được đệm ba trạng thái và dữ liệu đã được

chuyển đổi chỉ được truy cập khi chân CS = 0 và chân RD đưa xuống mức

thấp. Để tính điện áp đầu ra ta tính theo công thức sau.

Dout=Vin /(kích thước bước).

2.3 Vi điều khiển AT89S52

2.3.1 Giới thiệu

AT89S52 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, 6 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 AT89S52 đượ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

Page 64: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 59 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

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.3.2 Sơ đồ chân và chức năng các chân của AT89S52

2.3.2.1 Sơ đồ chân của AT89S52

Hình 2.17 Sơ đồ chân của AT89S52

Mặc dù các thành viên của họ 8051 (ví dụ 8751, 89S52, 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 8051 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

Page 65: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 60 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

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.3.2.2 Chức năng các chân của AT89S52

* Port 0 (P0.0-P0.7)

Port 0 gồm 8 chân (từ chân 32 đến chân 39), có hai công dụng. Trong các

thiết kế có tối thiểu thành phần, Port 0 được sử dụng làm nhiệm vụ xuất nhập.

Trong các thiết kế lớn hơn có bộ nhớ ngoài, Port 0 trở thành bus địa chỉ và bus dữ

liệu đa hợp ( byte thấp của bus địa chỉ ).

Hình 2.18 Cấu trúc của các chân trên Port0

* Khi muốn sử dụng Port 0 cho việc xuất nhập dữ liệu ta cần kéo một hàng điện trở

vào Port 0 và nối lên Vcc.

* Port 1 (P1.0-P1.7)

Đối với 8051, chức năng duy nhất của Port 1 là chức năng xuất nhập cùng

Port khác, Port 1 có thể xuất nhập theo bit và theo byte. Port 1 được dùng để giao

tiếp với thiết bị ngoài khi có yêu cầu. Không có chức năng nào khác nữa gán cho

Port 1, ngoài hai việc trên.

* Riêng dòng 89Sxx, ba chân P1.5, P1.6, P1.7 được dùng để nạp Rom theo chuẩn

ISP 2 chân P1.0, P1.1 được dùng cho Timer 2.

Page 66: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 61 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 2.19 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 (các chân từ 21 đến 28) có hai công dụng hoặc làm nhiệm vụ

xuất/nhập hoặc là byte địa chỉ cao của bus địa chỉ 16 bit cho các thiết kế có bộ nhớ

chương trình ngoài hoặc các thiết kế có nhiều hơn 256 byte bộ nhớ dữ liệu ngoài.

Hình 2.20 Cấu trúc của các chân trên Port2

* Port 3 (P3.0-P3.7)

Mỗi chân trên Port 3 ngoài chức năng xuất nhập còn có một số chức năng

riêng, cụ thể như sau:

Page 67: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 62 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 2.2 Tên chân và chức năng các chân của Port 3

Bit 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 ngoài 0

P3.3 INT1 Ngắt ngoài 1

P3.4 T0 Ngõ vào của Timer/Counter 0

P3.5 T1 Ngõ vào của Timer/Counter 1

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

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

* Chân /PSEN (Program Store Enable)

/Psen là chân điều khiển đọc chương trình ở bộ nhớ ngoài, nó được nối với

chân /OE để cho phép đọc các byte mã lệnh trên Rom ngoài. /Psen sẽ ở mức thấp

trong thời gian đọc mã lệnh. Mã lệnh được đọc từ bộ nhớ ngoài bus dữ liệu (Port 0)

thanh ghi lệnh để được giải mã.

Khi thực hiện chương trình trong Rom nội thì /Psen ở mức cao.

* Chân ALE (Address Latch Enable)

ALE là tín hiệu điều khiển chốt địa chỉ có tần số bằng 1/6 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)

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 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 GND ) thì vi điều khiển thi hành chương

trình từ bộ nhớ ngoài.

* Chân 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 2 chu kì máy, các thanh ghi trong bộ nhớ vi điều khiển

được tải những giá trị thích hợp để khởi động lại hệ thống. Quá trình này diễn ra

Page 68: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 63 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

nhờ nối một tụ điện (có giá trị 1-10 micro fara) và một điện trở khoảng 10kΩ vào

chân này.

Hình 2.21 Mạch reset AT89S52

* Chân XTAL1, XTAL2

AT89S52 có một bộ dao động trên chíp, 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. Thường có thêm

hai tụ điện loại 33pF được nối với bộ dao động thạch anh.

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

Độ lớn của một chu kì máy có thể nhận được bằng cách chia tần số của bộ

cộng hưởng thạch anh cho 12. Như vậy chu kì máy sẽ bằng 2 micro giây nếu tần số

bộ cộng hưởng thạch anh 12MHz. Hầu hết các lệnh được thực hiện trong một chu kì

máy.

Page 69: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 64 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 2.23 Mạch tạo xung cho Vi điều khiển

* Chân 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à 20.

2.4 IC ghi dịch 74HC595

2.4.1 Giới thiệu

Là IC ghi dịch 8 bit kết hợp chốt dữ liệu, đầu vào nối tiếp đầu ra song song.

Chức năng: thường dùng trong các mạch quét led 7 thanh, led matrix…để

tiết kiệm số chân VĐK tối đa (3 chân). Có thể mở rộng số chân VĐK bao nhiêu tùy

thích mà không IC nào có thể làm được bằng việc mắc nối tiếp đầu vào dữ liệu các

IC với nhau.

2.4.2 Sơ đồ chân và chức năng các chân

2.4.2.1 Sơ đồ chân

Hình 2.24 Sơ đồ chân thực tế 74HC595

Page 70: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 65 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

2.4.2.2 Chức năng các chân

Chân 14: đầu vào dữ liệu nối tiếp. Tại một thời điểm xung clock chỉ đưa

vào 1 bit.

Chân (15, 1, 2, 3, 4, 5, 6, 7): xuất dữ liệu khi chân 13 tích cực ở mức thấp

và có một xung tích cực ở sườn âm tại chân chốt 12.

Chân 13: chân cho phép tích cực ở mức thấp. Khi ở mức cao, tất cả các đầu

ra của 74HC595 trở về trạng thái cao trở, không có đầu ra nào được cho

phép.

Chân 9: chân dữ liệu nối tiếp. Nếu dùng nhiều 74HC595 mắc nối tiếp nhau

thì chân này đưa vào đầu vào của con tiếp theo khi đã dịch đủ 8 bit.

Chân 11: chân vào xung clock. Khi có một xung clock tích cực ở sườn

dương (từ 0 lên 1)thì 1 bit được dịch vào IC.

Chân12: xung clock chốt dữ liệu. Khi có một xung clock tích cực ở sườn

dương thì cho phép xuất dữ liệu trên các chân output.

Chân 10: khi chân này ở mức thấp (mức 0) thì dữ liệu sẽ bị xóa trên chip.

2.5 Led 7 đoạn 2.5.1 Giới thiệu

Trong các thiết bị, để báo trạng thái hoạt động của thiết bị đó cho người sử

dụng với thông số chỉ là các dãy số đơn thuần, thường người ta sử dụng “ led 7

đoạn”. Led 7 đoạn được sử dụng khi các dãy số không đòi hỏi quá phức tạp, chỉ cần

hiển thị số là đủ, chẳng hạn led 7 đoạn được dùng để hiển thị nhiệt độ phòng, trong

các đồng hồ treo tường bằng điện tử, hiển thị số lượng sản phẩm được kiểm tra sau

một công đoạn nào đó…

Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo hình và có

thêm một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của led

7 đoạn.

7 led đơn trên led 7 đoạn có Anode (cực +) hoặc Cathode (cực -) được nối

chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện. 8

cực còn lại trên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài

để kết nối với mạch điện. Nếu led 7 đoạn có Anode (cực +) chung, đầu chung này

được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái sáng tắt của các

Page 71: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 66 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0. Nếu led 7 đoạn có

Cathode (cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các

chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi

tín hiệu đặt vào các chân này ở mức 1.

Vì led 7 đoạn chứa bên trong nó các led đơn, do đó khi kết nối cần đảm bảo

dòng qua mỗi led đơn trong khoảng 10mA-20mA để bảo vệ led. Nếu kết nối với

nguồn 5V có thể hạn dòng bằng điện trở 330Ω trước các chân nhận tín hiệu điều

khiển.

Hình 2.25 Sơ đồ chân 7 SEG-COM-ANODE và hình ảnh minh họa

2.5.2 Kết nối với vi điều khiển Ngõ nhận tín hiệu điều khiển của led 7 đoạn có 8 đường, vì vậy có thể dùng

1 Port nào đó của Vi điều khiển để điều khiển led 7 đoạn. Như vậy led 7 đoạn nhận

một dữ liệu 8 bit từ Vi điều khiển để điều khiển hoạt động sáng tắt của từng led đơn

trong nó, dữ liệu được xuất ra điều khiển led 7 đoạn thường được gọi là "mã hiển thị

led 7 đoạn". Có hai kiểu mã hiển thị led 7 đoạn: mã dành cho led 7 đoạn có Anode

(cực +) chung và mã dành cho led 7 đoạn có Cathode (cực -) chung. Chẳng hạn, để

hiển thị số 1 cần làm cho các led ở vị trí b và c sáng, nếu sử dụng led 7 đoạn có

Anode chung thì phải đặt vào hai chân b và c điện áp là 0V (mức 0) các chân còn lại

Page 72: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 67 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

được đặt điện áp là 5V (mức 1), nếu sử dụng led 7 đoạn có Cathode chung thì điện

áp (hay mức logic) hoàn toàn ngược lại, tức là phải đặt vào chân b và c điện áp là

5V (mức 1).

Phần cứng được kết nối với 1 Port bất kì của Vi điều khiển, để thuận tiện cho

việc xử lí về sau phần cứng nên được kết nối như sau: Px.0 nối với chân a, Px.1nối

với chân b, lần lượt theo thứ tự cho đến Px.7 nối với chân h.

2.5.3 Bảng mã của Led Anode chung (các led đơn sáng ở mức 0)

Bảng 2.3 Bảng mã cho Led Anode chung (a là MSB, dp là LSB)

Số a b c d e f g dp Mã Hex

0 0 0 0 0 0 0 1 1 03h

1 1 0 0 1 1 1 1 1 9Fh

2 0 0 1 0 0 1 0 1 25h

3 0 0 0 0 1 1 0 1 0Dh

4 1 0 0 1 1 0 0 1 99h

5 0 1 0 0 1 0 0 1 49h

6 0 1 0 0 0 0 0 1 41h

7 0 0 0 1 1 1 1 1 1Fh

8 0 0 0 0 0 0 0 1 01h

9 0 0 0 0 1 0 0 1 09h

Page 73: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 68 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bảng 2.4 Bảng mã cho Led Anode chung (a là LSB, dp là MSB)

Số Dp g f e d c b a Mã Hex

0 1 1 0 0 0 0 0 0 C0h

1 1 1 1 1 1 0 0 1 F9h

2 1 0 1 0 0 1 0 0 A4h

3 1 0 1 1 0 0 0 0 B0h

4 1 0 0 1 1 0 0 1 99h

5 1 0 0 1 0 0 1 0 92h

6 1 0 0 0 0 0 1 0 82h

7 1 1 1 1 1 0 0 0 F8h

8 1 0 0 0 0 0 0 0 80h

9 1 0 0 1 0 0 0 0 90h

Page 74: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 69 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

2.5.4 Bảng mã của Led Cathode chung (các led đơn sáng ở mức 1)

Bảng 2.5 Bảng mã của Led Cathode chung

Số Dp g f e d c b a Mã Hex

0 0 0 1 1 1 1 1 1 3Fh

1 0 0 0 0 0 1 1 0 06h

2 0 1 0 1 1 0 1 1 5Bh

3 0 1 0 0 1 1 1 1 4Fh

4 0 1 1 0 0 1 1 0 66h

5 0 1 1 0 1 1 0 1 6Dh

6 0 1 1 1 1 1 0 1 7Dh

7 0 0 0 0 0 1 1 1 07h

8 0 1 1 1 1 1 1 1 7Fh

9 0 1 1 0 1 1 1 1 6Fh

2.5.5 Giao tiếp Vi điều khiển với led 7 đoạn (minh họa và thực hành với 8 led 7 đoạn) Nếu kết nối mỗi một Port của Vi điều khiển với 1 led 7 đoạn thì tối đa kết

nối được 4 led 7 đoạn. Mặt khác nếu kết nối như trên sẽ hạn chế khả năng thực hiện

các công việc khác của Vi điều khiển. Cho nên cần phải kết nối, điều khiển nhiều

led 7 đoạn với số lượng chân điều khiển từ Vi điều khiển càng ít càng tốt. Có hai

giải pháp: một là sử dụng các IC chuyên dụng cho việc hiển thị led 7 đoạn, hai kết

nối nhiều led 7 đoạn vào cùng một đường xuất tín hiệu hiển thị. Nội dung phần này

sẽ đề cập đến cách kết nối nhiều led 7 đoạn theo giải pháp thứ hai.

Mắt người có đặc điểm sinh lí là chỉ thu nhận 24 hình/giây để tổng hợp các

hình ảnh về thế giới xung quanh. Nếu một tín hiệu ánh sáng có chu kì sáng tắt hơn

24 lần trong 1 giây, mắt người luôn cảm nhận đó là một nguồn sáng liên tục. Để

minh họa cho điều này, bạn hãy lấy các chương trình đã thực hiện với led đơn và

Page 75: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 70 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

làm ngắn thời gian delay lại, đến một giá trị nào đó bạn sẽ thấy các led đều sáng liên

tục.

Để kết nối nhiều led 7 đoạn vào vi điều khiển thực hiện như sau: nối tất cả

các chân nhận tín hiệu của tất cả các led 7 đoạn (chân abcdefgh) cần sử dụng vào

cùng 1 Port, trong ví dụ, 8 led 7 đoạn có các chân nhận tín hiệu cùng được nối với

P0. Dùng các ngõ ra còn lại của vi điều khiển điều khiển ON/OFF cho led 7 đoạn,

mỗi ngõ ra điều khiển ON/OFF cho 1 led 7 đoạn (ON: led 7 đoạn được cấp nguồn

để hiển thị, OFF: led 7 đoạn bị ngắt nguồn nên không hiển thị được).

Sơ đồ kết nối thực tế như hình dưới:

Trong sơ đồ trên, led 7 đoạn được sử dụng là loại có Anode chung với tất cả

các chân nhận tín hiệu được kết nối với Port 0 đã qua điện trở hạn dòng. Để điều

khiển ON/OFF cho các led 7 đoạn, sử dụng transitor loại PNP, transitor này nhận

dòng điều khiển từ một ngõ ra của Vi điều khiển, led 7 đoạn sẽ được ON khi tín

hiệu từ vi điều khiển đến transitor ở mức 0. Có thể sử dụng transitor loại A564 hoặc

2N3905 hoặc một transitor PNP khác có thông số phù hợp. Các điện trở 4.7K và

điện trở treo 4.7K đảm bảo transitor luôn hoạt động ở chế độ ngắt/dẫn (đảm bảo khi

led 7 đoạn đang ở trạng thái OFF sẽ bị tắt hoàn toàn, không bị sáng mờ mờ).

Page 76: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 71 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Tại mỗi thời điểm , chỉ nên cho Vi điều khiển điều khiển cho 1 led 7 đoạn

hoạt động, do đó tại mỗi thời điểm chỉ nên có 1 ngõ ra duy nhất nối với transitor ở

mức 0.

Tại mỗi thời điểm chỉ có một led 7 đoạn được ON nên sẽ không xảy ra tình trạng

quá tải cho tải và quá tải cho vi điều khiển khi điều khiển nhiều led 7 đoạn.

Trong sơ đồ kết nối trên, chẳng hạn cần hiển thị số 451, quy ước thứ tự các

led 7 đoạn được đếm từ phải sang trái, như vậy cần làm cho led 7 đoạn thứ nhất

hiển thị số 1, led 7 đoạn thứ hai hiển thị số 5, led 7 đoạn thứ ba hiển thị số 4, các led

còn lại không hiển thị. Đầu tiên OFF tất cả các led 7 đoạn. Kế tiếp là xuất mã hiển

thị led 7 đoạn để hiển thị số 1, ON led 7 đoạn thứ nhất, lúc này dòng điện chỉ đi qua

led 7 đoạn thứ nhất, làm cho led 7 đoạn thứ nhất hiển thị số 1, thời gian ON trong

khoảng vài chục µs (1µs= 1/10-6s). Kế tiếp xuất mã hiển thị lad 7 đoạn hiển thị số 5,

OFF led 7 đoạn thứ nhất và đồng thời ON led 7 đoạn thứ hai, lúc này chỉ có led 7

đoạn thứ hai hiển thị và hiển thi số 5. Tiếp theo xuất mã hiển thị led 7 đoạn hiển thị

số 4, OFF led 7 đoạn thứ hai và ON led 7 đoạn thứ ba, lúc này chỉ duy nhất led 7

đoạn thứ ba hiển thị số 4. Cứ thế lặp lại quá trình trên liên tục. Thời gian ON/OFF

chỉ trong khoảng vài chục µs, và tại mỗi thời điểm chỉ có một led 7 đoạn hiển thị số

của chính nó, vì vậy mắt người thấy 3 led 7 đoạn không sáng đứt quãng, mà sáng

liên tục, mỗi led hiển thị 1 số riêng của nó. Thực hiện tương tự để mở rộng số lượng

led 7 đoạn cần sử dụng.

Page 77: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 72 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

CHƯƠNG 3. THIẾT KẾ MÔ HÌNH

3.1 Sơ đồ nguyên lý

Các linh kiện dùng trong mạch gồm: IC AT89S52, IC DS1307, IC 74HC595,

Led 7 thanh, Pin 3V, Tụ 10µF, Tụ 33pF, Thạch anh 12MHz, Thạch anh 32.768kHz,

Điện trở 10k, Con 3, Con 2, Nút nhấn hai chân,…và các linh kiện vật tư phụ trợ.

Hình 3.1 Mạch điều khiển

Page 78: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 73 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 3.2 Mạch đo nhiệt độ

Hình 3.3 Mạch hiển thị

Page 79: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 74 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 3.4 Mạch hiển thị 1

Hình 3.5 Mạch nguồn 5V

Page 80: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 75 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 3.6 Mạch quét phím

Page 81: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 76 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

3.2 Sơ đồ mạch in

Hình 3.7 Mạch điều khiển

Hình 3.8 Mạch đo nhiệt độ

Page 82: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 77 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 3.9 Mạch hiển thị

Hình 3.10 Mạch hiển thị 1

Page 83: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 78 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Hình 3.11 Mạch nguồn 5V

Hình 3.12 Mạch quét phím

Page 84: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 79 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

3.3 Mô hình thực tế

Hình 3.13 Mô hình đồng hồ thực tế

3.4 Ứng dụng

Mạch đồng hồ thời gian thực hiển thị trên led 7 thanh được sử dụng rộng rãi

trong cuộc sống hằng ngày, chúng ta có thể thấy nó ở rất nhiều nơi như trong nhà, ở

trường học, trong các công ty, xí nghiệp. Ứng dụng chủ yếu đó là:

+ Dùng để xem thời gian hằng ngày

+ Dùng để hẹn giờ, báo thức

+ Đo thời gian trong thể thao

Page 85: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 80 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

KẾT LUẬN Sau một thời gian làm đồ án tốt nghiệp cùng với việc thiết kế, thi công mạch

và mô hình mô phỏng theo thực tế. Kết quả thu được của em gần như đáp ứng được

yêu cầu đề ra.Về mặt ổn định và hiệu quả làm việc của mạch là mạch hoạt động tốt

tuy nhiên vẫn còn một số điểm mắc phải do yếu tố về mặt thời gian, kinh nghiệm

của em làm đề tài và mức độ tin cậy trong hoạt động và ổn định của linh kiện. Trong thời gian làm đồ án và thực hiện những công việc em đã nhận được sự

giúp đỡ tận tình của Thầy Hoàng Văn Quang cũng như các thầy cô trong khoa Điện

Tử. Vì vậy đã giúp em hoàn thành đồ án tốt nghiệp một cách có hiệu quả và giúp

em có thêm nhiều kiến thức, kinh nghiệm trong các công việc sau này.

Do thời gian có hạn, kinh nghiệm chưa có nhiều nên việc hoàn thành đồ án

không thể tránh khỏi thiếu sót. Kết quả đạt được của đồ án là:

Ưu điểm:

+ Mang tính thực tế, ứng dụng cao trong đời sống.

+ Giá thành hợp lý.

Nhược điểm:

+ Tốc độ điều khiển của 8051 còn hạn chế.

+ Tính thẩm mỹ chưa cao.

Hướng Phát Triển Đề Tài:

+ Dùng các dòng vi điều khiển khác như PIC, AVR…để thiết kế ra đồng hồ vạn

niên tương tự.

+ Lớn hơn chúng ta có thể tạo lên các ứng dụng lớn hơn của Vi Điều Khiển vào

việc phục vụ mục đích của con người.

+ Thiết kế thêm chương trình đổi lịch dương sang lịch âm.

+ Thay đổi tiếng chuông báo thức bằng bản nhạc mình yêu thích.

Page 86: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 81 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

TÀI LIỆU THAM KHẢO

[1]. Tống Văn On, Họ vi điều khiển 8051, NXB Lao Động – Xã Hội, 2005.

[2]. Vũ Thị Thu Hương, Kiều Xuân Thực, Vi điều khiển cấu trúc – lập trình và ứng

dụng, NXB Giáo Dục.

[3]. Nguyễn Linh Giang, Giáo trình Kỹ thuật lập trình C, NXB Giáo Dục, 2007.

[4]. Tài liệu từ Internet :

www.picvietnam.com

www.codientu.info

www.dientuvietnam.net

www.tailieu.vn

Page 87: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 82 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

PHỤ LỤC TRÌNH DỊCH KEILC VÀ CHƯƠNG TRÌNH NẠP PROLOAD V4.1 CHO

8051

1 Giới thiệu

Trong kỹ thuật lập trình vi điều khiển nói chung, ngôn ngữ lập trình được sử dụng

thường chia làm 2 loại: Ngôn ngữ bậc thấp và Ngôn ngữ bậc cao. Ngôn ngữ bậc cao

là các ngôn ngữ gần với ngôn ngữ con người hơn, do đó việc lập trình bằng các

ngôn ngữ này trở nên dễ dàng và đơn giản hơn. Có thể kể đến một số ngôn ngữ lập

trình bậc cao như C, Basic, Pascal… trong đó C là ngôn ngữ thông dụng hơn cả

trong kỹ thuật vi điều khiển. Về bản chất, sử dụng các ngôn ngữ này thay cho ngôn

ngữ bậc thấp là giảm tải cho lập trình viên trong việc nghiên cứu các tập lệnh và xây

dựng các cấu trúc giải thuật. Chương trình viết bằng ngôn ngữ bậc cao cũng sẽ

được một phần mềm trên máy tính gọi là trình biên dịch (Compiler) chuyển sang

dạng hợp ngữ trước khi chuyển sang mã máy. Khi sử dụng ngôn ngữ C người lập

trình không cần hiểu sâu sắc về cấu trúc của bộ vi điều khiển. Có nghĩa là với một

người chưa quen với một vi điểu khiển cho trước sẽ xây dựng được chương trình

một cách nhanh chóng hơn, do không phải mất thời gian tìm hiểu kiến trúc của vi

điều khiển đó. Và việc sử dụng lại các chương trình đã xây dựng trước đó cũng dễ

dàng hơn, có thể sử dụng toàn bộ hoặc sửa chữa một phần.

Các bạn có thể vào trang wed: http://www.mediafire.com/?nwdgtdlj1ln để

download.

Phần mềm mô phỏng hữu hiệu Protues 7.5: http://www.mediafire.com/?kjniri54zzj

2 Hướng dẫn sử dụng KeilC V3.0

Sau khi cài đặt xong thì có đường dẫn sau: C:\Keil\UV3.và có Icon trên Destop:

Page 88: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 83 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Sau khi khởi động chương trình có giao diện như sau:

Tạo một Project mới__chọn Project New Project:

Page 89: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 84 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Trong ổ đĩa C đã có sẵn Folder tên “ UV3 ” dùng để lưu dự án C trong đó. Sau

khi chọn New Project…thì cửa sổ Create New Project xuất hiện. Nhập tên dự án,

rồi nhấn nút Save.

Sau đó cửa sổ Select Device For Target “Target 1”, ở mục Data base chọn

Atmel rồi tìm chọn vi điều khiển AT89S52 rồi nhấn OK .

Page 90: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 85 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Máy tính sẽ hỏi có muốn copy đoạn mã khởi động không thì nhấn nút YES.

Tiếp theo kích chuột vào File chọn New để mở cửa sổ soạn thảo lập trình. Sau

khi chọn sẽ có giao diện như sau:

Tiếp theo kích chuột vào File chọn Save As thì thấy cửa Save As hiện ra. Hãy

đặt tên cho file lập trình (nhớ đặt là *.C). Rồi chọn Save.

Page 91: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 86 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Tiếp theo trong cửa sổ Project Workspace, nhấn đúp chuột vào “Target1” rồi

nhấp chuột phải vào “Source Group 1”, chọn Add File to Group “Source Group

1”.

Trong cửa sổ Pop up hiện ra sau đó kích chuột chọn tên file lập trình đã lưu lúc

nãy, rồi nhấn nút Add.

Page 92: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 87 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Lúc này cửa sổ Project Workspace đã có thêm thư mục con xuất hiện file

“.c”.Bây giờ có thể kích đúp chuột vào file “.c”, để lập trình.

Sau khi lập trình xong, lúc này màn hình soạn thảo có giao diện như sau:

Sau khi soạn thảo code đã xong hãy chú ý ở kế bên cửa sổ Target 1 có nút nhỏ

hình cây đũa. Kích chuột vào đó.

Sau khi nhấn thì cửa sổ Options for Targe “Target 1”, sẽ hiện ra. Tại thẻ

Target thì hãy sửa thông số Xtal(MHz) từ 33 thành 12.

Page 93: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 88 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Tiếp theo bật sang thẻ Output rồi đánh dấu vào chỗ Create Hex File, rồi nhấn

nút OK.

Sau khi hoàn tất công việc chỉnh các thông số thì nhấp chuột phải vào file “.c”,

rồi chọn Build target (phím tắt là F7) để bắt đầu quá trình biên dịch.

Page 94: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 89 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Nếu như chương trình lập trình sai hoặc thiếu thì lúc biên dịch chương trình sẽ

báo lỗi. Sau khi sửa lỗi thành công thì khi đó biên dịch thành công. Lúc này tìm

đường link: C:\Keil\UV3 để lấy file.hex. Bây giờ dùng mạch nạp, nạp cho

AT89S52 hoặc có thể đưa vào Protues để chạy mô phỏng.

3 Mã lập trình

#include<regx52.h>

sbit SDA=P1^0;

sbit SCL=P1^1;

sbit mode1=P3^3;

sbit up=P3^4;

sbit down=P3^5;

sbit h_g=P3^6;

sbit mode2=P3^7;

sbit dulieu=P3^0;

sbit chot=P3^1;

sbit dich=P3^2;

sbit dich1=P2^2;

sbit dulieu1=P2^0;

sbit chot1=P2^1;

Page 95: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 90 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

sbit dich2=P2^5;

sbit dulieu2=P2^3;

sbit chot2=P2^4;

sbit dulieu3=P1^2;

sbit chot3=P1^3;

sbit dich3=P1^4;

sbit dulieu4=P1^5;

sbit chot4=P1^6;

sbit dich4=P1^7;

sbit coi=P0^0;

int idata

chuc_giay,don_vi,chuc_phut,don_vi_phut,chuc_gio,don_vi_gio,hg=0,hp=0,mo=0,ti

et=0;

int idata

thu_tuan,don_vi_ngay,chuc_ngay,don_vi_thang,chuc_thang,don_vi_nam,chuc_nam

;

int idata

sec1,sec2,h,p,s,t=0,b=0,k=0,g=0,n=0,d=0,mode=0,ht_thu,ht_ngay,ht_thang,ht_nam,

set1=0,tuan;

code unsigned int M[10]=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;

void che_do();

void hien_thi4();

void delay(unsigned int t)

unsigned int i;

for(i=0;i<=t;i++);

unsigned char bcd_to_dec(unsigned char bien)

unsigned char chuc,don_vi,so;

chuc=bien>>4;

Page 96: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 91 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

don_vi=bien&0x0f;

so=chuc*10+don_vi;

return so;

unsigned char dec_to_bcd(unsigned char x)

unsigned char chuc,don_vi,so;

chuc=x/10;

don_vi=x%10;

so=(chuc<<4)|don_vi;

return so;

void start()

SCL=0;

SDA=1;

SCL=1;

SDA=0;

SCL=0;

void stop()

SCL=0;

SDA=0;

SCL=1;

SDA=1;

SCL=0;

void write_data(unsigned char da_ta)

int i;

Page 97: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 92 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

bit bitdata;

for(i=0;i<=7;i++)

bitdata=da_ta&0x80;

SDA=bitdata;

da_ta<<=1;

SCL=1;

SCL=0;

SDA=1;

SCL=1;

bitdata=SDA;

SCL=0;

unsigned char read_data(unsigned char x)

int i;

unsigned char da_ta;

bit bitdata;

SDA=1;

da_ta=0;

for(i=0;i<=7;i++)

SCL=1;

bitdata=SDA;

da_ta<<=1;

da_ta=da_ta|bitdata;

SCL=0;

SDA=x;

SCL=1;

Page 98: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 93 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

SCL=0;

SDA=1;

return da_ta;

void hien_thi1(int a,int b,int c,int d)

int j,y;

for(j=0;j<=7;j++)

y=a;

y=y&0x80;

if(y==0x80)

dulieu=1;

else

dulieu=0;

dich=0;

delay(1);

dich=1;

a=a*2;

for(j=0;j<=7;j++)

y=b;

y=y&0x80;

if(y==0x80)

dulieu=1;

else

dulieu=0;

dich=0;

delay(1);

dich=1;

Page 99: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 94 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

b=b*2;

for(j=0;j<=7;j++)

y=c;

y=y&0x80;

if(y==0x80)

dulieu=1;

else

dulieu=0;

dich=0;

delay(1);

dich=1;

c=c*2;

for(j=0;j<=7;j++)

y=d;

y=y&0x80;

if(y==0x80)

dulieu=1;

else

dulieu=0;

dich=0;

delay(1);

dich=1;

d=d*2;

chot=0;

delay(1);

chot=1;

Page 100: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 95 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

void hien_thi2(int a,int b,int c,int d,int e,int f,int g,int h,int k,int l)

int j,y;

for(j=0;j<=7;j++)

y=a;

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

a=a*2;

for(j=0;j<=7;j++)

y=b;

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

b=b*2;

for(j=0;j<=7;j++)

Page 101: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 96 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

y=c;

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

c=c*2;

for(j=0;j<=7;j++)

y=d;

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

d=d*2;

for(j=0;j<=7;j++)

y=e;

y=y&0x80;

if(y==0x80)

dulieu1=1;

Page 102: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 97 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

e=e*2;

for(j=0;j<=7;j++)

y=f;

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

f=f*2;

for(j=0;j<=7;j++)

y=g;

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

Page 103: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 98 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

g=g*2;

for(j=0;j<=7;j++)

y=h;

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

h=h*2;

for(j=0;j<=7;j++)

y=k;

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

k=k*2;

for(j=0;j<=7;j++)

y=l;

Page 104: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 99 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

y=y&0x80;

if(y==0x80)

dulieu1=1;

else

dulieu1=0;

dich1=0;

delay(1);

dich1=1;

l=l*2;

chot1=0;

delay(1);

chot1=1;

void hien_thi3(int a,int b,int c,int d)

int j,y;

for(j=0;j<=7;j++)

y=a;

y=y&0x80;

if(y==0x80)

dulieu2=1;

else

dulieu2=0;

dich2=0;

delay(1);

dich2=1;

a=a*2;

for(j=0;j<=7;j++)

Page 105: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 100 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

y=b;

y=y&0x80;

if(y==0x80)

dulieu2=1;

else

dulieu2=0;

dich2=0;

delay(1);

dich2=1;

b=b*2;

for(j=0;j<=7;j++)

y=c;

y=y&0x80;

if(y==0x80)

dulieu2=1;

else

dulieu2=0;

dich2=0;

delay(1);

dich2=1;

c=c*2;

for(j=0;j<=7;j++)

y=d;

y=y&0x80;

if(y==0x80)

dulieu2=1;

Page 106: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 101 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

else

dulieu2=0;

dich2=0;

delay(1);

dich2=1;

d=d*2;

chot2=0;

delay(1);

chot2=1;

void hien_thi4(int a,int b)

int j,y;

for(j=0;j<=7;j++)

y=a;

y=y&0x80;

if(y==0x80)

dulieu3=1;

else

dulieu3=0;

dich3=0;

delay(1);

dich3=1;

a=a*2;

for(j=0;j<=7;j++)

y=b;

y=y&0x80;

Page 107: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 102 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

if(y==0x80)

dulieu3=1;

else

dulieu3=0;

dich3=0;

delay(1);

dich3=1;

b=b*2;

chot3=0;

delay(1);

chot3=1;

void hien_thi5(int a,int b)

int j,y;

for(j=0;j<=7;j++)

y=a;

y=y&0x80;

if(y==0x80)

dulieu4=1;

else

dulieu4=0;

dich4=0;

delay(1);

dich4=1;

a=a*2;

for(j=0;j<=7;j++)

Page 108: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 103 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

y=b;

y=y&0x80;

if(y==0x80)

dulieu4=1;

else

dulieu4=0;

dich4=0;

delay(1);

dich4=1;

b=b*2;

chot4=0;

delay(1);

chot4=1;

void update()

int du_lieu=0;

start();

write_data(0xd0);

write_data(0x00);

du_lieu=sec1+(sec2<<4);

du_lieu=du_lieu&0x7f;

write_data(du_lieu);

du_lieu=dec_to_bcd(t);

write_data(du_lieu);

du_lieu=dec_to_bcd(b);

write_data(du_lieu);

du_lieu=dec_to_bcd(k);

write_data(du_lieu);

du_lieu=dec_to_bcd(g);

Page 109: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 104 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

write_data(du_lieu);

du_lieu=dec_to_bcd(n);

write_data(du_lieu);

du_lieu=dec_to_bcd(d);

write_data(du_lieu);

stop();

void updatetime()

start();

write_data(0xd0);

write_data(0x00);

start();

write_data(0xd1);

s=read_data(0);

p=read_data(0);

h=read_data(0);

ht_thu=read_data(0);

ht_ngay=read_data(0);

ht_thang=read_data(0);

ht_nam=read_data(1);

stop();

s=bcd_to_dec(s);

p=bcd_to_dec(p);

h=bcd_to_dec(h);

ht_thu=bcd_to_dec(ht_thu);

ht_ngay=bcd_to_dec(ht_ngay);

ht_thang=bcd_to_dec(ht_thang);

ht_nam=bcd_to_dec(ht_nam);

chuc_giay=s/10;

don_vi=s%10;

Page 110: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 105 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

chuc_phut=p/10;

don_vi_phut=p%10;

chuc_gio=h/10;

don_vi_gio=h%10;

thu_tuan=ht_thu%10;

tuan=ht_thu/10;

don_vi_ngay=ht_ngay%10;

chuc_ngay=ht_ngay/10;

don_vi_thang=ht_thang%10;

chuc_thang=ht_thang/10;

don_vi_nam=ht_nam%10;

chuc_nam=ht_nam/10;

void set_min()

int min1,min2;

do

che_do();

if(up==0)

while(up==0);

t++;

if(t==60)

t=0;

if(down==0)

while(down==0);

t--;

if(t==-1)

Page 111: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 106 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

t=59;

min1=t%10;

min2=t/10;

hien_thi2(0xff,0xff,0xff,0xff,0xff,0xff,M[min2],M[min1],0xff,0xff);

hien_thi3(0xff,0xff,0xff,0xff);

hien_thi5(0xff,0xff);

delay(30000);

while(mode==1);

void set_hour()

int hour1,hour2;

do

che_do();

if(up==0)

while(up==0);

b++;

if(b==24)

b=0;

if(down==0)

while(down==0);

b--;

if(b==-1)

b=23;

Page 112: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 107 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

hour1=b%10;

hour2=b/10;

hien_thi2(0xff,0xff,0xff,0xff,M[hour2],M[hour1],0xff,0xff,0xff,0xff);

hien_thi3(0xff,0xff,0xff,0xff);

hien_thi5(0xff,0xff);

delay(30000);

while(mode==2);

void set_thu()

int thu,chuc;

do

che_do();

if(up==0)

while(up==0);

k++;

if(k==8)

k=1;

if(down==0)

while(down==0);

k--;

if(k==0)

k=7;

chuc=k/10;

thu=k%10;

Page 113: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 108 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

hien_thi2(0xff,0xff,M[chuc],M[thu],0xff,0xff,0xff,0xff,0xff,0xff);

hien_thi3(0xff,0xff,0xff,0xff);

hien_thi5(0xff,0xff);

delay(30000);

while(mode==3);

void set_day()

int day1,day2;

do

che_do();

if(up==0)

while(up==0);

g++;

if(g==32)

g=1;

if(down==0)

while(down==0);

g--;

if(g==0)

g=31;

day1=g%10;

day2=g/10;

hien_thi2(M[day2],M[day1],0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff);

hien_thi3(0xff,0xff,0xff,0xff);

Page 114: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 109 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

hien_thi5(0xff,0xff);

delay(30000);

while(mode==4);

void set_thang()

int thang1,thang2;

do

che_do();

if(up==0)

while(up==0);

n++;

if(n==13)

n=1;

if(down==0)

while(down==0);

n--;

if(n==0)

n=12;

thang1=n%10;

thang2=n/10;

hien_thi5(M[thang2],M[thang1]);

hien_thi2(0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff);

hien_thi3(0xff,0xff,0xff,0xff);

delay(33000);

Page 115: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 110 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

while(mode==5);

void set_nam()

int nam1,nam2;

do

che_do();

if(up==0)

while(up==0);

d++;

if(d==100)

d=0;

if(down==0)

while(down==0);

d--;

if(d==-1)

d=99;

nam1=d%10;

nam2=d/10;

hien_thi2(0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff);

hien_thi3(M[nam1],M[nam2],0xff,0xff);

hien_thi5(0xff,0xff);

delay(30000);

while(mode==6);

Page 116: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 111 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

void set_time()

set_min();

if(mode==2)

set_hour();

if(mode==3)

set_thu();

if(mode==4)

set_day();

if(mode==5)

set_thang();

if(mode==6)

set_nam();

if(mode==7)

update();

void update_thu(int da_ta1)

int du_lieu;

start();

write_data(0xd0);

write_data(0x03);

du_lieu=dec_to_bcd(da_ta1);

write_data(du_lieu);

stop();

void che_do()

if(mode1==0)

Page 117: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 112 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

while(mode1==0);

mode++;

if(mode==8)

mode=0;

void hen_gio()

int chuc_gio=0,donvi_gio=0,chuc_phut=0,donvi_phut=0;

if(mode2==0)

while(mode2==0);

mo++;

if(mo==1)

if(up==0)

while(up==0);

hp++;

if(hp==60)

hp=0;

if(down==0)

while(down==0);

hp--;

if(hp==-1)

hp=59;

chuc_phut=hp/10;

Page 118: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 113 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

donvi_phut=hp%10;

hien_thi1(M[donvi_phut],M[chuc_phut],0xff,0xff);

if(mo==2)

if(up==0)

while(up==0);

hg++;

if(hg==24)

hg=0;

if(down==0)

while(down==0);

hg--;

if(hp==-1)

hg=23;

chuc_gio=hg/10;

donvi_gio=hg%10;

hien_thi1(0xff,0xff,M[donvi_gio],M[chuc_gio]);

if(mo>=3)

chuc_phut=hp/10;

donvi_phut=hp%10;

chuc_gio=hg/10;

donvi_gio=hg%10;

hien_thi1(M[donvi_phut],M[chuc_phut],M[donvi_gio],M[chuc_gio]);

if((hg==h)&&(hp==p))

Page 119: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 114 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

coi=0;

else

coi=1;

void ht_tiet()

int chuc_tiet,donvi_tiet;

chuc_tiet=tiet/10;

donvi_tiet=tiet%10;

hien_thi4(M[chuc_tiet],M[donvi_tiet]);

void tiet_hoc()

if(h<=6)

coi=1;

hien_thi4(0xff,0xff);

if((h==6)&&(p<45))

coi=1;

hien_thi4(0xff,0xff);

if((h==6)&&(p==45)&&(s<5))

coi=0;

if(((h==6)&&(p>=45))||((h==7)&&(p<30)))

coi=1;

tiet=1;

ht_tiet();

Page 120: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 115 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

if((h==7)&&(p==30)&&(s<5))

coi=0;

if((h==7)&&(((p>=30))&&(p<35)))

coi=1;

hien_thi4(0x82,0xc7);

if((h==7)&&(p==35)&&(s<5))

coi=0;

if(((h==7)&&(p>=35))||((h==8)&&(p<20)))

coi=1;

tiet=2;

ht_tiet();

if((h==8)&&(p==20)&&(s<5))

coi=0;

if((h==8)&&((p>=20)&&(p<25)))

coi=1;

hien_thi4(0x82,0xc7);

if((h==8)&&(p==25)&&(s<5))

coi=0;

if(((h==8)&&(p>=25))||((h==9)&&(p<10)))

coi=1;

tiet=3;

ht_tiet();

Page 121: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 116 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

if((h==9)&&(p==10)&&(s<5))

coi=0;

if((h==9)&&((p>=10)&&(p<20)))

coi=1;

hien_thi4(0x82,0xc7);

if((h==9)&&(p==20)&&(s<10))

coi=0;

if(((h==9)&&(p>=20))||((h==10)&&(p<5)))

coi=1;

tiet=4;

ht_tiet();

if((h==10)&&(p==5)&&(s<5))

coi=0;

if((h==10)&&((p>=5)&&(p<10)))

hien_thi4(0x82,0xc7);

coi=1;

if((h==10)&&(p==10)&&(s<10))

coi=0;

if((h==10)&&((p>=10)&&(p<55)))

coi=1;

tiet=5;

ht_tiet();

if((h==10)&&(p==55)&&(s<5))

Page 122: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 117 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

coi=0;

if(((h==10)&&(p>=55))||((h==11)&&(p==0)))

coi=1;

hien_thi4(0x82,0xc7);

if((h==11)&&(p==0)&&(s<10))

coi=0;

if((h==11)&&((p>=0)&&(p<45)))

coi=1;

tiet=6;

ht_tiet();

if((h==11)&&(p==45)&&(s<5))

coi=0;

if(((h==11)&&(p>=45))||((h==12)&&(p<30)))

coi=1;

hien_thi4(0x82,0xc7);

if((h==12)&&(p==30)&&(s<10))

coi=0;

if(((h==12)&&(p>=30))||((h==13)&&(p<15)))

coi=1;

tiet=7;

ht_tiet();

if((h==13)&&(p==15)&&(s<5))

coi=0;

Page 123: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 118 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

if((h==13)&&(p>=15)&&(p<20))

coi=1;

hien_thi4(0x82,0xc7);

if((h==13)&&(p==20)&&(s<10))

coi=0;

if(((h==13)&&(p>=20))||((h==14)&&(p<5)))

coi=1;

tiet=8;

ht_tiet();

if((h==14)&&(p==5)&&(s<5))

coi=0;

if((h==14)&&((p>=5)&&(p<10)))

coi=1;

hien_thi4(0x82,0xc7);

if((h==14)&&(p==10)&&(s<10))

coi=0;

if((h==14)&&((p>=10)&&(p<55)))

coi=1;

tiet=9;

ht_tiet();

if((h==14)&&(p==55)&&(s<5))

coi=0;

if(((h==14)&&(p>=55))||((h==15)&&(p<5)))

Page 124: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 119 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

coi=1;

hien_thi4(0x82,0xc7);

if((h==15)&&(p==5)&&(s<10))

coi=0;

if((h==15)&&((p>=5)&&(p<50)))

coi=1;

tiet=10;

ht_tiet();

if((h==15)&&(p==50)&&(s<5))

coi=0;

if((h==15)&&((p>=50)&&(p<55)))

coi=1;

hien_thi4(0x82,0xc7);

if((h==15)&&(p==55)&&(s<10))

coi=0;

if(((h==15)&&(p>=55))||((h==16)&&(p<40)))

coi=1;

tiet=11;

ht_tiet();

if((h==16)&&(p==40)&&(s<5))

coi=0;

if((h==16)&&((p>=40)&&(p<45)))

Page 125: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 120 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

coi=1;

hien_thi4(0x82,0xc7);

if((h==16)&&(p==45)&&(s<10))

coi=0;

if(((h==16)&&(p>=45))||((h==17)&&(p<30)))

coi=1;

tiet=12;

ht_tiet();

if((h==17)&&(p==30)&&(s<5))

coi=0;

if((h==17)&&(p>30))

coi=1;

hien_thi4(0xff,0xff);

if(h>=18)

coi=1;

hien_thi4(0xff,0xff);

void main()

coi=1;

while(1)

updatetime();

Page 126: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 121 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

hien_thi2(M[chuc_ngay],M[don_vi_ngay],M[tuan],M[thu_tuan],M[chuc_gio],M[do

n_vi_gio],M[chuc_phut],M[don_vi_phut],M[chuc_giay],M[don_vi]);

hien_thi3(M[don_vi_nam],M[chuc_nam],M[0],M[2]);

hien_thi5(M[chuc_thang],M[don_vi_thang]);

if(ht_thu==0)

ht_thu=1;

update_thu(ht_thu);

che_do();

if(mode==1)

set_time();

if(mode==7)

updatetime();

hien_thi2(M[chuc_ngay],M[don_vi_ngay],M[tuan],M[thu_tuan],M[chuc_gio],M[do

n_vi_gio],M[chuc_phut],M[don_vi_phut],M[chuc_giay],M[don_vi]);

hien_thi3(M[don_vi_nam],M[chuc_nam],M[0],M[2]);

hien_thi5(M[chuc_thang],M[don_vi_thang]);

if(h_g==0)

hen_gio();

if(h_g==1)

hien_thi1(0xff,0xff,0xff,0xff);

mo=0;

if((ht_thu>1)&&(ht_thu<7))

tiet_hoc();

if((ht_thu==1)||(ht_thu==7))

Page 127: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 122 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

hien_thi4(0xff,0xff);

coi=1;

4 Chương trình nạp Proload V4.1.

Download http://www.dung80.com/index_files/page0015.htm

- Bước 1 : Sau khi download về và cài đặt chương trình lên hệ thống máy tính.

- Bước 2 : Chỉnh thông số của cổng COM của máy tính như sau.

+Nhấn chuột phải vào My ComputerManage, cửa sổ Computer Management

xuất hiện.

+ Tiếp theo kích chuột vào Device Manager và nhìn sang bên phải màn hình ta

nhấn đúp chuột vào Port (COM&LPT), rồi kích chuột phải vào Plolific USB-to-

Serial Bridge(COM3), bạn chọn Properties một cửa sổ xuất hiện.

Page 128: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 123 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Tại mục Port Settings hãy cài đặt các thông số cần thiết lập, sau khi chỉnh xong

kích chuột vào mục Advanced…, một cửa sổ xuất hiện.

Tại mục COM Port Number nên chọn COM2, vì các cổng COM khác đã được

sử dụng cho các mục đích khác. Rồi chọn OK.

Sau khi đã thiết lập xong thông số cho cổng COM, kích đúp chuột vào biểu

tượng

trên màn hình Deskop, nếu mạch kết nối thành công chương trình sẽ báo.

Page 129: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 124 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

Bấy giờ hãy gắn chíp thuộc họ AT89xxx vào đế có sẵn trên mạch (40 chân) theo

hướng chân 1 và chân nguồn của chip hướng về trên (vị trí có cần gạt).

Chương trình sẽ tự động nạp chip.

Nhấn nút Send để chọn file .hex cần nạp cho chip.

Nếu quá trình nạp thành công thì chương trình sẽ báo.

Trong trường hợp nạp không thành công, cần kiểm tra vấn đề sau:

+ chip có đúng loại mạch nạp hỗ trợ không.

+ chip có bị hỏng không.

+ kiểm tra nguồn USB.

+ chip có được gắn đúng chiều hay không.

+ các chân của chip có tiếp xúc với mạch nạp qua các khe có tốt không.

Page 130: Dong Ho Tren Led 7 Thanh Su Dung 8051 3312

Trường ĐHCN Hà Nội 125 Khoa điện tử

SVTH: Trần Thị Cảnh Lớp: CĐ ĐT6 – K11

72-79

1-70,80-124