lỜi cẢm Ơn · web viewhình 1.3 mô tả cách nối một eprom vào 8051: hình 1.3: giao...

80
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

Upload: others

Post on 06-Feb-2021

4 views

Category:

Documents


2 download

TRANSCRIPT

LỜI CẢM ƠN

MỤC LỤC

2LỜI MỞ ĐẦU

CHƯƠNG 1: 2TÌM HIỂU VI ĐIỀU KHIỂN 8051

21.1. Giới thiệu

21.2. Khảo sát vi điều khiển 8051

21.2.1. Cấu trúc bên trong của vi điều khiển 8051

21.2.2. Chức năng các chân vi điều khiển 8051

21.2.3. Tổ chức bộ nhớ

21.2.4. Hoạt động của bộ định thời (Timer)

21.2.5. Hoạt động port nối tiếp

21.2.6. Tập lệnh của 8051

CHƯƠNG 2: 2CÁC LINH KIỆN TRONG MẠCH ĐỒNG HỒ CÓ HẸN GIỜ

22.1. IC thời gian thực DS1307

22.1.1. Chức năng các chân

22.1.2. Một vài thông số kỹ thuật

22.1.3. Sơ đồ khối của DS1307

22.1.4. Truyền dữ liệu trên bus 2 dây nối tiếp

22.1.5. Hai chế độ hoạt động của DS1307

22.2. LCD (Liquid Crystal Display)

22.2.1. Chức năng các chân của LCD

22.2.2. HD44780

22.2.3. Mã lệnh của LCD

CHƯƠNG 3: 2THIẾT KẾ MẠCH ĐỒNG HỒ CÓ HẸN GIỜ

23.1. Giới thiệu đề tài

23.2. Yêu cầu bài toán

23.3. Sơ đồ khối

23.4. Chức năng các khối

23.5. Sơ đồ mạch đồng hồ có hẹn giờ

23.5.1. Khối nút nhấn

23.5.2. Khối thời gian thực

23.5.3. Khối vi điều khiển

23.5.4. Khối chuông báo

23.5.5. Khối hiển thị

23.5.6. Sơ đồ mạch mô phỏng bằng proteus

23.5.7. Sơ đồ mạch in

23.6. Lưu đồ chương trình

23.6.1. Lưu đồ chương trình chính

23.6.2. Chương trình con

2KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

2TÀI LIỆU THAM KHẢO

DANH MỤC HÌNH

2Hình 1.1: sơ đồ khối 8051

2Hình 1.2: Sơ đồ chân 8051

2Hình 1.3: Giao tiếp giữa 8051 và EPROM

2Hình 1.4: giản đồ thời gian đoc bộ nhớ chương trình ngoài

2Hình 1.5: Giao tiếp giữa 8051 và RAM

2Hình 1.6: Giản đồ thời gian của lệnh MOVX

2Hình 1.7: Mạch Reset hệ thống

2Hình 2.1: Sơ đồ chân của DS1307

2Hình 2.2: Sơ đồ khối của DS1307

2Hình 2.3: Cấu hình bus 2 dây điển hình

2Hình 2.4: Truyền dữ liệu trên bus 2 dây

2Hình 2.5: Chế độ slave nhận

2Hình 2.6: Chế độ slave phát

2Hình 2.7: Sơ đồ chân của LCD

2Hình 2.8: Sơ đồ khối của HD44780

2Hình 3.1: Sơ đồ khối

2Hình 3.2: Khối nút nhấn

2Hình 3.3: Khối thời gian thực

2Hình 3.4: Khối vi điều khiển

2Hình 3.5: Khối chuông báo

2Hình 3.6: Khối hiển thị

2Hình 3.7: Sơ đồ mạch mô phỏng bằng proteus

2Hình 3.8: Sơ đồ mạch in

2Hình 3.9: Mạch hoàn chỉnh đã nạp chương trình

DANH MỤC BẢNG

2Bảng 1.1: Chức năng của các chân trên port 3

2Bảng 1.2: thanh ghi trạng thái trương trình PSW

2Bảng 1.3: Trạng thái các thanh ghi sau khi reset

2Bảng 1.4: Thanh ghi chức năng đặc biệt dùng timer

2Bảng 1.5: Tóm tắt thanh ghi TMOD

2Bảng 1.6: Chế độ chọn mode cho Timer

2Bảng 1.7: Tóm tắt thanh ghi TCON

2Bảng 1.8: Tóm tắt thanh ghi chế độ port nối tiếp SCON

2Bảng 1.9: Các chế độ port nối tiếp

2Bảng 2.1: Mô tả thanh ghi thời gian thực

2Bảng 2.2: Địa chỉ bit của các thành phần trong DS1307

2Bảng 2.3: Thanh ghi điều khiển hoạt động chân SQW/OUT

2Bảng 2.4: Chế độ chọn tần số

2Bảng 2.5: Chức năng các chân của LCD

2Bảng 2.6: Chế độ chọn RS, RW

2Bảng 2.7: Mã lệnh của LCD

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ờ

CHƯƠNG 1TÌM HIỂU VI ĐIỀU KHIỂN 80511.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.

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

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

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

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

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

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.

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

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 1(s. 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:

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:

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ố 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:

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

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

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

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

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.

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.

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.

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.

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.

CHƯƠNG 2CÁC LINH KIỆN TRONG MẠCH ĐỒNG HỒ CÓ HẸN GIỜ2.1. IC thời gian thực DS13072.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 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

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

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

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 đã 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ẽ 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)

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 và được LCD giữ ở bus đến khi nào chân E xuống mức thấp.

7÷14

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,16

A,K

Đèn của LCD

Bảng 2.5: Chức năng các chân của LCD

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

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.

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

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

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.

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

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

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.

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.

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

3.6. Lưu đồ chương trình

3.6.1. Lưu đồ chương trình chính

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

3.6.2.2. Lưu đồ chương trình con đọc 1 byte từ DS1307

3.6.2.3. Lưu đồ chương trình con ghi thời gian

3.6.2.4. Lưu đồ chương trình con đọc thời gian

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

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

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

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

_1376738014.unknown
_1376738016.unknown
_1376738017.unknown
_1376738018.unknown
_1376738015.unknown
_1376738013.unknown