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

BÁO CÁO THÍ NGHIỆM VI XỬ LÝ

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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
NĂM HỌC 2021-2022
---------*---------

BÁO CÁO BÀI TẬP LỚN VI XỬ LÝ
GVHD: NGUYỄN PHAN HẢI PHÚ


SINH VIÊN THỰC HIỆN:
Họ Tên

MSSV

Lớp

Nguyễn Bá Hưng

2012508

L05

Nguyễn Lê Hải Đăng

2010218

L08

Võ Văn Đăng Khoa


2011435

L02

Lê Công Danh

2012778

L05


MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU LÝ THUYẾT.................................................................5
1.

Giới thiệu Vi điều khiển AT89C52................................................................5

1.1 Sơ đồ chân AT89C52..........................................................................................8
1.2. Cấu hình chân AT89S52.................................................................................8
1.3 Các chế độ đặc biệt:.........................................................................................11
1.3.1 Chế độ nghỉ.................................................................................................11
1.3.2 Chế độ nguồn giảm:....................................................................................12
1.3.3 Các bit nhớ bộ khóa chương trình...............................................................12
1.4 AT89C52 SFR Map and giá trị Reset.............................................................13
1.5 T2CON - Thanh ghi điều khiển bộ định thời / bộ đếm 2..............................14
2.

Giới thiệu DS1307..............................................................................................14
2.1 Giới thiệu về IC thời gian thực DS1307.....................................................14
2.2 Cấu tạo và các thanh ghi.............................................................................16

2.3 Cấu trúc bên trong của IC DS1307.............................................................17
2.4 Tổ chức bộ nhớ của DS1307........................................................................18
2.5 Giao tiếp với DS1307...................................................................................20
2.6 Nguyên lý hoạt động....................................................................................21
2.7 Điều kiện của giao thức truyền I2C.............................................................21
3. Xử lý phím nhấn:..............................................................................................25
3.1Sơ đồ nguyên lý:............................................................................................25
3.2Chức năng:....................................................................................................25
4.Khối Hiển Thị:....................................................................................................27
4.1Sơ đồ LED.....................................................................................................27
4.2-Chức năng và nguyên lý hoạt động............................................................27


4.3-Cấu tạo của LED 7 đoạn.............................................................................28
4.4 - Xây dựng module hiển thị trên LED 7 đoạn...........................................29
CHƯƠNG 2: THIẾT KẾ VÀ THI CÔNG...............................................................30
1.

Lưu đồ giải thuật............................................................................................30

CHƯƠNG 3: TÀI LIỆU THAM KHẢO:................................................................40


LỜI NÓI ĐẦU
Trong những năm gần đây, cùng với sự phát triển ngày càng mạnh mẻ của công
nghệ vi điện tử, con người ngày càng thâm nhập sâu hơn về mọi lĩnh vực, đặc biệt là
trong lĩnh vực điện tử, tin học. Đời sống của con người ngày càng phát triển, nhu cầu
của con người ngày càng cao. Nhằm góp phần vào sự phát triển chung đó, chúng em –
những sinh viên khoa Điện đang học môn vi xử lý ln mong muốn làm một cái gì đó,
trước hết là xem mình có làm được những gì sau nữa là học hỏi thêm trong quá trình

thực hành thực tế để rồi sau này hy vọng mình sẽ góp được một phần nhỏ bé vào xây
dựng đất nước giàu đẹp hơn
Do trình độ cịn hạn chế, bài thiết kế cịn nhiều thiếu sót, nhiều phương án tối
ưu thuật tốn, chúng em mong nhận được những ý kiến đóng góp của thầy. Trong bài
tập lớn này, chúng em sẽ trình bày một mạch đồng hồ đơn giản, có khả năng báo thức
và chỉnh thời gian tùy ý


CHƯƠNG 1: GIỚI THIỆU LÝ THUYẾT
1. Giới thiệu Vi điều khiển AT89C52
AT89C52 là họ IC vi điều khiển do hãng Atmel sản xuất. Các sản phẩm
AT89C52 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên byte và các toán
số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế độ truy xuất dữ liệu
nhanh trên RAM nội. Nó cung cấp những hổ trợ mở rộng trên chip dùng cho những
biến một bit như là kiểu dữ liệu riêng biệt cho phép quản lý và kiểm tra bit trực tiếp
trong hệ thống điều khiển.
AT89C52 có 8Kbyte bộ nhớ FLASH ROM bên trong để lưu chương trình, vì
vậy Vi điều khiển có khả năng nạp xóa chương trình bằng điện lên đến 1000 lần. Dung
lượng RAM 128 byte, AT89C52 có 4 Port xuất/nhập 8 bit, có 2 bộ định thời 16 bit.
Ngồi ra AT89C52 cịn có khả năng giao tiếp dữ liệu nối tiếp, có thể mở rộng khơng
gian nhớ chương trình và nhớ dữ liệu ngồi lên đến 64Kbyte.
AT89C52 được đóng gói theo kiểu hai hàng chân DIP gồm 40 chân cho các
chức năng khác nhau như vào.
AT89C52 là máy vi tính 8-bit CMOS 8-bit công suất thấp, hiệu suất cao với 8K
byte bộ nhớ chỉ đọc có thể lập trình và xóa được (PEROM). Thiết bị được sản xuất
bằng công nghệ bộ nhớ không biến đổi mật độ cao của Atmel và tương thích với bộ
lệnh và sơ đồ chân 80C51 và 80C52 tiêu chuẩn cơng nghiệp. Flash trên chip cho phép
lập trình lại bộ nhớ chương trình trong hệ thống hoặc bằng bộ lập trình bộ nhớ khơng
biến đổi thơng thường. Bằng cách kết hợp một CPU 8-bit linh hoạt với Flash trên chip
nguyên khối, Atmel AT89C52 là một máy tính siêu nhỏ mạnh mẽ cung cấp một giải

pháp linh hoạt và hiệu quả về chi phí cho nhiều điều khiển nhúng các ứng dụng


Sơ đồ kết nối phần cứng AT89C52

Thông số kỹ thuật:









Họ vi điều khiển 8 bit
Điện áp cung cấp: 4-6V
Tần số hoạt động : 24 Mhz
Bộ nhớ : 8 Kb Flash, 256 Bytes SRAM
Timer/Counter : 3 bộ 16 bit
32 chân I/O lập trình được
8 nguồn ngắt khác nhau
Kiểu chân : PDIP40

Một số đặc tính:










8 KByte bộ nhớ có thể lập trình nhanh, có khả năng tới 1000 chu kỳ ghi xố
Tần số hoạt động từ: 0 Hz đến 24 MHz
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

Sơ đồ khối của AT89C52:


AT89C52 cung cấp các tính năng tiêu chuẩn sau: 8K byte Flash, 256 byte
RAM, 32 dòng I / O, ba dòng 16 bit bộ đếm thời gian / bộ đếm, kiến trúc ngắt sáu
vector hai cấp, một cổng nối tiếp song công đầy đủ, bộ tạo dao động trên chip và bộ xử
lý xung đồng hồ. Ngoài ra, AT89C52 được thiết kế với logic tĩnh cho hoạt động xuống
tần số 0 và hỗ trợ hai phần mềm có thể lựa chọn chế độ tiết kiệm năng lượng. Chế độ
nhàn rỗi
dừng CPU trong khi cho phép RAM, bộ đếm thời gian / bộ đếm, cổng nối tiếp và hệ
thống ngắt để tiếp tục hoạt động. Chế độ Power-down tiết kiệm nội dung RAM nhưng
đóng băng bộ dao động, vơ hiệu hóa tất cả các chức năng khác của chip cho đến khi
thiết lập lại phần cứng tiếp theo.


1.1 Sơ đồ chân AT89C52
Sơ đồ chân của vi điều khiển 8-bit AT89S52 được hiển thị bên dưới:


Sơ đồ chân AT89C52
Mặc dù các thành viên của họ 89C52 (ví dụ 8751, 89S52, 80C51, DS5000) đều
có các kiểu đóng vỏ khác nhau, CFP (Quad Flat Pakage) và dạng chip khơng có chân
đỡ LCC (Leadless Chip Carrier) 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 giới hạn như hai hàng chân DIP (DualIn - LinePakage), dạng
vỏ dẹt vuông QPF, ghi WR, địa chỉ, dữ liệu và ngắt. Cần phải lưu ý một số hãng cung
cấp một phiên bản 89C52 có 20 chân với số cổng vào ra ít hơn cho các ứng dụng yêu
cầu thấp hơn. Tuy nhiên vì hầu hết các nhà phát triển sử dụng chíp đóng vỏ 40 chân
với hai hàng chân DIP nên ta chỉ tập trung mô tả phiên bản này.
1.2.

Cấu hình chân AT89S52
Port 0: từ chân 32 đến chân 39 (P0.0 ÷ P0.7). Port 0 có 2 chức năng: trong các

thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường IO, đối
với thiết kế lớn có bộ nhớ mở rộng nó được kết hợp giữa bus địa chỉ và bus dữ liệu.
Cổng 0 là một cổng I / O hai chiều có rãnh mở 8 bit. Như một cổng đầu ra, mỗi chân
có thể chìm tám đầu vào TTL. Khi 1s được ghi vào các chân cổng 0, các chân này có


thể được sử dụng làm đầu vào trở kháng cao. Cổng 0 cũng có thể được cấu hình để trở
thành địa chỉ / bus dữ liệu bậc thấp được ghép kênh trong khi truy cập vào bộ nhớ dữ
liệu và máy chủ chuyên nghiệp bên ngoài. Trong chế độ này, P0 có nội kéo lên. Cổng 0
cũng nhận các byte mã trong quá trình kết hợp chương trình Flash và xuất các byte mã
trong suốt chương trình xác minh. Cần kéo bên ngồi trong suốt chương trình xác
minh
Port 1: từ chân 1 đến chân 9 (P1.0 ÷ P1.7). Port 1 là port IO dùng cho giao tiếp
với thiết bị bên ngoài nếu cần. Cổng 1 là cổng I / O hai chiều 8 bit với các thanh kéo
bên trong. Bộ đệm đầu ra Cổng 1 có thể chìm / nguồn bốn đầu vào TTL. Khi 1s được

ghi vào các chân của Cổng 1, chúng được kéo lên cao bằng các pullups bên trong và
có thể được sử dụng làm đầu vào. Là đầu vào, Các chân cổng 1 bên ngoài được kéo
xuống mức thấp sẽ cấp nguồn hiện tại (IIL) vì kéo lên bên trong. Ngồi ra, P1.0 và
P1.1 có thể được cấu hình để trở thành bộ đếm thời gian / bộ đếm 2 đầu vào đếm bên
ngoài (P1.0 / T2) và đầu vào kích hoạt hẹn giờ / bộ đếm 2 (P1.1 / T2EX), tương ứng,
như được hiển thị trong bảng sau. Cổng 1 cũng nhận các byte địa chỉ thứ tự thấp trong
Lập trình và xác minh Flash.
Port
Pin
P1.0

Các chức năng thay thế

T2 (đầu vào đếm bên ngoài cho Bộ định thời / Bộ đếm 2), xung nhịp ra
T2EX (Bộ kích hoạt chụp / nạp lại bộ đếm thời gian / Bộ đếm 2 và điều
P1.1
khiển hướng)
Port 2: từ chân 21 đến chân 28 (P2.0 ÷ P2.7). Port 2 là một port có tác dụng kép
dùng như các đường xuất/nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị
dùng bộ nhớ mở rộng. Cổng 2 là cổng I / O hai chiều 8 bit với các thanh kéo bên trong.
Bộ đệm đầu ra Cổng 2 có thể chìm / nguồn bốn đầu vào TTL. Khi 1s được ghi vào các
chân của Cổng 2, chúng được kéo lên cao bằng các pullups bên trong và có thể được
sử dụng làm đầu vào. Là đầu vào, Chân cổng 2 bên ngoài được kéo xuống thấp sẽ cấp
nguồn hiện tại (IIL) vì kéo lên bên trong. Cổng 2 phát ra byte địa chỉ bậc cao trong quá
trình tìm nạp từ bộ nhớ chương trình bên ngồi và trong khi truy cập vào bộ nhớ dữ
liệu bên ngoài sử dụng địa chỉ 16 bit (MOVX @DPTR). Trong ứng dụng này, Cổng 2
sử dụng các lups xung bên trong mạnh khi phát ra 1s. Trong khi truy cập vào dữ liệu
bên ngoài bộ nhớ sử dụng địa chỉ 8 bit (MOVX @ RI), Cổng 2 phát ra nội dung của



Thanh ghi Chức năng Đặc biệt P2. Cổng 2 cũng nhận các bit địa chỉ bậc cao và một số
kiểm sốt tín hiệu trong q trình lập trình và xác minh Flash
Port 3: từ chân 10 đến chân 17 (P3.0 ÷ P3.7). Port 3 là port có tác dụng kép.
Các chân của port này có nhiều chức năng, có cơng dụng chuyển đổi có liên hệ đến các
đặc tính đặc biệt của AT89C52 như trong bảng sau:
Bit
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Tên
RXD
TXD
INT0
INT1
T0
T1
WR
RD

Chức năng chuyển đổi
Ngõ vào dữ liệu nối tiếp.
Ngõ xuất dữ liệu nối tiếp.
Ngõ vào ngắt cứng thứ 0.
Ngõ vào ngắt cứng thứ 1.

Ngõ vào TIMER/ COUNTER thứ 0
Ngõ vào của TIMER/ COUNTER thứ 1
Tín hiệu ghi dữ liệu lên bộ nhớ ngồi
Tín hiệu đọc bộ nhớ dữ liệu ngoài.
Chức năng chuyển đổi của các chân P3.0 ÷ P3.7
PSEN (Program store enable): PSEN là tín hiệu ngõ ra có tác dụng cho phép

đọc bộ nhớ chương trình mở rộng và thường được nối đến chân OE của Eprom cho
phép đọc các byte mã lệnh. PSEN ở mức thấp trong thời gian AT89C52 lấy lệnh. Các
mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu, được chốt vào thanh ghi
lệnh bên trong AT89C52 để giải mã lệnh. Khi AT89C52 thi hành chương trình trong
ROM nội, PSEN ở mức cao.
ALE (Address Latch Enable): Khi AT89C52 truy xuất bộ nhớ bên ngồi, Port 0
có chức năng là bus địa chỉ và dữ liệu do đó phải tách các đường dữ liệu và địa chỉ.
Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường
địa chỉ và dữ liệu khi kết nối chúng với IC chốt. Tín hiệu ở chân ALE là một xung
trong khoảng thời gian port 0 đóng vai trị là địa chỉ thấp nên chốt địa chỉ hồn tồn tự
động.
EA (External Access): Tín hiệu vào EA (chân 31) thường được mắc lên mức 1
hoặc mức 0. Nếu ở mức1, AT89C52 thi hành chương trình từ ROM nội. Nếu ở mức 0,
AT89C52 thi hành chương trình từ bộ nhớ mở rộng. Chân EA được lấy làm chân cấp
nguồn 21V khi lập trình cho Eprom trong AT89C52.
RST (Reset): Khi ngõ vào tín hiệu này đưa lên mức cao ít nhất 2 chu kỳ máy,
các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. Khi
cấp điện mạch phải tự động reset. Các giá trị tụ và điện trởđược chọn là: R1=10Ω,
R2=220Ω, C=10 µF được mơ tả trong hình sau:


Các ngõ vào bộ dao động X1, X2: Bộ tạo dao động được tích hợp bên trong
89C52. Khi sử dụng 89C52, người ta chỉ cần nối thêm thạch anh và các tụ. Tần số

thạch anh tùy thuộc vào mục đích của người sử dụng, giá trị tụ thường được chọn là
33p.

1.3 Các chế độ đặc biệt:
1.3.1 Chế độ nghỉ

Trong chế độ nghỉ, CPU tự đi vào trạng thái ngủ trong khi tất cả các ngoại vi bên
trong chip vẫn tích cực. Chế độ này được điều khiển bởi phần mềm. Nội dung của
RAM trên chip và của tất cả các thanh ghi chức năng đặc biệt vẫn không đổi trong khi
thời gian tồn tại chế độ này. Chế độ nghỉ có thể được kết thúc bởi một ngắt bất kỳ nào
được phép hoặc bằng cách reset cứng.
Ta cần lưu ý rằng khi chế độ nghỉ được kết thúc bởi một reset cứng, chip vi điều
khiển sẽ tiếp tục bình thường việc thực thi chương trình từ nơi chương trình bị tạm


dừng, trong vòng 2 chu kỳ máy trước khi giải thuật reset phần mềm nắm quyền điều
khiển.
Ở chế độ nghỉ, phần cứng trên chip cẫm truy xuất RAM nội nhưng cho phép truy
xuất các chân của các port. Để tránh khả năng có một thao tác ghi khơng mong muốn
đến một chân port khi chế độ nghỉ kết thúc bằng reset, lệnh tiếp theo yêu cầu chế độ
nghỉ không nên là lệnh ghi đến chân port hoặc đến bộ nhớ ngoài.
1.3.2 Chế độ nguồn giảm:

Trong chế độ này, mạch dao động ngừng hoạt động và lệnh yêu cầu chế độ
nguồn giảm là lệnh sau cùng được thực thi. RAM trên chip và các thanh ghi chức năng
đặc biệt vẫn duy trì các giá trị của chúng cho đến khi chế độ nguồn giảm kết thúc. Chỉ
có một cách ra khỏi chế độ nguồn giảm, đó là reset cứng.
Việc reset sẽ xác định lại các thanh ghi chức năng đặc biệt nhưng không làm
thay đổi RAM trên chip. Việc reset không nên xảy ra (chân reset ở mức tích cực) trước
khi Vcc được khơi phục lại mức điện áp bình thường và phải kéo dài trạng thái tích

cực của chân reset đủ lâu để cho phép mạch dao động hoạt động trở lại và đạt trạng
thái ổn định.
Trạng thái của các chân trong thời gian tồn tại chế độ nghỉ và chế độ nguồn
giảm được cho trong bảng sau:

Nghỉ

Bộ nhớ Chương
trình
Bên trong

Nghỉ

Chế độ

Nguồn
giảm
Nguồn
giảm

PORT
PORT3
2
Dữ liệu Dữ liệu Dữ liệu Dữ liệu
Thả
Dữ liệu Dữ liệu Dữ liệu
nổi

ALE PSEN PORT0 PORT1
1


1

Bên ngoài

1

1

Bên trong

0

0

Dữ liệu Dữ liệu Dữ liệu Dữ liệu

Thả
Dữ liệu Dữ liệu Dữ liệu
nổi
Trạng thái các chân trong thời gian chế độ nghỉ và nguồn giảm
Bên ngồi

0

0

1.3.3 Các bit nhớ bộ khóa chương trình

Trên chip có ba bit khố, các bít này có thể khơng cho phép lập trình hoặc cho

phép lập trình, các bit này cho ta thêm một số đặc trưng nữa của AT89C52 như sau.
Khi bit khoá 1 LB1 được lập trình, mức logic ở chân được lấy mẫu và được chốt trong
khi reset. Nếu việc cấp nguồn cho chip khơng có cơng dụng reset, mạch chốt được
khởi động bằng một giá trị ngẫu nhiên và giá trị này được duy trì cho đến khi có tác


động reset. Điều cần thiết là giá trị được chốt của phải phù hợp vớii mức logic hiện
hành ở chân này.
CÁC BIT KHĨA
CHƯƠNG TRÌNH
Chế
LB1 LB2 LB3
độ
1
U
U
U
2

P

3

P

4

P

LOẠI BẢO VỆ


Khơng có đặc trưng khóa chương trình
Các lệnh MOVC được thực thi từ bộ nhớ chương trình
ngồi khơng được phép tìm nạp lệnh từ bộ nhớ nội,
U
U
/EA được lấy mẫu và được chốt khi reset, hơn nữa việc
lập trình trên Flash bị cấm
P
U
Như chế độ 2, cấm thêm việc kiểm tra chương trình
Như chế độ 3, cấm thêm việc thực thi chương trình
P
P
ngồi
Các bit khố bộ nhớ chương trình của AT89C52

1.4 AT89C52 SFR Map and giá trị Reset


1.5 T2CON - Thanh ghi điều khiển bộ định thời / bộ đếm 2

Symbol

Function
Cờ báo tràn Bộ định thời 2 được đặt bởi tràn Bộ định thời 2 và phải được
TF2
xóa bằng phần mềm. TF2 sẽ khơng được đặt khi RCLK = 1 hoặc TCLK =
1.
Cờ bên ngoài của Bộ định thời 2 được thiết lập khi quá trình chụp hoặc tải

lại gây ra bởi quá trình chuyển đổi tiêu cực trên T2EX và EXEN2 = 1. Khi
EXF2
ngắt Bộ định thời 2 được bật, EXF2 = 1 sẽ khiến CPU chuyển sang vectơ
với quy trình ngắt Bộ định thời 2. EXF2 phải được xóa bằng phần mềm.
EXF2 khơng gây ra ngắt ở chế độ bộ đếm lên / xuống (DCEN = 1).
Bật nhận đồng hồ. Khi được đặt, làm cho cổng nối tiếp sử dụng xung tràn
RCLK
Bộ định thời 2 cho đồng hồ nhận của nó trong cổng nối tiếp Chế độ 1 và
3. RCLK = 0 gây ra tràn Bộ định thời 1 được sử dụng cho đồng hồ nhận.
Bật đồng hồ truyền. Khi được đặt, làm cho cổng nối tiếp sử dụng xung
tràn của Bộ định thời 2 cho đồng hồ truyền của nó trong cổng nối tiếp Chế
TCLK
độ 1 và 3. TCLK = 0 gây ra tràn Bộ định thời 1 được sử dụng cho đồng hồ
truyền.
Bộ hẹn giờ 2 cho phép bên ngoài. Khi được đặt, cho phép chụp hoặc tải
lại xảy ra do quá trình chuyển đổi âm trên T2EX nếu Bộ hẹn giờ 2 không
EXEN2
được sử dụng để đồng hồ cổng nối tiếp. EXEN2 = 0 khiến Timer 2 bỏ qua
các sự kiện tại T2EX.
TR2
Điều khiển Start / Stop cho Timer 2. TR2 = 1 khởi động timer.
Bộ định thời hoặc bộ đếm chọn cho Bộ định thời 2. C / T2 = 0 cho chức
C/T2
năng hẹn giờ. C / T2 = 1 cho bộ đếm sự kiện bên ngồi (kích hoạt cạnh
rơi).
Chọn Chụp / Tải lại. CP / RL2 = 1 khiến quá trình ghi lại xảy ra trên
chuyển tiếp âm tại T2EX nếu EXEN2 = 1. CP / RL2 = 0 khiến quá trình
CP/RL2 tải lại tự động xảy ra khi Bộ hẹn giờ 2 tràn hoặc quá trình chuyển đổi âm
xảy ra ở T2EX khi EXEN2 = 1. Khi RCLK hoặc TCLK = 1, bit này bị bỏ
qua và bộ hẹn giờ buộc phải tự động tải lại khi tràn Bộ định thời 2

2. Giới thiệu DS1307
2.1 Giới thiệu về IC thời gian thực DS1307

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à một sản phẩm của Dallas Semiconductor (một
công ty thuộc Maxim Integrated Products). IC thời gian thực (RTC) DS1307 có thể
đếm giờ, phút, giây, thứ, ngày tháng, năm. Giao tiếp với vi điều khiển thơng qua chuẩn
I2C, và đóng vai trò là slave khi kết nối đến Bus I2C này. Có thể đếm thời gian theo


định dạng 24 giờ hoặc 12 giờ với chỉ thị AM/PM. Ngồi ra bên trong chíp có bộ dị
phát hiện mất nguồn và tự động chuyển sang sử dụng nguồn Pin dự phòng.
DS1307 là chip đồng hồ thời gian thực là 1 sản phẩm của hãng Dallas
Semiconductor, được đọc và ghi thông qua giao diện nối tiếp I2C.

Cấu tạo bên ngồi gồm 8 chân.

Các chân DS1307 có chức năng như sau:
 X1 và X2: là 2 ngõ kết nối với 1 thạch anh 32,768 KHz làm nguồn dao động
cho chip.
 VBat: cực dương của 1 nguồn pin 3v nuôi chip.
 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.
Chú ý: nếu nguồn Vcc không được cấp mà VBat vẫn được cấp thì chip DS1307 vẫn
hoạt động.
 SQW/OUT: ngõ phụ tạo xung vuông.
 SCL, SDA: là 2 đường xung nhịp và dữ liệu của giao diện I2C
2.2 Cấu tạo và các thanh ghi


Chip có tất cả 7 thanh ghi 8 bit chứa thời gian là giây, phút, giờ, thứ, ngày,
tháng, năm. Ngồi ra DS1307 cịn có 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh
ghi trống có thể dùng như RAM.


Hoạt động các bit trong thanh ghi được biểu diễn qua bảng sau:

Thanh ghi giây (Seconds):





Thanh ghi đầu tiên trong bộ nhớ DS1307, địa chỉ của nó là 0x00.
4 bit thấp thanh ghi chứa mã BCD của 4 bit chữ số hàng đơn vị của giá trị giây.
3 bit cao tiếp theo chứa mã BCD của 3 bit chữ số hàng chục giá trị giây.
Bit 7(bit cao nhất): luôn luôn phải đặt về mức 0 để chip hoạt động.

Thanh ghi phút(Minutes):
 Có địa chỉ 0x01, chứa giá trị phút của đồng hồ.
 Giống thanh ghi giây. Bit 7 luôn được đặt mức 0.
Thanh ghi giờ (Hours):
Thanh ghi có địa chỉ 0x20.
4 bit thấp (bit 0 đến bit 3) dùng để chỉ chữ số hàng đơn vị của giờ.
Bit 6 dùng để đặt chế độ giờ. Bit 6 = 0 chế độ 24 giờ. Bit 6 = 1 chế độ 12 giờ.
Ở chế độ 24 giờ:
o Bit 4 và bit 5 để chỉ chữ số hàng chục của giờ.
 Ở chế độ 12 giờ:
o Bit 4 dùng để chỉ chữ số hàng chục của giờ.
o Bit 5 dùng để chỉ buổi trong ngày. Bit 5 = 0: Am. Bit 5 = 1: Pm.







Thanh ghi thứ:
 Nằm ở địa chỉ 0x30.
 3 bit thấp để chỉ mã PCD của thứ từ 2 đến 7.
Thanh ghi ngày, tháng, năm tương tự như thanh ghi thứ.
2.3 Cấu trúc bên trong của IC DS1307

2.4 Tổ chức bộ nhớ của DS1307


Bộ nhớ DS1307 có tất cả 64 thanh ghi 8-bit được đánh địa chỉ từ 0 đến 63 hay
từ 00H đến 3FH. Tuy nhiên, thực chất chỉ có 8 thanh ghi đầu là dùng cho chức năng
“đồng hồ”. 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: giây
(SECONDS), phút (MINUETS), giờ (HOURS), thứ (DAY), ngày (DATE), tháng
(MONTH) và năm (YEAR). Các giá trị chứa trong những thanh ghi này chính là giá
trị để ta bắt đầu tính giờ theo thời gian thực. Giả sử ta ghi vào thanh ghi “MINUTES”
giá trị 15, sau 5 phút, thanh ghi này sẽ có giá trị là 20. Thanh ghi thứ 8 (CONTROL) là
thanh ghi điều khiển xung ngõ ra SQW/OUT. Tuy nhiên, do chúng ta khơng dùng chân
SQW/OUT nên có thề bỏ qua thanh ghi thứ 8.
Đ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 nén.
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à 00H. 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 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 thì bộ dao động trong chip bị vơ hiệu hóa, đồng hồ khơng
hoạt động. Vì 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-bits 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) giờ, bit thứ 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 bit6 =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 dùng để chỉ buổi trong ngày, AM hoặc PM. Bit5 =0 là AM và bit5=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.
Thanh ghi ngày (DATE): nằm ở địa chỉ 04H. 4 bit đầu lưu hàng đơn vị của
ngày, bit 4 và bit 5 quy định hàng chục. Bit 6 và bit 7 luôn luôn bằng 0.
Thanh ghi tháng (MONTHS): nằm ở địa chỉ 05H. 4 bit đầu lưu hàng đơn vị
của tháng, bit thứ 4 quy định hàng chục. Các bit còn lại luôn bằng 0.
Thanh ghi năm (YEARS): nằm ở địa chỉ 06H. 4 bit thấp lưu hàng đơn vị và 4
bit cao hàng chục của năm (từ 00 - 99).

2.5 Giao tiếp với DS1307

DS1307 có 7 bit địa chỉ cố định là 1101000 trong chuẩn giao tiếp I2C. Tiếp theo
là bit quy định hướng truyền dữ liệu. Nếu bit=0, thì byte dữ liệu truyền từ vi đều khiển
 DS1307 (GHI). Ngược lại bit=1 thì hướng dữ liệu sẽ là DS1307  Vi điều khiển
(ĐỌC).


Ở chế độ ghi dữ liệu:

-

Vi điều khiển tạo tín hiệu Start lên bus để báo bắt đầu muốn giao tiếp. Để tạo
tín hiệu Start, chân SDA sẽ từ mức 1 về 0 trong khi chân SCL ở mức 1.

-

Vi điều khiển gửi địa chỉ của thiết bị muốn giao tiếp. Ở đây DS1307 là 1101000
+ bit hướng = 0. Do vậy byte được gửi là 11010000.

-

DS1307 tạo tín hiệu ACK bằng cách cho chân SCL một xung clock từ 0 lên 1
trong khi SDA bằng 0.

-

Vi điều khiển gửi địa chỉ của thanh ghi muốn ghi đến.

-


DS 1307 tạo tín hiệu ACK báo đã nhân thành cơng.

-

Tiếp theo vi điều khiển gửi dữ liệu muốn ghi

-

Con trỏ địa chỉ của DS 1307 tự tăng lên đến địa chỉ thanh ghi tiếp theo

-

Vi khiển gửi dữ liệu muốn ghi đến thanh ghi tiếp theo.

-

Vi điều khiển muốn kết thúc qua trình truyền dữ liệu bằng cách gửi tín hiệu
Stop. Để tạo tín hiệu Stop, chân SDA từ mức 0 lên 1 trong khi SCL ở mức 1.
Ở chế độ đọc dữ liệu:


-

Vi điều khiển tạo tín hiệu Start lên bus để báo bắt đầu muốn giao tiếp.

-

Vi điều khiển gửi địa chỉ của thiết bị muốn giao tiếp. Ở đây DS 1307 là
1101000 + bit hướng = 1. Do vậy byte là 11010001.


-

DS 1307 tạo tín hiệu ACK.

-

DS 1307 gửi dữ liệu của thanh ghi đầu tiên.

-

Vi điều khiển gửi tín hiệu ACK báo nhận thành công.

-

DS 1307 gửi dữ liệu của thanh ghi tiếp theo.

-

Vi điều khiển gửi tín hiệu ACK báo nhận thành cơng.

-

Vi điều khiển gửi tín hiệu NACK khi không muốn nhận thêm dữ liệu.

-

Vi điều khiển tạo tín hiệu stop để kết thúc truyền nhận và giải phóng Bus I2C.

2.6 Nguyên lý hoạt động


Khi cho điện áp qua khối nguồn cho vi điều khiển, khi đó chương trình trong vi
điều khiển sẽ làm việc, đồng thời bộ tạo xung dao động tạo xung nhịp với tần số
12MHz cho VĐK hoạt động. Chế độ ghi và nhận dữ liệu của IC thực đua với vi điều
khiển, các điều kiện START và STOP đuợc nhận dạng khi bắt đầu hoặc kết thúc truyền
một chuỗi, lúc này các thanh ghi của IC thời gian thực nhận giá trị thời gian thực (giờ,
phút, giây, thứ, ngày, tháng, năm) và gửi đến vi điều khiển đồng thời lúc này vi điều
khiển sẽ gán một giá trị tuơng đuơng giá trị thời gian thực rồi gửi ra khối hiển thị. Lúc
này IC ghi dịch trong khối điều khiển sẽ gửi tín hiệu đến khối hiển thị.
Các nút ấn trong khối điều khiển có nhiệm vụ điều chỉnh thời gian. Khối Reset
có nhiệm vụ đua hệ thống về trạng thái ban đầu
2.7 Điều kiện của giao thức truyền I2C
Trong giao thức truyền này DS1307 được hiểu như một thiết bị Slave, điều kiện
của giao thức I2C là:


Dữ liệu bắt đầu truyển chỉ khi bus không bận.




Suốt quá trình truyền SDA phải ở trạng thái ổn định bất cứ khi nào SCL ở
mức cao. Thay đổi SDA khi SCL ở mức cao sẽ được hiểu như là 1 tín hiệu
điều khiển. Chi tiết hơn là như sau:



Bus không bận: Cả hai đường SDA và SCL vẫn ổn định ở mức cao.




Bắt đầu chuyển dữ liệu: Sự thay đổi trạng thái của SDA, từ cao xuống thấp,
trong khi SCL ở mức cao được định nghĩa là điều kiện Start.



Kết thúc chuyển dữ liệu: Sự thay đổi trạng thái của SDA, từ thấp lên cao,
trong khi SCL ở mức cao được định nghĩa là điều kiện Stop.



Dữ liệu hợp lệ: Trạng thái của dữ liệu tiêu biểu cho giá trị hợp lệ khi, sau khi
bắt đầu điểu kiện Start, SDA phải ở trạng thái ổn định trong suốt quá trình ở
mức cao của xung clock. SDA chỉ được thay đổi suốt chu kì mức thấp của
xung clock. Có một xung clock trên 1 bit dữ liệu. mỗi lần truyền dữ liệu
được bắt đầu bởi điều kiện Start và kết thúc bởi điều kiện Stop, số byte được
truyền giữa điều kiện Start, Stop là không bị giới hạn, và được quyết định
bởi thiết bị Master (89C51). Cuối mỗi byte có 1 bit Acknowledge (bit thứ
9).



Cơng nhận: Mỗi thiết bị sau khi được định địa chỉ, thì báo cho Master biết
đã nhận đối với mỗi byte. Thiết bị Master phải tạo thêm 1 xung clock phụ
liên kết với bit Acknowledged thiết bị thừa nhận phải kéo đường data xuống
mức thấp (SDA) phải ổn định ở mức thấp suốt chu kì mức cao của xung
clock). Dĩ nhiên thời gian thiết đặt và chờ phải được tính tốn trước. Thiết bị
Master phải tạo 1 tín hiệu kết thúc dữ liệu với Slave, bởi vì nếu khơng tạo ra
bit Acknowledged cuối byte, Master vẫn tạo ra xung clock nhưng khơng có
sự đáp ứng nào của Slave. Trong trường hợp này, thiết bị Slave phải cho

đường data lên mức cao để cho phép master tạo ra điều kiện Stop.


Hình 10: Dữ liệu truyền trn BUS I2C


Dữ liệu truyền từ Master đến Slave: Byte đầu tiên được truyền là địa chỉ của
Slave. Tiếp theo sau là 1 số byte cần truyền. Slave trả về bit thừa nhận sau
mỗi byte nhận được. Dữ liệu được truyền với bit có trọng số lớn nhất (MSB)
đầu tiên.



Dữ liệu truyền từ Slave sang Master: Địa chỉ của Slave được truyền đầu
tiên. Slave trả về bit thừa nhận (ACK). Slave truyền một số byte cần truyền.
Master trả về bit thừa nhận sau tất cả các byte đã nhận được, ngoại trừ byte
cuối cùng. Bit không thừa được gán cho byte cuối cùng. Thiết bị Master tạo
tất cả các xung clock cũng như điều kiện Start, Stop. Sự truyền dữ liệu bắt
đầu với điều kiện Start và kết thúc với điều kiện Stop. Từ khi điều Start bắt
đầu nó cũng bắt đầu q trình mới, truyền dữ liệu.

a) Write mode
Dữ liệu và xung clock được nhận thông qua SDA và SCL. Sau mỗi bit nhận
được có 1 bit thừa nhận được truyền đi. Điều kiện Start, Stop ghi nhận việc bắt đầu
truyền hay nhận dữ liệu. Phần cứng thực hiện việc ghi nhận địa chỉ sau khi địa chỉ của
thiết bị Slave, bit chỉ phương truyền (Nhìn hình 5). Byte chứa địa chỉ Slave là byte đầu
tiên được nhận sau khi Master tạo điều kiện Start. Địa chỉ Slave chứa 7-bit địa chỉ của
DS12C887 là 1101000, theo sau đó là bit chiều (R/W), vì đây là chế độ Write nên bit
này là 0. Sau khi nhận và giải mã địa chỉ Slave, DS1307 xuất ra một bit thừa nhận trên
SDA. Công việc tiếp theo Master chỉ việc truyền địa chỉ Word (đặt con trỏ thanh ghi

cho DS1307, và DS1307 có bit cơng nhận việc truyền này). Master có thể chuyển một


hay nhiều byte dữ liệu ngay sau đó với sự công nhận sau mỗi byte của DS1307. Con
trỏ thanh ghi tự động tăng sau mỗi byte được viết. Master sẽ tạo điều kiện Stop để
ngưng việc ghi dữ liệu.

Hình 2.6- Ghi dữ liệu – Chế độ Slave làm bộ nhận
b) Read mode
Byte đầu tiên được nhận và xử lý như chế độ Slave làm bộ nhận. Mặt dù vậy,
trong chế độ này bit chiều sẽ chỉ rõ chiều được đảo lại. Điều kiện Start và Stop ghi
nhận việc bắt đầu truyền và nhận dữ liệu. Byte chứa địa chỉ Slave là byte đầu tiên được
chấp nhận sau khi bắt đầu điều kiện Start, tương tự như chế độ Write, địa chỉ Slave là
1101000, theo sau là bit chiều (R/W), ứng với chế độ Read nên bit này bằng 1. Sau khi
nhận và giải mã địa chỉ Slave, DS1307 xuất 1 bit thừa nhận (Ack) trên SDA. DS1307
bắt đầu truyền dữ liệu bắt đầu với địa chỉ thanh ghi đã được trỏ bởi con trỏ thanh ghi.
Con trỏ thanh ghi tự động tăng sau mỗi byte được đọc. DS1307 phải nhận 1 bit Ack để
kết thúc việc đọc.


×