Page 1
MỤC LỤC
LỜI MỞ ĐẦU........................................................................................................2
CHƯƠNG 1: TÌM HIỂU VI ĐIỀU KHIỂN 8051..................................................2
1.1. Giới thiệu......................................................................................................2
1.2. Khảo sát vi điều khiển 8051.........................................................................2
1.2.1. Cấu trúc bên trong của vi điều khiển 8051............................................2
1.2.2. Chức năng các chân vi điều khiển 8051................................................2
1.2.3. Tổ chức bộ nhớ......................................................................................2
1.2.4. Hoạt động của bộ định thời (Timer).....................................................2
1.2.5. Hoạt động port nối tiếp..........................................................................2
1.2.6. Tập lệnh của 8051..................................................................................2
CHƯƠNG 2: CÁC LINH KIỆN TRONG MẠCH ĐỒNG HỒ CÓ HẸN GIỜ.....2
2.1. IC thời gian thực DS1307............................................................................2
2.1.1. Chức năng các chân...............................................................................2
2.1.2. Một vài thông số kỹ thuật......................................................................2
2.1.3. Sơ đồ khối của DS1307.........................................................................2
2.1.4. Truyền dữ liệu trên bus 2 dây nối tiếp..................................................2
2.1.5. Hai chế độ hoạt động của DS1307........................................................2
2.2. LCD (Liquid Crystal Display).....................................................................2
2.2.1. Chức năng các chân của LCD..............................................................2
2.2.2. HD44780..............................................................................................2
2.2.3. Mã lệnh của LCD..................................................................................2
CHƯƠNG 3: THIẾT KẾ MẠCH ĐỒNG HỒ CÓ HẸN GIỜ...............................2
3.1. Giới thiệu đề tài............................................................................................2
3.2. Yêu cầu bài toán...........................................................................................2
3.3. Sơ đồ khối....................................................................................................2
3.4. Chức năng các khối......................................................................................2
3.5. Sơ đồ mạch đồng hồ có hẹn giờ...................................................................2
3.5.1. Khối nút nhấn........................................................................................2
3.5.2. Khối thời gian thực................................................................................2
3.5.3. Khối vi điều khiển.................................................................................2
Page 2
3.5.4. Khối chuông báo....................................................................................2
3.5.5. Khối hiển thị..........................................................................................2
3.5.6. Sơ đồ mạch mô phỏng bằng proteus.....................................................2
3.5.7. Sơ đồ mạch in........................................................................................2
3.6. Lưu đồ chương trình....................................................................................2
3.6.1. Lưu đồ chương trình chính....................................................................2
3.6.2. Chương trình con...................................................................................2
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN..............................................................2
TÀI LIỆU THAM KHẢO......................................................................................2
Page 3
DANH M C HÌNHỤ
Hình 1.1: sơ đồ khối 8051......................................................................................2
Hình 1.2: Sơ đồ chân 8051.....................................................................................2
Hình 1.3: Giao tiếp giữa 8051 và EPROM...........................................................2
Hình 1.4: giản đồ thời gian đoc bộ nhớ chương trình ngoài.................................2
Hình 1.5: Giao tiếp giữa 8051 và RAM..................................................................2
Hình 1.6: Giản đồ thời gian của lệnh MOVX.........................................................2
Hình 1.7: Mạch Reset hệ thống..............................................................................2
Hình 2.1: Sơ đồ chân của DS1307.........................................................................2
Hình 2.2: Sơ đồ khối của DS1307..........................................................................2
Hình 2.3: Cấu hình bus 2 dây điển hình................................................................2
Hình 2.4: Truyền dữ liệu trên bus 2 dây................................................................2
Hình 2.5: Chế độ slave nhận..................................................................................2
Hình 2.6: Chế độ slave phát...................................................................................2
Hình 2.7: Sơ đồ chân của LCD..............................................................................2
Hình 2.8: Sơ đồ khối của HD44780.......................................................................2
Hình 3.1: Sơ đồ khối...............................................................................................2
Hình 3.2: Khối nút nhấn.........................................................................................2
Hình 3.3: Khối thời gian thực................................................................................2
Hình 3.4: Khối vi điều khiển..................................................................................2
Hình 3.5: Khối chuông báo....................................................................................2
Hình 3.6: Khối hiển thị...........................................................................................2
Hình 3.7: Sơ đồ mạch mô phỏng bằng proteus......................................................2
Hình 3.8: Sơ đồ mạch in.........................................................................................2
Hình 3.9: Mạch hoàn chỉnh đã nạp chương trình...................................................2
Page 4
DANH MỤC BẢNG
Bảng 1.1: Chức năng của các chân trên port 3......................................................2
Bảng 1.2: thanh ghi trạng thái trương trình PSW..................................................2
Bảng 1.3: Trạng thái các thanh ghi sau khi reset..................................................2
Bảng 1.4: Thanh ghi chức năng đặc biệt dùng timer.............................................2
Bảng 1.5: Tóm tắt thanh ghi TMOD.......................................................................2
Bảng 1.6: Chế độ chọn mode cho Timer................................................................2
Bảng 1.7: Tóm tắt thanh ghi TCON.......................................................................2
Bảng 1.8: Tóm tắt thanh ghi chế độ port nối tiếp SCON.......................................2
Bảng 1.9: Các chế độ port nối tiếp.........................................................................2
Bảng 2.1: Mô tả thanh ghi thời gian thực..............................................................2
Bảng 2.2: Địa chỉ bit của các thành phần trong DS1307......................................2
Bảng 2.3: Thanh ghi điều khiển hoạt động chân SQW/OUT.................................2
Bảng 2.4: Chế độ chọn tần số................................................................................2
Bảng 2.5: Chức năng các chân của LCD..............................................................2
Bảng 2.6: Chế độ chọn RS, RW..............................................................................2
Bảng 2.7: Mã lệnh của LCD..................................................................................2
Page 5
LỜI MỞ ĐẦU
Ngày nay cùng với sự tiến bộ của khoa học kỹ thuật công nghệ điện tử đã đang
và sẽ phát triển ngày càng rộng rãi đặc biệt là trong kỹ thuật số. Hầu hết các thiết bị
kỹ thuật từ phức tạp cho đến đơn giản như thiết bị điều khiển tự động, thiết bị văn
phòng cho đến các thiết bị gia đình đều dùng các bộ vi điều khiển. Các ứng dụng của
mạch số như đồng hồ số, mạch đếm sản phẩm, mạch đo nhiệt độ... Trong các trường
học công sở, cơ quan xí nghiệp... Đồng hồ số được dùng để xem giờ và báo giờ. Mục
đích chính của đồ án này là “Tìm hiểu 8051 và xây dựng đồng hồ thời gian thực
trên cơ sở DS1307 và ứng dụng điều khiển”, vẫn lưu được thời gian khi mất nguồn
cung cấp và có chế độ báo giờ hẹn.
Mục tiêu và nội dung của đồ án.
Mục tiêu: Tìm hiểu cấu tạo và chức năng của vi điều kiển 8051 và các linh kiện
liên quan. Xây dựng và thiết kế một mạch đồng hồ số có chức năng xem giờ và báo
giờ.
Nội dung của đồ án bao gồm 3 phần chính:
Chương 1: Tìm hiểu vi điều khiển 8051
Chương 2 : Các linh kiện trong mạch đồng hồ có hẹn giờ
Chương 3: Thiết kế mạch đồng hồ có hẹn giờ
Page 6
CHƯƠNG 1
TÌM HIỂU VI ĐIỀU KHIỂN 8051
1.1. Giới thiệu
Bộ vi điều khiển viết tắt là Micro-controller, là mạch tích hợp trên một chip có
thể lập trình được, dùng để điều khiển hoạt động của một hệ thống. Theo các tập lệnh
của người lập trình, bộ vi điều khiển tiến hành đọc, lưu trữ thông tin, xử lý thông tin,
đo thời gian và tiến hành đóng mở một cấu tạo nào đó.
Trong các thiết bị điện và điện tử dân dụng, các bộ vi điều khiển, điều khiển
hoạt động của tivi, máy giặt, đầu đọc laser, điện thoại, lò vi ba… Trong hệ thống sản
xuất tự động, bộ vi điều khiển được sử dụng trong robot, dây truyền tự động. Các hệ
thống càng “thông minh” thì vai trò của hệ vi điều khiển càng quan trọng.
1.2. Khảo sát vi điều khiển 8051
Vi điều khiển 8051 thuộc họ MCS51 có đặc điểm sau:
- 4k byte ROM.
- 128 byte RAM.
- 4 port I/O 8 bit.
- 2 bộ định thời 16 bit.
- Giao tiếp nối tiếp.
- 64K byte không gian bộ nhớ chương trình mở rộng.
- 64K byte không gian bộ nhớ dữ liệu mở rộng.
- Một bộ xử lý luận lý (thao tác trên các bit đơn).
- 210 bit có khả năng định vị riêng biệt trong RAM nội.
- 5 nguồn ngắt với 2 mức ưu tiên.
1.2.1. Cấu trúc bên trong của vi điều khiển 8051
Phần chính của vi điều khiển 8051 là bộ xử lý trung tâm (CPU: central
processing unit) bao gồm:
- Thanh ghi tích lũy A.
- Thanh ghi tích lũy phụ B, dùng cho phép nhân chia.
- Đơn vị logic học (ALU: Arithmetic Logical Unit).
- Từ trạng thái trương trình (PSW: Program Status Word).
- Bốn băng thanh ghi.
- Con trỏ ngăn xếp.
Page 7
- Ngoài ra còn có bộ nhớ chương trình, bộ giải mã lệnh, bộ điều khiển
thời gian logic.
Đơn vị xử lí trung tâm nhận trực tiếp xung từ bộ giao động, ngoài ra còn có khả
năng đưa tín hiệu giữ nhịp từ bên ngoài.
Chương trình đang chạy có thể dừng lại nhờ một khối điều khiển ngắt ở bên
trong. Các nguồn ngắt có thể là: các biến cố ở bên ngoài, sự tràn bộ đếm định thời
hoặc cũng có thể là giao diện nối tiếp.
Hai bộ định thời 16 bit hoạt động như một bộ đếm.
Các cổng (port0, port1, port2, port 3) sử dụng vào mục đích điều khiển.
Ở cổng 3 có thêm các đường dẫn điều khiểu dùng để trao đổi với một bộ nhớ bên
ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn bên.
Hình 1.1: sơ đồ khối 8051
Giao diện nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ, làm
việc độc lập với nhau. Trong vi điều khiển 8051 có hai thành phần quan trọng khác đó
là bộ nhớ ngoài và các thanh ghi.
Page 8
Bộ nhớ bao gồm: có bộ nhớ RAM và bộ nhớ ROM dùng để lưu trữ dữ liệu và
mã lệnh. Các thanh ghi sử dụng để lưu thông tin trong quá trình xử lý. Khi CPU làm
việc nó làm thay đổi nội dung của các thanh ghi.
1.2.2. Chức năng các chân vi điều khiển 8051
a. Port 0
Port 0 gồm các chân từ 32 ¸ 39. Port 0 có chức năng I/O trong các thiết kế cỡ
nhỏ (không dùng bộ nhớ mở rộng). Đối với các thiết kế lớn với bộ nhớ rộng, nó được
hợp kênh giữa bus địa chỉ và bus dữ liệu.
b. Port 1
Port 1 là một port I/O trên các chân 1-8. Các chân được ký hiệu P1.0, P1.1,
P1.2…Có thể dùng cho các thiết bị ngoài nếu cần. Port 1 không có chức năng khác, vì
vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bị ngoài.
c. Port 2
port 2 là một port công dụng kép trên các chân 21-28 được 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 kế dùng bộ nhớ mở rộng.
Hình 1.2: Sơ đồ chân 8051
d. Port 3
port 3 là một port công dụng kép trên các chân 10-17. Các chân của port này có
nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt của
8051 như bảng sau.
bit Tên Địa chỉ bít Chức năng chuyển đổi
Page 9
P3.0 RXD B0H Dữ liệu nhận cho port nối tiếp
P3.1 TXD B1H Dữ liệu phát cho port nối tiếp
P3.2 INT0\ B2H Ngắt 0 bên ngoài
P3.3 INT1\ B3H Ngắt 1 bên ngoài
P3.4 T0 B4H Ngõ vào của timer/counter 0
P3.5 T1 B5H Ngõ vào của timer/counter 1
P3.6 WR\ B6H Xung ghi bộ nhớ dữ liệu ngoài
P3.7 RD\ B7H Xung đọc bộ nhớ dữ liệu ngoài
Bảng 1.1: Chức năng của các chân trên port 3
e. PSEN (Program Store Enable): 8051 có 4 tín hiệu điều khiển
PSEN là tín hiệu ra trên chân 29. Nó là tín hiệu điều khiển để cho phép bộ nhớ
chương trình mở rộng và thường được nối đến chân OE (Output Enble) của một
EPROM để cho phép đọc các bytes mã lệnh.
PSEN sẽ ở mức thấp trong thời gian lấy lệnh. Các mã nhị phân của trương trình
được đọc từ EPROM qua bus và được chốt vào thanh ghi lệnh của 8051 để giải mã
lệnh. Khi thi hành chương trình ROM nội (8051) PSEN sẽ ở mức thụ động (mức cao).
f. ALE (Address Latch Enable)
Tín hiệu ra ALE trên chân 30 tương hợp với các thiết bị làm việc với các xử lý
8858, 8088, 8086, 8051 dùng ALE một cách tương tự cho làm việc giải các kênh các
bus địa chỉ và dữ liệu khi port 0 được dùng trong chế độ chuyển đổi của nó: vừa là bus
dữ liệu vừa là bus thấp của địa chỉ, ALE là tín hiệu để chốt địa chỉ vào một thanh ghi
bên ngoài trong nửa đầu của chu kỳ bộ nhớ. Sau đó, các đường port 0 dùng để xuất
hoặc nhập dữ liệu trong nửa sau chu kỳ của bộ nhớ.
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có
thể dùng làm nguồn xung nhịp cho các hệ thống. Nếu xung trên 8051 là 12MHz thì
ALE có tần số 2MHz. Chỉ ngoại trừ khi thi hành lệnh MOVX, một xung ALE sẽ bị
mất. Chân này cũng được làm ngõ vào cho lập trình cho EPROM trong 8051.
g. EA (External Access)
Tín hiệu vào EA trên chân 31 thường được mắc lên mức cao (+5V) hoặc mức
thấp (GND). Nếu ở mức cao, 8051 thi hành chương trình từ ROM nội trong khoảng
địa chỉ thấp (4K). Nếu ở mức thấp, chương trình chỉ được thi hành từ bộ nhớ mở rộng.
Nếu EA được nối mức thấp bộ nhớ bên trong chương trình 8051 sẽ bị cấm và chương
Page 10
trình thi hành từ EPROM mở rộng. Người ta còn dùng chân EA làm chân cấp điện áp
21V khi lập trình cho EPROM trong 8051.
h. 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 8051 được tải những giá trị
thích hợp để khởi động hệ thống.
i. Các ngõ vào bộ dao động trên chip
Như đã thấy trong các hình trên, 8051 có một bộ dao động trên chip. Nó thường
được nối với thạch anh giữa hai chân 18 và 19. Tần số thạch anh thông thường là
12MHz.
j. Các chân nguồn
8051 vận hành với nguồn đơn +5V, Vcc được nối vào chân 40 và GND được
nối vào chân 20.
1.2.3. Tổ chức bộ nhớ
8051 có bộ nhớ theo cấu trúc Harvard: có vùng nhớ riêng biệt cho chương trình
và dữ liệu, cả chương trình và dữ liệu có thể ở bên trong 8051. Dù vậy chúng có thể
được mở rộng bằng các thành phần ngoài lên đến tối đa 64K byte bộ nhớ chương trình
và 64K byte bộ nhớ dữ liệu.
Bộ nhớ bên trong bao gồm ROM và RAM trên chip, RAM trên chip bao gồm
nhiều 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.
Hai đặc tính cần lưu ý là:
- Các thanh ghi và các Port xuất nhập đã được xếp trong bộ nhớ và có thể được
truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác.
- Ngăn xếp bên trong RAM nội nhỏ hơn so với Ram ngoài như trong các bộ vi xử
lý khác.
Chi tiết về bộ nhớ Ram trên chip:
Ram bên trong 8051 được phân chia giữa các bank thanh ghi (00H-1FH), Ram
địa chỉ hóa từng bit (20H-2FH), Ram đa dụng (30H-7FH) và các thanh ghi chức năng
đặc biệt (80H-FFH).
1.2.3.1. Ram đa dụng
Page 11
Mọi địa chỉ trong vùng RAM đa dụng đều có thể được truy xuất tự do dùng
cách đánh địa chỉ trực tiếp hoặc gián tiếp. Ví dụ, để đọc nội dung ở địa chỉ 5FH của
RAM nội vào thanh ghi tích lũy lệnh sau sẽ được dùng:
MOV A, #5FH
Lệnh này di chuyển một bit dữ liệu dùng cách đánh địa chỉ trực tiếp để xác định
“địa chỉ nguồn” (5FH). Đích nhận dữ liệu được ngầm xác định trong mã lệnh là thanh
ghi tích lũy A.
RAM bên trong cũng có thể được truy xuất dùng cách đánh địa chỉ gián tiếp
qua R0 hay R1. Ví dụ, sau khi thi hành cùng nhiệm vụ như lệnh đơn ở trên:
MOV R0, #5FH
MOV A, @R0
Lệnh đầu dùng địa chỉ tức thời để di chuyển giá trị 5FH vào thanh ghi R0 và
lệnh thứ hai dùng địa gián tiếp để di chuyển dữ liệu “được trỏ bởi R0” vào thanh ghi
tích lũy.
1.2.3.2. RAM địa chỉ hóa từng bit
8051 chứa 210 bit được địa chỉ hóa, trong đó 128 bit là ở các địa chỉ byte 20H
đến 2FH, và phần còn lại trong các thanh ghi chức năng đặc biệt.
Ý tưởng truy xuất từng bit riêng rẽ bằng mềm là một đặc tính tiện lợi của vi
điều khiển nói chung. Các bit có thể được đặt, xóa, AND, OR …với một lệnh đơn. Đa
số các chip xử lí đòi hỏi một chuỗi lệnh đọc–sửa–ghi để đạt được hiệu quả tương tự.
Hơn nữa, các port I/0 cũng được địa chỉ từng bit làm đơn giản phần mềm xuất nhập
từng bit.
Có 128 bit được địa chỉ hóa đa dụng ở các byte 20H đến 2FH. Các địa chỉ này
được truy xuất như các byte hoặc các bit phụ thuộc vào lệnh được dùng. ví dụ, để đặt
bit 67H, ta dùng lệnh sau:
SETB 67H
Chú ý rằng “địa chỉ bit 67H” là bit có trọng số lớn nhất (MSB) ở “địa chỉ byte
2CH” lệnh trên sẽ không tác động đến các bit khác của địa chỉ này.
1.2.3.3. Các bank thanh ghi
32 byte thấp nhất của bộ nhớ nội là dành cho các bank thanh ghi. Bộ lệnh của
8051 hỗ trợ 8 thanh ghi (R0 đến R7) và theo mặc định (sau khi Reset hệ thống) các
Page 12
thanh ghi này ở các địa chỉ 00H-07H. Lệnh sau đây sẽ đọc nội dung ở địa chỉ 05H vào
thanh ghi tích lũy.
MOV A, R5
Đây là lệnh một byte dùng địa chỉ thanh ghi. Tất nhiên, thao tác tương tự có thể
được thi hành bằng lệnh 2 byte dùng địa chỉ trực tiếp nằm trong byte thứ hai:
MOV A, 05H
Các lệnh dùng các thanh ghi R0 đến R7 thì sẽ ngắn hơn và nhanh hơn các lệnh
tương ứng nhưng dùng địa chỉ trực tiếp. Các giá trị dữ liệu được dùng thường xuyên
nên dùng một trong các thanh ghi này.
Bank thanh ghi tích cực có thể chuyển đổi bằng cách thay đổi các bit chọn bank
thanh ghi trong từ trạng thái chương trình (PSW). Giả sử rằng bank thanh ghi 3 được
tích cực, lệnh sau sẽ ghi nội dung của thanh ghi tích lũy vào địa chỉ 18H:
MOV R0, A
Ý tưởng dùng “các bank thanh ghi” cho phép “chuyển hướng” chương trình
nhanh và hiệu quả (từng phần riêng rẽ của phần mềm sẽ có một bộ thanh ghi riêng
không phụ thuộc vào các phần khác).
1.2.3.4. Các thanh ghi chức năng đặc biệt
Các thanh ghi trong 8051 đượ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 trực tiếp, sẽ không có lợi khi
đặt chúng vào trong RAM trên chip). Đó là lý do để 8051 có nhiều thanh ghi. Cũng
như R0 đến R7, có 21 thanh ghi chức năng đặc biệt (SFR: Special Funtion Register) ở
vùng trên của RAM nội, từ địa chỉ 80H đến FFH. Chú ý rằng hầu hết 128 địa chỉ từ
80H đến FFH không được định nghĩa. Chỉ có 21 địa chỉ SFR là được định nghĩa.
Ngoại trừ tích lũy (A) có thể được truy xuất ngầm như đã nói, đa số các SFR
được truy xuất dùng địa chỉ trực tiếp. Chú ý rằng một vài SFR có thể được địa chỉ hóa
bit hoặc byte. Người thiết kế phải thận trọng khi truy xuất bit và byte. Ví dụ lệnh sau:
SETB 0E0H
Sẽ set bit 0 trong thanh ghi tích lũy, các bit khác không thay đổi. Ta thấy rằng
E0H đồng thời là địa chỉ byte của thanh ghi tích lũy và là địa chỉ bit có trọng số nhỏ
nhất trong thanh ghi tích lũy. Vì lệnh SETB chỉ tác động trên bit, nên chỉ có địa chỉ bit
là có hiệu quả.
a. Các thanh ghi port xuất nhập
Page 13
Các port của 8051 bao gồm port 0 ở địa chỉ 80H, port 1 ở địa chỉ 90H, port 2 ở
địa chỉ A0H và port 3 ở địa chỉ B0H. Tất cả các port đều được địa chỉ hóa từng bit.
Điều đó cung cấp một khả năng giao tiếp thuận lợi.
b. Các thanh ghi timer
8051 chứa 2 bộ định thời đếm 16 bit được dùng trong việc định thời hoặc đếm
sự kiện. Timer 0 ở địa chỉ 8AH (TL0: byte thấp) và 8CH (TH0: byte cao). Timer 1 ở
địa chỉ 8BH (TL1: byte thấp) và 8DH (TH1: byte cao). Việc vận hành timer được set
bởi thanh ghi Timer Mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển timer
(TCON) ở địa chỉ 88H. Chỉ có TCON được địa chỉ hóa từng bit.
c. Các thanh ghi nối tiếp
8051 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin với các
thiết bị nối tiếp như máy tính, modem hoặc cho việc giao tiếp với các IC khác có giao
tiếp nối tiếp (có bộ chuyển đổi A/D, các thanh ghi dịch…). Một thanh ghi gọi là bộ
đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ được giữ cả hai dữ liệu truyền và nhận.
Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF. Các mode vận
hành khác nhau được lập trình qua thanh ghi điều khiển port nối tiếp (SCON được địa
chỉ hóa từng bit) ở địa chỉ 98H.
d. Thanh ghi ngắt
Thanh ghi IE (Interrupt Enable: Cho phép ngắt) có địa chỉ byte A8H và địa chỉ
bit A8H – AFH có công dụng cho phép hoặc không cho phép các ngắt hoạt động (có
thể từng ngắt riêng rẽ hoặc tất cả các ngắt).
Thanh ghi IP (Interrup Priority: Ưu tiên ngắt) có địa chỉ byte B8H và địa chỉ bit B8H –
BCH có công dụng thiết lập mức ưu tiên cho các ngắt (ưu tiên thấp hoặc ưu tiên cao).
e. Thanh ghi diều khiển nguồn
Thanh ghi PCON (Power Control: Điều khiển nguồn) không có bit định vị. Nó
ở địa chỉ 87H chứa nhiều bit điều khiển. Thanh ghi PCON được tóm tắt như sau:
- Bit 7 (SMOD) cho phép tăng gấp đôi tốc độ truyền dữ liệu nối tiếp (tốc độ
baud) khi SMOD = 1.
- Bit 6, 5, 4 không có địa chỉ.
- Bit 3, 2 (GF1, GF0) cho phép người lập trình dùng với mục đích riêng.
- Bit 1 (PD) dùng để quy định chế độ nguồn giảm.
- Bit 0 (IDL) dùng để quy định chế độ nghỉ.
Page 14
Các bit điều khiển Power Down và Idle có tác dụng chính trong tất cả các IC họ
MCS – 51 nhưng chỉ được thi hành trong sự biên dịch của CMOD.
f.Thanh ghi A
Thanh ghi A là thanh ghi tích lũy có công dụng chứa dữ liệu của các phép toán
mà vi điều khiển xử lý. Ví dụ lệnh MUL AB sẽ nhân những giá trị không dấu 8 bit có
trong hai thanh ghi A và B, rồi trả về kết quả 16 bit trong A (byte thấp) và B (byte
cao). Lệnh DIV AB sẽ lấy A chia B, kết quả số nguyên đặt vào A, số dư đặt vào B.
Thanh ghi A có địa chỉ byte là E0H và địa chỉ bit từ E0H – E7H.
g. Thanh ghi B
Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi A cho các phép toán
nhân chia.
Thanh ghi B có thể được dùng như một thanh ghi đệm trung gian đa mục đích.
Nó là những bit định vị thông qua những địa chỉ từ F0H – F7H.
h. Thanh ghi SP
Con trỏ ngăn xếp (SP: Stack Pointer) là một thanh ghi 8 bit ở địa chỉ byte là
81H, dùng để lưu trữ tạm thời các dữ liệu. Đây là thanh ghi không định địa chỉ bit.
Thanh ghi này chứa địa chỉ của byte dữ liệu hiện hành trên đỉnh ngăn xếp. Các lệnh
trên ngăn xếp bao gồm lệnh cất dữ liệu vào ngăn xếp (PUSH) và lệnh lấy dữ liệu ra
khỏi ngăn xếp (POP). Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ
liệu và lệnh lấy ra khỏi ngăn xếp sẽ làm giảm SP. Đối với chip 8051 thì vùng nhớ
được dùng để làm ngăn xếp được lưu giữ trong RAM nội.
Để sử dụng ngăn xếp thì ta phải khởi động thanh ghi SP (nghĩa là nạp giá trị
cho thanh ghi SP) vùng nhớ của ngăn xếp có địa chỉ bắt đầu là (SP) +1 và địa chỉ
kết thúc là 7FH.
Sau khi reset IC, SP sẽ mang giá trị mặc định là 07H và dữ liệu đầu tiên sẽ được
cất vào ô nhớ ngăn xếp có địa chỉ 08H. Nếu phần mềm ứng dụng không khởi động SP
một giá trị mới thì dãy thanh ghi 1, có thể cả 2 và 3 sẽ không dùng được vì vùng RAM
này đã được dùng làm ngăn xếp. Ngăn xếp được truy xuất trực tiếp bằng các lệnh
PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu, hoặc truy xuất ngầm bằng lệnh
gọi chương trình con (ACALL, LCALL) và các lệnh trở về (RET, RETI) để lưu trữ giá
trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết
thúc chương trình con.
Page 15
i. Thanh ghi DPTR
Con trỏ dữ liệu (DPTR: Data Pointer Register) là thanh ghi 16 bit chứa địa chỉ
của ô nhớ cần truy xuất thuộc ROM trong hoặc ngoài và RAM ngoài.
Thanh ghi DPTR có địa chỉ byte là 82H (DPL: byte thấp) và 83H (DPH: byte
cao). Thanh ghi này không định địa chỉ bit.
j.Thanh ghi trạng thái trương trình PSW (Program Status Word)
Bit Ký hiệu Địa chỉ Mô tả bit
PSW.7 CY D7H Cờ nhớ
PSW.6 AC D6H Cờ nhớ phụ
PSW.5 F0 D5H Cờ 0
PSW.4 RS1 D4H Chọn dãy thanh ghi (bit 1)
PSW.3 RS0 D3H Chọn dãy thanh ghi (bit 0):
00 = dãy 0: địa chỉ từ 00H đến 07H
01 = dãy 1: địa chỉ từ 08H đến 0FH
10 = dãy 2: địa chỉ từ 10H đến 17H
11 = dãy 2: địa chỉ từ 18H đến 1FH
PSW.2 OV D2H Cờ tràn
PSW.1 - D1H Dự trữ
PSW.0 P D0H Cờ kiểm tra chẵn lẻ
Bảng 1.2: thanh ghi trạng thái trương trình PSW
- Cờ nhớ (CY): bit địa chỉ là D7H, cờ nhớ được set lên 1 nếu có nhớ ở bit thứ 7
trong phép toán cộng hay có mượn ở bit thứ 7 trong phép toán trừ.
- Cờ nhớ phụ: Khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kết quả của
4 bit thấp trong khoảng 0AH đến 0FH. Nếu các giá trị cộng được là số BCD, thì sau
lệnh cộng cần có DA A (hiệu chỉnh thập phân thanh ghi tích lũy) để mang kết quả lớn
hơn 9 trở về tâm từ 0¸9.
- Cờ 0 (F0): là một bit cờ đa dụng dành các ứng dụng của người dùng.
- Các bit chọn bank thanh ghi (RSO và RS1): xác định bank thanh ghi được tích
cực. Chúng được xóa sau khi reset hệ thống và được thay đổi bằng phần mềm nếu cần.
Page 16
Ví dụ, ba lệnh sau cho phép bank thanh ghi 3 và di chuyển nội dung của thanh ghi R7
đến thanh ghi tích lũy A:
SETB RS1
SETB RS0
MOV A, R7
- Cờ Tràn: Cờ tràn (OV) được set một lệnh cộng hoặc trừ nếu có một phép toán
bị tràn. Khi các số có dấu được cộng hoặc trừ với nhau, phần mềm có thể kiểm tra bit
này để xác định xem kết quả của nó có nằm trong tầm xác định không. Khi các số
không dấu được cộng, bit OV có thể được bỏ qua. Các kết quả lớn hơn +127 hoặc nhỏ
hơn –128 sẽ set bit OV.
1.2.3.5. Bộ nhớ ngoài
Khi dùng bộ nhớ ngoài, port 0 không còn là một port I/O thuần túy nữa. Nó
được hợp kênh giữa bus địa chỉ (A0-A7) và bus dữ liệu (D0-D7) với tín hiệu ALE để
chốt byte thấp của địa chỉ khi bắt đầu mỗi chu kỳ bộ nhớ. Port 2 thông thường được
dùng cho byte cao của bus địa chỉ.
Trong nửa đầu của mỗi chu kỳ bộ nhớ, byte thấp của địa chỉ được cấp trong
port 0 và được chốt bằng xung ALE. Một IC chốt 74HC373 (hoặc tương đương) sẽ giữ
byte địa chỉ thấp trong phần còn lại của chu kỳ bộ nhớ. Trong nửa sau của chu kỳ bộ
nhớ port 0 được dùng như bus dữ liệu và được đọc hoặc ghi tùy theo lệnh.
a. Truy xuất bộ nhớ chương trình ngoài
Bộ nhớ chương trình ngoài là một IC ROM được phép bởi tín hiệu PSEN. Hình
1.3 mô tả cách nối một EPROM vào 8051:
Hình 1.3: Giao tiếp giữa 8051 và EPROM
Page 17
Hình 1.4: giản đồ thời gian đoc bộ nhớ chương trình ngoài
Một chu kỳ máy của 8051 có 12 chu kỳ xung nhịp. Nếu bộ dao động trên chip
được dùng bởi một thạch anh 12MHz thì chu kỳ máy kéo dài 1ms. Trong một chu kỳ
máy sẽ có 2 xung ALE và 2 byte được đọc từ bộ nhớ chương trình (nếu lệnh hiện hành
là một byte thì byte thứ hai sẽ được loại bỏ). Giản đồ thời gian của một lần lấy lệnh
được vẽ ở hình 1.4.
b. Truy xuất bộ nhớ dữ liệu ngoài
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được cho phép ghi/đọc bằng các tín
hệu WR và RD (các chân P3.6 và P3.7 thay đổi chức năng). Chỉ có một cách truy xuất
bộ nhớ dữ liệu ngoài là với lệnh MOVX dùng con trỏ dữ liệu (DPTR) 16 bit hoặc R0
và R1 xem như thanh ghi địa chỉ. Kết nối bus địa chỉ và bus dữ liệu giữa RAM và
8051cũng giống EPROM và do đó cũng có thể lên đến 64 byte bộ nhớ RAM. Ngoài ra,
chân RD của 8051 được nối tới chân cho phép xuất (OE) của RAM và chân WR được
nối tới chân ghi (WR) của RAM.
Giản đồ thời gian cho lệnh đọc bộ nhớ dữ liệu ngoài được vẽ trên hình 1.5 đối
với lệnh MOVX A, @DPTR:
Page 18
Hình 1.5: Giao tiếp giữa 8051 và RAM
Hình 1.6: Giản đồ thời gian của lệnh MOVX
Giản đồ thời gian cho lệnh ghi (MOV X @DPTR, A) cũng tương tự chỉ khác
đường WR sẽ thay vào đường RD và dữ liệu được xuất ra trên port 0 (RD vẫn giữ mức
cao) ở hình1.6.
1.2.3.6. Lệnh reset
8051 được reset bằng cách giữ chân RST ở mức cao ít nhất trong 2 chu kỳ máy
và trả nó về múc thấp. RST có thể được kích khi cấp điện dùng một mạch R-C.
Trạng thái của tất cả các thanh ghi của 8051 sau khi reset hệ thống được tóm tắt
trong bảng 1.4:
Page 19
Hình 1.7: Mạch Reset hệ thống
Thanh ghi Nội dung
Đếm chương trình
Tích lũy
B
PSW
SP
DPTR
Port 0-3
IP
IE
Các thanh ghi định thời
SCON
SBUF
PCON(HMOS)
PCON(CMOS)
0000H
00H
00H
00H
07H
0000H
FFH
XXX00000B
0XX00000B
00H
00H
00H
0XXXXXXB
0XXX0000B
Bảng 1.3: Trạng thái các thanh ghi sau khi reset
Quan trọng nhất trong các thanh ghi trên là thanh ghi đếm chương trình, nó
được đặt lại 0000H. Khi RST trở lại mức thấp, việc thi hành chương trình luôn bắt đầu
ở địa chỉ đầu tiên trong bộ nhớ trong chương trình: địa chỉ 0000H. Nội dung của RAM
trên chip không bị thay đổi bởi lệnh reset.
1.2.4. Hoạt động của bộ định thời (Timer)
1.2.4.1. Giới thiệu
Một định nghĩa đơn giản của timer là một chuỗi các flip-flop chia đôi tần số
nối tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp. Ngõ ra của tần số
Page 20
cuối làm nguồn xung nhịp cho flip-flop báo tràn của timer (flip-flop cờ). Giá trị nhị
phân trong các flip-flop của timer có thể xem như số đếm số xung nhịp (hoặc các sự
kiện) từ khi khởi động timer. Ví dụ timer 16 bit sẽ đếm từ 0000H đến FFFFH. Cờ báo
tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H. 8051 có 2 timer 16 bit, mỗi timer
có bốn cách làm việc. Người sử dụng các timer để: Định khoảng thời gian, đếm sự
kiện hoặc tạo tốc độ baud cho port nối tiếp trong 8051.
Trong các ứng dụng định khoảng thời gian, người lập trình timer ở một khoảng
đều đặn và đặt cờ tràn timer. Cờ được dùng để đồng bộ hóa chương trình để thực hiện
một tác động kiểm tra trạng thái của các cửa ngõ vào hoặc các sự kiện ra các ngõ ra.
Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của timer để đo thời
gian trôi qua giữa hai sự kiện (ví dụ: đo tốc độ xung).
Đếm sự kiện dùng xác định số lần xẩy ra của một sự kiện. Một “sự kiện” là bất
cứ tác động ngoài nào có thể cung cấp một chuyển trạng thái trên một chân của 8051.
Các timer cũng có thể cung cấp xung nhịp tốc độ baud cho port nối tiếp trong 8051.
Truy xuất timer của 8051 dùng 6 thanh ghi chức năng đặc biệt cho trong bảng
sau:
Page 21
SFR Mục đích Địa chỉ Địa chỉ hóa từng bit
TCON
TMOD
TL0
TL1
TH0
TH1
Điều khiển timer
Chế độ timer
Byte thấp của timer 0
Byte thấp của timer 1
Byte cao của timer 0
Byte cao của timer 1
88H
89H
8AH
8BH
8CH
8DH
Có
Không
Không
Không
Không
không
Bảng 1.4: Thanh ghi chức năng đặc biệt dùng timer
1.2.4.2. Thanh ghi chế độ timer (TMOD)
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặc chế độ làm việc cho timer 0
và timer 1.
bit Tên Timer Mô tả
7 GATE 1 khi GATE=1, timer chỉ làm việc khi INT1=1
6 C/T 1 Bit cho đếm sự kiện hay ghi giờ
C/T=1: Đếm sự kiện
C/T=0: Ghi giờ đều đặn
5 M1 1 Bit chọn mode của Timer 1
4 M0 1 Bit chọn mode của Timer 1
3 GATE 0 Bit cổng của Timer 0
2 C/T 0 Bit chọn Counter/Timer của Timer 0
1 M1 0 Bit chọn mode của Timer 0
0 M0 0 Bit chọn mode của Timer 0
Bảng 1.5: Tóm tắt thanh ghi TMOD
Hai bit M0 và M1 của TMOD để chọn mode cho Timer 0 hoặc Timer 1.
M0 M1 MODE Mô tả
0 0 0 Mode Timer 13 bit (mode 8048)
0 1 1 Mode Timer 16 bit
1 0 2 Mode tự động nạp 8 bit
1 1 3 Mode Timer tách ra:
Timer 0: TL0 là Timer 8 bit được điều khiển bởi
các bit của Timer 0. TH0 tương tự nhưng được
Page 22
điều khiển bởi các bit của mode Timer 1.
Timer 1: Được ngừng lại
Bảng 1.6: Chế độ chọn mode cho Timer
TMOD không có bit định vị, nó thường được 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 sự truy xuất các thanh ghi chức năng đặc biệt của Timer
khác.
1.2.4.3. 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 cho timer 0 và
timer 1.
Bit Ký hiệu địa chỉ bit Mô tả
TCON.7 TF1 8FH Cờ tràn Timer 1 được set bởi phần cứng ở
sự tràn, được xoá bởi phần mềm hoặc bởi
phần cứng khi các vectơ xử lý đến thủ tục
phục vụ ngắt ISR
TCON.6 TR1 8EH Bit điều khiển chạy Timer 1 được set hoặc
xoá bởi phần mềm để chạy hoặc ngưng
chạy timer
TCON.5 TF0 8DH Cờ tràn Timer 0 (hoạt động tương tự TF1)
TCON.4 TR0 8CH Bit điều khiển chạy Timer 0 (giống TR1)
TCON.3 IE1 8BH Cờ kiểu ngắt 1 ngoài. Khi cạnh xuống xuất
hiện trên INT1 thì IE1 được xoá bởi phần
mềm hoặc phần cứng khi CPU định hướng
đến thủ tục phục vụ ngắt ngoài.
TCON.2 IT1 8AH Cờ kiểu nhắt 1 ngoài được set hoặc xoá
bằng phần mềm bởi cạnh kích hoạt bởi sự
ngắt ngoài.
TCON.1 IE0 89H Cờ cạnh ngắt 0 ngoài
TCON.0 IT0 88H cờ kiểu ngắt 0 ngoài
Bảng 1.7: Tóm tắt thanh ghi TCON
1.2.5. Hoạt động port nối tiếp
1.2.5.1. Giới thiệu
Page 23
8051 có một port nối tiếp trong chip có thể hoạt động ở nhiều chế độ khác trên
một dãy tần số rộng. Chức năng chủ yếu của một port 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.
Truy xuất phần cứng đến port nối tiếp qua các chân TXD và RXD. Các chân
này có các chức năng khác với hai bit của port 3. P3.1 ở chân 11 (TXD) và P3.0 ở
chân 10 (RXD). Port nối tiếp cho hoạt động song song (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 cho phép phần mềm truy xuất đến port nối
tiếp là : SBUF và SCON. Bộ đếm port nối tiếp (SBUF) ở địa chỉ 99H thật sự là hai bộ
đếm. Viết vào SBUF để truy xuất dữ liệu thu được. Đây là hai thanh ghi riêng biệt
thanh ghi chỉ ghi để phát và thanh ghi để thu.
Thanh ghi điều khiển port nối tiếp (SCON) ở địa chỉ 98H là thanh ghi có địa chỉ
bit chứa các bit trạng thái và các bit điều khiển. Các bit điều khiển đặt chế độ hoạt
động cho port nối tiếp, và các bit trạng thái báo cáo kết thúc việc phát hoặc thu 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. Tần số làm việc của port nối tiếp còn gọi là tốc độ baund có thể cố định (lấy
từ bộ giao động của chip). Nếu sử dụng tốc độ baud thay đổi, timer 1 sẽ cung cấp xung
nhịp tốc độ baud và phải được lập trình.
1.2.5.2. Thanh ghi điều khiển port nối tiếp
Chế độ hoạt động của port nối tiếp được đặt bằng cách ghi vào thanh ghi chế độ
port nối tiếp (SCON) ở địa chỉ 98H. Sau đây các bảng tóm tắt thanh ghi SCON và các
chế độ của port nối tiếp:
Bit Ký hiệu Địa chỉ Mô tả
SCON.7 SM0 9FH Bit 0 của chế độ port nối tiếp
SCON.6 SM1 9EH Bit 1 của chế độ port nối tiếp
SCON.5 SM2 9DH Bit 2 của chế độ port nối tiếp. Cho phép
truyền thông đã xử lý trong các chế độ
2 và 3; RI sẽ không bị tác động nếu bit
thứ 9 thu được là 0
Page 24
SCON.4 REN 9CH Cho phép bộ thu phải đặt lên 1 để thu
(nhận) các ký tự
SCON.3 TB8 9BH Bit 8 phát, bit thứ 9 được phát các chế
độ 2 và 3; được đặt và xóa bằng phần
mềm
SCON.2 RB8 9AH Bit 8 thu, bit thứ 9 thu được
SCON.1 TI 99H Cờ ngắt phát. Đặt lên 1 khi kết thúc
phát ký tự; được xóa phần mềm
SCON.0 RI 98H Cờ ngắt thu. Đặt lên 1 khi Kết thúc thu
ký tự; được xóa Bằng phần mềm
Bảng 1.8: Tóm tắt thanh ghi chế độ port nối tiếp SCON
SM0 SM1 Chế độ Mô tả Tốc độ baud
0 0 0 Thanh ghi dịch Cố định (Fosc/12)
0 1 1 UART 8 bit Thay đổi (đặt bằng Timer)
1 0 2 UART 9 bit Cố định (Fosc/12 hoặc Fosc/64)
Bảng 1.9: Các chế độ port nối tiếp
Trước khi sử dụng port nối tiếp, phải khởi động SCON cho đúng chế độ. Ví dụ,
lệnh sau:
MOV SCON,#01010010B
Khởi động port nối tiếp cho chế độ 1 (SM0/SM1=0/1), cho phép bộ thu
(REN=1) và đặt cờ ngắt phát (TP=1) để chỉ bộ phát sẵn sàng hoạt động.
1.2.5.3. Khởi động và truy xuất các thanh ghi cổng nối tiếp
a. Cho phép thu
Bit cho phép bộ thu (REN = Receiver Enable) trong SCON phải được đặt lên 1
bằng phần mềm để cho phép thu các ký tự. Thông thường thực hiện việc này ở đầu
chương trình khi khởi động cổng nối tiếp, timer...Có thể thực hiện việc này theo hai
cách. Lệnh:
SETB REN
Sẽ đặt REN lên 1, hoặc lệnh:
MOV SCON,#xxx1xxxxB
Sẽ đặt REN 1 và đặc hoặc xóa đi các bit khác trên SCON khi cần (các x phải là
0 hoặc 2 để đặc chế độ làm việc).
Page 25
b. Bit dữ liệu thứ 9
Bit dữ liệu thứ 9 cần phát trong các chế độ 2 và 3, phải được nạp vào trong TB8
bằng phần mềm. Bit dữ liệu thứ 9 thu được đặt ở RBS. Phần mềm có thể cần hoặc
không cần bit dữ liệu thứ 9, phụ thuộc vào các đặc tính kỹ thuật của thiết bị nối tiếp sử
dụng (bit dữ liệu thứ 9 cũng đóng vai một trò quan trọng trong truyền thông đa xử lý).
c. Thêm 1 bit parity
Thường sử dụng bit dữ liệu thứ 9 để thêm parity vào ký tự. Bit P trong từ trạng
thái chương trình (PSW) được đặt lên 1 hoặc bị xóa bởi chu kỳ máy để thiết lập kiểm
tra chẵn với 8 bit trong thanh tích lũy.
d. Các cờ ngắt
Hai cờ ngắt thu và phát (RI và TI) trong SCON đóng một vai trò quan trọng
truyền thông nối tiếp dùng 8051. Cả hai bit được đặt lên 1 bằng phần cứng, nhưng
phải được xóa bằng phần mềm.
1.2.6. Tập lệnh của 8051
Tập lệnh 8051 có 255 lệnh gồm 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3
byte.
Các nhóm lệnh của 8051:
Tập lệnh của 8051 được chia thành 5 nhóm:
- Số học.
- Luận lý.
- Chuyển dữ liệu.
- Chuyển điều khiển.
Các chi tiết thiết lập lệnh:
Rn : Thanh ghi R0 đến R7 của bank thanh ghi được chọn.
Data : 8 bit địa chỉ vùng dữ liệu bên trong. Nó có thể là vùng RAM dữ liệu
trong (0-127) hoặc các thanh ghi chức năng đặc biệt.
@Ri : 8 bit vùng RAM dữ liệu trong (0-125) được đánh giá địa chỉ gián tiếp
qua thanh ghi R0 hoặc R1.
#data : Hằng 8 bit chứa trong câu lệnh.
#data 16 : Hằng 16 bit chứa trong câu lệnh.
Addr16 : 16 bit địa chỉ đích được dùng trong lệnh LCALL và LJMP.
Page 26
Addr11 : 11 bit địa chỉ đích được dùng trong lệnh LCALL và AJMP.
Rel : Byte offset 8 bit có dấu được dùng trong lệnh SJMP và những lệnh
nhảy có điều kiện.
Bit : Bit được định địa chỉ trực tiếp trong RAM dữ liệu nội hoặc các thanh
ghi chức năng đặc biệt.
a. Nhóm lệnh xử lý số học
ADD A,Rn (1 byte, 1 chu kỳ máy) : cộng nội dung thanh ghi Rn vào thanh ghi A.
ADD A,data (2,1): Cộng trực tiếp 1 byte vào thanh ghi A.
ADD A,@Ri (1,1): Cộng gián tiếp nội dung RAM chứa tại địa chỉ được khai
báo trong Ri vào thanh ghi A.
ADD A,#data (2,1): Cộng dữ liệu tức thời vào A.
ADD A,Rn (1,1): Cộng thanh ghi và cờ nhớ vào A.
ADD A,data (2,1): Cộng trực tiếp byte dữ liệu và cờ nhớ vào A.
ADDC A,@Ri (1,1): Cộng gián tiếp nội dung RAM và cờ nhớ vào A.
ADDC A,#data (2,1): Cộng dữ liệu tức thời và cờ nhớ vào A.
SUBB A,Rn (1,1): Trừ nội dung thanh ghi A cho nội dung thanh ghi Rn và cờ
nhớ.
SUBB A,data (2,1): Trừ trực tiếp A cho một số và cờ nhớ.
SUBB A,@Ri (1,1): Trừ gián tiếp A cho một số và cờ nhớ.
SUBB A,#data (2,1): Trừ nội dung A cho một số tức thời và cờ nhớ.
INC A (1,1): Tăng nội dung thanh ghi A lên 1.
INC Rn (1,1): Tăng nội dung thanh ghi Rn lên 1.
INC data (2,1): Tăng dữ liệu trực tiếp lên 1.
INC @Ri (1,1): Tăng gián tiếp nội dung vùng RAM lên 1.
DEC A (1,1): Giảm nội dung thanh ghi A xuống 1.
DEC Rn (1,1): Giảm nội dung thanh ghi Rn xuống 1.
DEC data (2,1): Giảm dữ liệu trực tiếp xuống 1
DEC @Ri (1,1): Giảm gián tiếp nội dung vùng RAM xuống 1.
INC DPTR (1,2): Tăng nội dng con trỏ dữ liệu lên 1.
MUL AB (1,4): Nhân nội dung thanh ghi A với nội dung thanh ghi B.
DIV AB (1,4): Chia nội dung thanh ghi A cho nội dung thanh ghi B.
DA A (1,1): hiệu chỉnh thập phân thanh ghi A.
Page 27
b. Nhóm lệnh luận lý
ANL A,Rn (1,1): AND nội dung thanh ghi A với nội dung thanh ghi Rn.
ANL A,data (2,1): AND nội dung thanh ghi A với dữ liệu trực tiếp.
ANL A,@Ri (1,1): AND nội dung thanh ghi A với dữ liệu gián tiếp trong
RAM.
ANL A,#data (2,1): AND nội dung thanh ghi với dữ liệu tức thời.
ANL data,A (2,1): AND một dữ liệu trực tiếp với A.
ANL data,#data (3,2): AND một dữ liệu trực tiếp với A một dữ liệu tức thời.
ANL C,bit (2,2): AND cờ nhớ với 1 bit trực tiếp.
ANL C,/bit (2,2): AND cờ nhớ với bù 1 bit trực tiếp.
ORL A,Rn (1,1): OR thanh ghi A với thanh ghi Rn.
ORL A,data (2,1): OR thanh ghi A với một dữ liệu trực tiếp.
ORL A,@Ri (1,1): OR thanh ghi A với một dữ liệu gián tiếp.
ORL A,#data (2,1): OR thanh ghi A với một dữ liệu tức thời.
ORL data,A (2,1): OR một dữ liệu trực tiếp với thanh ghi A.
ORL data,#data (3,1): OR một dữ liệu trực tiếp với một dữ liệu tức thời.
ORL C,bit (2,2): OR cờ nhớ với một bit trực tiếp.
ORL C,/bit (2,2): OR cờ nhớ với bù của một bit trực tiếp.
XRL A,Rn (1,1): XOR thanh ghi A với thanh ghi Rn.
XRL A,data (2,1): XOR thanh ghi A với mộ dữ liệu trực tiếp.
XRL A,@Ri (1,1): XOR thanh ghi A với một dữ liệu gián tiếp.
XRL A,#data (2,1): XOR thanh ghi A với mộ dữ liệu tức thời.
XRL data,A (2,1): XOR một dữ liệu trực tiếp với thanh ghi A.
XRL dara,#data (3,1): XOR một dữ liệu trực tiếp với một dữ liệu tức thời.
SETB C (1,1): Đặt cờ nhớ.
SETB bit (2,1): Đặt một bit trực tiếp.
CLR A (1,1): Xóa thanh ghi A.
CLR C (1,1): Xóa cờ nhớ.
CPL A (1,1): Bù nội dung thanh ghi A.
CPL C (1,1): Bù cờ nhớ.
CPL bit (2,1): Bù một bit trực tiếp.
RL A (1,1): Quay trái nội dung thanh ghi A.
Page 28
RLC A (1,1): Quay trái nội dung thanh ghi A qua cờ nhớ.
RR A (1,1): Quay phải nội dung thanh ghi A.
RRC A (1,1): Quay phải nội dung thanh ghi A qua cờ nhớ.
SWAP (1,1): Quay trái nội dung thanh ghi A 1 nibble (1/2byte).
c. Nhóm lệnh chuyển dữ liệu
MOV A,Rn (1,1): Chuyển nội dung thanh ghi Rn vào thanh ghi A.
MOV A,data (2,1): Chuyển dữ liệu trực tiếp vào thanh ghi A.
MOV A,@Ri (1,1): Chuyển dữ liệu gián tiếp vào thanh ghi A.
MOV A,#data (2,1): Chuyển dữ liệu tức thời vào thanh ghi A.
MOV Rn,data (2,2): Chuyển dữ liệu trực tiếp vào thanh ghi Rn.
MOV Rn,#data (2,1): Chuyển dữ liệu tức thời vào thanh ghi Rn.
MOV data,A (2,1): Chuyển nội dung thanh ghi A vào một dữ liệu trực tiếp.
MOV data,Rn (2,2): Chuyển nội dung thanh ghi Rn vào một dữ liệu trực
tiếp.
MOV data,data (3,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu trực tiếp.
MOV data,@Ri (2,2): Chuyển một dữ liệu gián tiếp vào một dữ liệu trực tiếp.
MOV data,#data (3,2): Chuyển một dữ liệu tức thời vào một dữ liệu trực tiếp.
MOV @Ri,A (1,1): Chuyển nội dung thanh ghi A vào một dữ liệu gián tiếp.
MOV @Ri,data (2,2): Chuyển một dữ liệu trực tiếp vào một dữ liệu gián tiếp.
MOV @Ri,#data (2,1): Chuyển dữ liệu tức thời vào dữ liệu gián tiếp.
MOV DPTR,#data (3,2): Chuyển một hằng 16 bit vào thanh ghi con trỏ dữ liệu.
MOV C,bit (2,1): Chuyển một bit trực tiếp vào cờ nhớ.
MOV bit,C (2,2): Chuyển cờ nhớ vào một bit trực tiếp.
MOV A,@A+DPTR (1,2): Chuyển byte bộ nhớ chương trình có địa chỉ là @A+DPRT
vào thanh ghi A.
MOVC A,@A+PC (1,2): Chuyển byte bộ nhớ chương trình có địa chỉ là @A+PC
vào thanh ghi A.
MOV A,@Ri (1,2): Chuyển dữ liệu ngoài (8 bit địa chỉ) vào thanh ghi A.
MOVX A,@DPTR (1,2): Chuyển dữ liệu ngoài (16 bit địa chỉ) vào thanh ghi A.
MOVX @Ri,A (1,2): Chuyển nội dung A ra dữ liệu ngoài (8 bit địa chỉ).
MOVX @DPTR,A (1,2): Chuyển nội dung A ra dữ liệu bên ngoài (16 bit địa chỉ).
PUSH data (2,2): Chuyển dữ liệu trực tiếp vào ngăn xếp và tăng SP.
Page 29
POP data (2,2): Chuyển dữ liệu trực tiếp vào ngăn xếp và giảm SP.
XCH A,Rn (1,1): Trao đổi dữ liệu giữa thanh ghi Rn v2 thanh ghi A.
XCH A,data (2,1): Trao đổi giữa thanh ghi A và một dữ liệu trực tiếp.
XCH A,@Ri (1,1): Trao đổi giữa thanh ghi A và một dữ liệu gián tiếp.
XCHD A,@R (1,1): Trao đổi giữa nibble thấp (LSN) của thanh ghi A và LSN
của dữ liệu gián tiếp.
d. Nhóm lệnh chuyền điều khiển
ACALL addr11 (2,2): Gọi chương trình con dùng địa chì tuyệt đối.
LCALL addr16 (3,2): Gọi chương trình con dùng địa chỉ dài.
RET (1,2): Trở về từ lệnh gọi chương trình con.
RET1 (1,2): Trở về từ lệnh gọi ngắt.
AJMP addr11 (2,2): Nhảy tuyệt đối.
LJMP addr16 (3,2): Nhảy dài.
SJMP rel (2,2): Nhảy ngắn.
JMP @A+DPTR (1,2): Nhảy gián tiếp từ con trỏ dữ liệu.
JZ rel (2,2): Nhảy nếu A=0.
JNZ rel (2,2): Nhảy nếu A không bằng 0.
JC rel (2,2): Nhảy nếu cờ nhớ được đặt.
JNC rel (2,2): Nhảy nếu cờ nhớ không được đặt.
JB bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt.
JNB bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp không được đặt.
JBC bit,rel (3,2): Nhảy tương đối nếu bit trực tiếp được đặt , rồi xóa bit.
CJNE A,data,rel (3,2): So sánh dữ liệu trực tiếp với A và nhảy nếu không bằng.
CJNE A,#data,rel (3,2): So sánh dữ liệu tức thời với A và nhảy nếu không bằng.
CJNE Rn,#data,rel (3,2): So sánh dữ liệu tức thời với nội dung thanh ghi Rn và nhảy
nếu không bằng.
CJNE @Ri,#data,rel (3,2): So sánh dữ liệu tức thời với dữ liệu gián tiếp và nhảy nếu
không bằng.
DJNZ Rn,rel (2,2): Giản thanh ghi Rn và nhảy nếu không bằng.
DJNZ data,rel (3,2): Giảm dữ liệu trực tiếp và nhảy nếu không bằng.
Page 30
CHƯƠNG 2
CÁC LINH KIỆN TRONG MẠCH ĐỒNG HỒ CÓ HẸN GIỜ
2.1. IC thời gian thực DS1307
2.1.1. Chức năng các chân
X1, X2: nối với thạch anh 32,768 kHz.
Vcc, GND: nguồn một chiều được cung cấp tới các chân này. Vcc là đầu vào
5V. Khi 5V được cung cấp thì thiết bị có thể truy cập hoàn chỉnh và dữ liệu có thể
đọc và viết. Khi pin 3V được nối tới thiết bị này và Vcc nhỏ hơn 1,25Vbat thì quá
trình đọc và viết không được thực thi, tuy nhiên chức năng timekeeping không bị ảnh
hưởng bởi điện áp vào thấp. Khi Vcc nhỏ hơn Vbat thì RAM và timekeeper sẽ được
ngắt tới nguồn cung cấp trong (thường là nguồn 1 chiều 3V).
Vbat: đầu vào pin cho bất kỳ một chuẩn pin 3V. Điện áp pin phải được giữ
trong khoảng từ 2,5 đến 3V để đảm bảo cho sự hoạt động của thiết bị.
SDA (serial data input/out): là chân vào ra cho 2 đường dây nối tiếp. Chân
SDA thiết kế theo kiểu cực máng hở, đòi hỏi phải có một điện trở kéo trong khi hoạt
động.
SCL (serial clock input): SCL được sử dụng để đồng bộ sự chuyển dữ liệu trên
đường dây nối tiếp.
SQW/OUT (square wave/output driver): khi được kích hoạt thì bit SQWE
được thiết lập, chân SQW/OUT phát đi 1 trong 4 tần số (1Hz,4kHz,8kHz,32kHz).
Chân này cũng được thiết kế theo kiểu cực máng hở vì vậy nó cũng cần có một điện
trở kéo trong. Chân này sẽ hoạt động khi cả Vcc và Vbat được cấp.
Hình 2.1: Sơ đồ chân của DS1307
2.1.2. Một vài thông số kỹ thuật
DS1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật
thời gian và ngày tháng với 56 bytes NV SRAM. Địa chỉ và dữ liệu được truyền nối
Page 31
tiếp qua 2 đường bus 2 chiều. Nó cung cấp thông tin về giờ, phút, giây, thứ, ngày,
tháng, năm. Ngày cuối tháng sẽ tự động được điều chỉnh với các tháng nhỏ hơn 31
ngày, bao gồm cả việc tự động nhảy năm. Đồng hồ có thể hoạt động ở dạng 24h
hoặc 12h với chỉ thị AM/PM. DS1307 có một mạch cảm biến điện áp dùng để dò
các điện áp lỗi và tự động đóng ngắt với nguồn pin cung cấp.
DS1307 hoạt động với vai trò slave trên đường bus nối tiếp. Việc truy cập
được thi hành với chỉ thị START và một mã thiết bị nhất định được cung cấp bởi địa
chỉ các thanh ghi. Tiếp theo đó các thanh ghi sẽ được truy cập liên tục đến khi chỉ thị
STOP được thực thi.
2.1.3. Sơ đồ khối của DS1307
Hình 2.2: Sơ đồ khối của DS1307
Page 32
a. Địa chỉ Ram và RTC
Thông tin về thời gian và ngày tháng được lấy ra bằng cách đọc các byte thanh
ghi thích hợp. thời gian và ngày tháng được thiết lập cũng thông qua các byte thanh
ghi này bằng cách viết vào đó những giá trị thích hợp. Nội dung của các thanh ghi
dưới dạng mã BCD (binary coded decreaseimal). Bit 7 của thanh ghi seconds là bit
clock halt (CH), khi bit này được thiết lập 1 thì dao động disable, khi nó được xoá về
0 thì dao động được enable.
Thanh ghi thời gian thực được mô tả như sau:
Bảng 2.1: Mô tả thanh ghi thời gian thực
Bảng 2.2: Địa chỉ bit của các thành phần trong DS1307
DS1307 có thể chạy ở chế độ 24h cũng như 12h. Bit thứ 6 của thanh ghi hours
là bit chọn chế độ 24h hoặc 12h. khi bit này ở mức cao thì chế độ 12h được chọn. Ở
chế độ 12h thì bit 5 là bit AM/PM với mức cao là là PM. Ở chế độ 24h thì bit 5 là bit
chỉ 20h (từ 20h đến 23h).
Page 33
Trong DS1307 có một thanh ghi điều khiển để điều khiển hoạt động của
chân SQW/OUT.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
OUT 0 0 SQWE 0 0 RS1 RS0
Bảng 2.3: Thanh ghi điều khiển hoạt động chân SQW/OUT
- OUT (output control): bit này điều khiển mức ra của chân SQW/OUT khi đầu
ra xung vuông bị cấm. Nếu SQWE=0 thì mức logic ở chân SQW/OUT sẽ là 1 nếu
OUT=1,và =0 nếu OUT=0.
- SQWE (square wave enable): bit này được thiết lập 1 sẽ cho phép đầu ra của
bộ tạo dao động. Tần số của đầu ra xung vuông phụ thuộc vào giá trị của RS1 và
RS0.
RS1 RS0 Tần số xung vuông
0 0 1HZ
0 1 4,096KHz
1 0 8,192KHz
1 1 32,768KHz
Bảng 2.4: Chế độ chọn tần số
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 SECONDS6:4) là có thể mã hoá đượ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 hoá, đồ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ừ ban đầu.
Thanh ghi phút (MINUTES): có địa chỉ 0x01, 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 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ỉ 0x02. 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), bit6 xác lập hệ thống giờ. Nếu
Page 34
bit6=0 thì hệ thống 24h được chọn, khi đó 2 bit cao 5 và 4 dùng mã hoá 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ã hoá. 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ã hoá chữ số hàng chục của giờ, bit 5 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.
Thang ghi thứ (DAY- ngày trong tuần): nằm ở địa chỉ 0x03. Thang ghi DAY
chỉ mang giá trị từ 1 đến 7 tương ứng 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). DS1307
chỉ dùng cho 100 năm, nên giá trị năm chỉ có 2 chữ số.
Các thanh ghi còn lại 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ỉ (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. Giá trị
của thanh ghi địa chỉ ( tức địa chỉ của bộ nhớ) được set trong lệnh Write.
b. Hoạt động
DS1307 hỗ trợ truyền dữ liệu bus 2 dây 2 chiều. Một thiết bị gửi dữ liệu lên
đường truyền được định nghĩa như là 1 máy phát và một thiết bị nhận dữ liệu như là
máy nhận. Thiết bị điều khiển thông điệp gọi là Master. Thiết bị được điều khiển bởi
Master được gọi là Slaver. Đường truyền (Bus) phải được điều khiển bởi thiết bị
Master mà phát ra xung nối tiếp (Serial Clock_SCL) điều khiển sự truy cập đường
truyền và phát ra điều kiện bắt đầu, dừng (Start, Stop condition). DS1307 hoạt động
như là Slave trên bus 2 dây.
Page 35
Hình 2.3: Cấu hình bus 2 dây điển hình
Việc truyền dữ liệu chỉ có thể được bắt đầu khi bus không bận.
Trong lúc truyền dữ liệu, đường dữ liệu phải ổn định bất cứ khi nào đường
Clock là cao (High).
Do đó, các điều kiện về đường truyền sau được định nghĩa:
- Bus not busy: cả đường dữ liệu và xung đều ở mức cao (High).
- Start data transfer: một sự thay đổi trong trang thái của đường dữ liệu từ
HIGH - LOW trong khi xung clock vẫn cao (H), đây là điều kiện bắt đầu (Start
Condition).
- Stop data transfer: một sự thay đổi trong trang thái của đường dữ liệu từ
LOW - HIGH trong khi xung clock vẫn cao (H), đây là điều kiện dừng (Stop
Condition).
- Data valid: trạng thái của đường dữ liệu biểu diễn dữ liệu hợp lệ khi mà: sau
điều kiện Start đường dữ liệu ổn định trong khoảng thời gian chu kỳ cao (HIGH) của
tín hiệu clock. Dữ liệu trên đường phải thay đổi trong chu kỳ thấp (LOW) của tín hiệu
clock. Có 1 xung clock/1 bit dữ liệu. Mỗi dữ liệu truyền đi với điều kiện Start và kết
thúc với điều kiện Stop. Số byte dữ liệu truyền giữa điều kiện Start và Stop là không
giới hạn và được quyết định bởi thiết bị Master. Sau khi một byte được truyền thì
được báo nhận ở bộ thu với bit thứ 9.
- Acknowledge: Mỗi thiết bị nhận khi được định địa chỉ thì phải phát ra tín hiệu
báo nhận sau khi nhận mỗi byte. Thiết bị Master phải phát ra thêm 1 xung clock để
ghép với bit báo nhận này.
Thiết bị báo nhận phải kéo đường SDA xuống trong suốt xung clock báo nhận
như là cách mà đường SDA ổn định thấp trong chu kỳ High của xung clock báo nhận.
Dĩ nhiên, thời gian thiết lập và thời gian giữ (chờ) phải được tính toán đến. Master
phải báo hiệu kết thúc dữ liệu đến Slave bằng cách không phát ra một bit báo nhận
trên byte cuối cùng mà được ghi vào Slave. Trong trường hơp này, Slave phải để
đường dữ liệu ở mức cao (H) để cho phép Master phát ra điều kiện STOP.
2.1.4. Truyền dữ liệu trên bus 2 dây nối tiếp
Tuỳ thuộc vào bit R/ w mà 2 loại truyền dữ liệu sẽ được thực thi.
- Truyền dữ liệu từ master truyền và slave nhận: Master sẽ truyền byte đầu tiên
là địa chỉ của slave. Tiếp sau đó là các byte dữ liệu. Slave sẽ gửi lại bit thông báo đã
Page 36
nhận được (bit acknowledge) sau mỗi byte dữ liệu nhận được. Dữ liệu sẽ truyền từ bit
có giá trị cao nhất (MSB).
- Truyền dữ liệu từ Slave và Master nhận: byte đầu tiên (địa chỉ của Slave) được
truyền tới Slave bởi Master. Sau đó Slave sẽ gửi lại Master bit acknowledge. Tiếp
theo đó Slave sẽ gửi các byte dữ liệu tới Master. Master sẽ gửi cho Slave các bit
acknowledge sau mỗi byte nhận được trừ byte cuối cùng, sau khi nhận được byte cuối
cùng thì bit acknowledge sẽ không được gửi.
Master phát ra tất cả các chuỗi xung clock và các chỉ thị START và STOP. Sự
truyền sẽ kết thúc với chỉ thị STOP hoặc chỉ thị quay vòng START. Khi chỉ thị
START quay vòng thì sự truyền chuỗi dữ liệu tiếp theo được thực thi và các bus vẫn
chưa được giải phóng. Dữ liệu truyền luôn bắt đầu bằng bit MSB.
Hình 2.4: Truyền dữ liệu trên bus 2 dây
2.1.5. Hai chế độ hoạt động của DS1307
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 một 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ẽ
Page 37
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.
Hình 2.5: Chế độ slave nhận
- 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 DS 1307 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 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.
Hình 2.6: Chế độ slave phát
2.2. LCD (Liquid Crystal Display)
Page 38
Hình 2.7: Sơ đồ chân của LCD
2.2.1. Chức năng các chân của LCD
Châ
n số
Tên Chức năng
1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này
với GND của mạch điều khiển.
2 Vdd Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân
này với Vcc=5V của mạch điều khiển.
3 Vee Chân này dùng để điều chỉnh độ tương phản của LCD.
4 RS Chân chọn thanh ghi (Register select).
+) Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR
của LCD ở chế độ “ghi”-write) hoặc nối với bộ đếm địa chỉ
của LCD (ở chế độ “đọc”-read).
+) Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR
bên trong LCD.
5 RW Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với
logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic
“1” để LCD ở chế độ đọc.
6 E cho phép (Enable). Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung
cho phép của chân E.
+) Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào
(chấp nhận). Thanh ghi bên trong nó khi phát hiện một xung
(high-to-low transition) của tín hiệu chân E.
+) Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7
khi phát hiện cạnh lên (low- to-high transition) ở chân E
Page 39
và được LCD giữ ở bus đến khi nào chân E xuống mức
thấp.
7÷1
4
DB0÷
DB7
Tám đường của bus dữ liệu dùng để trao đổi thông tin
với MPU. Có 2 chế độ sử dụng 8 đường bus này:
+) Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với
bit MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4
tới DB7, bit MSB là DB7.
15,1
6
A,K Đèn của LCD
Bảng 2.5: Chức năng các chân của LCD
Page 40
2.2.2. HD44780
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên
trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết.
Hình 2.8: Sơ đồ khối của HD44780
a. Các thanh ghi
Chíp HD44780 có 2 thanh ghi 8 bit quan trọng: Thanh ghi lệnh IR (Instructor
Register) và thanh ghi dữ liệu DR (Data Register).
Thanh ghi IR: Để điều khiển LCD, người dùng phải “ra lệnh” thông qua 8 đường bus
DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng. Người dùng chỉ
việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR. Nghĩa là, khi ta nạp vào
thanh ghi IR một chuỗi 8 bit, chíp HD44780 sẽ tra bảng mã lệnh tại địa chỉ mà IR
cung cấp và thực hiện lệnh đó.
Page 41
Thanh ghi DR: Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng RAM
DDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2 vùng RAM
này gởi ra cho MPU (ở chế độ đọc). Nghĩa là, khi MPU ghi thông tin vào DR, mạch
nội bên trong chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM. Hoặc
khi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ này trong vùng RAM nội
của HD44780 sẽ được chuyển ra DR để truyền cho MPU.
Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ 2
thanh ghi này khi giao tiếp với MPU. Bảng sau đây tóm tắt lại các thiết lập đối với
hai chân RS và R/W theo mục đích giao tiếp.
RS RW Khi cần
0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD (VD: cần display
clear,…)
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6
1 0 Ghi vào thanh ghi DR
1 1 Đọc dữ liệu từ DR
Bảng 2.6: Chế độ chọn RS, RW
b. Cờ báo bận BF(Busy Flag)
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một
khoảng thời gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế,
LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có
thiết lập RS=0, R/W=1) lên để báo cho MPU biết nó đang “bận”. Dĩ nhiên, khi xong
việc, nó sẽ đặt cờ BF lại mức 0.
c. Bộ Đếm địa chỉ AC (Address Counter)
Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM
(DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC. Bộ đếm này lại nối với 2
vùng RAM theo kiểu rẽ nhánh. Khi một địa chỉ lệnh được nạp vào thanh ghi IR,
thông tin được nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa vùng RAM tương
tác đã được bao hàm trong mã lệnh.
d. Vùng Ram hiển thị DDRAM(Display Data RAM)
Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM là
một ô kí tự trên màn hình và khi bạn ghi vào vùng RAM này một mã 8 bit, LCD sẽ
hiển thị tại vị trí tương ứng trên màn hình một kí tự có mã 8 bit mà bạn đã cung cấp.
Page 42
Vùng RAM này có 80x8 bit nhớ, nghĩa là chứa được 80 kí tự mã 8 bit. Những
vùng RAM còn lại không dùng cho hiển thị có thể dùng như vùng RAM đa mục đích.
2.2.3. Mã lệnh của LCD
Mã (hexa) Lệnh đến thanh ghi của LCD
1 Xoá màn hình hiển thị
2 Trở về đầu dòng
4 Dịch con trỏ sang trái
5 Dịch hiển thị sang phải
6 Dịch con trỏ sang phải
7 Dịch hiển thị sang trái
8 Tắt con trỏ, tắt hiển thị
A Tắt hiển thị, bật con trỏ
C Bật hiển thị, tắt con trỏ
E Bật hiển thị, nhấp nháy con trỏ
F Tắt hiển thị, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trái
1C Dịch toàn bộ hiển thị sang phải
80 Đưa con trỏ về đầu dòng thứ nhất
C0 Đưa con trỏ về đầu dòng thứ hai
38 Hai dòng và ma trận 5x7
Bảng 2.7: Mã lệnh của LCD
Page 43
CHƯƠNG 3
THIẾT KẾ MẠCH ĐỒNG HỒ CÓ HẸN GIỜ
3.1. Giới thiệu đề tài
Trong các ứng dụng dân dụng và công nghiệp, các bộ vi mạch vi điều khiển
được ứng dụng rộng rãi và đã phát huy được tính năng ưu việt của nó và ngày càng
được sử dụng rộng rãi. Việc sử dụng các bộ vi điều khiển để điều khiển các công việc
mang tính lặp lại có chu kỳ là cần thiết để thay thế sự giám sát của con người. Ở đây
em xin trình bày việc ứng dụng vi điều khiển để hiển thị, báo giờ thời gian thực trên
LCD.
3.2. Yêu cầu bài toán
Thiết kế đồng hồ thời gian thực có hẹn giờ. 8051 đọc thời gian thực từ DS1307
và hiển thị lên LCD. Khi nhấn các nút nhấn thì chỉnh được thời gian và cài đặt chế độ
hẹn giờ, khi đến giờ hẹn thì 8051 điều khiển loa kêu.
3.3. Sơ đồ khối
Hình 3.1: Sơ đồ khối
Page 44
3.4. Chức năng các khối
Khối điều chỉnh gồm: 4 nút nhấn để đặt, hiệu chỉnh và hẹn thời gian.
Khối hiển thị là LCD.
Khối vi điều khiển sử dụng vi điều khiển 8051 điều khiển toàn bộ các hoạt
động chính của mạch: nhận tín hiệu điều khiển của khối điều chỉnh và tín hiệu
từ IC DS1307 thời gian thực xuất ra khối hiển thị và chuông báo.
Khối chuông báo là một chuông hoặc còi điện để báo hẹn giờ.
Khối thời gian thực là IC DS1307.
3.5. Sơ đồ mạch đồng hồ có hẹn giờ
3.5.1. Khối nút nhấn
Hình 3.2: Khối nút nhấn
SET: chuyển sang chế độ điều chỉnh giờ, phút, ngày, tháng, năm.
ALARM: chuyển sang chế độ cài đặt hẹn giờ.
UP: điều chỉnh tăng.
DOWN: điều chỉnh giảm.
Page 45
3.5.2. Khối thời gian thực
Hình 3.3: Khối thời gian thực
IC thời gian thực DS1307 giao tiếp với vi điều khiển 8051 theo kiểu giao tiếp
I2C. Với 8051 đóng vai trò là một master và DS1307 đóng vai trò là một slave.
Chân SDA,SCL thiết kế theo kiểu cực máng hở, đòi hỏi phải có một điện trở
kéo trong khi hoạt động (chọn R=10kΩ). Tần số thạch anh là 32,768kHz để DS1307
có thể hoạt động được. Vbat=3V để đảm bảo cho sự hoạt động của thiết bị.
Page 46
3.5.3. Khối vi điều khiển
Hình 3.4: Khối vi điều khiển
Khối vi điều khiển 8051. Điều chỉnh mọi hoạt động của hệ thống, 8051 hoạt
động được là nhờ vào khối tạo xung giao động thạch anh.
3.5.4. Khối chuông báo
Hình 3.5: Khối chuông báo
Là một chuông báo được nối với chân p1.4 của 8051 và một đầu nối xuống đất
Page 47
3.5.5. Khối hiển thị
Hình 3.6: Khối hiển thị
Biến trở R2 có tác dụng điều chỉnh độ tương phản của LCD. Biến trở R3 điều
chỉnh độ sáng của chữ trên LCD.
Page 48
3.5.6. Sơ đồ mạch mô phỏng bằng proteus
Hình 3.7: Sơ đồ mạch mô phỏng bằng proteus
Nguyên tắc hoạt động:
Khi hệ thống được cấp nguồn cho 8051. 8051 tiến hành đọc thời gian thực từ
DS1307 hiển thị lên LCD, khi ấn các nút nhấn có thể chỉnh được thời gian và cài đặt
hẹn giờ, khi đến thời gian hẹn 8051 kích hoạt loa kêu trong vòng 1 phút rồi tắt.
Page 49
3.5.7. Sơ đồ mạch in
Hình 3.8: Sơ đồ mạch in
Hình 3.9: Mạch hoàn chỉnh đã nạp chương trình
Page 50
3.6. Lưu đồ chương trình
3.6.1. Lưu đồ chương trình chính
Page 51
3.6.2. Chương trình con
3.6.2.1. Lưu đồ chương trình con ghi 1 byte vào DS1307
Page 52
3.6.2.2. Lưu đồ chương trình con đọc 1 byte từ DS1307
Page 53
3.6.2.3. Lưu đồ chương trình con ghi thời gian
Page 54
3.6.2.4. Lưu đồ chương trình con đọc thời gian
Page 55
3.6.2.5. Lưu đồ chương trình con hiển thị LCD
Kiểm tra cờ bận BF
Ghi lệnh vào LCD
Ghi ký tự ra LCD
Page 56
3.6.2.6. Lưu đồ chương trình con kiểm tra giờ hẹn, mở chuông và tắt chuông
Page 57
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Các việc đã thực hiện được
Trong báo cáo này, em đã trình bày nghiên cứu về vi điều khiển 8051, DS1307
và các linh kiện trong mạch đồng hồ thời gian thực có hẹn giờ. Em đã đi sâu vào thiết
kế mạch đồng hồ có hẹn giờ.
Em đã xây dựng mạch đồng hồ có hẹn giờ với DS1307. Ứng dụng này có chức
năng như một chiếc đồng hồ thông dụng như: xem giờ, chỉnh giờ, báo hẹn giờ và đã
xây dựng được mạch thật.
Hướng cải tiến và mở rộng
Sau khi hoàn thành song đồ án này. Sản phẩm của em còn ít tính năng. Sau đây là một
số hướng phát triển cho đề tài này:
- Thêm phần hiển thị lịch âm.
- Thêm phần đo nhiệt độ môi trường.
- Hệ thống chuông báo theo bài hát.
- Thay các nút nhấn bằng hệ thống điều khiển được từ xa.
Thái Nguyên, Ngày 15 tháng 6 năm 2011
Page 58
TÀI LIỆU THAM KHẢO
[1] Nguyễn Trung Đồng - Bùi Thị Mai Hoa “ Kỹ Thuật vi xử lý ”, Nhà xuất bản khoa
học và kỹ thuật năm 2010.
[2] Nguyễn Tăng Cương - Pham Quốc Thắng “Cấu trúc và lập trình họ vi điều khiển
8051”, Nhà xuất bản khoa học và kỹ thuật năm 2003.
[3] Tống Văn On, Hoàng Đức Hải “ Họ Vi Điều Khiển 8051”, Nhà xuất bản Lao Động
Xã Hội năm 2006.
[4] http://www.dientuvietnam.net/
[5] http://www.hocavr.com/index.php/app/ds1307
[6] http://www.dientuvienthong.net/diendan/index.php