Đồ án Thiết kế đồng hồ thời gian thực RTC DS 12C887 với vi điều khiển PIC 16F877A

1. Sơ lược về RTC

Đây là ứng dụng sử dụng vi điều khiển PIC để thiết kế một đồng hồ điện tử treo tường

hoặc để bàn. Sau đây là một vài điểm giới thiệu sơ lược:

- Sử dụng LED 7 đoạn để hiển thị. Thiết bị này thích hợp hơn cho mục đích hiển thị của

RTC khi dùng làm động hồ treo tường hoặc để bàn.

- Sử dụng IC thời gian thực DS12C887. IC này có tác dụng tạo ra thời gian thực chính

xác tuyệt đối, bao gồm giờ, phút, giây, thứ, ngày, tháng, năm. Bên cạnh đó là các ngắt

lập trình được phục vụ cho việc cập nhật thời gian thực và hẹn giờ.

- Sử dụng IC ghi dịch 74HC595 để tăng số lượng chân điều khiển cho vi điều khiển.

- Sử dụng vi điều khiển PIC16F877A cho các thao tác truy cập thời gian thực, hiển thị

giờ và chỉnh giờ. Thực chất việc sử dụng PIC16F877A cho ứng dụng này là phí phạm,

vì ứng dụng không yêu cầu thêm một chức năng phụ nào của vi điều khiển ngoài chức

năng I/O.

RTC Version 1.0 là bản “nháp” và bao gồm các chức năng cụ thể sau:

- Hiển thị giờ, phút, giây, ngày, tháng, năm. Không hiển thị thứ (quên mất tiêu ☺ ).

- Điều chỉnh được giờ, phút, giây.

pdf42 trang | Chia sẻ: lethao | Lượt xem: 2285 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế đồng hồ thời gian thực RTC DS 12C887 với vi điều khiển PIC 16F877A, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
nối tiếp ngõ ra (chân 9) của IC này được nối với chân dữ liệu nối tiếp ngõ vào của IC tiếp theo. Ta có thể mở rộng số lương IC ghép với nhau theo cách tương tự mà số lượng chân điều khiển vẫn không đổi. 0 74HC5958 9 1013 14 16 11 12 151234567 GND SD O C LRG SD I VCC SR C LK R C LK Q A Q B Q C Q D Q E Q F Q G Q H 0 DATA OUT 74HC5958 9 1013 14 16 11 12 151234567 GND SD O C LRG SD I VCC SR C LK R C LK Q A Q B Q C Q D Q E Q F Q G Q H H I CLR 0 H I RCK DATA IN SCK Hình 9: Nối nhiều IC 74HC595 với nhau. 3.2.2 Xây dựng module điều khiển IC 74HC595 Cách điều khiển IC được thể hiện thông qua bảng sự thật ở hình 7. Trước tiên đưa 1 bit dữ liệu vào chân SDI, sau đó tạo ra một xung dương ở chân SCK để dịch bit dữ liệu đó vào. Trạng thái logic của chân SDI khi kích xung dương quyết định mức logic của bit được dịch vào. Quá trình này được lặp đi lặp lại liên tục cho đến khi toàn bộ dữ liệu được dịch vào trong IC. IC tiếp theo sẽ tiếp tục dịch dữ liệu vào từ chân SDO của của IC trước đó. Khi quá trình dịch dữ liệu hoàn tất, ta tạo một xung dương ở chân RCK để đưa dữ liệu ra ngoài các chân ngõ ra QH:QA. Ứng dụng sau được dùng để đưa một byte dữ liệu ra IC ghi dịch 74HC595. Kết quả được kiểm định thông qua các LED được nối vào các chân QH:QA của IC. Các chân điều khiển sẽ được nối vào các chân RB3:RB0 của PORT B. Cụ thể như sau: - Chân RB0 nối với chân SDI. - Chân RB1 nối với chân SCK. - Chân RB2 nối với chân . Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 14/42 - Chân RB3 nối với chân RCK. Các thứ tự này không bắt buộc phải tuân thủ một cách tuyệt đối. Sau đây là sơ đồ nguyên lí mạch ứng dụng: 0 D3 330 CLR D2 30 pF 330 0 D8 330 D6 30 pF HI U2 74HC595 8 16 12 10 11 14 15 1 2 3 4 5 6 7 9 13 GND VC C RCK SRCLR SRCK SER QA QB QC QD QE QF QG QH QHP G 330 SDI 330 HI 330 330 D7 NTC1 PIC16F877A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 VDD VSS OSC1/CLKI OSC2/CLKO RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 VSS VDD RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD SCK RCK 330 SDI CLR D1 4 MHz HI D5 SW1 D4 0 10 K 0 RCK 0 SCK Hình 10: Sơ đồ nguyên lí mạch ứng dụng điều khiển IC 74HC595. Sau đây là chương trình viết cho ứng dụng: Chương trình 2: ;======================================================================== title “chuongtrinh2.asm” processor 16f877a include __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;======================================================================== ;--------------------------------------------------------- ; Khai báo biến ;--------------------------------------------------------- sendreg EQU 0X20 ; chứa dữ liệu cần xuất ra count EQU 0X21 ; dùng để kiểm soát số lượng bit ; đã gửi ra ;---------------------------------------------------------- ;Khai báo phần cứng Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 15/42 ;---------------------------------------------------------- #define data PORTB,0 #define clock PORTB,1 #define clear PORTB,2 #define latch PORTB,3 ;======================================================================== ; Chương trình chính ORG 0x000 GOTO start ;======================================================================== start ;------------------------------------------------------ ; Khởi tạo các PORT điều khiển ;------------------------------------------------------- BCF STATUS,RP1 BSF STATUS,RP0 ; BANK1 MOVLW 0xF0 ; các chân RB3:RB0 là output MOVWF TRISB ; các chân RB7:RB4 là input BCF STATUS,RP0 ; BANK0 ;--------------------------------------------------------------------- ; Khởi tạo IC 74HC595 ;--------------------------------------------------------------------- BCF clear ; reset dữ liệu trong IC 74HC595 NOP ; clear tác động cạnh xuống BSF clear ; đưa chân trở về mức logic cao ;---------------------------------------------------------------------- ; Đoạn chương trình xuất dữ liệu ra 74HC595 ;---------------------------------------------------------------------- MOVLW 0xCA ; dữ liệu cần đưa ra IC 74HC595 CALL serout ; chương trình con “serout” BSF latch ; tạo cạnh dương tại chân RCK để đưa NOP ; dữ liệu ra ngõ ra IC 74HC595 BCF latch ; đưa chân RCK trở về mức logic thấp ;-------------------------------------------------------- ; Vòng lặp chính của chương trình ;-------------------------------------------------------- GOTO $ ;======================================================================== ; Chương trình con ;======================================================================== Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 16/42 ;----------------------------------------------------------------------------------------- ; Chương trình con “serout” ; Dùng để đưa dữ liệu vào các thanh ghi dịch của IC 74HC595 ;----------------------------------------------------------------------------------------- serout MOVWF sendreg ; đưa dữ liệu vào thanh ghi sendreg MOVLW 0x08 ; đếm 8 bit dữ liệu MOVWF count testbit BCF data ; dữ liệu mặc định bằng 0 BTFSC sendreg,7 ; sendreg,7 == 0 ?? BSF data ; nếu không bằng 0, set dữ liệu từ 0 -> 1 BSF clock NOP ; tạo cạnh dương tại chân SCK để đưa ; dữ liệu vào IC BCF clock ; đưa chân SCK về lại mức logic thấp RLF sendreg,0 ; dịch trái thanh ghi sendreg MOVWF sendreg DECFSZ count,1 ; giảm biến count 1 đơn vị GOTO testbit ; nếu biến “count” chưa bằng 0, tiếp tục ; quá trình dịch dữ liệu RETURN ; trở về chương trình chính nếu count = 0 ;======================================================================== END Thuật toán cụ thể của ứng dụng trên như sau: ban đầu dữ liệu được mặc định mang mức logic 0, sau đó ta kiểm tra từng bit dữ liệu một ( bit thứ 7 trong thanh ghi “sendreg”) xem có thực sự bằng 0 hay không. Nếu bằng 1, ta set đường dữ liệu lên mức logic 1. Sau đó tạo xung dương tại chân “SCK” để đưa dữ liệu vào IC. Dữ liệu trên thanh ghi “sendreg” sau đó được dịch trái và quá trình trên tiếp tục cho đến khi 8 bit dữ liệu được dịch xong. Cần chú ý khởi tạo 74HC595 bằng cách xóa các ngõ ra và đưa chân lên mức logic cao (do chân tác động cạnh thấp). Nếu không các ngõ ra sẽ luôn ở trạng thái logic 0 (bị xóa). Trong trường hợp nối nhiều IC lại với nhau ta chỉ việc lần lựot đưa dữ liệu vào thanh ghi “sendreg” và gọi chương trình con “serout” cho đến khi tất cả các dữ liệu được gửi ra hết. Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 17/42 3.3. IC thời gian thực DS12C887 Đây là IC thời gian thực được sản xuất bởi hãng Dallas với một vài đặc tính sơ lược sau: - Chứa các giá trị thời gian giây, phút, giờ, thứ, ngày, tháng, năm với thời gian hoạt động đúng đến năm 2100. - Bộ đếm hoạt động với thời gian 10 năm nếu không có nguồn điện ngoài cung cấp. - Các hệ thống bên trong bao gồm hệ thống thời gian thực, nguồn nội bằng Lithium và bộ tạo dao động với bộ chia tần số đính kèm cho phép lập trình được. Ngoài ra còn hỗ trợ các ngắt phục vụ cho quá trình xử lí thông tin của hệ thống bên ngoài. - Cho phép hai dạng dữ liệu BCD và Binary. - Cho phép chế độ hiển thị giờ 24 giờ hoặc 12 giờ (với AM và PM). - Cho phép lựa chọn các chế độ giao tiếp BUS của Intel hoặc Motorola. - Bộ nhớ RAM 128 byte. Trong đó gồm 15 byte chứa các giá trị thời gian và điều khiển, 113 byte còn lại được phép tùy ý sử dụng. - Các cờ ngắt hỗ trợ bao gồm: ngắt toàn cục, ngẳt báo giờ, ngắt báo hiệu cho phép/ không cho phép truy xuất giá trị thời gian thực. Sau đây là phần cấu tạo và xây dựng module điều khiển IC DS12C887. 3.3.1 Cấu tạo DS12C887 Sơ đồ chân: NTC1 DS12C887 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 12 24MOT NC NC AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 CS AS R/W NC DS RESET IRQ NC NC NC SQW GND VCC Hình 11: Sơ đồ chân DS12C887 DS12C887 gồm 24 chân và có thể được chia làm 3 nhóm như sau: Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 18/42 - Nhóm chân DATA: bao gồm các chân AD7:AD0. Đây là các chân mà DS12C887 dùng để đưa dữ liệu ra hay nhận dữ liệu vào. - Nhóm chân điều khiển giao tiếp BUS: bao gồm các chân MOT, AS, DS, R/W với các chức năng phụ thuộc vào việc lựa chọn chế độ giao tiếp BUS theo chuẩn của Intel (MOT =1) hay Motorola (MOT = 0). - Nhóm chân chức năng: bao gồm các chân RESET (dùng để reset IC), IRQ (chân tác dộng của các ngắt trong DS12C887) và chân SQW (chân tạo sóng vuông ngõ ra). - Ngoài ra còn có các chân dùng để cấp nguồn cho IC và các chân không cần thiết (NC). Các thanh ghi chức năng: Thanh ghi Địa chỉ Chức năng SECONDS 00h Chứa giá trị giây của thời gian thực SECOND ALARM 01h Chứa giá trị giây của thời gian hẹn giờ MINUTES 02h Chứa giá trị phút của thời gian thực MINUTES ALARM 03h Chứa giá trị phút của thời gian hẹn giờ HOUR 04h Chứa giá trị giờ của thời gian thực HOUR ALARM 05h Chứa giá trị giờ của thời gian hẹn giờ DAY OF THE WEEK 06h Chứa giá trị thứ của thời gian thực DAY OF THE MONTH 07h Chứa giá trị ngày thong tháng MONTH 08h Chứa giá trị tháng YEAR 09h Chứa giá trị năm REGISTER A 10h Thanh ghi điều khiển REGISTER B 11h Thanh ghi điều khiển REGISTER C 12h Thanh ghi điều khiển REGISTER D 13h Thanh ghi điều khiển CENTURY 50h Thanh ghi chứa giá trị thế kỉ của thời gian thực Còn lại 14h->4Dh Thanh ghi mục đích chung Ngoại trừ các thanh ghi “REGISTER A, B, C, D” dùng để điều khiển, các thanh ghi còn lại đều đựoc dùng để truy xuất dữ liệu. Sau đây là chức năng của từng bit trong các thanh ghi điều khiển. Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 19/42 THANH GHI REGISTER A Bit 7 UIP Chỉ thị trạng thái dữ liệu của các thanh ghi chứa giá trị thời gian thực. Bit này chỉ đọc UIP = 1: dữ liệu chưa sẵn sàng để truy xuất. UIP = 0: dữ liệu đã sẵn sàng cho quá trình truy xuất Bit 6-4 DV2- DV0 Lựa chọn trạng thái hoạt động của IC. Chỉ có giá trị 010 là cho phép IC hoạt động theo chế độ thời gian thực. Bit 3-0 RS3-RS0 Xác định tỉ số chia tần số của bộ tạo dao động THANH GHI REGISTER B Bit 7 SET SET = 0: cho phép cập nhật thời gian vào các thanh ghi SET = 1: không cập nhật thời gian vào các thanh ghi Bit 6 PIE Cho phép tạo ngắt định kì tại chân IRQ và cho phép cờ ngắt PF. Thời gian định kì được quyết định bởi các bit RS3-RS0. PIE =1: cho phép PIE = 0: không cho phép Bit 5 AIE Cho phép ngắt báo giờ tại chân IRQ và cho phép cờ ngắt AF AIE = 1 : cho phép AIE = 0 : không cho phép Bit 4 UIE Cho phép tạo ngắt khi quá trình cập nhật thời gian hoàn tẩt và cho phép cờ ngắt UF. UIE = 1 : cho phép UIE = 0 : không cho phép Bit 3 SQWE SQWE = 1 : cho phép tạo sóng vuông tại chân SQW (tần số được quyết định bởi các bit RS3:RS0. SQWE = 0 : không cho phép, chân SQW luôn ở mức 0. Bit 2 DM Chọn dạng dữ liệu ở các thanh ghi chứa thời gina thực DM = 1 : dang dữ liệu là Binary DM = 0 : dạng dữ liệu là BCD Bit 1 24/12 Định dạng dữ liệu giờ 24/12 = 1 : dạng 24 giờ 24/12 = 0 : dạng 12 giờ Bit 0 DSE Daylight Saving Enable. THANH GHI REGISTER C Bit 7 IRQF Interrupt Request Flag: cờ chỉ thị trạng thái ngắt IRQF = 1 : có ngắt xảy ra IRQF = 0 : không có ngắt xảy ra Bit 6 PF Periodic Interrupt Flag bit: cờ chỉ thị trạng thái của ngắt định kì. Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 20/42 PF = 1 : ngắt định kì xảy ra PF = 0 : ngắt định kì không xảy ra Bit 5 AF Alarm Interrupt Flag bit: cờ chỉ thị trạng thái của ngắt hẹn giờ. AF = 1 : ngắt hẹn giờ xảy ra AF = 0 : ngắt hẹn giờ chưa xảy ra Bit 4 UF Update Ended Interrupt Flag bit: cờ chỉ thị trạng thái dữ liệu UF = 1 : quá trình cập nhật hoàn tẩt UF = 0 : quá trình cập nhật chưa hoàn tất Bit 3-0 Không quan tâm THANH GHI REGISTER D Bit 7 VRT Bit chỉ thị trạng thái của nguồn nội. VRT luôn băng 1. Nếu VRT = 0, nguồn nội bằng Lithium đã bị cạn và dữ liệu trong RAM là không xác định. Bit 6-0 Không quan tâm Các thông tin khác có liên quan sẽ được tìm thấy trong datasheet của nhà sản xuất. 3.3.2 Xây dựng module điều khiển IC DS12C887. Các thao tác cần thiết để làm việc với DS12C887 sẽ là thao tác đọc và ghi các giá trị trên bộ nhớ của IC thông qua quá trình giao tiếp BUS. DS12C887 hỗ trợ hai chuẩn giao tiếp của Intel và Motorola. Chuẩn giao tiếp được lựa chọn bằng chân MOT. MOT = 1 sẽ cho phép chế độ giao tiếp thep chuẩn của Motorola. MOT = 0 cho phép chế độ giao tiếp theo chuẩn của Intel. Ta chọn chuẩn của Intel (nối chân MOT xuống mass). Ứng dụng sau dùng để kiểm tra các thao tác đọc ghi lên RAM của DS12C887. Sơ đồ nguyên lí của mạch ứng dụng như sau : Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 21/42 0 NTC1 PIC16F877A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7 VDD VSS OSC1/CLKI OSC2/CLKO RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 VSS VDD RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD AD2 DS 330 AD0 0 HI 330 DS 4 MHz AD1 330 NTC1 DS12C887 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 12 24 MOT NC NC AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 CS AS R/W NC DS RESET IRQ NC NC NC SQW GND VCC AS D5 D2 30 pF AS D4 10 K AD4 SW1 330 H I 30 pF D7 0 10 K HI 330 D6 0 AD0 AD3 330 0 AD7 AD1 D8 AD5 D3 AD6 AD7 RW 0 D1 AD5 HI 330 AD2 AD4 SW2 RW 330 AD3 AD6 Hình 12: Sơ đồ nguyên lí mạch ứng dụng điều khiển DS12C887. Yêu cầu của ứng dụng là ghi một giá trị nào đó lên một thanh ghi trong RAM của DS12C887, sau đó đọc ra và kiểm tra kết quả bằng việc xuất ra các LED ở PORT B. Dựa vào giản đồ xung được cung cấp bởi datasheet của nhà sản xuất, muốn ghi một giá trị lên RAM của DS12C887 theo chuẩn giao tiếp của Intel ta lần lượt tiến hành các bước sau: - Bước 1: Đưa chân DS và RW lên mức logic 1. - Bước 2: Xuất địa chỉ cần ghi lên RAM ra các chân data của DS12C887. - Bước 3: Tạo cạnh xuống tại chân AS. - Bước 4: Đưa dữ liệu cần ghi lên RAM ra các chân data của DS12C887. - Bước 5: Đưa chân RW về mức logic 0. - Bước 6: Tạo cạnh lên tại chân AS. Do các chân dữ liệu của DS12C887 được nối với PORT D nên khi cần đưa giá trị địa chỉ hay dữ liệu vào các chân data của DS12C887, ta chỉ cần xuất các giá trị địa chỉ hoặc dữ liệu đó ra PORT D của vi điều khiển. Muốn đọc một giá trị từ một thanh ghi trong RAM của DS12C887 ta tiến hành lần lượt các bước như sau: Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 22/42 - Bước 1: Đưa các chân DS, RW và AS lên mức logic 1. - Bước 2: Đưa địa chỉ thanh ghi cần đọc vào các chân dữ liệu của DS12C887. - Bước 3: Tạo cạnh xuống tại chân AS - Bước 4: Tạo cạnh xuống tại chân DS. - Bước 5: Lúc này dữ liệu cần đọc đã xuất hiện tại các chân data của DS12C887. Ta chỉ việc khởi tạo lại port thành input và đọc dữ liệu đó vào. - Bước 6: Đưa chân AS về mức logic cao. Chương trình ứng dụng được viết như sau: Chương trình 3: ;======================================================================== processor 16f877a include __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;======================================================================== ;--------------------------------------------------------- ; Khai bao bien ;--------------------------------------------------------- DATA_W EQU 0x26 ADDRESS_W EQU 0x27 DATA_R EQU 0x28 ADDRESS_R EQU 0x29 ;------------------------------------------------------- ; Khai bao phan cung ;------------------------------------------------------ #define DS PORTE, 2 #define RW PORTE, 1 #define AS PORTE, 0 #define DATAPORT PORTD #define LEDPORT PORTB ;======================================================================== ; CHUONG TRINH CHINH ;======================================================================== ORG 0x000 GOTO start start Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 23/42 ;--------------------------------------------------- ; Khoi tao cac PORT I/O ;--------------------------------------------------- BSF STATUS,RP0 ; select BANK1 MOVLW 0x06 ; tat ca cac chan I/O deu la dang so MOVWF ADCON1 CLRF TRISB CLRF TRISE BCF STATUS,RP0 ; select BANK0 ;-------------------------------------------------------------- ; Doc va ghi len RAM cua DS12C887 ;------------------------------------------------------------- MOVLW b'10101010' ; du lieu can ghi vao thanh ghi MOVWF DATA_W MOVLW d'14' ; dia chi cua thanh ghi can ghi MOVWF ADDRESS_W CALL write_12C887 ; chuong trinh con "write_12C887" MOVLW d'14' ; dia chi thanh ghi can doc MOVWF ADDRESS_R CALL read_12C887 ; chuong trinh con "read_12C887" MOVF DATA_R,0 ; xuat du lieu vua doc duoc ra LED MOVWF LEDPORT ;------------------------------------------------------------------- ; VONG LAP CHINH CUA CHUONG TRINH ;------------------------------------------------------------------- main GOTO main ;======================================================================== ; Chuong trinh con ;======================================================================== ;------------------------------------------------------------------------------------------------------- ; Chuong trinh con "write_12C887" dung de ghi du lieu len 12C887 ; Du lieu can ghi chua trong thanh ghi DATA ; Dia chi can ghi du lieu vao chua trong thanh ghi ADDRESS ; Giao tiep theo chuan cua INTEL ;------------------------------------------------------------------------------------------------------- write_12C887 BSF STATUS,RP0 CLRF TRISD BCF STATUS,RP0 MOVF ADDRESS_W,0 Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 24/42 MOVWF DATAPORT BSF DS BSF RW NOP BSF AS NOP BCF AS NOP MOVF DATA_W,0 MOVWF DATAPORT BCF RW NOP BSF AS RETURN ;--------------------------------------------------------------------------------------------------- ; Chuong trinh con "read_12C887" dung de doc du lieu tu 12C887 ; Dia chi can doc du lieu vao chua trong thanh ghi ADDRESS_R ; Du lieu sau khi doc chua trong thanh ghi DATA_R ; Giao tiep theo chuan cua INTEL ;--------------------------------------------------------------------------------------------------- read_12C887 BSF STATUS,RP0 CLRF TRISD BCF STATUS,RP0 MOVF ADDRESS_R,0 MOVWF DATAPORT BSF DS BSF RW NOP BSF AS NOP BCF AS NOP BCF DS NOP BSF STATUS,RP0 MOVLW 0xFF MOVWF TRISD BCF STATUS,RP0 MOVF DATAPORT,0 MOVWF DATA_R Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 25/42 BSF AS RETURN ;======================================================================== END Trong trường hợp này, do dữ liệu cần truy xuất không nằm trong các byte chứa giá trị thời gian thực được thường xuyên cập nhật nên có thể đọc ghi một cách tự do. Trong trường hợp cần truy xuất các giá trị thời gian thực, ta phải kiểm tra bit UIP (bit 7 của thanh ghi REGISTER A) trước khi tiến hành thao tác truy xuất. 4. Xây dưng chương trình ứng dụng cho RTC Công việc còn lại là tập hơp tất cả các module trên để hoàn thành ứng dụng RTC. Lưu đồ giải thuật cho chương trình chính như sau: START KHOI TAO DATA DS12C887 READY?? CAP NHAT THOI GIAN MOI HIEN THI TIMESET CO DUOC NHAN?? CHUYEN QUA CHE DO CHINH GIO Y Y N N Hình 13: Lưu đồ giải thuật chương trình chính. Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 26/42 Chương trình hoàn chỉnh của ứng dụng RTC được viết như sau: Chương trình 4: ;======================================================================== processor 16f877a include __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF ;======================================================================== ;------------------------------ ; Khai bao bien ;------------------------------ count1 EQU 0x20 counta EQU 0x21 countb EQU 0x22 hc EQU 0x23 hdv EQU 0x24 duphong EQU 0x25 DATA_W EQU 0x26 ADDRESS_W EQU 0x27 DATA_R EQU 0x28 ADDRESS_R EQU 0x29 gio EQU 0x2A phut EQU 0x2B giay EQU 0x2C ngay EQU 0x2D thang EQU 0x2E nam EQU 0x2F sendreg EQU 0X32 count EQU 0X33 hcgiay EQU 0x34 hdvgiay EQU 0x35 hcphut EQU 0x36 hdvphut EQU 0x37 hcgio EQU 0x38 hdvgio EQU 0x39 hcngay EQU 0x40 hdvngay EQU 0x41 hcthang EQU 0x42 hdvthang EQU 0x43 hcnam EQU 0x44 Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 27/42 hdvnam EQU 0x45 ;--------------------------------------------- ; Khai bao phan cung ;--------------------------------------------- #define data PORTA,0 #define clock PORTA,2 #define clear PORTA,1 #define latch PORTA,3 #define DS PORTE,2 #define RW PORTE,1 #define AS PORTE,0 #define DATAPORT PORTB #define LEDPORT PORTD #define timeset PORTC,0 #define decrease PORTC,1 #define increase PORTC,2 ;======================================================================== ; CHUONG TRINH CHINH ;======================================================================== ORG 0x000 CLRF STATUS MOVLW 0x00 MOVWF PCLATH GOTO start ;----------------------------------------------------------------------------------------------------- ; Chuong trinh con chuyen doi tu ma thap phan sang ma LED 7 doan ; Ket qua sau khi chuyen doi chua trong thanh ghi W ;----------------------------------------------------------------------------------------------------- table ADDWF PCL,1 RETLW 0xC0 RETLW 0xF9 RETLW 0xA4 RETLW 0xB0 RETLW 0x99 RETLW 0x92 RETLW 0x82 RETLW 0xF8 RETLW 0x80 Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 28/42 RETLW 0x90 ;--------------------------------------------------------------------------------------- start ;--------------------------------------------------- ; Khoi tao cac PORT I/O ;--------------------------------------------------- BSF STATUS,RP0 ; select BANK1 MOVLW 0x06 MOVWF ADCON1 MOVLW b'00100000' MOVWF TRISA CLRF TRISD CLRF TRISE MOVLW b'00000111' MOVWF TRISC BCF STATUS,RP0 ; select BANK0 MOVLW 0x02 MOVWF PORTA ; control word, clear <- 1 CLRF PORTD ;----------------------------------------------------------------- ; Khoi tao 74HC595 ;----------------------------------------------------------------- BCF clear ; clear shift register NOP BSF clear ; clear tac dong canh xuong -\_ ;------------------------------------------------------------------- ; Khoi tao ca che do cho DS12C887 ;------------------------------------------------------------------- MOVLW b'00100000' ; dua gia tri vao thanh ghi "register A" MOVWF DATA_W MOVLW d'10' MOVWF ADDRESS_W CALL write_12C887 MOVLW b'01010110' ; dua gia tri vao thanh ghi "register B" MOVWF DATA_W ; dang du lieu 24 gio MOVLW d'11' ; dang du lieu Binary MOVWF ADDRESS_W CALL write_12C887 Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 Ngày: 9/5/2006 Trang: 29/42 ;-------------------------------------------------------- ; can chu y doan chuong trinh duoi day ; do chua trang bi chua nang dieu chinh ngay thang nam ; nen tam them doan chuong trinh nay vao de dieu chinh ; khi cho dong ho hoat dong lau dai, can bo doan code nay di ; vi neu mach bi reset, doan chuong trinh nay duoc thuc thi ; khi do, thoi gian hien thi khong con dung nua ;---------------------------------------------------------- hello MOVLW d'10' ; kiem tra dieu kien de thao tac len ; cac thanh ghi chua gia tri thoi gian thuc MOVWF ADDRESS_R ; thuc chat la kiem tra trng tha

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

  • pdfThiết kế đồng hồ thời gian thực RTC DS 12C887 với vi điều khiển PIC 16F877A.pdf