Mục đích nghiên cứu Đề tài: Thiết kế đồng hồ số ứng dụng họ vi điều khiển 8051 giao tiếp với DS1307 hiển thị giờ, phút, giây và thứ, ngày, tháng, năm hiển thị trên Led 7 đoạn Nhằm giú
Trang 1LỜI MỞ ĐẦU
Với sự tiến bộ không ngừng của khoa học kỹ thuật, đặc biệt là ngành điện tử
đã ứng dụng rất nhiều trong công nghiệp Trong lĩnh vực điều khiển hiện đại có nhiều ưu điểm so với việc sử dụng các mạch điều khiển được lắp ráp từ những linh kiện rời như kích thước nhỏ gọn, giá thành rẻ, tốc độ làm việc tin cậy và công suất tiêu thụ thấp
Ngày nay lĩnh vực điều khiển đã được ứng dụng rộng rãi trong các thiết bị sản phẩm phục vụ cho nhu cầu sinh hoạt hàng ngày của con người như: máy giặt,
tủ lạnh, lò vi ba nhằm giúp cho đời sống ngày càng hiện đại và tiện lợi hơn Nhắc đến vi điều khiển họ 8051 thì có lẽ đã quá quen thuộc đối với những người theo ngành điện tử vì những tính năng hay cũng như những ứng dụng thực tế của nó Vì vậy nó ứng dụng
52
người thực hiện đề tài này đã đem tất cả kiến thức và khả năng về lập trình vi điều khiển họ
8051 úng dụng vào trong thực tế do đó đề tài: “Nghiên cứu thiết kế lịch vạn niên sử dụng vi điều khiển” đã ra đời
Lịch vạn niên có những tính năng như hiển thị giờ, phút, giây, thứ, ngày, tháng, năm trên led 7 đoạn
Đề tài trên là sự kết hợp giữa vi điều khiển họ 8051 và IC chuyên dụng (Real time Clock) qua đó nó sẽ giúp những người thực hiện đề tài này hiểu rõ hơn IC đồng hồ thời gian thực DS1307 Do tài liệu tham khảo tiếng Việt còn hạn chế, trình độ và kinh nghiệm thực tế còn non kém nên đề tài còn nhiều thiết sót Rất mong nhận được những ý kiến đóng góp, giúp đỡ chân tình quý báu của các thầy
cô giáo và các bạn
Trang 2Chương 1 Tổng quan 1.1 Dẫn nhập
1.1.1 Đặt vấn đề
Ngày nay khoa học kỹ thuật phát triển mạnh mẽ, đặc biệt là trong lĩnh vực điện tử đã góp phần nâng cao năng xuất lao động, giảm nhẹ sức lao động chân tay cho con người và góp phần nâng cao đời sống vật chất cũng như tinh thần của con người
Từ xa xưa con người đã biết cách đo đếm thời gian bằng nhiều phương pháp khác nhau như: đồng hồ cót, đồng hồ lên giây cót đến khi kỹ thuật điện tử ra đời
và nhất là khi vi điều khiển ra đời thì việc sản xuất đồng hồ trở lên dễ dàng hơn trước nhiều và còn đạt độ chính xác cao hơn, cùng với các tiện ích khác nhau như báo giờ, cho biết ngày tháng hiện tại
Xuất phát từ nhu cầu phục vụ đời sống con người ngày càng tốt hơn nên em chọn đề tài làm đồ án học phần: Thiết kế đồng hồ số ứng dụng họ vi điều khiển
8051 giao tiếp với DS1307 hiển thị giờ, phút, giây và thứ, ngày, tháng, năm hiển thị trên led 7 đoạn
1.1.2 Tầm quan trọng của đề tài
- Đồng hồ điện tử hiện nay không còn là một vấn đề mới mẻ với mọi người, nhưng với mạch điện tử hiện thị trên led 7 đoạn có những vấn đề quan trọng như sau:
- Thời gian hiển thị trên led 7 đoạn dễ quan sát
- Là cơ sở để những người nghiên cứu khác vận dụng và phát triển thành một sản phẩm hoàn thiện có giá trị sử dụng trong thực tế
- Đề tài cũng là cơ sở đề những người thực hiện đồ án môn học khoá sau tham khảo và phát triển thêm
- Việc thực hiện đề tài cũng giúp người nghiên cứu nắm vững lý thuyết và rèn luyện kĩ năng thi công mạch
1.1.3 Giới hạn của đề tài.
Trong quá trình thực hiện đề tài này, em chỉ tập trung thực hiện giải quyết những vấn đề sau:
+ Khảo sát vi điều khiển AT80C51
Trang 3+ Ứng dụng vi điều khiển và led 7 đoạn để thiết kể hiển thị giờ, phút, giây - thứ, ngày, tháng, năm
+ Thiết kế mạch hiển thị giờ, phút, giây và thứ, ngày, tháng, năm trên led 7 đoạn
Do còn hạn chế về thời gian thực hiện đề tài cũng như các khó khăn trong việc lập giải thuật nên vẫn còn nhiều thiếu sót
1.2 Cơ sở lý luận
1.2.1 Mục đích nghiên cứu
Đề tài: Thiết kế đồng hồ số ứng dụng họ vi điều khiển 8051 giao tiếp với DS1307 hiển thị giờ, phút, giây và thứ, ngày, tháng, năm hiển thị trên Led 7 đoạn
Nhằm giúp những người thực hiện đề tài nắm được những vấn đề sau:
- Thông qua việc thực hiện đề tài giúp cho những người thực hiện đồ án ôn lại những kiến thức đã học và lĩnh hội thêm được những kiến thức mới từ thầy giáo hướng dẫn, từ các bạn sinh viên và cũng là khoảng thời gian rèn luyện tay nghề, từ
đó hiểu rõ hơn cách viết chương trình cho vi điều khiển
- Qua quá trình thực hiện đồ án đã tạo điều kiện cho em thực hiện có những ý tưởng mới và giải quyết các vấn đề phát sinh một cách có hiệu quả
- Giúp người thực hiện đồ án biết vận dụng việc tính toán mạch điện giữa lý thuyết và thực tế, sao cho mạch hoạt động ổn định, kết cấu đơn giản và chi phí thấp
- Do điều kiện khách quan cũng như chủ quan của mình mà sản phẩm làm ra chưa có tính thực tiễn cao nhưng nếu được nghiên cứu đi sâu hơn thì có thể ứng dụng vào thực tế
1.2.2 Đối tượng nghiên cứu
- Vi điều khiển 80C51
- Ứng dụng IC Realtime Clock DS1307
- Mạch hiển thị trên Led 7 đoạn
1.2.3 Dàn ý nghiên cứu
- Nghiên cứu vi điều khiển 80C51
- Nghiên cứu việc giao tiếp giữa vi điểu khiển và Led 7 đoạn
Trang 4- Lập trình phần mềm cho vi điều khiển
1.2.4 Phương án thực hiện
Dùng vi mạch điều khiển Realtime Clock DS1307 có nguồn dự phòng phương pháp này có đặc điểm:
* Ưu điểm: - Mạch điện thiết kế đơn giản, độ chính xác cao, giá thành thấp
- Tiêu thụ năng lượng thấp do dùng phương pháp quét
- Chương trình thời gian và lịch đã có sẵn trong Realtime DS107
- Không phải cài đặt lại thời gian khi mất nguồn
* Nhược điểm: Người thiết kế phải biết về vi điều khiển
1.2.5 Phương tiện nghiên cứu
- Máy tính cá nhân
- Bộ thí nghiệm vi điều khiển (board nạp VĐK và board hiển thị)
- Các linh kiện điện tử liên quan đến đề tài
1.2.6 Kết luận chương 1
Xuất phát từ nhu cầu thực tiễn của con người và những ưu điểm của DS1307 giao tiếp với 8051chúng em đã tiến hành nghiên cứu Đề tài: Thiết kế đồng hồ số ứng dụng họ vi điều khiển 8051 giao tiếp với DS1307 hiển thị giờ, phút, giây và thứ, ngày, tháng, năm hiển thị trên Led 7 đoạn, để nghiên cứu đề
tài đầu tiên chúng em đi tìm cơ sở lý thuyết để thực hiện đề tài
Trang 5Chương 2 CƠ SỞ LÝ THUYẾT 2.1 Họ vi điều khiển 8051
2.1.1 Tổng quan về vi điều khiển
* Sơ đồ khối của bộ VĐK 8051
Các vi mạch VĐK 8051 có sơ đồ khối tổng quát như hình 2.1
Hình 2.1 Sơ đồ khối tổng quát của 8051/8052
Vi điều khiên (VĐK) 8051/52 được chế tạo theo cấu trúc của một hệ vi tính gồm các khối sau:
- Bộ xử lý trung tâm CPU (Central Processorr Unit): Dùng để điều khiển toàn vi mạch trong việc thực hiện lệnh và xử lý số học và logic
- Bộ nhớ dữ liệu (RAM) bên trong: (128 byte cho 8051 và 256 byte cho 8052) dùng làm các thanh ghi thông dụng, thanh ghi đặc biệt SFR và xử lý bit để ghi nhớ dữ liệu cho chương trình
- Bộ nhớ chương trình (ROM) bên trong: (4 Kbyte cho 8051 và 8 Kbyte cho 8052) dùng để ghi nhớ chương trình
- Cổng trao đổi tin vào ra dữ liệu và địa chỉ (P0 - P3): Dùng để trao đổi tin song song về dữ liệu và địa chỉ
Bus điều khiển
4 Cổng vào / ra
Cổng nối tiếp
Địa chỉ / Dữ liệu
TXD RXD
P0 P1 P2 P3
ROM ON- CHIP CHƯƠNG TRÌNH
Trang 6- Cổng trao đổi tin nối tiếp: Dùng trao đổi tin nối tiếp nhận vào từ chân RXD và đưa ra từ chân TXD
- Khối định thời gian bộ đếm Timer/Couter 0, 1 và 2: Dùng để định thời gian đếm xung ngoài vào các chân T0, T1 và T2
- Khối điều khiển ngắt: Dùng để ngắt chương trình khi có xung ngoài hay khi có đếm tràn
- Khối điều khiển BUS và mạch tạo xung nhịp Giao tiếp giữa CPU với các khối bên trong của 8051 được thực hiện qua các BUS nội bộ gồm BUS dữ liệu 8 bít, BUS địa chỉ và các tín hiệu điều khiển khác
- Giới thiệu một số thông số của 8051
2.1.2 Sơ đồ chân và chức năng
Các thành viên của họ 8051 ví dụ như 8751, 89C51, DS500 đều có kiểu đóng vỏ khác nhau, chẳng hạn dạng hai hàng chân DIP, dạng vỏ dẹt vuông QFP và dạng không có chân đỡ LLC, song chúng đều có 40 chân với các chức năng như vào ra I/O, đọc RD, ghi WR, địa chỉ, dữ liệu và ngắt Tuy nhiên, vì hầu hết các nhà phát triển chính đều sử dụng chíp đóng vỏ 40 chân kiểu hai hàng chân DIP nên chúng ta chỉ tập
trung mô tả phiên bản này Mô tả chân của 8051 được trình bày như hình 2.2
Trong số 40 chân của 8051 có 32 chân dành cho 4 cổng P0, P1, P2, P3 mỗi cổng có
8 chân Các chân còn lại dành cho nguồn VCC, đất GND, các chân dao động XTAL1
và XTAL2 , khởi động lại RS, cho phép chốt địa chỉ ALE, truy cập được địa chỉ ngoài EA, cho phép cất chương trình PSEN Trong 8 chân này thì 6 chân VCC, GND,
Trang 720
P0.0 ( AD0 ) P0.1 ( AD1 )
P0.4 ( AD4 )
EA /CPP ALE / PROGG P2.7 ( A15 ) P2.6 ( A14 ) P2.4 ( A12 ) P2.3 ( A11 )
1 P1.0
2 P1.1
3 P1.2
4 P1.3
5 P1.4
6 P1.5
7 P1.6
8 P1.7
9 RST
10 (RXD) P3.0
1
1
(TXD) P3.1
1 (INT0) P3.2
13 (INT1)
P3.3 (T0) 14 P3.4 15 (T1) P3.5
16 ( WR )
P3.6 ( RD) P3.7 1
18 XTAL2 XTAL1 GN
D
VC
C
P0.2 ( AD2 ) P0.3 ( AD3 ) P0.5 ( AD5 ) P0.6( AD6 )
P0.7 ( AD7 )
PSEN
P2.5 ( A13 )
P2.2 ( A10 ) P2.1 ( A9 )
P2.0 (A8 )
Hình 2.2 Sơ đồ chân của 8051/8052
2.1.2.1 Nhóm chân nguồn, dao động và điều khiển
- VCC: Chân số 40 cung cấp điện áp nguồn nguồn +5V
- GND: Chân số 20 là chân đất (hay chân nối mass)
- XTAL1 và XTAL2: 8051 có một bộ dao động trên chíp nhưng vẫn cần có một bộ dao động đồng hồ bên ngoài để kích hoạt
Bộ dao động thạch anh ngoài thường được nối tới các chân vào XTAL1 (chân 19) và XTAL2 (chân 18) Khi mắc dao động thạch anh, phải có hai tụ điện 30pF, một đầu mỗi tụ nối tới XTAL1 và XTAL2, còn đầu kia nối đất như hình 2.3 Dao động đồng hồ ngoài không nhất thiết là bộ dao động thạch anh mà cũng
có thể dùng bộ dao động TTL Khi XTAL2 để hở như hình 2.4
Trang 8
Hình 2.3 Nối đồng hồ thạch anh Hình 2.4 Nối đồng hồ ngoài
- RST: Khởi động lại (RESET) đó là chân vào số 9, mức tích cực cao, bình thường ở mức thấp Khi có xung cao đặt tới chân này thì bộ VĐK sẽ kết thúc mọi hoạt động hiện tại và tiến hành khởi động lại Quá trình xảy ra hoàn toàn tương tự như khi bật nguồn Khi RESET, mọi giá trị trên các thanh ghi sẽ bị xóa Bảng 2.2 giới thiệu giá trị các thanh ghi khi thực hiện RESET
Bảng 2.2 Giá trị một số thanh ghi sau RESET
Như vậy khi RESET giá trị của bộ đếm chương trình PC bằng 0, CPU nhận
mã lệnh đầu tiên tại địa chỉ 0000h của bộ nhớ ROM Do đó, tại địa chỉ này phải có lệnh đầu tiên chương trình nguồn của ROM Hình 2.5 và hình 2.6 trình bày hai cách nối chân của mạch RESET
31 10F
10F 11.0592 MHz
Trang 9Hình 2.5 Mạch nối chân RST Hình 2.6 Mạch RESET với phím khởi động lại
Để RESET có hiệu quả chân RST cần duy trì trạng thái tích cực (mức cao) tối thiểu hai chu kì máy Ở 8051 chu kỳ máy bằng 12 chu kì dao động đồng hồ
- EA: Truy cập bộ nhớ ngoài là chân vào số 31 trên vỏ kiểu DIP Đối với các thành viên họ 8051 có ROM chương trình trên chíp thì chân EA được nối tới nguồn VCC
- PSEN: Là chân ra có chức năng cho phép cất chương trình
- ALE: Cho phép chốt địa chỉ, là chân ra có mức tích cực cao
2.1.2.2 Nhóm chân cổng vào ra
Bốn cổng P0, P1, P2 và P3 đều có 8 chân và tạo thành cổng 8 bít Tất cả các cổng khi RESET đều được cấu hình làm cổng ra Để làm đầu vào thì cần được lập trình
- Cổng P0: Cổng P0 có 8 chân (từ chân 32 đến chân 39) Bình thường đây là cổng ra Để có thể vừa làm đầu ra vừa làm đầu vào thì mỗi chân phải được nối tới một điện trở kéo 10K bên ngoài Sở dĩ như vậy vì cổng P0 có dạng cực máng hở đây là điểm khác với các cổng P1, P2, P3
Với các điện trở kéo ngoài, khi khởi động lại, cổng P0 được cấu hình làm cổng
ra, hình 2.7 thể hiện mắc điện trở kéo cổng P0
8051 VCC
Trang 10- Cổng P1: Cổng P1 cũng có 8 chân từ chân 1 đến chân 8 và có thể sử dụng làm đầu vào hoặc ra Khác với cổng P0, cổng P1 không cần đến điện trở kéo vì nó
đã có các điện trở kéo bên trong Khi RESET cổng P1 được cấu hình làm cổng ra
Cổng P1 làm đầu vào: Để chuyển cổng P1 làm đầu vào cần lập trình bằng cách ghi 1 đến tất cả các bít của cổng
- Cổng P2: Cổng P2 cũng có 8 chân từ chân 21 đến chân 28 và có thể sử dụng làm đầu vào hoặc ra Cũng giống như cổng P1, cổng P2 không cần đến điện trở kéo vì nó đã có các điện trở kéo bên trong Khi RESET cổng P2 được cấu hình làm cổng ra
Để cổng P2 làm đầu vào thì cần được lập trình bằng cách ghi 1 đến tất cả các bít của cổng
- Cổng P3: Cổng P3 chiếm 8 chân từ chân 10 đến chân 17 và có thể sử dụng làm đầu vào hoặc ra Cũng giống như cổng P1và P2, cổng P3 không cần đến điện trở kéo Khi RESET cổng P3 được cấu hình làm cổng ra Tuy nhiên đây không phải là ứng dụng chủ yếu Cổng P3 có thêm 1 chức năng quan trọng khác là cung cấp 1 số tín hiệu đặc biệt, chẳng hạn như ngắt
Để cổng P3 làm đầu vào thì cần được lập trình bằng cách ghi 1 đến tất cả các bít của cổng
Bit Tên Số chân Chức năng
P3.0 RXD 10 Chân nhận dữ liệu truyền thông nối tiếp
P3.1 TXD 11 Chân truyền dữ liệu truyền thông nối tiếp
P3.2 INT0 12 Ngõ vào ngắt ngoài 0
P3.3 INT1 13 Ngõ vào ngắt ngoài 1
P3.4 T0 14 Ngõ vào của bộ counter 0 (đếm sự kiện ngoài 0) P3.5 T1 15 Ngõ vào của bộ counter 1 (đếm sự kiện ngoài 1) P3.6 WR 16 Điều khiển ghi bộ nhớ dữ liệu ngoài
P3.7 RD 17 Điều khiển đọc bộ nhớ dữ liệu ngoài
Bảng 2.3 Giới thiệu các chức năng khác của cổng P3
Trang 11VD: MOV A, # 57H ; Tức nạp giá trị 57H vào thanh ghi A
Dấu “ # “ là cơ sở để phân biệt chế độ định địa chỉ trực tiếp và chế độ định địa chỉ tức thì 2.1.3.3 Chế độ định địa chỉ thanh ghi
Chế độ định địa chỉ thanh ghi là sử dụng các thanh ghi để lưu dữ liệu cần thao tác VD: MOV A, R0; Sao nội dung thanh ghi R0 vào thanh ghi A
2.1.3.4 Chế độ định địa chỉ gián tiếp thanh ghi
Trong chế độ định địa chỉ gián tiếp thanh ghi địa chỉ của toán hạng được xác định thông qua 1 thanh ghi Các thanh ghi dùng để xác định địa chỉ là thanh ghi R0, R1 của băng thanh ghi hiện hành và thanh ghi DPTR Các thanh ghi có dấu “
@ “ đứng trước
VD: MOV A, @ R0; Chuyển ngăn nhớ RAM có địa chỉ ở R0 vào A
2.1.3.5 Chế độ định địa chỉ chỉ số thanh ghi
Trong chế độ này địa chỉ của toán hạng được xác định bằng tổng nội dung của thanh ghi A và thanh ghi DPTR hoặc thanh ghi PC
VD : MOV A, @ A + DPTR; Hoặc MOV A, @ A + PC;
2.1.4 Tập lệnh của 8051
2.1.4.1 Nhóm lệnh di chuyển dữ liệu
- MOV toán hạng đích, toán hạng nguồn: Di chuyển nội dung của toán hạng nguồn vào toán hạng đích Sau khi thực hiện toán hạng đích có nội dung của toán hạng nguồn, toán hạng nguồn không thay đổi giá trị
VD: MOV A, #5; Di chuyển giá trị 5 vào thanh ghi A khi đó A = 5
Trang 12- MOVX toán hạng đích, toán hạng nguồn: Di chuyển dữ liệu từ RAM ngoài vào thanh ghi A và ngược lại
VD: MOVX A, @R0; Chuyển ngăn nhớ RAM có địa chỉ ở R0 vào thanh ghi A
- MOVC toán hạng đích, toán hạng nguồn
- Lệnh cộng ADD: Ở 8051 để cộng 2 toán hạng cần phải sử dụng thanh ghi
A Cú pháp lệnh cộng ADD có dạng như sau:
ADD A, nguồn; A = A + nguồn
Lệnh này làm nhiệm vụ cộng nội dung của nguồn với thanh ghi A, kết quả lưu trên thanh ghi A Nếu tổng lớn hơn 255 cờ CY được đặt bằng 1 Nếu tổng nhỏ hơn
255 cờ CY được xóa về 0 Toán hạng đích luôn là thanh ghi A trong khi đó toán hạng nguồn có thể là một thanh ghi dữ liệu tức thời hoặc là bộ nhớ Lệnh này có thể thay đổi một trong các bit AF, CF hoặc PF của thanh ghi cờ phụ thuộc vào các toán hạng liên quan
- Lệnh trừ SUBB:
Cú pháp : SUBB A, nguồn;
Lệnh này làm nhiệm vụ trừ nội dung của thanh ghi A cho nguồn, kết quả lưu trên thanh ghi A Nếu giá trị của thanh ghi A nhỏ hơn nguồn thì cờ CY được đặt bằng 1 Nếu giá trị của thanh ghi A lớn hơn nguồn thì cờ CY được xóa bằng 0 Tương tự như lệnh cộng, ở lệnh trừ toán toán hạng đích cũng là thanh ghi A
và toán hạng nguồn có thể là thanh ghi dữ liệu tức thời hoặc bộ nhớ
Trang 13- Lệnh nhân MUL: Bộ vi điều khiển chỉ hỗ trợ phép nhân byte với byte Các byte được giả thiết là dữ liệu không dấu
Cấu trúc lệnh như sau: MUL AB ; Là phép nhân A B và kết quả 16 bit được đặt trong A và B
Khi nhân byte với byte thì một toán hạng ở thanh ghi A và toán hạng thứ hai ở thanh ghi B Kết quả của phép nhân được lưu ở thanh ghi A và B Trong đó byte thấp lưu ở thanh ghi A còn byte cao lưu ở thanh ghi B
Bảng 2.4 Tóm tắt phép nhân hai số không dấu (MUL AB)
- Lệnh chia DIV:
Cú pháp : DIV AB ; Chia A cho B
Khi chia một byte cho một byte thì tử số (số bị chia) phải ở trong thanh ghi A
và mẫu số (số chia) phải ở trong thanh ghi B Sau khi lệnh chia DIV được thực hiện thì thương số được đặt trong A, còn số dư được đặt trong B
Bảng 2.5 Tóm tắt phép chia không dấu
Cú pháp: ANL đích, nguồn; đích = đích Và nguồn (kẻ bảng)
Lệnh này thực hiện một phép Và logic trên hai toán hạng đích và nguồn và đặt kết quả vào đích Đích thường là thanh ghi tổng (tích luỹ) Toán hạng nguồn có thể là thanh ghi, bộ nhớ hoặc giá trị cho sẵn
ANL là lệnh đối với toán hạng dạng byte và không tác động lên các cờ Nó thường được dùng để che (đặt về 0) một số bít của toán hạng
Trang 14Cú pháp : ORL đích, nguồn ; đích = đích OR nguồn
Lệnh này thực hiện OR toán hạng đích với toán hạng nguồn, kết quả cất vào toán hạng đích Phép Hoặc có thể được dùng để thiết lập những bit nhất định của một toán hạng Toán hạng đích thường là thanh ghi tổng, toán hạng nguồn có thể là thanh ghi, bộ nhớ hoặc giá trị cho sẵn Lệnh ORL dùng cho toán hạng dạng byte
- Lệnh XOR (OR loại trừ)
Cú pháp: XRL đích, nguồn; đích = đích OR loại trừ nguồn
Lệnh này sẽ thực hiện phép XOR trên hai toán hạng và đặt kết quả vào đích Đích thường là thanh ghi tổng Toán hạng nguồn có thể là một thanh ghi, bộ nhớ hoặc giá trị cho sẵn XRL là lệnh dùng với toán hạng dạng byte và sẽ không tác
- Lệnh CPLA (lấy phần bù thanh ghi tích lũy):
Lệnh thực hiện lấy phần bù nội dung của thanh ghi tích lũy A Phép bù là phép đảo các bít 0 thành 1 và 1 thành 0 Phép đảo này còn gọi là phép bù 1
- Lệnh quay phải thanh ghi A
Trang 15Cú pháp: RR A ; Quay các bit thanh ghi A sang phải
Trong phép quay phải, 8 bit của thanh ghi tổng được quay sang phải một bit
và bit D0 rời từ vị trí bit thấp nhất và chuyển sang bit cao nhất D7
Hình 2.8 Lệnh quay phải
- Lệnh quay trái thanh ghi A
Cú pháp : RL A ; Quay trái các bit của thanh ghi A
Trong phép quay trái thì 8 bit của thanh ghi A được quay sang trái 1 bit và bit D7 rời khỏi vị trí bit cao nhất chuyển sang vị trí bit thấp nhất D0
Hình 2.9 Lệnh quay trái
Lưu ý rằng trong các lệnh RR và RL thì không có cờ nào bị tác động
- Lệnh quay phải thanh ghi A có nhớ
Hình 2.10 Lệnh quay phải thanh ghi A có nhớ
- Lệnh quay trái thanh ghi A có nhớ
Cú pháp : RLC A; Quay trái các bít của thanh ghi A
Trang 16Hình 2.11 Lệnh quay trái thanh ghi A có nhớ
- Lệnh trao đổi thanh ghi A: SWAP A
Một lệnh hữu ích khác nữa là lệnh trao đổi SWAP Nó chỉ hoạt động trên thanh ghi A, nó trao đổi nửa phần cao của byte và nửa phần thấp của byte với nhau Hay nói cách khác 4 bit cao được chuyển thành 4 bit thấp và 4 bit thấp thành
4 bit cao
2.1.4.4 Nhóm lệnh rẽ nhánh chương trình
Nhóm lệnh rẽ nhánh không điều kiện
Lệnh nhảy không điều kiện là lệnh nhảy trong đó điều khiển được truyền
không có điều kiện đến địa chỉ đích Ở 8051 có hai lệnh nhảy không điều kiện đó là: Lệnh nhảy dài LJMP và lệnh nhảy ngắn SJMP
- Lệnh nhảy dài LJMP ( long jump ):
- SETB toán hạng bít: Sau lệnh này toán hạng bít có giá trị bằng 1
- CLR toán hạng bít: Sau lệnh này toán hạng bít có giá trị bằng 0
- CPL toán hạng bít (lệnh lấy phần bù): Sau lệnh này toán hạng bít bằng giá trị đảo của nó
D7 - D4 D3 - D0 after: D3 - D0 D7 - D0 before:
Trang 17- Lệnh di chuyển toán hạng bít:
MOV C, toán hạng bít: Di chuyển toán hạng bít vào cờ C
MOV toán hạng bít, C: Di chuyển cờ C vào toán hạng bít
- ANL C, toán hạng bít: Thực hiện phép AND logic giữa toán hạng bít và
cờ C Kết quả lưu trên cờ C
- ORL C, toán hạng bít: Thực hiện phép ORL giữa toán hạng bít và cờ C
Kết quả lưu trên cờ C
2.1.5 Bộ timer/ Coun ter
8051 có 2 bộ Timer /Counter: Timer/ Counter0, Timer/ Counter1
* Timer/Counter là các bộ đếm:
- Timer: Đếm xung dao động bên trong VĐK, số đếm tăng lên 1 đơn vị tương
ứng với 1
- Counter: Đếm xung dao động bên ngoài, số đếm tăng lên 1 đơn vị tương
ứng với 1 xung dao động bên ngoài đưa dến chân P3.4 (Timer/ Counter0) hoặc
chân P3.5 (Timer/ Counter1)
* Các thanh ghi điều khiển của Timer/ Counter
- Thanh ghi TMOD
- Thanh ghi TCON
- Các thanh ghi chứa số đếm: THx, TLx (x = 0, 1): Là các thanh ghi 8 bít
nằm trong S FRs cho phép truy nhập mức byte
2.1.6 Ngắt
Ngắt là sự kiện xảy ra tại thời điểm bất kỳ làm gián đoạn tiến trình thực hiện
bình thường của chương trình 8051 có 6 nguồn ngắt tương ứng với 5 vectơ ngắt 2
ngắt ngoài INT0 (P3.2) và INT1 (P3.3)
- 2 ngắt Timer/ Counter: Ngắt Timer/ Counter 0 và ngắt Timer/ Counter 1
- 2 nguồn ngắt cổng nối tiếp: Ngắt truyền và ngắt nhận
* Các thanh ghi điều khiển ngắt
Thanh ghi cho phép ngắt IE
Thanh ghi ưu tiên ngắt IP
2.2 Giới thiệu giao tiếp TWI – I 2 C
Trang 18TWI (Two-Wire Serial Intereafce) là một module truyền thông nối tiếp đồng bộ trên các chip vi điều khiển dựa trên chuẩn truyền thông I2C
TWI (I2C) là một truyền thông nối tiếp đa chip chủ tức là trong cùng một bus
có thể có nhiều hơn một thiết bị làm Master, đồng thời một Slave có thể trở thành một Master nếu nó có khả năng.Trong đồ án này 8051 đóng vai trò là một Master, còn DS1307 là một Slaver TWI (I2C) được thực hiện trên 2 đường SDA (Serial DATA) và SCL (Serial Clock) trong đó SDA là đường truyền/nhận dữ liệu và SCL
là đường xung nhịp Theo chuẩn I2C, các đường SDA và SCL trên các thiết bị có cấu hình “cực góp mở” (open-drain hoặc open-collector), nghĩa là cần có các “điện trở kéo lên” (pull-up resistor) cho các đường này Ở trạng thái nghỉ (Idle), 2 chân SDA và SCL ở mức cao Hình 2.12 mô tả một mô hình mạng TWI (I2C) cơ bản
Hình 2.12 Mạng TWI (I2C) với nhiều thiết bị và 2 điện trở kéo lên cho SDA, SCL
Master: là chip khởi động quá trình truyền nhận, phát đi địa chỉ, địa chỉ cố định
được gọi bởi Master
SDA- Serial Data: là đường dữ liệu nối tiếp, tất cả các thông tin về địa chỉ hay dữ
liệu đều được truyền trên đường này theo thứ tự từng bit một Chú ý là trong chuẩn I2C, bit có trọng số lớn nhất (MSB) được truyền trước nhất
SCL - Serial Clock: là đường giữ nhịp nối tiếp TWI (I2C) là chuần truyền thông
nối tiếp đồng bộ, cần có 1 đường tạo xung giữ nhịp cho quá trình truyền/nhận, cứ mỗi xung trên đường giữ nhịp SCL, một bit dữ liệu trên đường SDA sẽ được lấy mẫu (sample) Dữ liệu nối tiếp trên đường SDA được lấy mẫu khi đường SCL ở mức cao trong một chu kỳ giữ nhịp, vì thế đường SDA không được đổi trạng thái khi SCL ở mức cao (trừ START và STOP condition) Chân SDA có thể được đổi trạng thái khi SCL ở mức thấp
Trang 19START Condition - Điều kiện bắt đầu: từ trạng thái nghỉ, khi cả SDA và
SCL ở mức cao nếu Master muốn thực hiện một “cuộc gọi”, Master sẽ kéo chân SDA xuống thấp trong khi SCL vẫn cao Trạng thái này gọi là START Condition
STOP Condition - Điều kiện kết thúc: sau khi thực hiện truyền/nhận dữ liệu,
nếu Master muốn kết thúc quá trình nó sẽ tạo ra một STOP condition STOP condition được Master thực hiện bằng cách kéo chân SDA lên cao khi đường SCL đang ở mức cao STOP condition chỉ được tạo ra sau khi địa chỉ truyền/nhận
REPEAT START – Bắt đầu lặp lại: khoảng giữa START và STOP
condition là khoảng bận của đường truyền, các Master khác không tác động được vào đường truyền trong khoảng này Trường hợp sau khi kết thúc truyền/nhận mà Master không gởi STOP condition lại gởi thêm 1 START condition gọi là REPEAT START Khả năng này thường được dùng khi Master muốn lấy dữ liệu liên tiếp từ các Slaves Hình bên dưới mô tả các Master tạo ra START, STOP và REPEAT START
Address Packet Format – Định dạng gói địa chỉ: trên mạng TWI (I2C),
Trang 20Phối hợp gói địa chỉ và dữ liệu: một quá trình truyền/nhận TWI (I2C) thường
được bắt đầu từ Master, Master phát đi một START condition sau đó gởi gói địa chỉ SLA+R/W trên đường truyền Tiếp theo nếu có một Slave đáp ứng lại, dữ liệu
có thể truyền/nhận liên tiếp trên đường truyền (1 hoặc nhiều byte liên tiếp) Khung truyền thông thường được mô tả như hình bên dưới
2.3 Khảo sát IC Realtime DS1307
DS1307 là một sản phẩm của Dallas Semiconductor (một công ty thuộc Maxim Integrated Products)
- Chân tương thích với MC146818B và DS107
- Hoạt động hoàn toàn ổn định trong vòng 10 năm khi thiếu hoặc nguồn nuôi không đủ
- Bản thân nó gồm nguồn nuôi Lithium bên trong hệ thống đồng hồ và mạch bảo vệ
- Bộ đếm năm, tháng, ngày, thứ, giờ, phút, giây có thể đảm bảo tới năm 2100
- Đồng hồ và lịch thời gian biểu diễn dưới dạng số nhị phân hay BCD
- Chế độ 12 hay 24 giờ với AM hay PM
- Có chế độ lưu trữ thời gian theo buổi
• 8 byte của thanh ghi Clock và thanh ghi điều khiển
• 56 byte còn lại là RAM đa chức năng
- Có thể lập trình xung out
Trang 212.3.1 Khảo sát sơ đồ chân của DS 1307 – Chức năng từng chân
Hình 2.13 Cấu tạo của DS1307
Trên hình 2.13 là dạng cấu tạo của DS1307 chíp này có 8 chân
+ X1 và X2 là đầu vào dao động cho DS1307 Cần dao động thạch anh 32.768Khz + Vbat là nguồn nuôi cho chip Nguồn này từ (2V- 3.5V) ta lấy pin có nguồn 3V
Đây là nguồn cho chip hoạt động liên tục khi không có nguồn Vcc
+ Vcc là nguồn cho giao tiếp I2C Điện áp cung cấp là 5V chuẩn và được dùng
chung với vi xử lý Nếu mà Vcc không có mà Vbat có thì DS1307 vẫn hoạt động bình thường nhưng mà không ghi và đọc được dữ liệu
+ SQW/OUT là một ngõ ra phụ tạo xung dao động (xung vuông)
+ GND là nguồn mass chung cả Vcc và Vbat
+ SCL và SDA là hai bus dữ liệu của DS1307 Thông tin truyền và ghi
Hình 2.14 Mạch ứng dụng của DS1307
2.3.2 Sơ đồ địa chỉ của Realtime Clock DS1307
- Chip này có 7 thanh ghi 8-bit chứa thời gian là: giờ, phút, giây và thứ (trong tuần), ngày, tháng, năm Ngoài ra DS1307 còn có 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống có thể dùng như RAM DS1307 được đọc và ghi thông qua giao diện nối tiếp I2C
2.3.3 Sơ đồ cấu trúc của DS1307
Trang 22H ình 2.15 Cấu trúc DS1307
Cấu tạo bên trong DS1307 bao gồm một số thành phần như mạch nguồn, mạch dao động, mạch điều khiển logic, mạch giao điện I2C, con trỏ địa chỉ và các thanh ghi (hay RAM) Sử dụng DS1307 là ghi và đọc các thanh ghi của chip này
2.3.4 Vị trí thời gian, lịch của DS1307
Bộ nhớ DS1307 có tất cả 64 thanh ghi 8-bit được đánh địa chỉ từ 0 đến 63 (từ 0x00 đến 0x3F theo hệ hexadecimal) Tuy nhiên, trong đồ án thì chúng em chỉ sử dụng 8 thanh ghi đầu là dùng cho chức năng “đồng hồ” còn lại 56 thanh ghi bỏ trống có thể được dùng chứa biến tạm như RAM Bảy thanh ghi đầu tiên chứa thông tin về thời gian của đồng hồ bao gồm: giây (SECONDS), phút (MINUETS), giờ (HOURS), thứ (DAY), ngày (DATE), tháng (MONTH) và năm (YEAR) Việc ghi giá trị vào 7 thanh ghi này tương đương với việc “cài đặt” thời gian khởi động cho RTC Việc đọc giá từ 7 thanh ghi là đọc thời gian thực mà chip tạo ra Tổ chức bộ nhớ của DS1307 được trình bày trong hình 2.16
Trang 23Hình 2.17 Tổ chức các thanh ghi thời gian
Điều đầu tiên là giá trị thời gian lưu trong các thanh ghi theo dạng BCD BCD
là viết tắt của cụm từ Binary-Coded Decimal
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 (do không có giây 60 ) nên chỉ cần 3 bit (các bit SECONDS6:4) là có thể
mã hóa được (số 5 = 101, 3 bit) Bit cao nhất, bit 7, trong thanh ghi này là 1 điều khiển có tên CH (Clock halt – treo đồng hồ), nếu bit này được set bằng 1 bộ dao động trong chip bị vô hiệu hóa, đồng hồ không hoạt động Vì vậy, nhất thiết phải reset bit này xuống 0 ngay từ đầu
Trang 24Thanh 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 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-bits thấp của thanh ghi này được dùng cho chữ số hàng đơn vị của giờ Do DS1307 hỗ trợ 2 loại hệ thống hiển thị giờ (gọi là mode) là 12h (1h đến 12h) và 24h (1h đến 24h) giờ, bit6 (màu green trong hình 4) 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ã hóa chữ số hàng chục của giá trị giờ Do giá trị lớn nhất của chữ số hàng chục trong trường hợp này là 2 (=10, nhị phân) nên 2 bit 5 và 4 là
đủ để mã hóa Nếu bit6=1 thì hệ thống 12h được chọn, với trường hợp này chỉ có bit 4 dùng mã hóa chữ số hàng chục của giờ, bit 5 (màu orange trong hình 2.12)
Thanh ghi thứ (DAY – ngày trong tuần): nằm ở địa chỉ 0x03 Thanh ghi
DAY chỉ mang giá trị từ 1 đến 7 tương ứng từ Chủ nhật đến thứ 7 trong 1 tuần Vì thế, chỉ có 3 bit thấp trong thanh ghi này có nghĩa
Thanh ghi DATE chứa ngày trong tháng (1 đến 31)
Thanh ghi tháng MONTH chứa tháng (1 đến 12)
Thanh ghi năm 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ố, phần đầu của năm do người dùng tự thêm vào (ví dụ 20xx) Ngoài các thanh ghi trong bộ nhớ, DS1307 còn có một thanh ghi khác nằm
riêng gọi là con trỏ địa chỉ hay thanh ghi địa chỉ (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
2.4 Giới thiệu IC 74LS247
Đây là IC dùng để chuyển tín hiệu dạng số nhị phân ở ngõ vào sang mã 7 đoạn
IC này hoạt động ở tích cực mức thấp Do đó ta có bảng chân thực sau:
Trang 25BCD inputs Segment outputs
Để IC hoạt động ta kết nối chân 16 (Vcc) với nguồn 5 V, chân số 8 với đất
Ngõ vào có 4 chân là 1, 2, 6,7 tương ứng với A, B, C, D trong đó mức ý nghĩa giảm dần từ A đến D Kết nối các ngõ ra A, B, C, D của IC với 8051 Các chân
LT, BI/RBO, RBI không cần kết nối Nếu ta dùng Led 7 đoạn kiểu Cathod chung thì mỗi ngõ ra của IC 7447 cần kết nối với các cổng đảo trước khi đến các chân của Led Chúng em có thể sử dụng thêm IC 7404
IC này được tích hợp 6 cổng đảo Do đó ngõ ra tích cực mức thấp, đầu ra của
IC 7447 sẽ chuyển thành mức cao khi qua IC7404 do đó làm cho led 7 đoạn kiểu Cathode chung hoạt động
Nếu sử dụng Led 7 đoạn kiểu Anode không cần dùng IC đảo 7404 mà chỉ cần 1 IC giải mã 74247
2.5 Kết luận chương 2
Sau khi nghiên cứu cơ sở lý thuyết em đã nắm được:
- Về 8051: Hiếu rõ thêm về cấu trúc, chức năng của các chân, các chế độ định địa chỉ, các tập lệnh, chế độ Timer/Count Tuy nhiên 8051 có rất nhiều ứng dụng khác mà bản thân không thể khai thác được
- Về giao tiếp I2C: Nắm được phương thức truyền nối tiếp I2C
Trang 26- Về DS1307: Nắm được cấu trúc, chức năng của từng chân, phương thức giao tiếp với 8051
Trang 27Chương 3 THIẾT KẾ VÀ THI CÔNG 3.1 Sơ đồ khối toàn mạch
G
Bộ Nguồn
E
Realtime
B
C
Vi Điều
74247 Led 7 đoạn
D
Trang 283.2.1.2 Sơ đồ nguyên lý bộ nguồn như sau
Mạch cung cấp nguồn này chủ yếu dùng để cung cấp cho IC nên đòi hỏi độ
ổn định cao do đó cần phải sử dụng mạch ổn áp Ta có sơ đồ nguyên lý mạch nguồn như sau:
Hình 3.2 Sơ đồ nguyên lý bộ nguồn
3.2.1.3 Nhiệm vụ các thiết bị
- Biến áp : Dùng để biến đổi điện áp xoay chiều U1 thành điện áp xoay chiều U2
có giá trị phù hợp với tải
- Mạch chỉnh lưu: Có nhiệm vụ biến đổi điện áp xoay chiều thành điện áp một chiều nhấp nhô (điện áp một chiều có độ lớn thay đổi theo thời gian)
- Bộ lọc: San bằng điện áp một chiều nhấp nhô thành điện áp một chiều bằng phẳng U4
- Bộ ổn áp ổn dòng: Có nhiệm vụ tạo ra điện áp một chiều ổn định U5 cung cấp cho tải, khi điện áp U4 hoặc trị số tải thay đổi
3.2.2 Khối dao động
3.2.2.1 Sơ đồ nguyên lý
Hình 3.6 Sơ đồ nguyên lý khối dao động
VI ĐIỀU KHIỂN 89C51
33pF
33pF 12MHz
XTAL2 18
XTAL1 19
7805
12 V
~220V
Máy biến áp
103F 50V
+
103F 25V