RTC sử dụng IC chuyên dụng cho ta độ chính xác tuyệt đối về thời gianthực mà không 
cần lo lắng đến việc có sai số như khi thực hiện RTC bằng Timer. Đâylà ưu điểm vựợt trội của 
RTC thời gian thực và dựa trên đó, ta có thể phát triển rộng rãi hơn cácứng dụng cho phép sử 
dụng được trong thực tế. 
Định hướng phát triển cho các phiên bản sau này: 
- Thay đổi phương pháp hiển thị sao cho đẹp và có mỹ thuật hơn (sử dụng ma trận LED). 
- Dựa vào ngày tháng năm dương lịch để tính toán ngày tháng năm âm lịch và hiển thị. 
- Hoàn chỉnh chức năng chỉnh giờ và trang bị thêm chức năng hen giờ. 
- Hạ giá thành sản phẩm (sử dụng vi điều khiển PIC rẻ hơn).
                
              
                                            
                                
            
 
            
                 43 trang
43 trang | 
Chia sẻ: lylyngoc | Lượt xem: 2399 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang tài liệu Báo cáo Quá trình thiết kế và thi công Đồng hồ thời gian thực RTC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
iển đoạn LED đó là 
mức logic 1. 
Hình 4: LED 7 đoạn 
Hình vẽ trên là một LED 7 đoạn loại Cathode chung. Thực ra cấu trúc các chân của LED 
7 đoạn có thể thay đổi chứ không cố định. Một phương pháp để xác định chính xác các 
chân điều khiển của LED 7 đoạn là kiểm tra từng chân của LED đó. 
Dựa vào hình vẽ ta có thể hiểu được một phần nào phương pháp hiển thị của một LED 
7 đoạn. Ví dụ, muốn hiển thị số “6”, ta sẽ điều khiển các đoạn LED a, c, d, e, g, f sáng lên. 
Việc điều khiển sáng tắt được thực hiện bằng cách đưa dữ liệu thích hợp vào các chân a-g 
và dp (tạm gọi là các chân dữ liệu) của LED 7 đoạn. Đó là cách hiển thị theo từng LED. Tuy 
nhiên, trong thực tế, để tiết kiệm số chân cần thiết để điều khiển cùng một lúc nhiều LED 7 
đoạn, các chân dữ liệu của các LED sẽ được nối song song với nhau, các chân anode chung 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 6/42 
(hoặc cathode chung) được dùng để cho phép LED đó sáng hay tắt (tạm gọi là các chân 
điều khiển). Phương pháp hiển thị sẽ dựa trên nguyên lí lưu ảnh của mắt. 
3.1.2 Xây dựng module hiển thị trên LED 7 đoạn 
Module ứng dụng sau đây được xây dựng dùng để hiển thị 2 chữ số thập phân trên 2 
LED 7 đoạn sử dụng loại LED 7 đoạn Anode chung. 
Trước hết ta sẽ tiến hành kết nối phần cứng giữa vi điều khiển và LED 7 đoạn để từ đó 
xác định được dữ liệu cần đưa vào LED 7 đoạn để hiển thị một chữ số thập phân nào đó. 
Thứ tự kết nối các chân như sau: 
- Chân dp nối vào chân RD7. 
- Chân g nối vào chân RD6. 
- Chân f nối vào chân RD5. 
- Chân e nối vào chân RD4. 
- Chân d nối vào chân RD3. 
- Chân c nối vào chân RD2. 
- Chân b nối vào chân RD1. 
- Chân a nối vào chân RD0. 
Muốn điều khiển một đoạn LED nào đó sáng lên, ta đưa vào chân điều khiển LED đó 
về mức logic 0. Với cách nối chân như vậy, ta có bảng dữ liệu tương ứng với các chữ số cần 
hiển thị trên LED 7 đoạn như sau: 
Chữ 
số 
RB7 
(dp) 
RB6 
(g) 
RB5 
(f) 
RB4 
(e) 
RB3 
(d) 
RB2 
(c) 
RB1 
(b) 
RB0 
(a) 
Mã 
HEX 
0 1 1 0 0 0 0 0 0 C0h 
1 1 1 1 1 1 0 0 1 F9h 
2 1 0 1 0 0 1 0 0 A4h 
3 1 0 1 1 0 0 0 0 B0h 
4 1 0 0 1 1 0 0 1 99h 
5 1 0 0 1 0 0 1 0 92h 
6 1 0 0 0 0 0 1 0 82h 
7 1 1 1 1 1 0 0 0 F8h 
8 1 0 0 0 0 0 0 0 80h 
9 1 0 0 1 0 0 0 0 90h 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 7/42 
Dựa vào bảng dữ liệu trên, muốn hiển thị một chữ số lên LED 7 đoạn, ta chỉ việc đưa 
mã HEX tương ứng với chữ số đó ra PORT D của vi điều khiển. Bảng mã trên không cố 
định mà có thể thay đổi tùy thuộc vào cấu trúc phần cứng của mạch điều khiển. Tùy theo 
cách kết nối mà ta có thể xây dựng bảng mã tương ứng. 
Để điều khiển việc cho phép một LED nào đó tắt hoặc sáng. Ta nối các chân RB0 và RB1 
với các chân điều khiển của LED thông qua các “công tắc”. “Công tắc” này là các Transistor 
và có cấu trúc mạch như hình 5. Khi chân điều khiển ở mức logic 1, transistor ngưng dẫn 
và không có dòng vào LED 7 đoạn. Khi chân diều khiển ở mức logic 0, transistor dẫn bão 
hòa và xuất hiện dòng điện đi qua các LED. 
Ta sẽ sử dụng chân RB0 để điều khiển LED hàng đơn vị và chân RB1 để điều khiển LED 
hàng chục. 
5V
10 K
H
I
A
LO
RBx
Hình 5: Sơ đồ nguyên lí công tắc điều khiển 
Sau đây là sơ đồ mạch cụ thể: 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 8/42 
B
0
HI
DP
A1015
D
NTC11 2 3 4 5
678910
G F
VC
C A B
D
P
CVC
C
DE
330
30 pF
R2
10K
C
4 MHz
HI
330
E
330
HI
G
E
A1015
SW1
A
330
330
330
G
D
330
NTC21 2 3 4 5
678910
G F
VC
C A B
D
P
CVC
C
DE
30 pF
F
R1
10 K
HI
B
A
C
330
NTC3
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
0
DP
0
F
R13
R
Hình 6 : Sơ đồ nguyên lí module hiển thị cho LED 7 đoạn 
Chương trình viết cho ứng dụng trải qua các bước sau: 
- Đưa dữ liệu của LED 1 vào 
- Bật LED 1 
- Delay 
- Đưa dữ liệu của LED 2 vào 
- Bật LED 2 
- Delay 
- Lặp lại bước 1 
Sau đây là chương trình cụ thể: 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 9/42 
Chương trình 1: 
;======================================================================== 
 title “chuongtrinh1.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 
;------------------------------------------------------------------ 
 count1 EQU 0x20 
 counta EQU 0x21 
 countb EQU 0x22 
;========================================================================= 
; Chương trình chính 
 ORG 0x000 
 GOTO start 
;========================================================================= 
start 
;----------------------------------------------------------------------------------- 
; Khởi tạo các PORT 
;----------------------------------------------------------------------------------- 
 BCF STATUS, RP1 
 BSF STATUS,RP0 ; BANK1 
 CLRF TRISD ; PORTD <- output 
 CLRF TRISB ; PORTB <- output 
 BCF STATUS,RP0 ; BANK0 
 CLRF PORTB 
 CLRF PORTD 
;----------------------------------------------------------------------------------- 
; Vòng lặp chính của chương trình 
;----------------------------------------------------------------------------------- 
loop 
 MOVLW 0x99 ; hiển thị số 4 
 MOVWF PORTD 
 MOVLW b'11111101' ; bật LED hàng chục 
 MOVWF PORTB 
 CALL delay_1ms ; delay_1ms 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 10/42 
 MOVLW 0x92 ; hiển thị số 5 
 MOVWF PORTD 
 MOVLW b'11111110' ; bật LED hàng đơn vị 
 MOVWF PORTB 
 CALL delay_1ms ; delay_1ms 
 GOTO loop 
;========================================================================= 
; Chương trình con 
;========================================================================= 
;-------------------------------------------------------------- 
; Chương trình con tạo thời gian delay 1 ms 
;-------------------------------------------------------------- 
delay_1ms 
 MOVLW d'1' 
 MOVWF count1 
d1 
 MOVLW 0xC7 
 MOVWF counta 
 MOVLW 0x01 
 MOVWF countb 
delay_0 
 DECFSZ counta,1 
 GOTO $+2 
 DECFSZ countb,1 
 GOTO delay_0 
 DECFSZ count1,1 
 GOTO d1 
 RETURN 
 END 
;======================================================================== 
Trong chương trình trên, mỗi LED sẽ được bật sáng trong một khoảng thời gian 1 ms, 
sau đó tắt LED đó và bật LED khác lên. Do thời gian bật tắt quá nhanh nên mắt sẽ bị đánh 
lừa là LED sáng liên tuc. Hiện tượng này có thể quan sát rõ hơn bằng cách tăng thời gian 
delay lên, khi đó ta sẽ thấy từng LED được bật tắt một cách tuần tự. 
Tương tự ta có thể mở rộng số lượng LED bằng cách nối song song tất cả chúng lại với 
nhau và áp dụng giải thuật trên để hiển thị. 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 11/42 
3.2. IC ghi dịch 74HC595 
Đây là IC ghi dịch nối tiếp sang song song. IC được ứng dụng để tăng số lượng chân 
output cho vi điều khiển. Có nhiều phương pháp để tăng số lượng chân , ví dụ như dùng 
IC giải mã, tuy nhiên IC ghi dịch 74HC595 được lựa chọn như là một giải pháp vì các 
nguyên nhân sau: 
- Số lượng chân điều khiển luôn cố định là 4 chân: nếu dùng giải mã thì số lựong 
chân điều khiển sẽ tăng theo số lượng chân ngõ ra (khi phải ghép nhiều IC lại với 
nhau). Trong khi dùng ghi dịch thì số lượng chân điều khiển luôn là cố định ngay cả 
khi cần ghép nhiều IC lại với nhau. 
- Cho phép điều khiển linh họat và ổn định hơn: giữa các thanh ghi dịch và ngõ ra 
có một “chốt”. Điều này cho phép thay đổi linh hoạt dữ liệu trong các thanh ghi 
dịch và ổn định trạng thái logic ngõ ra. 
3.2.1 Cấu tạo của 74HC595 
74HC595 là IC ghi dịch nối tiếp sang song với 8 ngõ ra QH:QA và bộ chốt dữ liệu 8 bit. 
Dữ liệu được đưa vào các thanh ghi dịch bên trong IC thông qua 1 chân SER (chân 14) và 
các chân điều khiển RCK (chân 12, điều khiển chốt dữ liệu), chân SCK (chân 11, điều khiển 
quá trình dịch dữ liệu), chân (chân 10, dùng để tác động lên quá trình xóa dữ liệu) 
chân Q’H (chân 9, chân đưa dữ liệu nối tiếp ra ngoài dùng để ghép nhiều IC lại với nhau) 
và chân dùng để cho phép các ngõ ra. 
Hình 7: Sơ đồ chân là bảng sự thật của 74HC595. 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 12/42 
Hình 8: Sơ đồ khối 74HC595. 
Ta có thể điều khiển được một hoặc nhiều IC 74HC595 ghép với nhau thông qua 4 chân 
SER, RCK, SCK và . Điều này cho phép mở rộng một cách vô hạn số lượng chân ngõ 
ra của vi điều khiển. Tuy nhiên nhược điểm của nó là thời gian truy xuất các ngõ ra chậm 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 13/42 
hơn so với việ truy xuất trực tiếp, vì dữ liệu phải được đưa từng bỉt vào IC trước khi cho 
xuất ra ngoài. 
Hình sau thể hiện cách nối nhiều IC ghi dịch lại với nhau. Các chân điều khiển (RCK, 
SCK và ) được nối chung lại với nhau, chân dữ liệu 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 thai bit UIP 
CALL read_12C887 ; xem lai chuc nang cua bit UIP 
BTFSC DATA_R,7 
GOTO hello 
MOVLW d'23' ; Khoi tao cac gia tri thoi gian cho DS12C887 
MOVWF DATA_W ; ngay 23 
MOVLW d'7' 
MOVWF ADDRESS_W 
CALL write_12C887 
MOVLW d'3' ; thang 3 
MOVWF DATA_W 
MOVLW d'8' 
MOVWF ADDRESS_W 
CALL write_12C887 
;-------------------------------------------------------------------------------- 
; VONG LAP CHINH CUA CHUONG TRINH 
;-------------------------------------------------------------------------------- 
main 
MOVLW d'10' 
MOVWF ADDRESS_R 
CALL read_12C887 
BTFSC DATA_R,7 ; Du lieu da san sang de truy xuat?? 
GOTO quet ; neu chua, nhay den che do hien thi 
CALL update ; neu roi, cap nhat gia tri moi 
quet 
CALL hienthigiay 
BTFSS timeset 
CALL time_set 
CALL hienthiphut 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 30/42 
BTFSS timeset 
CALL time_set 
CALL hienthigio 
BTFSS timeset 
CALL time_set 
CALL hienthingay 
BTFSS timeset 
CALL time_set 
CALL hienthithang 
BTFSS timeset 
CALL time_set 
CALL hienthinam 
BTFSS timeset 
CALL time_set 
GOTO main 
;======================================================================== 
; CHUONG TRINH CON 
;======================================================================== 
;-------------------------------------------------------------------------------------------------------- 
; Chuong trinh con "UPDATE" 
; Dung de cap nhat cac gia tri thoi gian moi trong DS12C887 
; Cac gia tri thoi gian duoc doc ra va duoc luu trong cac 
; thanh ghi tuong ung 
;-------------------------------------------------------------------------------------------------------- 
update 
MOVLW d'0' ; doc gia tri giay 
MOVWF ADDRESS_R 
CALL read_12C887 
MOVF DATA_R,0 
MOVWF giay ; luu vao thanh ghi “giay” 
MOVLW d'2' 
MOVWF ADDRESS_R 
CALL read_12C887 ; doc gia tri phut 
MOVF DATA_R,0 
MOVWF phut ; luu vao thanh ghi “phut” 
MOVLW d'4' 
MOVWF ADDRESS_R 
CALL read_12C887 ; doc gia tri gio 
MOVF DATA_R,0 
MOVWF gio ; luu vao thanh ghi gio 
MOVLW d'7' 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 31/42 
MOVWF ADDRESS_R 
CALL read_12C887 ; doc gia tri ngay 
MOVF DATA_R,0 
MOVWF ngay ; luu vao thanh ghi ngay 
MOVLW d'8' 
MOVWF ADDRESS_R 
CALL read_12C887 ; doc gia tri thang 
MOVF DATA_R,0 
MOVWF thang ; luu vao thanh ghi “thang” 
MOVLW d'9' 
MOVWF ADDRESS_R 
CALL read_12C887 ; doc gia tri nam 
MOVF DATA_R,0 
MOVWF nam ; luu vao thanh ghi “nam” 
RETURN 
;--------------------------------------------------------------------------------- 
; Chuong trinh con "hienthigiay" 
; Dung de hien thi gia tri giay ra LED 7 doan 
; Cac gia tri hang chuc va hang don vi giay duoc chua trong 
; cac thanh ghi "hcgiay" va "hdvgiay " 
;----------------------------------------------------------------------------------- 
hienthigiay 
MOVF giay,0 
CALL tach 
MOVF hc,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111101' 
CALL serout 
MOVLW b'11111111' 
CALL serout 
CALL out 
CALL delay_150us 
MOVF hdv,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111110' 
CALL serout 
MOVLW b'11111111' 
CALL serout 
CALL out 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 32/42 
CALL delay_150us 
RETURN 
;------------------------------------------------------------------------------------------ 
; Chuong trinh con "hienthiphut" 
; Dung de hien thi gia tri phut ra LED 7 doan 
; Cac gia tri hang chuc va hang don vi phut duoc chua trong 
; cac thanh ghi "hcphut" va "hdvphut" 
;------------------------------------------------------------------------------------------ 
hienthiphut 
MOVF phut,0 
CALL tach 
MOVF hc,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11110111' 
CALL serout 
MOVLW b'11111111' 
CALL serout 
CALL out 
CALL delay_150us 
MOVF hdv,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111011' 
CALL serout 
MOVLW b'11111111' 
CALL serout 
CALL out 
CALL delay_150us 
RETURN 
;----------------------------------------------------------------------------------------------- 
; Chuong trinh con "hienthigio" 
; Dung de hien thi gia tri gio ra LED 7 doan 
; Cac gia tri hang chuc va hang don vi gio duoc chua trong 
; cac thanh ghi "hcgio" va "hdvgio" 
;----------------------------------------------------------------------------------------------- 
hienthigio 
MOVF gio,0 
CALL tach 
MOVF hc,0 
CALL table 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 33/42 
MOVWF LEDPORT 
MOVLW b'11011111' 
CALL serout 
MOVLW b'11111111' 
CALL serout 
CALL out 
CALL delay_150us 
MOVF hdv,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11101111' 
CALL serout 
MOVLW b'11111111' 
CALL serout 
CALL out 
CALL delay_150us 
RETURN 
;--------------------------------------------------------------------------------------------- 
; Chuong trinh con "hienthingay" 
; Dung de hien thi gia tri gio ra LED 7 doan 
; Cac gia tri hang chuc va hang don vi ngay duoc chua trong 
; cac thanh ghi "hcngay" va "hdvngay" 
;---------------------------------------------------------------------------------------------- 
hienthingay 
MOVF ngay,0 
CALL tach 
MOVF hc,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111111' 
CALL serout 
MOVLW b'11111110' 
CALL serout 
CALL out 
CALL delay_150us 
MOVF hdv,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111111' 
CALL serout 
MOVLW b'11111101' 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 34/42 
CALL serout 
CALL out 
CALL delay_150us 
RETURN 
;----------------------------------------------------------------- 
; Chuong trinh con "hienthithang" 
; Dung de hien thi gia tri gio ra LED 7 doan 
; Cac gia tri hang chuc va hang don vi thang duoc chua trong 
; cac thanh ghi "hcthang" va "hdvthang" 
;----------------------------------------------------------------- 
hienthithang 
MOVF thang,0 
CALL tach 
MOVF hc,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111111' 
CALL serout 
MOVLW b'11111011' 
CALL serout 
CALL out 
CALL delay_150us 
MOVF hdv,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111111' 
CALL serout 
MOVLW b'11110111' 
CALL serout 
CALL out 
CALL delay_150us 
RETURN 
;------------------------------------------------------------------------------------------ 
; Chuong trinh con "hienthinam" 
; Dung de hien thi gia tri nam ra LED 7 doan 
; Cac gia tri hang chuc va hang don vi nam duoc chua trong 
; Cac thanh ghi "hcnam" va "hdvnam" 
; Gia tri "20" trong gia tri nam "20xx" duoc gui co dinh 
;------------------------------------------------------------------------------------------- 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 35/42 
hienthinam 
MOVF nam,0 
CALL tach 
MOVLW d'2' 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111111' 
CALL serout 
MOVLW b'11101111' 
CALL serout 
CALL out 
CALL delay_150us 
MOVLW d'0' 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111111' 
CALL serout 
MOVLW b'11011111' 
CALL serout 
CALL out 
CALL delay_150us 
MOVF hc,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111111' 
CALL serout 
MOVLW b'10111111' 
CALL serout 
CALL out 
CALL delay_150us 
MOVF hdv,0 
CALL table 
MOVWF LEDPORT 
MOVLW b'11111111' 
CALL serout 
MOVLW b'01111111' 
CALL serout 
CALL out 
CALL delay_150us 
RETURN 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 36/42 
;------------------------------------------------------------------------------------------ 
; 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 TRISB 
BCF STATUS,RP0 
MOVF ADDRESS_W,0 
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 TRISB 
BCF STATUS,RP0 
MOVF ADDRESS_R,0 
MOVWF DATAPORT 
BSF DS 
BSF RW 
NOP 
BSF AS 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 37/42 
NOP 
BCF AS 
NOP 
BCF DS 
NOP 
BSF STATUS,RP0 
MOVLW 0xFF 
MOVWF TRISB 
BCF STATUS,RP0 
MOVF DATAPORT,0 
MOVWF DATA_R 
BSF AS 
RETURN 
;------------------------------------------------------------------------------------- 
; Chuong trinh con dua du lieu can xuat vao 74HC595 
;------------------------------------------------------------------------------------- 
serout 
MOVWF sendreg 
MOVLW 0x08 
MOVWF count 
testbit 
BCF data ; default 
BTFSC sendreg,7 ; sendreg,7 == 0 ?? 
BSF data ; if not, set dulieu from 0 -> 1 
BSF clock 
NOP ; generate 1 clock to shift 74HC595 
BCF clock ; register content 
RLF sendreg,0 ; rotate sendreg register to the left 
MOVWF sendreg 
DECFSZ count,1 ; decrement bit counter 
GOTO testbit ; if count != 0, continue from "testbit" label 
RETURN 
;--------------------------------------------------------------------------------------------------- 
; Chuong trinh con tach chu so hang chuc va hang don vi cua thanh ghi 
; Du lieu can tach duoc dua vao thanh ghi W 
; Ket qua sau khi tach chua trong hai thanh ghi "hc" (chua hang chhuc) 
; va "hdv" (chua hang don vi) 
; Dang du lieu dua vao la dang HEX 
;--------------------------------------------------------------------------------------------------- 
tach 
MOVWF hdv 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 38/42 
CLRF hc 
next 
MOVLW d'10' 
SUBWF hdv,0 
BTFSS STATUS,C 
GOTO exit 
MOVWF hdv 
INCF hc,1 
GOTO next 
exit 
RETURN 
;------------------------------------------------------------------------------------ 
; Cac chuong trinh con delay 
; Ho tro cho cac thao tac quet LED va chong doi phim nhan 
; chu y thoi gian delay khong thuc su chinh xac 
; do yeu cau quet LED, nen phai dieu chinh nhieu lan 
; do do thi gian delay thuc te khac voi du kien khi viet chuong trinh 
;------------------------------------------------------------------------------------ 
delay_25ms 
MOVLW d'250' 
GOTO delay 
delay_150us 
MOVLW d'5' 
delay 
MOVWF count1 
d2 
MOVLW 0xC7 
MOVWF counta 
MOVLW 0x01 
MOVWF countb 
delay_1 
DECFSZ counta,1 
GOTO $+2 
DECFSZ countb,1 
GOTO delay_1 
DECFSZ count1,1 
GOTO d2 
RETURN 
;------------------------------------------------------------------------------------------------ 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 39/42 
; Chuong trinh con "out" 
; Dung de chot du lieu tu bo dem ra cac chan output ra 74HC595 
;------------------------------------------------------------------------------------------------ 
out 
BSF latch 
NOP 
BCF latch 
RETURN 
;----------------------------------------------------------------------------------- 
; Chuong trinh con "timeset" dung de chinh gio 
; Nut timeset duoc dung de lua chon doi tuong dieu chinh 
; Nut inc dung de tang gia tri can dieu chinh 
;------------------------------------------------------------------------------------ 
time_set 
CALL delay_25ms 
CALL delay_25ms ; nut "timeset" co thuc su duoc an?? 
BTFSC timeset 
RETURN ; neu khong, quay ve! 
CALL wait ; doi cho nut “timeset” nha ra 
quet_gio 
CALL hienthigio ; bat dau chinh gio truoc 
BTFSS timeset ; neu “timeset” duoc nhan, tiep tuc
 GOTO exit_set_gio ; chuyen qua chinh phut 
BTFSS increase ; neu nut “increase” duoc an, tang gio 
GOTO set_gio1 ; neu khong, tiep tuc cho cac nut bam 
GOTO quet_gio 
set_gio1 
CALL delay_25ms 
CALL delay_25ms 
BTFSC increase 
GOTO quet_gio 
INCF gio,1 
MOVLW d'24' 
XORWF gio,0 
BTFSC STATUS,Z 
CLRF gio 
GOTO quet_gio 
exit_set_gio 
CALL delay_25ms 
CALL delay_25ms 
BTFSC timeset 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 40/42 
GOTO quet_gio 
CALL wait 
quet_phut 
CALL hienthiphut 
BTFSS timeset 
GOTO exit_set_phut 
BTFSS increase 
GOTO set_phut1 
GOTO quet_phut 
set_phut1 
CALL delay_25ms 
CALL delay_25ms 
BTFSC increase 
GOTO quet_phut 
INCF phut,1 
MOVLW d'60' 
XORWF phut,0 
BTFSC STATUS,Z 
CLRF phut 
GOTO quet_phut 
exit_set_phut 
CALL delay_25ms 
CALL delay_25ms 
BTFSC timeset 
GOTO quet_phut 
CALL wait 
quet_giay 
CALL hienthigiay 
BTFSS timeset 
GOTO exit_set_giay 
BTFSS increase 
GOTO set_giay1 
GOTO quet_giay 
set_giay1 
CALL delay_25ms 
CALL delay_25ms 
BTFSC increase 
GOTO quet_giay 
INCF giay,1 
MOVLW d'60' 
XORWF giay,0 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 41/42 
BTFSC STATUS,Z 
CLRF giay 
GOTO quet_giay 
exit_set_giay 
CALL delay_25ms 
CALL delay_25ms 
BTFSC timeset 
GOTO quet_giay 
CALL wait 
hey 
MOVLW d'10' ; du lieu da san sang truy xuat?? 
MOVWF ADDRESS_R 
CALL read_12C887 
BTFSC DATA_R,7 
GOTO hey ; neu chua, tiep tuc cho 
MOVF giay,0 ; neu roi, ghi cac gia tri cua dieu chinh 
MOVWF DATA_W ; vao trong cac thanh ghi thoi gian thuc 
MOVLW d'0' ; cua DS12C887 
MOVWF ADDRESS_W 
CALL write_12C887 
MOVF phut,0 
MOVWF DATA_W 
MOVLW d'2' 
MOVWF ADDRESS_W 
CALL write_12C887 
MOVF gio,0 
MOVWF DATA_W 
MOVLW d'4' 
MOVWF ADDRESS_W 
CALL write_12C887 
RETURN 
;--------------------------------------------------------------------------------------------- 
; Chuong trinh con "wait" ho tro cho chuong trinh con "timeset" 
; Dung de cho cho toi khi nut an duoc tha ra 
;--------------------------------------------------------------------------------------------- 
wait 
CALL delay_25ms 
CALL delay_25ms 
BTFSS timeset 
GOTO wait 
Người báo cáo: Nguyễn Trung Chính Tài liệu: REP03.01 
Ngày: 9/5/2006 Trang: 42/42 
RETURN 
;======================================================================== 
END 
5. Kết luận 
RTC sử dụng IC chuyên dụng cho ta độ chính xác tuyệt đối về thời gian thực mà không 
cần lo lắng đến việc có sai số như khi thực hiện RTC bằng Timer. Đây là ưu điểm vựợt trội của 
RTC thời gian thực và dựa trên đó, ta có thể phát triển rộng rãi hơn các ứng dụng cho phép sử 
dụng được trong thực tế. 
Định hướng phát triển cho các phiên bản sau này: 
- Thay đổi phương pháp hiển thị sao cho đẹp và có mỹ thuật hơn (sử dụng ma trận LED). 
- Dựa vào ngày tháng năm dương lịch để tính toán ngày tháng năm âm lịch và hiển thị. 
- Hoàn chỉnh chức năng chỉnh giờ và trang bị thêm chức năng hen giờ. 
- Hạ giá thành sản phẩm (sử dụng vi điều khiển PIC rẻ hơn). 
Tuy rằng LCD cho phép các chế độ hiển thị linh hoạt hơn nhưng không được lựa chọn là 
giải pháp nâng cấp sản phẩm với các lí do: 
- Giá thành cao. 
- Tầm nhìn hạn chế, không phù hợp với định hướng sản phẩm là một đồng hồ điện tử 
dùng để treo tường hoặc để bàn. 
Nhược điểm: 
- Giá thành cao. 
- Khả năng hiển thị còn hạn chế. 
            Các file đính kèm theo tài liệu này:
 1788_pic_rtc_spkt_net_6458.pdf 1788_pic_rtc_spkt_net_6458.pdf