Đề tài Thiết kế lịch vạn niên điện tử

Tài liệu Đề tài Thiết kế lịch vạn niên điện tử: TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ BỘ MÔN ĐIỆN TỬ VIỄN THÔNG A & @ LUẬN VĂN TỐT NGHIỆP CHUYÊN NGÀNH ĐIỆN TỬ VIỄN THÔNG THIẾT KẾ LỊCH VẠN NIÊN ĐIỆN TỬ Giáo viên hướng dẫn: Sinh viên thực hiện: TS.LƯƠNG VINH QUỐC DANH NGUYỄN VĂN BÌNH MSSV: 1071075 Lớp: Điện Tử Viễn Thông 2.K33 Cần Thơ - 2010 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN LỜI CẢM TẠ Đầu tiên em xin gửi lời cảm ơn đến Ban Giám Hiệu trường Đại Học Cần Thơ đã cho em một môi trường học tập tốt, cũng như là tạo nhiều điều kiện thuận lợi để em có thể phát huy được khả năng của mình. Em xin chân thành cảm ơn đến quý Thầy/Cô, đặc biệt là quý Thầy/Cô trong bộ môn Điện Tử -Viễn Thông thuộc khoa Công Nghệ trường Đại Học Cần Thơ đã tận tình chỉ dạy và truyền đạt những kiến thức quý báu để em có thể hoàn thành luận án này, đồng thời đó cũng là một hành trang đáng quý để em có thể tiếp bước trên con đường sự nghiệp sau này. Em xin bài tỏ lòng biết ơn sâu sắc đối với thầy Lương Vinh Quốc Danh là người tận tình hướng dẫn v...

doc107 trang | Chia sẻ: hunglv | Lượt xem: 1480 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Thiết kế lịch vạn niên điện tử, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CƠNG NGHỆ BỘ MƠN ĐIỆN TỬ VIỄN THƠNG A & @ LUẬN VĂN TỐT NGHIỆP CHUYÊN NGÀNH ĐIỆN TỬ VIỄN THƠNG THIẾT KẾ LỊCH VẠN NIÊN ĐIỆN TỬ Giáo viên hướng dẫn: Sinh viên thực hiện: TS.LƯƠNG VINH QUỐC DANH NGUYỄN VĂN BÌNH MSSV: 1071075 Lớp: Điện Tử Viễn Thơng 2.K33 Cần Thơ - 2010 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN LỜI CẢM TẠ Đầu tiên em xin gửi lời cảm ơn đến Ban Giám Hiệu trường Đại Học Cần Thơ đã cho em một mơi trường học tập tốt, cũng như là tạo nhiều điều kiện thuận lợi để em cĩ thể phát huy được khả năng của mình. Em xin chân thành cảm ơn đến quý Thầy/Cơ, đặc biệt là quý Thầy/Cơ trong bộ mơn Điện Tử -Viễn Thơng thuộc khoa Cơng Nghệ trường Đại Học Cần Thơ đã tận tình chỉ dạy và truyền đạt những kiến thức quý báu để em cĩ thể hồn thành luận án này, đồng thời đĩ cũng là một hành trang đáng quý để em cĩ thể tiếp bước trên con đường sự nghiệp sau này. Em xin bài tỏ lịng biết ơn sâu sắc đối với thầy Lương Vinh Quốc Danh là người tận tình hướng dẫn và động viên em trong suốt thời gian em thực hiện luận văn tốt nghiệp này. Để hồn thành luận văn tốt nghiệp này cũng cĩ sự đĩng gĩp khơng nhỏ của các bạn. Tơi xin được gởi lời cảm ơn đến tất cả các bạn. Ngồi ra tơi cũng xin gửi lời cảm ơn đến tất cả những người thân xung quanh đã giúp đỡ về vật chất và tinh thần để tơi cĩ thể hồn thành xong luận văn tốt nghiệp này. Cần Thơ ngày tháng năm 2010 Sinh viên thực hiện Nguyễn Văn Bình TĨM TẮT ĐỀ TÀI Lịch Vạn Niên Điện Tử thiết kế dựa trên sự kết hợp giữa IC thời gian thực (DS1307) và vi điều khiển 89S52 với bộ điều khiển sử dụng remote hồng ngoại. Ngồi ra mạch cịn sử dụng cảm biến nhiệt độ (LM35) cùng với bộ biến đổi từ tương tự sang số (ADC0804) để đo nhiệt độ xung quanh và hiển thị ra led 7 đoạn. Với bộ điều khiển dùng remote hồng ngoại, chúng ta cĩ thể chọn thời gian báo thức hoặc điều chỉnh giờ, ngày, tháng…. rất dễ dàng và thuận tiện (giống như sử dụng Romote để điều khiển một chiếc TV vậy!). Mạch đã thiết kế thành cơng, hoạt động ổn định với độ chính xác cao. ABSTRACT Electronic perpetual calendar designed based on a combination of real-time IC (DS1307) and 89S52 microcontroller with controller using infrared remote. In addition, it uses a temperature sensor circuit ( LM35) with the transformation from analog to digital (ADC0804) to measure ambient temperature and the LED 7 segment display. With the controller using infrared remote, we can select the alarm time or adjust hours, days, months .... very easy and convenient (like Romote used to control a TV too!). The circuit was successfully designed, stable operation with high accuracy. Key word: Infrared remote, measure temperature and calendar Title: Electronic perpetual calendar MỤC LỤC CHƯƠNG I: MỞ ĐẦU I. KHÁI QUÁT VẤN ĐỀ Trong giai đoạn hiện nay với sự phát triển vượt bật của cơng nghệ Nano hàng loạt IC mới được chế tạo. Những IC này thơng minh hơn rất nhiều so với các IC trước và đặc biệt là chúng ta cĩ thể ghi/xĩa dữ liệu vào một cách dể dàng. Vì thế nĩ được sử dụng trong nhiều thiết bị Điện - Điện Tử và ngày càng thể hiện được bản chất ưu việt của mình. Điển hình là dịng IC 8051/8052. Với sự ra đời của dịng IC mới đã làm thúc đẩy sự phát triển của nhũng IC thời gian thực như DS1307, DS12887… Song song đĩ truyền dữ liệu khơng dây cũng bắt phát triển với nhiều kiểu truyền khác nhau và phức tạp, trong tất cả các kiểu truyền đĩ thì truyền dữ liệu bằng tia hồng ngoại được xem là đơn giản nhất. Cùng với sự phát triển của khoa học kỹ thuật đã gĩp phần nâng cao đời sống của con người. Cũng chính vì thế mà mọi người cần phải biết chính xác ngày, giờ để thu xếp việc làm cho hợp lý. Xuất phát từ thực tiển này em đã đi đến quyết định “Thiết kế Lịch Vạn Niên Điện Tử”. Nhằm đáp ứng nhu cầu ham muốn học hỏi của bản thân, cũng như là gĩp phần nâng giá trị của những mạch điện tử trong đời sống của con người. II. LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ Đề tài này trước khi tơi thực hiện đã cĩ một số sinh viên trường đại học Bách Khoa Thành Phố Hồ Chí Minh thực hiện nhưng kết quả chưa được như mong muốn vì mạch chạy khơng ổn định và thường hay bị “treo”. Hơn nửa họ chỉ “Thiết kế Lịch Vạn Niên Điện Tử” với những cơng tắt để điều chỉnh, khơng dùng remote hồng ngoại để điểu chỉnh. Chính vì thế tơi quyết định chọn đề tài này và kết hợp thêm bộ điều khiển từ xa dùng remote hồng ngoại. Vì tơi mong muốn tạo ra một thiết bị với nhiều thuận lợi hơn cho người dùng và độ tin cậy cao. III. MỤC ĐÍCH YÊU CẦU CỦA ĐỀ TÀI Trong luận án này tơi sử dụng một con IC thời gian thực (DS1307) kết hợp với vi điều khiển 89S52 để tạo thành giao diện I2C, 89S52 cĩ nhiệm vụ đọc/ghi (giờ, phút, giây, thứ, ngày…..thời gian báo thức) từ chip DS1307. Khi thời gian báo thức trùng với thời gian thực thì loa sẽ phát ra âm thanh trong 1 phút, đồng thời khi cĩ tín hiệu phát ra từ remote hồng ngoại thì 89S52 bắt đầu giãi mã tín hiệu này, sau khi giải mã 89S52 ghi dữ liệu nhận được vào DS1307. Ngồi ra mạch cịn sử dụng cảm biến nhiệt (LM35), ngỏ ra của cảm biến này được đưa qua bộ biến đổi tương tự sang số (ADC0804), dữ liệu được 89S52 đọc ra từ ADC0804 và hiển thị kết quả ra led 7 đoạn. Từ đây cĩ thể suy ra mục đích yêu cầu của đề tài như sau: Mạch hiển thị giờ, phút, giây, thứ, ngày, tháng, năm một cách chính xác Đo nhiệt độ và hiển thị ra led 7 đoạn Bộ cài đặt thời gian được sử dụng bằng remote hồng ngoại, xác xuất lỗi khi ấn remote là thấp nhất Khi thời gian báo thức trùng với thời gian thực thì loa phải phát ra âm thanh báo thức Giá thành sản phẩm khơng quá đắc. Dựa vào yêu cầu của đề tài tơi đã phân ra thành 2 khối lớn: Khối A: Đo nhiệt độ và hiển thị kết quả ra led 7 đoạn Khối B: Đồng hồ thời gian thực và bộ điều khiển từ xa dùng remote hồng ngoại CHƯƠNG II: CƠ SỞ LÝ THUYẾT ĐO NHIỆT ĐỘ I.GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 89S52 1. Tổng quan về 89S52 AT89S52 là họ IC vi điều khiển do hãng Intel sản xuất. Các sản phẩm AT89S52 thích hợp cho những ứng dụng điều khiển. Việc xử lý trên byte và các tốn số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế độ truy xuất dữ liệu nhanh trên RAM nội. Tập lệnh cung cấp một bảng tiện dụng của những lệnh số học 8 bit gồm cả lệnh nhân và lệnh chia. Nĩ cung cấp những hổ trợ mở rộng trên chip dùng cho những biến một bit như là kiểu dữ liệu riêng biệt cho phép quản lý và kiểm tra bit trực tiếp trong hệ thống điều khiển. AT89S52 cung cấp những đặc tính chuẩn như: 8 KByte bộ nhớ chỉ đọc cĩ thể xĩa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 3 TIMER/COUNTER 16 Bit, 5 vectơ ngắt cĩ cấu trúc 2 mức ngắt, một Port nối tiếp bán song cơng, 1 mạch dao động tạo xung Clock và bộ dao động ON-CHIP. Các đặc điểm của chip AT89S52 được tĩm tắt như sau: 8 KByte bộ nhớ cĩ thể lập trình nhanh, cĩ khả năng tới 1000 chu kỳ ghi/xố Tần số hoạt động từ: 0Hz đến 24 MHz 3 mức khĩa bộ nhớ lập trình 3 bộ Timer/counter 16 Bit 128 Byte RAM nội. 4 Port xuất /nhập I/O 8 bit. Giao tiếp nối tiếp. 64 KB vùng nhớ mã ngồi 64 KB vùng nhớ dữ liệu ngoại. 4 ms cho hoạt động nhân hoặc chia Sơ đồ khối của AT89S52 2. Mơ tả chân 89S52 2.1. Sơ đồ chân 89S52 AT89S52 Mặc dù các thành viên của họ 8051(ví dụ 8751, 89S52, 89C51, DS5000) đều cĩ các kiểu đĩng vỏ khác nhau, chẳng hạn như hai hàng chân DIP (Dual In-Line Pakage), dạng vỏ dẹt vuơng QPF (Quad Flat Pakage) và dạng chip khơng cĩ chân đỡ LLC (Leadless Chip Carrier) thì chúng đều cĩ 40 chân cho các chức năng khác nhau như vào ra I/O, đọc , ghi , địa chỉ, dữ liệu và ngắt. Cần phải lưu ý một số hãng cung cấp một phiên bản 8051 cĩ 20 chân với số cổng vào ra ít hơn cho các ứng dụng yêu cầu thấp hơn. Tuy nhiên vì hầu hết các nhà phát triển sử dụng chíp đĩng vỏ 40 chân với hai hàng chân DIP nên ta chỉ tập trung mơ tả phiên bản này. 2.2. Chức năng của các chân 89S52 Port 0: từ chân 32 đến chân 39 (P0.0 _P0.7). Port 0 cĩ 2 chức năng: trong các thiết kế cỡ nhỏ khơng dùng bộ nhớ mở rộng nĩ cĩ chức năng như các đường IO, đối với thiết kế lớn cĩ bộ nhớ mở rộng nĩ được kết hợp giữa bus địa chỉ và bus dữ liệu. Port 1: từ chân 1 đến chân 9 (P1.0 _ P1.7). Port 1 là port IO dùng cho giao tiếp với thiết bị bên ngồi nếu cần. Port 2: từ chân 21 đến chân 28 (P2.0 _P2.7). Port 2 là một port cĩ tác dụng kép dùng như các đường xuất/nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng. Port 3: từ chân 10 đến chân 17 (P3.0 _ P3.7). Port 3 là port cĩ tác dụng kép. Các chân của port này cĩ nhiều chức năng, cĩ cơng dụng chuyển đổi cĩ liên hệ đến các đặc tính đặc biệt của 89S52 như ở bảng sau: Bit Tên Chức năng chuyển đổi P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD TXD INT0 INT1 T0 T1 WR RD Ngõ vào dữ liệu nối tiếp. Ngõ xuất dữ liệu nối tiếp. Ngõ vào ngắt cứng thứ 0. Ngõ vào ngắt cứng thứ 1. Ngõ vào TIMER/ COUNTER thứ 0. Ngõ vào của TIMER/ COUNTER thứ 1. Tín hiệu ghi dữ liệu lên bộ nhớ ngồi. Tín hiệu đọc bộ nhớ dữ liệu ngồi. PSEN (Program store enable): PSEN là tín hiệu ngõ ra cĩ tác dụng cho phép đọc bộ nhớ chương trình mở rộng và thường được nối đến chân OE của Eprom cho phép đọc các byte mã lệnh. PSEN ở mức thấp trong thời gian 89S52 lấy lệnh. Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu, được chốt vào thanh ghi lệnh bên trong 89S52 để giải mã lệnh. Khi 89S52 thi hành chương trình trong ROM nội, PSEN ở mức cao. ALE (Address Latch Enable): Khi 89S52 truy xuất bộ nhớ bên ngồi, Port 0 cĩ chức năng là bus địa chỉ và dữ liệu do đĩ phải tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng với IC chốt. Tín hiệu ở chân ALE là một xung trong khoảng thời gian port 0 đĩng vai trị là địa chỉ thấp nên chốt địa chỉ hồn tồn tự động. EA (External Access): Tín hiệu vào EA (chân 31) thường được mắc lên mức 1 hoặc mức 0. Nếu ở mức 1, 89S52 thi hành chương trình từ ROM nội. Nếu ở mức 0, 89S52 thi hành chương trình từ bộ nhớ mở rộng. Chân EA được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89S52. RST (Reset): Khi ngõ vào tín hiệu này đưa lên mức cao ít nhất 2 chu kỳ máy, các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. Khi cấp điện mạch phải tự động reset. Các giá trị tụ và điện trở được chọn là: R1=10W, R2=220W, C=10 mF. Các ngõ vào bộ dao động X1, X2: Bộ tạo dao động được tích hợp bên trong 89S52. Khi sử dụng 89S52, người ta chỉ cần nối thêm thạch anh và các tụ. Tần số thạch anh tùy thuộc vào mục đích của người sử dụng, giá trị tụ thường được chọn là 33p. 3. Tổ chức bộ nhớ bên trong 89S52 Bộ nhớ trong 89S52 bao gồm ROM và RAM. RAM trong 89S52 bao gồm nhiều thành phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hĩa từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt. AT89S52 cĩ bộ nhớ được tổ chức theo cấu trúc Harvard: cĩ những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu. Chương trình và dữ liệu cĩ thể chứa bên trong 89S52 nhưng 89S52 vẫn cĩ thể kết nối với 64K byte bộ nhớ chương trình và 64K byte dữ liệu bên ngồi. Địa chỉ byte Địa chỉ bit Địa chỉ bit Địa chỉ byte Bản đồ bộ nhớ Data bên trong Chip 89S52 được tổ chức như sau: RAM bên trong AT89S52 được phân chia như sau: u Các bank thanh ghi cĩ địa chỉ từ 00H đến 1FH. u RAM địa chỉ hĩa từng bit cĩ địa chỉ từ 20H đến 2FH. u RAM đa dụng từ 30H đến 7FH. u Các thanh ghi chức năng đặc biệt từ 80H đến FFH 3.1. RAM đa dụng RAM đa dụng cĩ địa chỉ từ 30h – 7Fh cĩ thể truy xuất mỗi lần 8 bit bằng cách dùng chế độ định địa chỉ trực tiếp hay gián tiếp. Các vùng địa chỉ thấp từ 00h – 2Fh cũng cĩ thể sử dụng cho mục đích như trên, ngồi các chức năng đặc biệt được đề cập ở phần sau. 3.2. RAM cĩ thể định địa chỉ bit Vùng địa chỉ từ 20h -2Fh gồm 16 byte cĩ thể thực hiện như vùng RAM đa dụng (truy xuât mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh xử lý bit. 3.3. Các bank thanh ghi Vùng địa chỉ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h – 07h, bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18h – 1Fh. Các bank thanh ghi này được đại diện bằng các thanh ghi từ R0 đến R7. Sau khi khởi động thì hệ thống bank 0 được chọn sử dụng. Do cĩ 4 bank thanh ghi nên tại một thời điểm chỉ cĩ một bank thanh ghi được truy xuất bởi các thanh ghi R0 đến R7. Viêc thay đổi bank thanh ghi được thực hiện thơng qua thanh ghi từ trạng thái chương trình (PSW). 3.4. Các thanh ghi cĩ chức năng đặc biệt Các thanh ghi trong 89S52 được định dạng như một phần của RAM trên chip vì vậy mỗi thanh ghi sẽ cĩ một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình và thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp). Cũng như R0 đến R7, 89S52 cĩ 21 thanh ghi cĩ chức năng đặc biệt (SFR: Special Function Register) ở vùng trên của RAM nội từ địa chỉ 80H đến 0FFH. Sau đây là một vài thanh ghi đặc biệt thường được sử dụng: 3.4.1. Thanh ghi trạng thái chương trình (PSW: Program Status Word) BIT SYMBOL ADDRESS DESCRIPTION PSW.7 CY D7H Cary Flag PSW.6 AC D6H Auxiliary Cary Flag PSW.5 F0 D5H Flag 0 PSW4 RS1 D4H Register Bank Select 1 PSW.3 RS0 D3H Register Bank Select 0 00=Bank 0; address 00H¸07H 01=Bank 1; address 08H¸0FH 10=Bank 2; address 10H¸17H 11=Bank 3; address 18H¸1FH PSW.2 OV D2H Overlow Flag PSW.1 - D1H Reserved PSW.0 P DOH Even Parity Flag Chức năng từng bit trạng thái chương trình - Cờ Carry CY (Carry Flag): Cờ nhớ thường nĩ được dùng cho các lệnh tốn học: C =1 nếu phép tốn cộng cĩ sự tràn hoặc phép trừ cĩ mượn và ngược lại C = 0 nếu phép tốn cộng khơng tràn và phép trừ khơng cĩ mượn. - Cờ Carry phụ AC (Auxiliary Carry Flag): Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC được set nếu kết quả 4 bit thấp nằm trong phạm vi điều khiển 0AH - 0FH. Ngược lại AC = 0 - Cờ 0 (Flag 0): Cờ 0 (F0) là 1 bit cờ đa dụng dùng cho các ứng dụng của người dùng. - Những bit chọn bank thanh ghi truy xuất: RS1 và RS0 quyết định dãy thanh ghi tích cực. Chúng được xĩa sau khi reset hệ thống và được thay đổi bởi phần mềm khi cần thiết. Tùy theo RS1, RS0 = 00, 01, 10, 11 sẽ được chọn Bank tích cực tương ứng là Bank 0, Bank1, Bank2 và Bank3. RS1 RS0 BANK 0 0 0 0 1 1 1 0 2 1 1 3 - Cờ tràn OV (Over Flag): Cờ tràn được set sau một hoạt động cộng hoặc trừ nếu cĩ sự tràn tốn học. - Bit Parity (P): Bit tự động được set hay Clear ở mỗi chu kỳ máy để lập Parity chẵn với thanh ghi A. Sự đếm các bit 1 trong thanh ghi A cộng với bit Parity luơn luơn chẵn. Ví dụ A chứa 10101101B thì bit P set lên một để tổng số bit 1 trong A và P tạo thành số chẵn. Bit Parity thường được dùng trong sự kết hợp với những thủ tục của Port nối tiếp để tạo ra bit Parity trước khi phát đi hoặc kiểm tra bit Parity sau khi thu. 3.4.2. Thanh ghi TIMER Vi Điều Khiển 89S52 cĩ 3 timer 16 bit, mỗi timer cĩ bốn cách làm việc. Người ta sử dụng các timer để: Định khoảng thời gian. Đếm sự kiện. Tạo tốc độ baud cho port nối tiếp trong 89S52. Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở những 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 như kiểm tra trạng thái của các ngõ vào hoặc gửi 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 độ rộng xung). 3.4.3. Thanh ghi ngắt (INTERRUPT) Một ngắt là sự xảy ra một điều kiện, một sự kiện mà nĩ gây ra treo tạm thời thời chương trình chính trong khi điều kiện đĩ được phục vụ bởi một chương trình khác. Các ngắt đĩng một vai trị quan trọng trong thiết kế và cài đặt các ứng dụng vi điều khiển. Chúng cho phép hệ thống đáp ứng bất đồng bộ với một sự kiện và giải quyết sự kiện đĩ trong khi một chương trình khác đang thực thi. - Tổ chức ngắt của 89S52: Cĩ 5 nguồn ngắt ở 89S52: 2 ngắt ngồi, 2 ngắt từ timer và 1 ngắt port nối tiếp. Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi reset hệ thống và được cho phép từng cái một bằng phần mềm. Mức độ ưu tiên của các ngắt được lưu trong thanh ghi IP (Interrupt Priority) hay nĩi cách khác thanh ghi IP cho phép chọn mức ưu tiên cho các ngắt (giá trị thanh ghi IP khi reset là 00h). Bit Ký hiệu Địa chỉ bit Mơ tả IP.7 _ _ Khơng được mơ tả IP.6 _ _ Khơng được mơ tả IP.5 ET2 BDH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại timer 2 IP.4 ES BCH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại cổng nối tiếp. IP.3 ET1 BBH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại timer 1 IP.2 EX1 BAH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại ngắt ngồi 1 IP.1 ET0 B9H Chọn mức ưu tiên cao (=1) hay thấp (=0) tại timer 0 IP.0 EX0 B8H Chọn mức ưu tiên cao (=1) hay thấp (=0) tại ngắt ngồi 0 Tĩm tắt thanh ghi IP đ Nếu 2 ngắt xảy ra đồng thời thì ngắt nào cĩ nào cĩ mức ưu tiên cao hơn sẽ được phục vụ trước. đ Nếu 2 ngắt xảy ra đồng thời cĩ cùng mức ưu tiên thì thứ tự ưu tiên được thực hiện từ cao đến thấp như sau: ngắt ngồi 0 – timer 0 – ngắt ngồi 1 – timer 1 – cổng nối tiếp – timer 2. đ Nếu chương trình của một ngắt cĩ mức ưu tiên thấp đang chạy mà cĩ một ngắt xảy ra với mức ưu tiên cao hơn thì chương trình này tạm dừng để chạy một chương trình khác cĩ mức ưu tiên cao hơn. - Cho phép và cấm ngắt: Mỗi nguồn ngắt được cho phép hoặc cấm ngắt qua một thanh ghi chức năng đặt biệt cĩ định địa chỉ bit IE (Interrupt Enable: cho phép ngắt) ở địa chỉ A8H. Bit Ký hiệu Địa chỉ bit Mơ tả IE.7 EA AFH Cho phép / Cấm tồn bộ IE.6 _ AEH Khơng được mơ tả IE.5 ET2 ADH Cho phép ngắt từ Timer 2 (8052) IE.4 ES ACH Cho phép ngắt port nối tiếp IE.3 ET1 ABH Cho phép ngắt từ Timer 1 IE.2 EX1 AAH Cho phép ngắt ngồi 1 IE.1 ET0 A9H Cho phép ngắt từ Timer 0 IE.0 EX0 A8H Cho phép ngắt ngồi 0 Tĩm tắt thanh ghi IE - Các cờ ngắt: Khi điều kiện ngắt xảy ra thì ứng với từng loại ngắt mà loại cờ đĩ được đặt lên mức cao để xác nhận ngắt. Ngắt Cờ Thanh ghi SFR và vị trí bit Bên ngồi 0 IE0 TCON.1 Bên ngồi 1 IE1 TCON.3 Timer 1 TF1 TCON.7 Timer 0 TF0 TCON.5 Port nối tiếp TI SCON.1 Port nối tiếp RI SCON.0 Các loại cờ ngắt - Các vectơ ngắt: Khi chấp nhận ngắt, giá trị được nạp vào PC gọi là vector ngắt. Nĩ là địa chỉ bắt đầu của ISR cho nguồn tạo ngắt, các vector ngắt được cho ở bảng sau : Ngắt Cờ Địa chỉ vector Reset hệ thống RST 0000H Bên ngồi 0 IE0 0003H Timer 0 TF0 000BH Bên ngồi 1 IE1 0013H Timer 1 TF1 001BH Port nối tiếp TI và RI 0023H Timer 2 002BH Vector reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vì theo nghĩa này, nĩ giống ngắt: nĩ ngắt chương trình chính và nạp cho PC giá trị mới. II. SƠ LƯỢC VỀ CẢM BIẾN NHIỆT LM35D Cảm biến nhiệt LM35D là một mạch tích hợp nhận tín hiệu nhiệt độ từ mơi trường bên ngồi sau đĩ chuyển thành tín hiệu điện dưới dạng dịng điện hay điện áp. Dựa vào đặc tính rất nhạy của các bán dẫn với nhiệt độ, tạo ra điện áp hoặc dịng điện tỷ lệ thuận với nhiệt độ tuyệt đối. Đo tín hiệu điện ta biết được giá trị của nhiệt độ cần đo. Sự tác động của nhiệt độ tạo ra điện tích tự do và các lỗ trống trong chất bán dẫn. Bằng sự phá vỡ các phân tử, bứt các electron thành dạng tự do di chuyển qua vùng cấu trúc mạng tinh thể tạo sự xuất hiện các lỗ trống. Làm cho tỷ lệ điện tử tự do và lỗ trống tăng lên theo quy luật hàm mũ với nhiệt độ. Ngõ ra của LM35D là dạng điện áp thay đổi theo nhiệt độ bên ngồi với độ nhạy 10mv/10C Sai số cực đại 1.50C khi nhiệt độ lớn hơn 1000C. Phạm vi sử dụng: 00 C ≥ t0C ≤ 1000 C III. KHÁI QUÁT VỀ ADC0804 1. Mơ tả chân ADC0804 Chip ADC0804 là bộ chuyển đổi tương tự- số thuộc họ ADC800 của hãng National Semiconductor. Chip này cũng được nhiều hãng khác sản xuất. Chip cĩ điện áp nuơi +3V và độ phân giải 8 bit. Ngồi độ phân giải thì thời gian chuyển đổi cũng là một thơng số quan trọng để đánh giá bộ ADC. Thời gian chuyển đổi là thời gian mà bộ ADC cần để chuyển một đầu vào tương tự thành một số nhị phân. Đối với ADC0804 thì thời gian chuyển đổi phụ thuộc vào tần số đồng hồ được cấp tới chân CLK R (pin 19) và CLK IN (pin 4) và khơng bé hơn 110μs. Các chân khác cĩ các chức năng: CS (Chip select): Chân số 1 là chân chọn chip, đầu vào tích cực mức thấp được sử dụng để kích hoạt chip ADC 0804. Để truy cập chip ADC thì chân này phải ở mức thấp. RD (Read): Chân số 2 là một tín hiệu vào, tích cực mức thấp. Các bộ chuyển đổi đầu vào tương tự thành số nhị phân và giữ nĩ vào một thanh ghi bên trong. RD được sử dụng để xuất dữ liệu đã được chuyển đổi tới đầu ra của ADC0804. Khi CS = 0 nếu cĩ một xung cao xuống thấp áp đến chân RD thì dữ liệu ra dạng số 8 bit được đưa tới chân dữ liệu (DB0- DB7). WR (Write): Chân số 3 là chân vào tích cực mức thấp được dùng để báo cho ADC biết bắt đầu quá trình chuyển đổi. Khi việc chuyển đổi hồn tất thì chân INTR được ADC hạ xuống mức thấp. Khi CS = 0 nếu cĩ một xung từ thấp lên cao áp đến chân WR thì quá trình chuyển đổi được thực hiện. CLK IN và CLK R: CLK IN là chân vào nối tới đồng hồ ngoại được sử dụng để tạo thời gian. Tuy nhiên ADC cũng cĩ một bộ tạo xung đồng hồ riêng. Để dùng đồng hồ riêng thì các chân CLK IN và CLK R được nối tới một tụ điện và một điện trở. Khi đĩ tần số được xác định bằng biểu thức: Ở đây R=10KΩ, C= 150pF suy ra tần số f = 606 kHz và thời gian chuyển đổi là 110μs. Ngắt INTR (Interupt): Chân số 5 là chân tích cực mức thấp. Bình thường chân này ở trạng thái cao và khi việc chuyển đổi hồn tất thì nĩ xuống thấp để báo cho CPU biết là dữ kiệu chuyển đổi sẵn sàng để lấy đi. Sau khi INTR xuống thấp, cần đặt CS = 0 và gửi một xung cao xuống thấp tới chân RD để đưa dữ liệu ra. Vin(+) và Vin(-): Chân số 6 và chân số 7 đây là đầu vào tương tự vi sai, trong đĩ Vin = Vin(+) - Vin(-). Thơng thường Vin(-) được nối với đất và Vin(+) được dùng làm đầu vào tương tự và sẽ được chuyển đổi về dạng số. Ø Vcc: Chân số 20 là chân nguồn +5V. Chân này cịn được dùng làm điện áp tham chiếu khi đầu vào Vref/2 để hở. Vref/2: Chân số 9 là chân điện áp đầu vào được dùng làm điện áp tham chiếu. Nếu chân này để hở thì điện áp đầu vào tương tự cho ADC nằm trong dải 0 ’ +5V. Chân Vref/2 được dùng để thực hiện các điện áp đầu ra khác 0 ’ +5V. Vref/2 (V) Vin(V) Kích thước bước (mV) Hở 0-5 5/256=19.53 2.0 0-4 4/256=15.62 1.5 0-3 3/256=11.71 1.28 0-2.56 2.56/256=10 1.0 0-2 2/256=7.81 0.5 0-1 1/256=3.90 Chú ý: Do tín hiệu ra của cảm biến nhiệt (LM35D) cĩ độ phân giải là 10mV, do đĩ ta cũng phải chọn độ phân giải của bộ biên đổi sau cho phù hợp. Cĩ nhiều cách để lựa chọn cho phù hợp, ở mạch này tơi chọn độ phân giải của bộ biến đổi ADC0804 là 19.53mV. Chính vì thế trước khi đưa dữ liệu qua bộ biến đổi tơi phải cho qua mạch khuếch đại với độ khuếch đại (chọn K=1.97) để đảm bảo nhiệt độ hiển thị ra tương đối chính xác. D0- D7: D0- D7 (chân 18- 11) là các chân ra dữ liệu số (D7 là bit cao nhất MSB và D0 là bit thấp nhất LSB). Các chân này được đệm 3 trạng thái và dữ liệu đã được chuyển đổi chỉ được truy cập khi chân CS = 0 và chân RD đưa xuống mức thấp. 2. Tổ chức bên trong ADC0804 Sơ đồ khối bên trong ADC0804 2.1. Quá trình chuyển đổi của chip ADC0804 Chip ADC0804 bắt đầu thực hiện quá trình chuyển đổi khi cĩ một sự thay đổi mức logic từ thấp lên cao (xung cạnh lên) tại chân WR, trong khi chân CS ở mức thấp và chân RD ở mức cao. Sau khi thực hiện xong quá trình chuyển đổi thì chân INTR được ADC0804 kéo xuống mức thấp (mức thấp là 0, mức cao là 1). Tồn bộ quá trình chuyển đổi được mơ tả như sau: Quá trình chuyển đổi của chip ADC0804 2.2. Quá trình đọc dữ liệu từ chip ADC0804 Quá trình đọc dữ liệu được thực hiện khi cĩ một sự thay đổi mức logic từ cao xuống thấp (xung cạnh xuống) tại chân RD, trong khi chân CS ở mức thấp và chân WR ở mức cao. Quá trình này cũng được mơ tả bằng sơ đồ sau: Quá trình đọc dữ liệu từ chip ADC0804 IV. GIỚI THIỆU IC CHỐT 74HC374 1. Mơ tả chân IC 74HC374 74HC IC 74HC374 là IC chốt 8 bit, hoạt động tích cực ở mức thấp. D0 - D7: 8 bit dữ liệu vào Q0 – Q7: 8 bit dữ liệu ra Vcc: nguồn cung cấp (5V) : ngõ vào cho phép, để IC hoạt động thì phải clear ngõ vào cho phép này (= 0). CP: ngõ vào xung clock tác động ở mức cao. 2. Tổ chức bên trong IC74HC374 Sơ đồ cấu tạo của 74HC374 Bảng trạng thái của 74HC374 Ngõ vào cho phép () Ngõ vào xung Clock (CP) Data inputs D0 –D7 Data outputs Q0 – Q7 L ↑ L L L ↑ H H L H X Q0 H X X Z B. ĐỒNG HỒ THỜI GIAN THỰC VÀ BỘ ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI. I. ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI. 1. Hồng ngoại là gì? Hồng ngoại là sự bức xạ năng lượng với tần số thấp hơn tần số mà mắt ta nhìn thấy. Vì vậy chúng ta khơng thể nhìn thấy, cũng như là khơng thể nghe được chúng, nhưng chúng ta cĩ thể cảm nhận được sức nĩng của những tia hồng ngoại khi chúng chiếu vào da. 2. Cách tạo ra hồng ngoại Cách tạo ra hờng ngoại trong điện tử rất để dàng chỉ cần mợt điện trở và 1 led phát hờng ngoại là đủ. Tuy nhiên nếu tạo ra hờng ngoại như trên thì khoảng cách truyền là rất ngắn. Để cải thiện vấn đề này người thiết kế thường tạo ra tần sớ từ 30à60KHz, tốt nhất là khoảng từ 36à38KHz để truyền tín hiêu hờng ngoại ra bên ngoài. Để tạo ra tần số 36 Khz là việc khá đơn giản chỉ cần tạo một xung vuơng có chu kỳ xấp xỉ 27ms đưa vào cực nền của Transistor điều khiển 1 LED hồng ngoại truyền đi. 3. Cách thu tín hiệu hờng ngoại TSOP1338 Để thu tín hiệu hờng ngoại ta sử dụng mắt thu hờng ngoại, tuỳ thuợc vào mục đích sử dụng mà lựa chọn phương pháp thu cho phù hợp. Vài nét về mắt thu hờng ngoại: Mắt thu hồng ngoại là 1 IC tích hợp cả Photodiot thu hồng ngoại, bộ khuyếch đại, bộ lọc chống nhiễu, bộ điều chế…. Mắt thu hồng ngoại cĩ nhiều hình dạng kích thước khác nhau nhưng cơ bản là đĩng trong 1 vỏ nhựa đen chỉ cho tia hồng ngoại đi qua, cĩ lưới bên ngồi hoặc bên trong để chống nhiễu. Mắt thu hồng ngoại (TSOP1338) gồm cĩ 3 chân: chân 3 OUT, chân 2 nguồn cấp điện áp Vs và 1 chân nối mass. Sơ đồ khối bên trong mắt thu hồng ngoại (TSOP1338) Mắt thu hoạt động ở tần số điều chế 36 hoặc 38Khz tuy nhiên cĩ thể dùng lẫn 2 loại này với nhau. Tầm thu cho phép khoảng 10m Khi khơng cĩ sĩng tới, tín hiệu ra ở mức cao. 4. Khảo sát tín hiệu hồng ngoại phát ra từ Remote SONY Remote Sony sử dụng mã hĩa theo độ rộng xung, đây là kiểu mã hố đơn giản. Vì vậy việc giải mã được thực hiện khá dể dàng. Giản đồ thời gian của tín hiệu remote SONY Tín hiệu sĩng mang từ LED hồng ngoại của remote SONY phát ra cĩ tần số khoảng từ 36 Khz đến 38 Khz. Sĩng mang này chuyên chở tín hiệu dữ liệu đã được mã hĩa cĩ dạng như sau: Ta thấy: Bit 0 được mã hĩa bằng một xung ở mức thấp 600µs và chuyển trạng thái sang mức cao 600µs. Bit 1 được mã hĩa bằng một xung ở mức thấp 600µs và chuyển trạng tháí sang mức cao 1200µs. Khi ta bấm một phím nào đĩ trên remote thì remote sẽ phát đi một loạt tín hiệu xung cĩ dạng như sau: Đầu tiên xung Start sẽ được phát đi trước và cĩ dạng là một tín hiệu mức cao trong khoảng thời gian 1800µs. Tiếp theo là các bit dữ liệu. Tổng cộng cĩ 12 bit dữ liệu và kết thúc bằng một xung Stop ở mức thấp trong thời gian 1800µs. Tiếp theo thì tín hiệu sẽ được duy trì ở mức thấp trong khoảng thời gian 20ms và xung Start thứ 2 sẽ được phát đi để báo hiệu cho sự tiếp tục của một khung dữ liệu thứ 2. Khung dữ liệu này hồn tồn giống với khung dữ liệu trước đĩ. Và cứ như thế tiếp tục cho đến khi nào ta buơng phím remote ra thì thơi. Lưu ý: Bit đầu tiên sau bit START là bit LSB, ta đặt tên nĩ là bit B0, bit cuối cùng sẽ là bit MSB (B11). B0---B6 : 7 bit mã lệnh B7---B11 : 5 bit địa chỉ Nếu sử dụng mắt nhận hồng ngoại cĩ sẵn trên thị trường thì tất cả dạng sĩng trên sẽ bị đảo lại như sau: Để thu và giải mã được tín hiệu hồng ngoại từ REMOTE SONY, thực tế ta khơng cần thu tồn bộ 12 bit mã hố. Ta chỉ cần thu 7 bit COMMAND và cĩ thể bỏ qua 5 bit địa chỉ, bởi với cùng một điều khiển thì tất cả các nút bấm đều phát ra mã địa chỉ như nhau, chỉ khác nhau mã lệnh. Mã Address được hãng SONY sử dụng để phân biệt giữa các MODEL REMOTE SONY khác nhau. II. ĐỒNG HỒ THỜI GIAN THỰC 1. Tổng quan về DS1307 1.1. Sơ đồ chân DS1307 DS1307 là chip đồng hồ thời gian thực (RTC : Real-time clock), khái niệm thời gian thực ở đây được dùng với ý nghĩa thời gian tuyệt đối mà con người đang sử dụng, tính bằng giây, phút, giờ…DS1307 là một sản phẩm của Dallas Semiconductor (một cơng ty thuộc Maxim Integrated Products). Chip này cĩ 7 thanh ghi 8-bit chứa thời gian là: giây, phút, giờ, thứ (trong tuần), ngày, tháng, năm. Ngồi ra DS1307 cịn cĩ 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống cĩ thể dùng như RAM. DS1307 được đọc và ghi thơng qua giao diện nối tiếp I2C nên cấu tạo bên ngồi rất đơn giản. DS1307 xuất hiện ở 2 gĩi SOIC và DIP cĩ 8 chân như trong hình sau. Hai gĩi cấu tạo của chip DS1307        Các chân của DS1307 được mơ tả như sau:        - X1 và X2: là 2 ngõ kết nối với 1 thạch anh 32.768KHz làm nguồn tạo dao động cho chip        - VBAT: cực dương của một nguồn pin 3V nuơi chip        - GND: chân mass chung cho cả pin 3V và Vcc        - Vcc: nguồn cho giao diện I2C, thường là 5V và dùng chung với vi điều khiển. Chú ý: nếu Vcc khơng được cấp nguồn nhưng VBAT được cấp thì DS1307 vẫn đang hoạt động (nhưng khơng ghi và đọc được). - SQW/OUT: Đây là chân tạo ngõ ra xung vuơng của DS1307 cĩ 4 chế độ 1Hz, 4.096HZ, 8.192Hz, 32.768Hz... các chế độ này đuợc quy định bởi các bit của thanh ghi Control Register (địa chỉ 0x07).        - SCL và SDA là đường giữ xung nhịp và đường dữ liệu của giao diện I2C mà chúng ta sẽ tìm hiểu sau. 1.2. Cấu tạo bên trong DS1307 Sơ đồ khối bên trong chip 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). Do đa số các thành phần bên trong DS1307 là thành phần “cứng” nên chúng ta khơng cĩ quá nhiều việc khi sử dụng DS1307. Sử dụng DS1307 chủ yếu là ghi và đọc các thanh ghi của chip này. Vì thế cần hiểu rõ 2 vấn đề cơ bản đĩ là cấu trúc các thanh ghi và cách truy xuất các thanh ghi này thơng qua giao diện I2C Như đã trình bày, bộ nhớ DS1307 cĩ tất cả 64 thanh ghi 8-bit được đánh địa chỉ từ 0 đến 63 (từ 0x00h đến 0x3Fh). Tuy nhiên, thực chất chỉ cĩ 8 thanh ghi đầu là dùng cho chức năng “đồng hồ”, cịn lại 56 thanh ghi bỏ trống cĩ thể được dùng chứa biến tạm như RAM nếu muốn. Bảy thanh ghi đầu tiên chứa thơng tin về thời gian của đồng hồ bao gồm: giây (SECONDS), phút (MINUETS), giờ (HOURS), thứ (DAY), ngày (DATE), tháng (MONTH) và năm (YEAR). 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à quá trình đọc thời gian thực mà RTC tạo ra. Tổ chức bộ nhớ trong DS1307 Vì 8 thanh ghi đầu tiên là quan trọng nhất trong hoạt động của DS1307, chúng ta sẽ khảo sát các thanh ghi này một cách chi tiết. Trước hết hãy quan sát tổ chức theo từng bit của các thanh ghi này trong hình sau: Chú ý là tất cả các giá trị thời gian lưu trong các thanh ghi theo dạng BCD (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 nên chỉ cần 3 là đủ. Bit cao nhất (bit thứ 7) trong thanh ghi này là 1 bit đ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. Thanh ghi phút (MINUTES): cĩ địa chỉ 0x01h, 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 thứ 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 chip DS1307. Thanh ghi này cĩ địa chỉ 0x02h. 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ờ là: 12h và 24h giờ, vì vậy bit thứ 6 được dùng để xác lập hệ thống giờ. Nếu bit thứ 6 = 0 thì hệ thống 24h được chọn, khi đĩ 2 bit thứ 5 và thứ 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 nên cần 2 bit để mã hĩa. Nếu bit thứ 6 = 1 thì hệ thống 12h được chọn. Với trường hợp này chỉ cĩ 1 bit thứ 4 dùng mã hĩa chữ số hàng chục của giờ, bit thứ 5 chỉ buổi trong ngày (AM hoặc PM). Bit thứ 5 = 0 là AM và bit thứ 5 = 1 là PM. Bit thứ 7 luơn bằng 0. Thanh ghi thứ (DAY – ngày trong tuần): nằm ở địa chỉ 0x03h. Thanh ghi DAY chỉ mang giá trị từ 1 đến 7 tương ứng từ Chủ nhật đến thứ 7 trong 1 tuần. Vì thế, chỉ cĩ 3 bit thấp trong thanh ghi này cĩ nghĩa. Các bit cịn lại luơn bằng 0. Thanh ghi ngày (DATE – ngày trong tháng): nằm ở địa chỉ 0x04h. Thanh ghi DATE mang giá trị từ 1 đến 31, chỉ cĩ 5 bit đầu tiên là cĩ nghĩa. Các bit cịn lại luơn bằng 0. Thanh ghi tháng (MONTH): nằm ở địa chỉ 0x05h. Thanh ghi MONTH mang giá trị từ 1 đến 12, chỉ cĩ 4 bit đầu tiên là cĩ nghĩa. Các bit cịn lại bằng 0. Thanh ghi năm (YEAR): nằm ở địa chỉ 0x06h. Thanh ghi YEAR mang giá trị từ 0 đến 99. Chip 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. Thanh ghi điều khiển (CONTROL REGISTER): cĩ địa chỉ là 0x07h, thanh ghi CONTROL REGISTER được dùng để điều khiển tần số xung vuơng ở ngỏ ra SQW/OUT. Giá trị các bít trong thanh ghi CONTROL REGISTER được biểu diển như sau: Bit 7_Output Control (OUT): dùng để kiểm sốt mức logic tại SQW/OUT. Bit 4_Square-Wave Enable (SQWE): bit này được set lên bằng 1 để tạo dao động ở đầu ra. Bits 1 and 0_ Rate Select (RS[1:0]): 2 bit này dùng điều khiển tần số dao động ở ngỏ ra SQW/OUT, với 4 tần số được chọn như sau: 2. Khái quát giao diện I2C I2C là viết tắc của từ Inter - Integrated Circuit là một chuẩn truyền thơng nối tiếp đồng bộ do hãng điện tử Philips Semiconductor sáng lập và xây dựng thành chuẩn năm 1990. Các khái niệm cơ bản trong giao diện I2C: Master (chip chủ): là chip khởi động quá trình truyền nhận, phát đi địa chỉ của thiết bị cần giao tiếp và tạo xung giữ nhịp trên đường SCL. Slave (chip tớ): là chip cĩ một địa chỉ cố định, được gọi bởi Master và phục vụ yêu cầu từ 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 đi trước nhất. SCL (Serial Clock): là đường xung giữ nhịp nối tiếp. 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ừ điều kiện START và STOP). Chân SDA cĩ thể được đổi trạng thái khi SCL ở mức thấp. Một giao tiếp I2C gồm cĩ 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDA là đường truyền dữ liệu theo 2 hướng (từ master đến slave và ngược lại), cịn SCL là đường truyền xung đồng hồ chỉ truyền theo một hướng (từ master đến slave). Trong một giao diện I2C thì cĩ một thiết bị là chủ (master) và một thiết bị là tớ (slave). Tại sao lại cĩ sự phân biệt này? Đĩ là vì trên một giao diện I2C thì quyền điều khiển thuộc về thiết bị chủ. Thiết bị chủ nắm vai trị tạo xung đồng bộ cho tồn hệ thống, khi giữa 2 thiết bị chủ/tớ giao tiếp thì thiết bị chủ cĩ nhiệm vụ tạo ra xung đồng bộ và quản lý đến thiết bị tớ trong suốt quá trình giao tiếp. Thiết bị chủ giữ vai trị chủ động, cịn thiết bị tớ giữ vai trị bị động trong quá trình giao tiếp. Một giao diện I2C cĩ thể hoạt động ở nhiều chế độ khác nhau:  - Một chủ một tớ (one master – one slave)  - Một chủ nhiều tớ (one master – multi slave)  - Nhiều chủ nhiều tớ (Multi master – multi slave) Vài điều kiện cần biết khi thiết lập một giao tiếp I2C: - Điều kiện START (gọi tắt là S): điều kiện START được thiết lập khi cĩ một sự chuyển đổi trạng thái từ cao xuống thấp tại SDA, khi SCL đang ở mức cao (mức cao là 1, mức thấp là 0). - Điều kiện STOP (gọi tắt là P): điều kiện STOP được thiết lập khi cĩ một sự chuyển đổi trạng thái từ thấp lên cao tại SDA, khi SCL đang ở mức cao. - Điều kiện REPEAT START (bắt đầu lặp lại): khoảng giữa điều kiện START và STOP 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 quá trình truyền/nhận mà master khơng gởi điều kiện STOP lại gởi thêm 1 điều kiện START 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. Mơ tả điều kiện START, STOP và REPEAT START - Bit ACK: dùng để báo hiệu dữ liệu đã được nhận, bit ACK được tạo ra tại thời điểm xung clock thứ 9 bằng cách kéo chân SDA xuống mức thấp. - Bit NACK: dùng để báo hiệu dữ liệu đã bị lỗi hoặc byte truyền cuối cùng, bit NACK cũng được tạo ra tại thời điểm xung clock thứ 9 bằng cách kéo chân SDA lên mức cao. Bit ACK/NACK trong giao diện I2C Định dạng dữ liệu truyền: Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền  đi tại mỗi sườn lên của xung đồng hồ trên đường dây SCL, quá trình thay đổi bit dữ  liệu xảy ra khi SCL đang ở mức thấp.  Quá trình truyền nhận 1 bit dữ liệu Mỗi byte dữ liệu được truyền cĩ độ dài là 8 bit. Số byte cĩ thể truyền trong một lần là khơng hạn chế. Mỗi byte được truyền đi theo sau là một bit ACK, bit cĩ trong số lớn nhất (MSB) sẽ được truyền đi đầu tiên, các bit kế tiếp sẽ được truyền đi lần lượt. Sau 8 xung clock thì dữ liệu đã được truyền đi, ở xung clock thứ 9 thì bit ACK được truyền đi báo hiệu đã nhận đủ 8 bits. Thiết bị truyền sau khi nhận được bit ACK sẽ tiếp tục thực hiện quá trình truyền hoặc kết thúc. Dữ liệu được truyền trên giao diện I2C Một byte truyền đi cĩ kèm theo bit ACK là điều kiện bắt buộc, nhằm đảm bảo cho quá trình truyền nhận được chính xác. Khi khơng nhận được đúng địa chỉ hay muốn kết thúc quá trình giao tiếp, thiết bị nhận sẽ gởi một xung Not_ACK (NACK) để báo cho thiết bị chủ biết. Thiết bị chủ sẽ tạo ra xung STOP để kết thúc hay lặp lại một xung START để bắt đấu quá trình mới. 3. Mode (chế độ) truyền dữ liệu giữa DS1307 và AT89S52 Trong giao tiếp I2C giữa DS1307 và 89S52 thì chip 89S52 đĩng vai trị là một master và DS1307 đĩng vai trị là một slave. Do chỉ cĩ một master và một chip giao tiếp với nhau nên chỉ cĩ 2 mode (chế độ) hoạt động giao tiếp giữa 2 chip này. Hai mode đĩ là: Data Write (từ AT89S52 đến DS14307) và Data Read (từ DS1307 vào AT89S52). 3.1. Mode Data Write (chế độ ghi dữ liệu) Mode Data Write (chế độ truyền dữ liệu từ master đến slave) được dùng khi xác lập giá trị ban đầu cho các thanh ghi thời gian hoặc dùng để canh chỉnh thời gian cho chip DS1307. Cấu trúc truyền dữ liệu trong mode Data Write được mơ tả như hình sau: Chế độ data write Ø Trước hết hãy nĩi về địa chỉ SLA (Slave Address) của chip DS1307 trong mạng I2C, trên mạng I2C mỗi thiết bị sẽ cĩ một địa chỉ riêng gọi là SLA. SLA được tính theo lý thuyết chuẩn I2C sẽ cĩ giá trị tối đa là 128 (do cĩ 128 thiết bị trong 1 mạng I2C). Chip DS1307 là một Slave nên cũng cĩ một địa chỉ SLA, giá trị này được set cố định là 1101000b (68h). Do SLA của DS1307 cố định nên trong 1 mạng I2C sẽ khơng thể tồn tại cùng lúc 2 chip này. Ø Quan sát hình trên ta thấy, đầu tiên master (AT89S52) sẽ gởi điều kiện START đến Slave (DS1307), tiếp theo sau master sẽ là 7 bit địa chỉ SLA của slave (cố định là: 1101000b). Do chế độ này là Data Write nên bit W = 0 và sẽ được gởi kèm sau SLA. Bit ACK (A) được slave trả về cho master sau mỗi quá trình giao tiếp. Ø Tiếp theo sau địa chỉ SLA sẽ là 1 byte chứa địa chỉ của thanh ghi cần truy cập (Word Address). Cần phân biệt địa chỉ của thanh ghi cần truy cập và địa chỉ SLA. Như đã đề cập trên, địa chỉ của thanh ghi cần truy cập sẽ được lưu trong thanh ghi địa chỉ (hay con trỏ địa chỉ), vì vậy byte dữ liệu đầu tiên sẽ được chứa trong thanh ghi địa chỉ của DS1307. Ø Sau byte địa chỉ thanh ghi là một dãy các byte dữ liệu được ghi vào bộ nhớ của DS1307. Byte dữ liệu đầu tiên sẽ được ghi vào thanh ghi cĩ địa chỉ được chỉ định bởi Word Address, sau khi ghi xong 1 byte thì Word Address tự động tăng nên các byte tiếp theo sẽ được ghi liên tiếp vào DS1307 ở các thanh ghi kế sau. Số lượng bytes dữ liệu cần ghi do master quyết định và khơng được vượt quá dung lương bộ nhớ của DS1307. Quá trình ghi kết thúc khi master phát ra điều kiện STOP. Chú ý: Sau khi ghi thành cơng 1 byte thì DS1307 sẽ trả lời lại bằng một bit ACK. Nếu như byte được ghi vào là byte cuối cùng thì DS1307 sẽ trả lời lại bằng 1 bit Not_ACK (NACK). Nếu sau khi gởi byte Word Address, master khơng gởi các byte dữ liệu mà gởi liền điều kiện STOP thì khơng cĩ thanh ghi nào được ghi. Trường hợp này được dùng để set địa chỉ Word Address để phục vụ cho quá trình đọc. 3.2. Mode Data Read (chế độ dọc dữ liệu) Mode Data Read (chế độ truyền dữ liệu từ salve về master) được sử dụng khi đọc thời gian thực từ DS1307 về AT89S52. Cấu trúc truyền dữ liệu trong mode Data Write được mơ tả như hình sau: Chế độ Data Read Nguyên tắt truyền trong chế độ Data Read cơ bản cũng giống như trong truyền chế độ Data Write. Trong chế độ Data Read bit R = 1 sẽ được gởi kèm sau 7 bit SLA. Sau đĩ liên tiếp các byte dữ liệu được truyền từ DS1307 đến AT89S52. Điểm khác biệt trong cách bố trí dữ liệu của chế độ này so với chế độ Data Write là khơng cĩ byte địa chỉ thanh ghi dữ liệu nào được gởi đến. Tất cả các byte theo sau SLA+R đều là dữ liệu đọc từ bộ nhớ của DS1307. Lưu ý: dữ liệu được đọc tại thanh ghi được chỉ định bởi con trỏ địa chỉ, vì vậy muốn đọc chính xác dữ liệu từ một địa chỉ nào đĩ, chúng ta cần thực hiện quá trình ghi giá trị cho con trỏ định địa chỉ trước khi thực hiên quá trình đọc. Để ghi giá trị vào con trỏ định địa chỉ chúng ta sẽ gọi chương trình Data Write với chỉ 1 byte được ghi sau SLA+W như phần chú ý ở trên. CHƯƠNG III: THIẾT KẾ PHẦN CỨNG A. ĐO NHIỆT ĐỘ I. SƠ ĐỒ VÀ CHỨC NĂNG TỪNG KHỐI Cảm biến nhiệt và khuếch đại Biến đổi ADC và khối xử lýtrung tâm (CPU_1) Hiển thị thứ 1 (LED 7 đoạn) Hiệu ứng dùng LED đơn 1. Sơ đồ khối 2. Chức năng của từng khối 2.1. Cảm biến nhiệt và khuếch đại Trong phần đo nhiệt độ thì đây là khối tạo ra sự thay đổi điện thế từ 0V đến 1.97V tương ứng với sự thay đổi nhiệt độ bên ngồi từ 00C đến 1000C. 2.2. Biến đổi ADC và khối xử lý trung tâm (CPU_1) Đây là khối quang trọng dùng để điều khiển mọi hoạt động của mạch. Khối này thực hiện quá trình biến tín hiệu tương tự sang tín hiệu số thơng qua bộ biến đổi ADC, sau đĩ xuất dữ liệu này ra khối hiển thị thứ nhất. Các quá trình này được điều khiển bởi vi xử lý AT89S52. 2.3. Khối hiển thị thứ 1 sử dụng LED 7 đoạn Đây là khối giao diện với người sử dụng, dùng để chốt lại dữ liệu cho người dùng quan sát. 2.4. Hiệu ứng dùng LED đơn Đây cũng là khối giao diện vời người dùng, khối này gĩp phần làm cho sản phẩm được thiết kế thêm đẹp hơn. II. SƠ ĐỒ CHI TIẾT VÀ NGUYÊN TẮT HOẠT ĐỘNG 1. Sơ đồ chi tiết A Vout1 Vout2 Vin 1.1. Cảm biến nhiệt và bộ khuếch đại B Thiết lập thơng số: Do cảm biến nhiệt LM35D cĩ độ phân giải là 10mV/10C mà độ phân giải của ADC0804 được chọn là 19.53mV/10C. Vì vậy phải thiết kế một bộ khuếch đại với hệ số khuếch đại (K) là 1.953 (chọn K = 1.97), cách chọn hệ số K được tính như sau: + Xét tại 2 điểm A và B: Điện thế tại 2 điểm A và B được tính như sau: VA = VB = Vout1.= Vout1. (1) + Quan sát sơ đồ mạch ta thấy: Dịng điện đi vào từ Vout1 qua RI1 sẽ đi qua RF1, RF2 nên: (2) Thay giá trị của VA vào biểu thức 2 ta tìm được: Vout2 = .Vout1 (3) + Với cách tính tương tự như vậy ta cĩ: Vin = Vout1 (4) Từ (3) và (4) ta được: Vout2 = .Vin (5) Thay các giá trị điện trở vào (5) ta cĩ: Vout2 = .Vin Vout2 =1.97.Vin 1.2. Biến đổi ADC và khối xử lý trung tâm (CPU_1) Thiết lập thơng số: Chọn độ phân giải cho ADC0804 là 19.53mV (tương ứng với chân VREF/2 để hở). Chọn điện trở R1 và tụ C2 cho bộ dao động của ADC0804: Ta cĩ tần số dao đơng được xác định bằng cơng thức: Ta chọn R1 = 10k và C2 = 150pf. Vậy tần số dao đơng của ADC0904 là: f = 606khz Số mức đầu ra là: N = .Vin T0 cần đo = với K = 1.97 là hệ số của bộ khuếch đại dùng IC LM358. 1.3. Khối hiển thị thứ 1 sử dụng LED 7 đoạn Thiết lập thơng số: Led 7 đoạn cĩ cấu tạo gồm 8 led đơn, để thấp sáng 1 led 7 đoạn thì phải cĩ dịng điện chạy qua mỗi led đơn này, dịng điện này phải cĩ độ lớn từ 10mA–15mA để led sáng vừa và khơng bị đứt. Vậy dịng điện qua led được tính như sau: IL = RL = = = 300W Chọn RL = 220W ² IL = 13.6mA 1.4. Hiệu ứng dùng LED đơn Thiết lập thơng số: Dịng điện thắp sáng 1 led là từ 10mA – 15mA, để thắp sáng 12 led mắc song song thì phải cần dịng điện từ 120mA – 180mA. Chọn dịng điện qua 12 led là 180mA ² Ic = 180mA Mà IC = RC = = = 14.4 W Chọn Rc = 10 W Mặt khác ta cĩ: IB = RB = Để BJT hoạt động trong vùng bảo hồ thì: IB ≥ ≥ ≥ 1.8mA RB ≤ ≤ ≤ 2.39 KW Chọn RB = 2.2 KW 2. Nguyên tắt hoạt động Khi hệ thống được cấp nguồn (Vcc = 5V) tất cả các linh kiện trong mạch bắt đầu hoạt động. Đầu tiên chip AT89S52 (CPU_1) kích hoạt bộ biến đổi ADC0804, khi bộ biến đổi này đã thực hiện xong quá trình biến đổi, CPU_1 sẽ đọc dữ liệu từ bộ biến đổi ADC0804 và hiển thị kết quả ra led 7 đoạn (sử dụng kỹ thuật chốt). Sau đĩ CPU_1 chạy chương trình để tạo hiệu ứng bên ngồi sử dụng led đơn, khi kết thúc chương trình này CPU_1 quay lại thực hiện quá trình như ban đầu. B. ĐỒNG HỒ THỜI GIAN THỰC VÀ BỘ ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI I. SƠ ĐỒ VÀ CHỨC NĂNG TỪNG KHỐI 1. Sơ đồ khối Khối xử lý trung tâm (CPU_2) Thời gian thực (DS1307) Hiển thị thứ 2 Thu tín hiệu hồng ngoại Âm thanh Phát tín hiệu hồng ngoại 2. Chức năng của từng khối 2.1. Khối thời gian thực Trong hệ thống đồng hồ thời gian thực, khối này giữ một vai trị rất quang trọng, khối này quyết định đến độ chính xác của sản phẩm. Vì đây là khối tạo thời gian thực cho hệ thống. 2.2. Khối phát hồng ngoại Thiết bị phát sử dụng Remote SONY, khi ấn một phím trên remote thì Remote này sẽ phát đi một chuỗi dữ liệu hồng ngoại tương ứng với mỗi phím ấn. 2.3. Khối thu hồng ngoại. Thiết bị thu hồng ngoại được sử dụng là một mắt thu hồng ngoại 3 chân cĩ bán sẳn trên thị trường (TSOP1738). Mắt thu hồng ngoại được sử dụng để thu lại chuỗi dữ liệu mà remote phát ra. 2.4. Khối xử lý trung tâm (CPU_2) Đây được xem là khối quang trong nhất. Chức năng là đọc/ghi dữ liệu vào chip thời gian thực (DS1307), giải mã tín hiệu hồng ngoại được phát ra từ remote SONY. Cuối cùng là xuất tất cả các dữ liệu đã được xử lý ra bên ngồi thơng qua khối hiển thị thứ 2 và khối âm thanh. 2.5. Khối âm thanh và hiển thị thứ 2 Đây là 2 khối giao diện cho người dùng, dùng để xuất dữ liệu ra bên ngồi. II.SƠ ĐỒ CHI TIẾT VÀ NGUYÊN TẮT HOẠT ĐỘNG 1. Sơ đồ chi tiết 1.1. Khối thời gian thực (DS1307) Thiết lập thơng số: Dịng điện chạy qua 4 led là: I = = = 30mA Do 4 led được mắc song song với nhau nên dịng điện chạy qua mỗi led là như nhau: I1 = I2 = I3 = I4 = I/4 = 30mA/4 = 7.5mA Chú ý: do ngõ ra SCL và SDA cĩ cấu tạo dạng cực thu để hở (giống như port_0 của vi điều khiển) nên cần phải cĩ điện trở kéo lên (chọn R = 10 KW). 1.2. Khối thu hồng ngoại Sơ đồ kết nối mắt thu hồng ngoại TSOP1738 như sau: 1.3. Khối xử lý trung tâm (CPU_2) 1.4. Khối âm thanh IC UM66 là IC nhạc được sử dụng rất nhiều, bởi vì UM66 dể sử dụng, rẽ tiền và tiếng nhạc phát ra cũng khá hay. UM66 thường được sử dụng trong các đồng hồ báo thức hay là các thiết bị đồ chơi điện tử. Sơ đồ khối của UM66 được mơ tả như hình sau: 1.5. Khối hiển thị thứ 2 2. Nguyên tắt hoạt động Khi hệ thống được cấp nguồn chip AT89S52 (CPU_2) bắt đầu đọc thời gian thực RTC. Khi thời gian đã được đọc, CPU_2 tiến hành xử lý (kiểm tra xem thời gian vừa đọc cĩ trùng với thời gian báo thức hay khơng? Nếu trùng thì CPU_2 kích hoạt hệ thống âm thanh và ngược lai). Khi thực hiện xong quá trình xử lý kết quả, CPU_2 xuất dữ liệu ra led 7 đoạn. Sau đĩ CPU_2 quay về thực hiện quá trình như ban đầu. Trong trường hợp CPU_2 nhận được tín hiệu truyền về từ mắt thu hồng ngoại, CPU_2 tạm ngưng hoạt động tất cả các chương trình để phục vụ chương trình ngắt, CPU_2 bắt đầu giải mã tín hiệu hồng ngoại được phát ra từ remote SONY. Khi giải mã xong CPU_2 gọi chương trình để tạo hiệu ứng khi điều chỉnh, cuối cùng dữ liệu được CPU_2 ghi vào RTC và thốt khỏi chương trình ngắt. CHƯƠNG III: THIẾT KẾ PHẦN MỀM Để viết một chưong trình cĩ nhiều cách ví dụ như viết một mạch từ trên xuống dưới theo phương pháp này CPU sẽ đọc từng tự theo các chỉ thị trong chương trình từ điạ chĩ thấp đến địa chỉ cao và thực hiện chúng cho đến địa chỉ cuối cùng. Trong trường hợp này người đọc rất dễ theo dõi chương trình và nắm được ý đồ của người viết, tuy nhiên nĩ cĩ nhược điểm là kích thước chương trình lớn. Giới hạn cuả phương pháp lập trình tuần tự làm phát sinh một phương pháp lập trình khác là lập trình cấu trúc. Trong chương trình này với những đoạn thường xuyên lặp lại trong chương trình người ta đem chúng ra khỏi chương trình chính (gọi là chương trình con) chúng cĩ thể được đặt ở đầu hoặc cuối chương trình chính (tuỳ theo phần mềm). Tại một địa chỉ xác định nơi chúng ta đem đi được thay bằng lệnh LCALL xxxx. Trong đĩ xxxx là điạ chỉ chúng ta đặt chương trình con. Khi gặp chỉ thị này CPU sẽ nhảy đến chỉ thị được đặt sau chỉ thị LCALL và thi hành đoạn chương trình đĩ. Để quá trình làm việc khơng bị gián đoạn ở cuối đoạn chương trình ta đặt chỉ thị RET (Return). Khi gặp chỉ thị này CPU sẽ quay về chương trình chính và tiếp tục cơng việc bị bỏ dở. Phương pháp này khá hiệu quả trong việc giảm kích thước chương trình. Tuy nhiên nĩ làm cho người sử dụng khĩ theo dõi chương trình do mất tính liên tục. Để khắc phục nhược điểm này người ta đặt cho mỗi đoạn chương trình như thế một cái tên hay nhãn (label). Tên đặt phải giúp người đọc hình dung được chức năng của chương trình con, nhớ rằng đoạn chương trình con cĩ tác dụng dừng chương trình chính trong một khoảng thời gian t nào đĩ. Chúng ta cũng qui định đoạn chương trình con là nơi chương trình chính đặt dữ liệu xử lý cũng như nơi chương trình chính sẽ lấy kết quả về bằng cách này người đọc chỉ cần nhớ chương trình được gọi sẽ làm cơng việc gì và nơi đặt (lưu) dữ liệu cĩ liên quan. Phần mềm phục vụ cho hệ thống của tơi cũng được thiết kế dựa trên quan điểm này. Để viết chương trình điều khiển hệ thống cĩ thể dùng một trong các ngơn ngữ như Assembler, passcal, C…. Ở đây tơi viết chương trình bằng ngơn ngữ assembler (ASM) của hệ thống 8 bit dùng chip AT89S52. A. ĐO NHIỆT ĐỘ I. LƯU ĐỒ VÀ GIẢI THUẬT CHƯƠNG TRÌNH 1. Giải thuật 1.1. Giải thuật chương trình chính Bước 1:Truy xuất dữ liệu từ bộ biến đổi ADC Bước 2: Hiển thị kết quả Bước 3: Tạo hiệu ứng cho led đơn, sau đĩ quay lại bước 1 1.2. Giải thuật chương trình con “ TRUY_CAP_ADC” Tạo một xung từ thấp lên cao áp đến chân WR để ADC0804 bắt đầu quá trình chuyển đổi. Chờ cho quá trình biến đổi được thực hiên xong (chân INTR xuống mức thấp). Tạo một xung từ cao xuống thấp áp đến chân RD để đọc dữ liệu ra từ chip ADC0804. Đưa đữ liệu vào thanh ghi R0 và thốt khỏi chương trình. 2. Lưu đồ 2.1. Lưu đồ chương trình chính BEGIN Khởi tạo giá trị ban đầu END Truy cập vào chip ADC0804 Hiển thị nhiệt độ ra led 7 đoạn Hiệu ứng thứ 1 (dùng led đơn) Hiệu ứng thứ 2 (dùng led đơn) 2.2. Lưu đồ chương trình con 2.2.1. Lưu đồ chương trình con “ TRUY_CAP_ADC” START Kích hoạt bộ biến đổi ADC0804 RET Chờ quá trình biến đổi hồn thành INTR = = 0? Dưa dữ liệu vào thanh ghi R0 Đọc dữ liệu từ chip ADC0804 Y N 2.2.2. Lưu đồ chương trình con “HIENTHI_1” RET Xuất ra led thứ 2 P_Nguyên STARTT Xuất ra led thứ 1 Lấy A chia B P_Dư Thiết lập giá trị A = R0, B = 10 II. PHẦN MỀM DO NHIỆT ĐỘ (CODE_1) Phần mềm đo nhiệt độ (Code_1) được lập trình bằng ngơn ngữ Assembler (ASM), soạn thảo và biên dịch bằng chương trình Keil Version. Nội dung Code_1 nằm ở thư mục phụ lục “trang 76”. B. ĐỒNG HỒ THỜI GIAN THỰC VÀ BỘ ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI. I. LƯU ĐỒ VÀ GIẢI THUẬT CHƯƠNG TRÌNH 1. Giải thuật 1.1. Giải thuật chương trình chính Bước 1: Đọc thời gian thực từ RTC (chip DS1307) Bước 2: Hiển thị thời gian vừa đọc ra led 7 đoạn Bước 3: Kiểm tra thời gian báo thức Bước 4: Kiểm tra chế độ chuơng báo theo từng giờ Bước 5: Tạo hiệu ứng chỉnh khi cài đặt giờ, sau đĩ quay lại bước 1. 1.2. Giải thuật chương trình ngắt “GIAI_MA_REMOTE_SONY” Bước 1: Thiết lập giá trị thanh ghi A = 01000000B (40h) Bước 2: Chờ cho tín hiệu lên (Đây là bit mã lệnh đầu tiên) Bước 3: Chờ tín hiệu đi xuống Bước 4: Chờ khoảng 900ms Bước 5: Đo mức tín hiệu Bước 6: Nếu mức tín hiệu là mức cao thì bit nhận được là bit 0 - Thiết lập bit nhớ C = 0 (bit mã lệnh thu được) - Quay phải cĩ nhớ A, như vậy C sẽ được gửi vào MSB của A, LSB của A gửi vào C. - Ban đầu, A = 01000000B thì sau khi quay ta cĩ C = 0 và MSB của A là bit đầu tiên của mã lệnh. - Như vậy sau 7 lần quay thì C = 1 và 7 bit bên trái của A sẽ chứa mã lệnh - Kiểm tra bit nhớ C, nếu C = 1 nhảy tới bước 8, nếu C = 0 quay lại bước 3 Bước 7: Nếu mức tín hiệu là mức thấp thì bit nhận được là bit 1 - Thiết lập Bit nhớ C = 1 (bit mã lệnh thu được) - Quay phải cĩ nhớ A - Kiểm tra bit nhớ C, nếu C = 1 nhảy tới bước 8, nếu C = 0 quay lại bước 2 Bước 8: Lúc này 7 bit mã lệnh chứa trong 7 bit bên trái của thanh ghi A : A = D6D5D4D3D2D1D00 Quay phải thanh ghi A thu được 7 bit mã lệnh nằm bên phải thanh ghi A A = 0D6D5D4D3D2D1D0 Tạo trễ dài để chống nhiễu (chọn 0.1s) Bước 9: Nhận dạng các phím được ấn: - Nếu phím được ấn là KEY_ON_OFF thì mở chế độ điều chỉnh ngược lại thì nhảy đến bước 10. - Nếu phím được ấn là KEY_NEXT hoặc KEY_BACK thì tăng hoặc giảm thanh ghi R0 một đơn vị cho mỗi lần ấn. Kế tiếp gọi chương trình để tạo ra hiệu ứng điều chỉnh tương ứng, sau đĩ nhảy đến bước 10. - Nếu phím được ấn là các số thì chương trình “xử lý số” được gọi để chuyển các số được ấn vào biến được lựa chọn ở trên, ghi giá trị này vào RTC. Sau đĩ đọc và hiển thị các giá trị ra ngồi, cuối cùng nhảy đến bước 10. - Nếu phím được ấn là KEY_ON_BELL / KEY_OFF_BELL thì tương ứng với việc mở/tắt chuơng theo từng giờ, sau đĩ nhãy đến bước 10. Bước 10: Tạo trể 0.1s và thốt khỏi ngắt 1.3. Giải thuật chương trình con “WRITE_CLOCK” Gởi điều kiện START đến RTC Gởi tiếp địa chỉ Slave + W (0D0h) Gởi địa chỉ thanh ghi đầu tiên được chọn để ghi (00h: địa chỉ thanh ghi SECOND) Ghi tất cả các byte dữ liệu vào RTC như: giây, phút, giờ, thứ, ngày, tháng, năm, giá trị thanh ghi control và cuối cùng là thời gian báo thức Gởi điều kiên STOP và thốt. Chú ý: Nếu khơng phải là lần ghi/đọc cuối cùng thì kéo biến LAST xuống mức thấp để gởi bit ACK, ngược lại đưa biến LAST lên cao để gởi bit Not_ACK (NACK). 1.4. Giải thuật chương trình con “READ_CLOCK” Gởi điều kiện START đến RTC Gởi tiếp địa chỉ Slave + W (0D0h). Gởi địa chỉ thanh ghi đầu tiên được chọn để ghi (00h: địa chỉ thanh ghi SECOND). Gởi điều kiện STOP. Gởi lại điều kiện START. Gởi địa chỉ Slave + R (0D1h). Bắt đầu đọc lần lượt từng byte dữ liệu từ RTC. Đầu tiên là giây, phút, giờ, thứ, ngày, tháng, năm, giá trị thanh ghi control và cuối cùng là thời gian báo thức Gởi điều kiện STOP và thốt. 2. Lưu đồ 2.1. Lưu đồ chương trình chính BEGIN Khởi tạo giá trị ban đầu Đọc thời gian thực từ RTC END Hiển thị thời gian ra led 7 đoạn Thời gian báo thức Mở/tắt chuơng theo từng giờ Tạo hiệu ứng khi điều chỉnh 2.2. Lưu đồ chương trình ngắt “GIAI_MA_REMOTE_SONY” Gán giá trị A = 01000000h Y N Y N Đặt cờ nhớ C=0 Quay phải cĩ nhớ A Đặt cờ nhớ C=1 Quay phải cĩ nhớ A Quay phải A Đo mức tín hiệu Tín hiệu mức thấp Chờ tín hiệu lên mức cao Tạo trễ 900ms C = 1 START TIEP Chờ tín hiệu xuống mức thấp C = 1 N N Y Y Y Y Y N N N N N TIEP RETI A = = KEY_ON_OFFF Tạo trể 0.1s A = = KEY_NEXT hoặc A = = KEY_BACK A = = KEY_1, KEY_2….. A = = KEY_0N_BELL hoặc KEY_OFF_BELL Hiệu ứng điều chỉnh Tắt/mở chuơng Xử lý số Read clock Hiển thị_2 Write clock 2.3. Lưu đồ chương trình con 2.3.1. Lưu đồ chương trình con “WRITE_CLOCK” BEGIN RET Gởi điều kiện STOP Gởi điều kiện START Gởi địa chỉ Slave+W (0D0h) Gởi 1 byte địa chỉ con trở (00h) Ghi tất cả byte dữ liệu như: giây, phút,....,thời gian báo thức vào RTC 2.3.2. Lưu đồ chương trình con “READ_CLOCK” BEGIN RET Gởi điều kiện STOP Gởi điều kiện START Gởi địa chỉ Slave+W (0D0h) Gởi 1 byte địa chỉ con trở (00h) Đọc tất cả byte dữ liệu như: giây, phút,....,thời gian báo thức từ RTC Gởi điều kiện STOP Gởi điều kiện START Gởi địa chỉ Slave+R (0D1h) 2.3.3. Lưu đồ chương trình con ghi 1 byte vào DS1307“SEND_BYTE” N Y Y Y N N BEGIN RET Tạo một xung nhip tại chân SCL Gán giá trị BITCOUNT = 08 ACC.7 = = 0 SDA = 1 SDA = 0 Quay trái thanh ghi A LAST = = 0 Gởi bit NACK Gởi bit ACK BITCOUNT = = 0 2.3.4. Lưu đồ chương trình con đọc 1 byte từ DS1307“READ_BYTE” N Y Y N BEGIN RET Đưa dữ liệu từ SDA vào cờ C Gán giá trị: A = 00 BITCOUNT = 08 Quay trái thanh ghi A cĩ cớ nhớ C LAST = = 0 Gởi bit NACK Gởi bit ACK BITCOUNT = = 0 Tạo một xung nhip tại chân SCL 2.3.5. Lưu đồ chương trình con “ALARM_CLOCK_TEST” N N Y N Y Y BEGIN RET HOUR = = ALK_HOUR MINUTE = = ALK_MINUTE Kích hoạt hệ thống âm thanh MINUTE = = ALK_MINUTE Đọc thời gian thực từ RTC Hiển thị ra led 7 đoạn Dừng kích hoạt hệ thống âm thanh 2.3.6. Lưu đồ chương trình con “TAT_MO_CHUONG” N N N Y Y Y Y BEGIN RET R3 = = 0FFH MINUTE = = 0 Kích hoạt hệ thống âm thanh SECOND = = 0 Tạo trễ khoảng 0.5s Dừng kích hoạt hệ thống âm thanh 2.3.7. Lưu đồ chương trình con “HIEU_UNG_CHINH” Y Y Y Y Y N N N N N BEGIN RET R0 = = 20H Tạo hiệu ứng chỉnh giờ R0 = = 21H Tạo hiệu ứng chỉnh phút R0 = = 22H Tạo hiệu ứng chỉnh giây Tạo hiệu ứng chỉnh giờ báo thức R0 = = 28H Tạo hiệu ứng điều phút báo thức R0 = = 27H 2.3.8. Lưu đồ chương trình con “HIENTHI_2” BEGIN RET Tách số BCD Đưa nội dung biến HOUR vào thanh ghi A Xuất ra led 7 đoạn Tách số BCD Đưa nội dung biến MINUTE vào thanh ghi A Xuất ra led 7 đoạn Tách số BCD Đưa nội dung biến ALK_MINUTE vào thanh ghi A Xuất ra led 7 đoạn II. PHẦN MỀM ĐỒNG HỒ THỜI GIAN THỰC VÀ BỘ ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI (CODE_2) Phần mềm đồng hồ thời gian thực và bộ điều khiển từ xa dùng remote hồng ngoại (Code_2) cũng được lập trình bằng ngơn ngữ Assembler (ASM), soạn thảo và biên dịch bằng chương trình Keil Version. Nội dung Code_2 nằm ở thư mục phụ lục “trang 80”. CHƯƠNG IV: KẾT LUẬN VÀ ĐỀ NGHỊ I. KẾT LUẬN Sau một thời gian nghiên cứu và tìm hiểu về đề tài này. Cùng với sự chỉ dẫn tận tình của các Thầy Lương Vinh Quốc Danh. Đến nay em đã thiết kế thành cơng “Lịch Vạn Niên Điện Tử” , mạch hoạt động rất ổn định và đáp ứng được yêu cầu của đề tài đặt ra. Do thời gian và năng lực giới hạn nên sản phẩm được thiết kế khơng thể tránh khỏi một số khuyết điểm: sản phẩm hơi thơ, khơng được đẹp… kính mong quý thầy cơ và các bạn thơng cảm. Sau đây là một số hình ảnh của “Lịch Vạn Niên Điện Tử”: Modul hiển thị Modul hiệu ứng dùng led đơn Modul xử lý trung tâm Lịch Vạn Niên Điện Tử II. ĐỀ NGHỊ Sau khi đã thiết kế thành cơng đề tài này, em cĩ một số đề nghị để khắc phục những khuyết điểm mà em mắc phải. ª Thay đổi IC chốt 74HC374 bằng IC ghi dịch và chốt 74LS595. Bằng cách này sẽ là giảm bớt quá trình phức tạp khi thiết kế phần cứng, gĩp phần làm cho sản phẩm gọn nhẹ hơn. ª Thiết kế thêm bộ chuyển đổi từ ngày dương lịch sang ngày âm lịch. ª Thay đổi tiếng chuơng báo thức bằng một bài nhạc mà bạn yêu thích. TÀI LIỆU THAM KHẢO [1] Giáo trình Vi Điều Khiển _ Tác giả Th.Phạm Hùng Kim Khánh [2] Tài liệu hướng dẫn Thực Tập Vi Điều Khiển _ Biên soạn Th.Trần Nhật Khải Hồn, KS.Trần Hữu Danh. [3] Giáo trình MẠCH XUNG _ Biên soạn Th.Lương Văn Sơn, KS.Nguyễn Khắc Nguyên. [4] Giáo trình MẠCH SỐ _ Tác giả Th.Nguyễn Trung Lập. [5] Giáo trình MẠCH TƯƠNG TỰ _ Tác giả KS. Trương Văn Tám [6] [7] [8] PHỤ LỤC 1. Phần mềm đo nhiệt độ (CODE_1) RDL BIT P3.0 WRL BIT P3.1 INT BIT P3.3 LED1 BIT P2.7 LED2 BIT P3.2 LED3 BIT P3.4 LED4 BIT P3.5 ORG 0000H LJMP MAIN MAIN: MOV P0,#00H MOV P2,#00H CLR LED1 CLR LED2 CLR LED3 CLR LED4 MOV DPTR,#LED7S MOV R0,#00H MOV R7,#05 SETB RDL SETB WRL HERE: CALL TRUY_CAP_ADC CALL HIENTHI CALL HIEU_UNG_1 CALL TRUY_CAP_ADC CALL HIENTHI CALL HIEU_UNG_2 JMP HERE ;------------------------------------------------------------------------------------- ;--------Truy nhap vao chip ADC0804-------- TRUY_CAP_ADC: CLR WRL SETB WRL ;Tao xung canh len tai chan WR ;de bat dau qua trinh bien doi JB INT,$ ;Cho qua trinh bien doi hoan thanh SETB RDL CLR RDL ;Tao xung canh xuong tai chan ;RD de doc du lieu CALL DELAY MOV R0,P1 ;Dua du lieu vao thanh ghi R0 SETB RDL RET ;------Hien thi nhiet do ra led 7 doan------ HIENTHI: MOV A,R0 MOV B,#10 DIV AB ;Chia Gia tri thanh ghi A cho 10, ;phan nguyen luu trong A, du luu trong B CALL READ CLR P3.7 SETB P3.7 ;Tao xung canh len de xuat du lieu CALL DELAY_6us MOV A,B CALL READ CLR P3.6 SETB P3.6 CALL DELAY_6us RET ;------Hieu ung thu 1 cho led doan------ HIEU_UNG_1: LOOP1: SETB LED1 CLR LED2 CLR LED3 SETB LED4 MOV P0,#04H CALL DELAY CALL DELAY CLR LED1 SETB LED2 CLR LED3 CLR LED4 MOV P0,#09H CALL DELAY CALL DELAY CLR LED1 CLR LED2 SETB LED3 CLR LED4 MOV P0,#12H CALL DELAY CALL DELAY DJNZ R7,LOOP1 MOV R7,#10 MOV P0,#00H CLR LED3 RET ;------Hieu ung thu 2 cho led doan------ HIEU_UNG_2: LOOP2: SETB LED1 CALL DELAY CLR LED1 SETB LED2 CALL DELAY CLR LED2 SETB LED3 CALL DELAY CLR LED3 SETB LED4 CALL DELAY CLR LED4 MOV P0,#01H CALL DELAY MOV P0,#02H CALL DELAY MOV P0,#04H CALL DELAY MOV P0,#08H CALL DELAY MOV P0,#10H CALL DELAY MOV P0,#00H CALL DELAY DJNZ R7,LOOP2 MOV R7,#05 RET ;------Doc noi dung o nho DPTR----- READ: MOVC A,@A+DPTR MOV P2,A RET ;------Tao tre 6us------ DELAY_6us: NOP NOP NOP NOP NOP NOP RET ;------Tao tre (250*200*2)/10^6 = 0.1s------ DELAY: MOV R1,#250 L1: MOV R2,#200 DJNZ R2,$ DJNZ R1,L1 RET LED7S: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H END 2. Phần mềm đồng hồ thời gian thực và bộ điều khiển từ xa dùng remote hồng ngoại (CODE_2) SCL BIT P0.0 SDA BIT P0.1 SPEAKER BIT P3.0 BELL BIT P3.1 SIGNAL BIT P3.2 DIS3 BIT P0.2 DIS4 BIT P0.3 DIS5 BIT P0.4 DIS6 BIT P0.5 DIS8 BIT P0.6 DIS7 BIT P0.7 DIS9 BIT P3.3 DIS15 BIT P2.0 DIS13 BIT P2.1 DIS12 BIT P2.2 DIS14 BIT P2.3 DIS10 BIT P2.4 DIS11 BIT P2.5 DIS16 BIT P2.6 DIS17 BIT P2.7 DIS18 BIT P3.4 DIS19 BIT P3.5 DIS21 BIT P3.6 DIS20 BIT P3.7 CO DATA 2DH LAST BIT CO.7 HOUR DATA 20H MINUTE DATA 21H SECOND DATA 22H DAY DATA 23H DATE DATA 24H MONTH DATA 25H YEAR DATA 26H ALK_HOUR DATA 27H ALK_MINUTE DATA 28H SQW_OUT DATA 29H BYTECOUNT DATA 2AH BITCOUNT DATA 2BH TAM DATA 2CH ORG 0000H LJMP MAIN ORG 0003H LJMP GIAI_MA_ROMOTE_SONY MAIN: MOV R0,#1FH MOV R1,#00H MOV R2,#0FFH MOV R3,#00H MOV DPTR,#LED7S MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH CLR LAST CLR SPEAKER CLR BELL MOV SECOND,#50H MOV MINUTE,#59H MOV HOUR,#00H MOV DAY,#02H MOV DATE,#01H MOV MONTH,#01H MOV YEAR,#10H MOV ALK_MINUTE,#30H MOV ALK_HOUR,#22H MOV SQW_OUT,#90H MOV TAM,#00H MOV IE,#00H MOV TMOD,#10H SETB EA SETB EX0 SETB IT0 MOV SP,#256-32 HERE: CALL READ_CLOCK CALL HIENTHI_2 CALL ALARM_TEST CALL TAT_MO_CHUONG CALL HIEU_UNG_CHINH JMP HERE ;------------------------------------------------------------------------------ ;----Chuong trinh ngat de giai ma tin hieu hong ngoai---- GIAI_MA_ROMOTE_SONY: MOV R1,A CALL DELAY_900us MOV A,#40H JB SIGNAL,EXIT_GIAIMA RP1: JNB SIGNAL,RP1 ;Cho tin hieu len muc cao RP2: JB SIGNAL,RP2 ;Cho tin hieu xuong muc thap CALL DELAY_900us ;Tao tre 900us MOV C,SIGNAL ;Dua de lieu vao C JC BIT0 ; Neu C=1 du lieu la bit 0 ;neu C=0 du lieu la bit 1 BIT1: SETB C ;Dat C bang 1 RRC A ;Ghi vao A JC END_SIGNAL JMP RP1 BIT0: CLR C ;Dat C bang 0 RRC A ;Ghi vao A JC END_SIGNAL JMP RP2 END_SIGNAL: CALL LONG_DELAY ;Tao tre de chong nhieu RR A ; Quay phai A JMP KEY_ON_OFF ;----Phim cho phep mo/tat che do dieu chinh---- KEY_ON_OFF: CJNE A,#15H,SOSANH MOV A,R2 CPL A MOV R2,A MOV R0,#20H CJNE R2,#0FFH,EXIT_KEY_ON_OFF MOV R0,#01FH EXIT_KEY_ON_OFF: JMP EXIT_GIAIMA SOSANH: CJNE R2,#0FFH,KEY_NEXT JMP EXIT_GIAIMA ;----Phim lua chon vi tri dieu chinh---- KEY_NEXT: CJNE A,#18H,KEY_BACK INC R0 CJNE R0,#29H,EXIT_KEY_NEXT MOV R0,#20H EXIT_KEY_NEXT: CALL HIEU_UNG_CHINH JMP EXIT_GIAIMA KEY_BACK: CJNE A,#19H,KEY_01 DEC R0 CJNE R0,#1FH,EXIT_KEY_NEXT MOV R0,#28H EXIT_KEY_BACK: CALL HIEU_UNG_CHINH EXIT_GIAIMA: CALL LONG_DELAY JNB SIGNAL,EXIT_GIAIMA MOV A,R1 CLR IE0 RETI ;-----Cac phim du lieu cai dat------ KEY_01: CJNE A,#00H,KEY_02 MOV TAM,#01H CALL XULY JMP EXIT_GIAIMA KEY_02: CJNE A,#01H,KEY_03 MOV TAM,#02H CALL XULY JMP EXIT_GIAIMA KEY_03: CJNE A,#02H,KEY_04 MOV TAM,#03H CALL XULY JMP EXIT_GIAIMA KEY_04: CJNE A,#03H,KEY_05 MOV TAM,#04H CALL XULY JMP EXIT_GIAIMA KEY_05: CJNE A,#04H,KEY_06 MOV TAM,#05H CALL XULY JMP EXIT_GIAIMA KEY_06: CJNE A,#05H,KEY_07 MOV TAM,#06H CALL XULY JMP EXIT_GIAIMA KEY_07: CJNE A,#06H,KEY_08 MOV TAM,#07H CALL XULY JMP EXIT_GIAIMA KEY_08: CJNE A,#07H,KEY_09 MOV TAM,#08H CALL XULY JMP EXIT_GIAIMA KEY_09: CJNE A,#08H,KEY_10 MOV TAM,#09H CALL XULY JMP EXIT_GIAIMA KEY_10: CJNE A,#09H,KEY_MO_CHUONG MOV TAM,#00H CALL XULY JMP EXIT_GIAIMA KEY_MO_CHUONG: CJNE A,#12H,KEY_TAT_CHUONG MOV R3,#0FFH SETB BELL JMP EXIT_GIAIMA KEY_TAT_CHUONG: CJNE A,#13H,EXIT_GIAIMA MOV R3,#00H CLR BELL JMP EXIT_GIAIMA ;----Dua gia tri duoc dieu chinh vao cac o nho du lieu---- XULY: MOV A,@R0 SWAP A ANL A,#0F0H ORL A,TAM MOV @R0,A CALL WRITE_CLOCK CALL READ_CLOCK CALL HIENTHI_2 RET ;----Tao ra hieu ung khi dieu chinh---- HIEU_UNG_CHINH: CJNE R0,#20H,TT1 MOV P1,#0FFH CLR DIS3 SETB DIS3 CLR DIS4 SETB DIS4 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY JMP EXIT_HUC TT1: CJNE R0,#21H,TT2 MOV P1,#0FFH CLR DIS5 SETB DIS5 CLR DIS6 SETB DIS6 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY JMP EXIT_HUC TT2: CJNE R0,#22H,TT3 MOV P1,#0FFH CLR DIS7 SETB DIS7 CLR DIS8 SETB DIS8 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY JMP EXIT_HUC TT3: CJNE R0,#23H,TT4 MOV P1,#0FFH CLR DIS9 SETB DIS9 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY JMP EXIT_HUC TT4: CJNE R0,#24H,TT5 MOV P1,#0FFH CLR DIS10 SETB DIS10 CLR DIS11 SETB DIS11 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY JMP EXIT_HUC TT5: CJNE R0,#25H,TT6 MOV P1,#0FFH CLR DIS12 SETB DIS12 CLR DIS13 SETB DIS13 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY JMP EXIT_HUC TT6: CJNE R0,#26H,TT7 MOV P1,#0FFH CLR DIS14 SETB DIS14 CLR DIS15 SETB DIS15 CLR DIS16 SETB DIS16 CLR DIS17 SETB DIS17 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY JMP EXIT_HUC TT7: CJNE R0,#27H,TT8 MOV P1,#0FFH CLR DIS18 SETB DIS18 CLR DIS19 SETB DIS19 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY JMP EXIT_HUC TT8: CJNE R0,#28H,EXIT_HUC MOV P1,#0FFH CLR DIS20 SETB DIS20 CLR DIS21 SETB DIS21 CALL LONG_DELAY CALL LONG_DELAY CALL HIENTHI_2 CALL LONG_DELAY CALL LONG_DELAY EXIT_HUC: RET ;----Chon che do tat/mo chuong theo tung gio---- TAT_MO_CHUONG: CJNE R3,#0FFH,TT10 MOV A,MINUTE CJNE A,#00H,TT10 MOV A,SECOND CJNE A,#00H,TT10 CLR SPEAKER ;Mo am thanh bao thuc CALL LONG_DELAY CALL LONG_DELAY CALL LONG_DELAY CALL LONG_DELAY TT10: SETB SPEAKER ;Tat am thanh bao thuc RET ;----Gui dieu kien STARRT den DS1307----- SEND_START: SETB SDA SETB SCL CALL DELAY6US CLR SDA CALL DELAY6US CLR SCL CALL DELAY6US RET ;-----Gui dieu kien STOP den DS1307---- SEND_STOP: CLR SDA SETB SCL CALL DELAY6US SETB SDA CALL DELAY6US CLR SCL CALL DELAY6US RET ;----Ghi 8 bit du lieu vao DS1307--- SEND_BYTE: MOV BITCOUNT,#08H SEND_BYTE_LOOP: JNB ACC.7,LEVEL_LOW SETB SDA JMP SEND_BITS LEVEL_LOW: CLR SDA SEND_BITS: SETB SCL CALL DELAY6US CLR SCL ;Ket thuc 1 xung nhip RL A DJNZ BITCOUNT,SEND_BYTE_LOOP JB LAST,NOT_ACK1 ;Neu lan doc cuoi cung thi ;khong gui bit ACK ACK1: ;Gui bit ACK CLR SDA SETB SCL CALL DELAY6US CLR SCL CALL DELAY6US RET NOT_ACK1: ;Gui bit Not_ACK (NACK) SETB SDA SETB SCL CALL DELAY6US CLR SCL CALL DELAY6US RET ;----Doc 8 bit du lieu tu DS1307---- READ_BYTE: MOV BITCOUNT,#08H MOV A,#00H SETB SDA READ_BITS: SETB SCL MOV C,SDA CALL DELAY6US RLC A ;Dua SDA vao thanh ghi A CLR SCL CALL DELAY6US DJNZ BITCOUNT,READ_BITS JB LAST,NOT_ACK2 ;Neu lan doc cuoi cung thi ;khong gui bit ACK ACK2: ;Gui bit ACK CLR SDA SETB SCL CALL DELAY6US CLR SCL CALL DELAY6US RET NOT_ACK2: ;Gui bit NACK SETB SDA SETB SCL CALL DELAY6US CLR SCL CALL DELAY6US RET ;----Doc thoi gian thuc tu DS1307---- READ_CLOCK: CALL SEND_START CLR LAST MOV A,#0D0H CALL SEND_BYTE SETB LAST MOV A,#00H CALL SEND_BYTE CALL SEND_STOP CALL SEND_START CLR LAST MOV A,#0D1H CALL SEND_BYTE CALL READ_BYTE MOV SECOND,A CALL READ_BYTE MOV MINUTE,A CALL READ_BYTE MOV HOUR,A CALL READ_BYTE MOV DAY,A CALL READ_BYTE MOV DATE,A CALL READ_BYTE MOV MONTH,A CALL READ_BYTE MOV YEAR,A CALL READ_BYTE MOV SQW_OUT,A CALL READ_BYTE MOV ALK_HOUR,A SETB LAST CALL READ_BYTE MOV ALK_MINUTE,A CALL SEND_STOP RET ;----Cai dat thoi gian cho DS1307---- WRITE_CLOCK: CALL SEND_START CLR LAST MOV A,#0D0H CALL SEND_BYTE MOV A,#00H CALL SEND_BYTE MOV A,SECOND CALL SEND_BYTE MOV A,MINUTE CALL SEND_BYTE MOV A,HOUR CALL SEND_BYTE MOV A,DAY CJNE A,#08H,TTD MOV A,#01H TTD: CALL SEND_BYTE MOV A,DATE CALL SEND_BYTE MOV A,MONTH CALL SEND_BYTE MOV A,YEAR CALL SEND_BYTE MOV A,#90H CALL SEND_BYTE MOV A,ALK_HOUR CALL SEND_BYTE SETB LAST MOV A,ALK_MINUTE CALL SEND_BYTE CALL SEND_STOP RET ;----Thoi gian bao thuc---- ALARM_TEST: MOV A,MINUTE CJNE A,ALK_MINUTE,EXIT_ALARM_TEST MOV A,HOUR CJNE A,ALK_HOUR,EXIT_ALARM_TEST CLR SPEAKER LOOP_ALK_TEST: MOV A,MINUTE CJNE A,ALK_MINUTE,EXIT_ALARM_TEST CALL HIENTHI_2 CALL READ_CLOCK JMP LOOP_ALK_TEST EXIT_ALARM_TEST: SETB SPEAKER RET ;----Xuat ket qua ra led 7 doan---- HIENTHI_2: MOV A,HOUR ANL A,#0F0H SWAP A CALL READ CLR DIS3 SETB DIS3 CALL DELAY6US MOV A,HOUR ANL A,#0FH CALL READ CLR DIS4 SETB DIS4 CALL DELAY6US MOV A,MINUTE ANL A,#0F0H SWAP A CALL READ CLR DIS5 SETB DIS5 CALL DELAY6US MOV A,MINUTE ANL A,#0FH CALL READ CLR DIS6 SETB DIS6 CALL DELAY6US MOV A,SECOND ANL A,#0F0H SWAP A CALL READ CLR DIS7 SETB DIS7 CALL DELAY6US MOV A,SECOND ANL A,#0FH CALL READ CLR DIS8 SETB DIS8 CALL DELAY6US MOV A,DAY CJNE A,#01H,TTDD MOV A,#08H TTDD: CALL READ CLR DIS9 SETB DIS9 CALL DELAY6US MOV A,DATE ANL A,#0F0H SWAP A CALL READ CLR DIS10 SETB DIS10 CALL DELAY6US MOV A,DATE ANL A,#0FH CALL READ CLR DIS11 SETB DIS11 CALL DELAY6US MOV A,MONTH ANL A,#0F0H SWAP A CALL READ CLR DIS12 SETB DIS12 CALL DELAY6US MOV A,MONTH ANL A,#0FH CALL READ CLR DIS13 SETB DIS13 CALL DELAY6US MOV A,#20 MOV B,#10 DIV AB CALL READ CLR DIS14 SETB DIS14 CALL DELAY6US MOV A,B CALL READ CLR DIS15 SETB DIS15 CALL DELAY6US MOV A,YEAR ANL A,#0F0H SWAP A CALL READ CLR DIS16 SETB DIS16 CALL DELAY6US MOV A,YEAR ANL A,#0FH CALL READ CLR DIS17 SETB DIS17 CALL DELAY6US MOV A,ALK_HOUR ANL A,#0F0H SWAP A CALL READ CLR DIS18 SETB DIS18 CALL DELAY6US MOV A,ALK_HOUR ANL A,#0FH CALL READ CLR DIS19 SETB DIS19 CALL DELAY6US MOV A,ALK_MINUTE ANL A,#0F0H SWAP A CALL READ CLR DIS20 SETB DIS20 CALL DELAY6US MOV A,ALK_MINUTE ANL A,#0FH CALL READ CLR DIS21 SETB DIS21 CALL DELAY6US RET ;----Doc noi dung o nho DPTR---- READ: MOVC A,@A+DPTR MOV P1,A RET ;----Tao tre 900us---- DELAY_900us: MOV TH1,#HIGH(-900) MOV TL1,#LOW(-900) SETB TR1 JNB TF1,$ CLR TF1 CLR TR1 RET ;----Tao tre 6us---- DELAY6US: NOP NOP NOP NOP NOP NOP RET ;----Tao tre (250*200*2)/10^6 = 0.1s---- LONG_DELAY: MOV R7,#250 L2: MOV R6,#200 DJNZ R6,$ DJNZ R7,L2 RET LED7S: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H END 3. Hướng dẫn sử dụng bộ điều khiển dùng Remote SONY Các bước thực hiện để cài đặt thời gian cho “Lịch Vạn Niên Điện Tử” Bước 1: Ấn phím POWER lần thứ nhất để mở chế độ cài đặt. Lưu ý nếu như chế độ cài đặt khơng được mở thì tất cả các phím cịn lại đều bị vơ hiệu hố. Bước 2: Sau khi chế độ cài đặt được mở, sử dụng phím CONTÇ hoặc CONT- để chọn vị trí cài đặt. Phím CONTÇ để next (chuyển) đến vị trí kế tiếp, phím CONT- để back (trở về) vị trí phía sau. Sử dụng 2 phím VOLÇ hoặc VOL- để chọn chế độ báo chuơng theo từng giờ (6h,7h,8h.….), phím VOLÇ dùng để mở và VOL- dùng để tắt chế độ này. Bước 3: Nhập vào các giá trị cần cài đặt bằng các số trên remote từ 1 đến 10 (do remote khơng cĩ số 0 nên số 10 lúc này được xem là số 0), vậy giá trị được nhập giới hạn từ 0 đến 9. Nguyên tắt nhập số cài đặt tương tự như nguyên tắt nhập số trong máy tính bỏ túi. Bước 4: Ấn phím POWER lần thứ hai để tắt chế độ cài đặt. 4. Code word của remote SONY Để cĩ được các code word remote SONY tơi sử dụng các led đơn (mắt ở port 0) để chỉ thị cho mỗi lần ấn phím. Sau đây là một vài code word mà tơi đã giải mã: Tín hiệu hiển thị ở Port 0 Phím ấn remote Mã lệnh khi ấn phím (hex) 00000000B 1 00H 00000001B 2 01H 00000010B 3 02H 00000011B 4 03H 00000100B 5 04H 00000101B 6 05H 00000110B 7 06H 00000111B 8 07H 00001000B 9 08H 00001001B 10 09H 00010101B POWER 15H 00011000B CONTÇ 18H 00011001B COUNT- 19H 00010010B VOLÇ 12H 00010011B VOL- 13H 00100101B TV/VIDEO 25H 01111000B MEMD 78H 00001011B TUNE2 0BH 01110110B -FINE 76H 01110111B ÇFINE 77H 01101100B TUNE1 6CH 01111100B SELECT 7CH 01100101B ENTER 65H 01100110B MENU 66H 00010000B PROGRÇ 10H 00010001B PROGR- 11H Sơ đồ khối bên trong AT89S52

Các file đính kèm theo tài liệu này:

  • docdien_tu_6937.doc