Tài liệu này được upload & download miễn phí tại website: http://hutonline.

net

Bách Khoa Online Giao lưu - Học hỏi - Chia sẻ kinh nghiệm của các thế hệ sinh viên Bách Khoa hutonline.net

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 1 ng h RTC_DS1307_ HC3T

Môn vi x lý tài : ng h th i gian th c dùng DS 1307
Giáo viên hư ng d n: ThS Hàn Huy Dũng
Nhóm th c hi n: Sinh viên l p i n t 2-K48 Các thành viên: + Lê Th H ng. + Minh Châu. + Nguy n Anh Tu n. + inh Xuân Thu . + Vũ Anh Tu n. I, Ch c năng c a m ch i n: - Hi n th : gi ,phút,giây, ngày , tháng,năm,th trong tu n - giao ti p v i 4 phím : status-mode-increase-decrease. Phím status dùng chuy n ch t hi n th gi ,phút ,giây,th sang ngày ,tháng, năm. Phím mode dùng i u ch nh ngày, tháng, năm và gi ,phút ,giây,th II, Mô t m ch: -M ch s d ng IC th i gian th c DS 1307 giao ti p I2C v i Pic. Pic16F877A

-

Dùng 8 led 7 thanh lo i 4 led/1 con. Dùng 8 Tranzito i u khi n vi c óng ng t các led. Vi i u khi n ư c dùng là PIC 16F877A Dùng th ch anh 20MHz t o dao ng cho PIC.

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 2 ng h RTC_DS1307_ HC3T

Dùng m t m ch tiny Bootloader k t n i gi a pic và máy tính , n p chương trình tr c ti p t máy tính vào PIC mà không c n thông qua m ch n p cho PIC. III/ Cơ b n v tiny bootloader: ây là bootloader cho các vi i u khi n Microchip PIC * Nó là bootloader có kích thư c nh nh t, ít hơn 100 word b nh chương trình * Nó là bootloader duy nh t h tr t t c các dòng PIC: 16F, 18F, dsPIC (nh ng dòng có h tr ch self-programming - t n p l i). c i m c a firmware: * Kích thư c ch có kho ng 100word (cho t t c các dòng 16F, 18F, dsPIC, th c ra là nó ít hơn 100 word); * Có th ghi vào flash, eeprom, và có th ghi vào các bytes cài ăt (configuration bytes) c a dòng 18F nh n chương trình n p, n u không nh n ư c thì chuy n qua ch y * Khi reset, i 1 giây chương trình * File .asm c a bootloader r t d ch nh s a l i,cho phù h p v i t ng chip, t c truy n nh n. c i m c a ph n m m trên máy tính * Có th t i chương trình vào flash (trong phiên b n này c a bootloader, cho phép cài t các byte cài t (configuration bytes) và có th thay i d dàng theo t ng lo i PIC) * Làm vi c v i t t c các dòng PIC ã nêu trên; t ng nh n ra n i dung file HEX và dòng PIC * Ghi nh cài t cu i (thu n ti n cho ngư i dùng khi thao tác v i m t lo i PIC) * Trong trư ng h p l i, nó s truy n m t tín hi u ngư c l i cho máy tính tái ng b gi a máy tính và PIC; giao ti p có th ư c thay i, có th dùng b t kỳ c ng COM nào v i t c baud nào * Ch Khái ni m chung v bootloader M t bootloader là m t chương trình n m trong vi i u khi n, và giao ti p v i máy tính (thông qua giao ti p n i ti p). Bootloader nh n m t chương trình ( ã ư c d ch ra thành file HEX) t máy tính và ghi nó vào b nh flash c a vi i u khi n thông qua m t ph n m m trên máy tính, sau ó ch y chương trình ó trên vi i u khi n. Bootloader ch có th ư c dùng v i nh ng vi i u khi n nào cho phép ghi vào b nh flash thông qua ph n m m trên máy tính. B n thân bootloader ph i ư c ghi vào trong b nh flash b ng m t m ch n p khác. bootloader ho t ng, sau khi nh n reset, m t l nh "goto bootloader" ph i n m a ch u tiên c a chương trình vi i u khi n. Có 2 lo i bootloader, m t s lo i ôi khi c n ngư i dùng t l i a ch các dòng l nh u, m t s khác thì t b n thân nó t nh ng dòng l nh u c a ngư i dùng vào m t a ch khác khi mà bootloader ã n m s n ó, và quay tr l i chương trình c a ngư i dùng khi k t thúc o n chương trình bootloader. Trong trư ng h p này, tiny bootloader t ng em các v trí u c a chương trình ngư i vi t, và t phía dư i cùng v i chương trình bootloader (th c ra o n chương trình này ch t i a có 4 dòng l nh). a ch 0x0004 ã là a ch b t u ng t. Chính vì v y, n u l p trình t v trí 0x0000 thì cũng ch vi t ư c t i a 4 dòng l nh, sau ó ph i nh y n chương trình chính. Như v y, tiny bootloader s th c hi n thao tác, c t 4 dòng u tiên t 0x0000 n 0x0003 , thay b ng dòng l nh ng t 4 dòng l nh n m ngay phía trên chương trình GOTO BOOTLOADER. Và nó t bootloader .Sau ó, ch y chương trình tinybootloader phía bên dư i. R i nó quay lên ch y 4 dòng l nh . K t thúc 4 dòng này, nó l i tr v v trí chương trình ch y bình thư ng bên trên. . phiên

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 3 ng h RTC_DS1307_ HC3T

b n m i nh t c a tiny bootloader cho phép reset trên máy tính, không c n ph i b m reset n a. ây là m t lo i tiny bootloader : max232

IV/ Cơ ch ho t

ng và ch c năng c a DS1307:

Vcc: n i v i ngu n X1,X2: n i v i th ch anh 32,768 kHz Vbat: u vào pin 3V GND: t SDA: chu i data SCL: dãy xung clock SQW/OUT: xung vuông/ u ra driver • DS1307 là m t IC th i gian th c v i ngu n cung c p nh , dùng c p nh t th i gian và ngày tháng v i 56 bytes SRAM. a ch và d li u ư c truy n n i ti p qua 2 ư ng bus 2 chi u. Nó cung c p thông tin v gi ,phút,giây ,th ,ngày ,tháng, năm.Ngày cu i tháng

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 4 ng h RTC_DS1307_ HC3T

s t ng ư c i u ch nh v i các tháng nh hơn 31 ngày,bao g m c vi c t ng nh y năm. ng h có th ho t ng d ng 24h ho c 12h v i ch th AM/PM. DS1307 có m t m ch c m bi n i n áp dùng dò các i n áp l i và t ng óng ng t v i ngu n pin cung c p. • DS 1307 ho t ng v i vai trò slave trên ư ng bus n i ti p. Vi c truy c p ư c thi hành v i ch th START và m t mã thi t b nh t nh ư c cung c p b i a ch các thanh ghi. Ti p theo ó các thanh ghi s ư c truy c p liên t c n khi ch th STOP ư c th c thi. Sơ kh i c a DS1307:

Mô t ho t ng c a các chân: • Vcc,GND: ngu n m t chi u ư c cung c p t i các chân này. Vcc là u vào 5V. Khi 5 V ư c cung c p thì thi t b có th truy c p hoàn ch nh và d li u có th c và vi t. Khi pin 3 V ư c n i t i thi t b này và Vcc nh hơn 1,25Vbat thì quá trình c và vi t không ư c th c thi,tuy nhiên ch c năng timekeeping không b nh hư ng b i i n áp vào th p. Khi Vcc nh hơn Vbat thì RAM và timekeeper s ư c ng t t i ngu n cung c p trong (thư ng là ngu n 1 chi u 3V) • Vbat: u vào pin cho b t kỳ m t chu n pin 3V . i n áp pin ph i ư c gi trong kho ng t 2,5 n 3V m b o cho s ho t ng c a thi t b . ng b s chuy n d li u trên ư ng • SCL(serial clock input): SCL ư c s d ng dây n i ti p. • SDA(serial data input/out): là chân vào ra cho 2 ư ng dây n i ti p. Chân SDA thi t k theo ki u c c máng h , òi h i ph i có m t i n tr kéo trong khi ho t ng. • SQW/OUT(square wave/output driver)- khi ư c kích ho t thì bit SQWE ư c thi t l p 1, chân SQW/OUT phát i 1 trong 4 t n s (1Hz,4kHz,8kHz,32kHz). Chân này cũng

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 5 ng h RTC_DS1307_ HC3T

ư c thi t k theo ki u c c máng h vì v y nó cũng c n có m t i n tr kéo trong. Chân này s ho t ng khi c Vcc và Vbat ư c c p. X1,X2: ư c n i v i m t th ch anh t n s 32,768kHz.Là m t m ch t o dao ng ngoài , ho t ng n nh thì ph i n i thêm 2 t 33pF

• 1, Sơ

Cũng có DS1307 v i b t o dao ng trong t n s 32,768kHz, v i c u hình này thì chân X1 s ư c n i vào tín hi u dao ng trong còn chân X2 thì h . a ch RAM và RTC:

Seconds Minutes Hours Day Date Month Year Control Ram 58x8

00h

07h 08h 3Fh

Thông tin v th i gian và ngày tháng ư c l y ra b ng cách c các byte thanh ghi thích h p. th i gian và ngày tháng ư c thi t l p cũng thông qua các byte thanh ghi này b ng cách vi t vào ó nh ng giá tr thích h p. n i dung c a các thanh ghi dư i d ng mã BCD(binary coded decreaseimal). Bit 7 c a thanh ghi seconds là bit clock halt(CH),khi bit này ư c thi t l p 1 thì dao ng disable,khi nó ư c xoá v 0 thì dao ng ư c enable. Chú ý là ph i enable dao ng trong su t quá trình c u hình thi t l p (CH=0). Thanh ghi th i gian th uc ư c mô t như sau:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 6 ng h RTC_DS1307_ HC3T

DS1307 có th ch y ch 24h cũng như 12h. Bit th 6 c a thanh ghi hours là bit ch n 24h ho c 12h. khi bit này m c cao thì ch 12h ư c ch n. ch 12h thì bit ch 5 là bit AM/PM v i m c cao là là PM. ch 24h thì bit 5 là bit ch 20h(t 20h n 23h). Trong quá trình truy c p d li u, khi ch th START ư c th c thi thì dòng th i gian ư c truy n t i m t thanh ghi th 2,thông tin th i gian s ư c c t thanh ghi th c p này,trong khi ó ng h v n ti p t c ch y. i u khi n ho t Bit3 X Bit2 X ng c a chân SQW/OUT Bit1 RS1 Bit0 RS0

Trong DS1307 có m t thanh ghi i u khi n Bit7 OUT • Bit6 X Bit5 X Bit4 SQWE

OUT(output control):bit này i u khi n m c ra c a chân SQW/OUT khi u ra xung vuông là disable. N u SQWE=0 thì m c logic chân SQW/OUT s là 1 n u OUT=1,và =0 n u OUT=0 SQWE(square wave enable): bit này ư c thi t l p 1 s enable u ra c a b t o dao ng. T n s c a u ra sóng vuông ph thu c vào giá tr c a RS1 và RS0

RS1 0 0 1 1

RS0 0 1 0 1

t ns

u ra SQW

1Hz 4,096kHz 8,192kHz 32,768kHz

DS1307 h tr bus 2 dây 2 chi u và giao th c truy n d li u. thi t b g i d li u lên bus ư c g i là b phát và thi t b nh n g i là b thu. thi t b i u khi n quá trình này g i là master. thi t b

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 7 ng h RTC_DS1307_ HC3T

nh n s i u khi n c a master g i là slave. Các bus nh n s i u khi n c a master,là thi t b phát ra chu i xung clock(SCL),master s i u khi n s truy c p bus,t o ra các ch th START và STOP S truy n nh n d li u trên chu i bus 2 dây

Tuỳ thu c vào bit R/ w mà 2 lo i truy n d li u s ư c th c thi: • truy n d li u t master truy n và slave nh n: Master s truy n byte u tiên là a ch c a slave. Ti p sau ó là các byte d li u . slave s g i l i bit thông báo ã nh n ư c (bit acknowledge) sau m i byte d li u nh n ư c. d li u s truy n t bit có giá tr nh t (MSB). • truy n d li u t slave và master nh n: byte u tiên ( a ch c a slave) ư c truy n t i slave b i master. Sau ó slave s g i l i master bit acknowledge. ti p theo ó slave s g i các byte d li u t i master. Master s g i cho slave các bit acknowledge sau m i byte nh n ư c tr byte cu i cùng,sau khi nh n ư c byte cu i cùng thì bit acknowledge s không ư c g i . Master phát ra t t c các chu i xung clock và các ch th START và STOP. s truy n s k t thúc v i ch th STOP ho c ch th quay vòng START. Khi ch th START quay vòng thì s truy n chu i d li u ti p theo ư c th c thi và các bus v n chưa ư c gi i phóng. D li u truy n luôn b t u b ng bit MSB. sau: 2, DS1307 có th ho t ng 2 ch • ch slave nh n( ch DS1307 ghi):chu i d li u và chu i xung clock s ư c nh n thông qua SDA và SCL. Sau m i byte ư c nh n thì 1 bit acknowledge s ư c truy n. các i u ki n START và STOP s ư c nh n d ng khi b t u và k t thúc m t truy n 1 chu i. nh n d ng a ch ư c th c hi n b i ph n c ng sau khi ch p nh n a ch c a slave và bit chi u. Byte a ch là byte u tiên nh n ư c sau khi i u ki n START ư c phát ra t master. Byte a ch có ch a 7 bit a ch c a DS1307, là 1101000, ti p theo ó là bit chi u (R/ w ) cho phép ghi khi nó b ng 0. sau khi nh n và gi i mã byte a ch thì thi t b s phát i 1 tín hi u acknowledge lên ư ng SDA. Sau khi DS1307 nh n d ng ư c a ch và bit ghi thì master s g i m t a ch thanh ghi t i DS1307 , t o ra m t con tr thanh ghi trên DS1307 và master s truy n t ng byte d li u cho DS1307 sau m i bit acknowledge nh n ư c. sau ó master s truy n i u ki n STOP khi vi c ghi hoàn thành.

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 8 ng h RTC_DS1307_ HC3T

slave phát ( ch DS1307 c): byte u tiên slave nh n ư c tương t như ch slave ghi. Tuy nhiên trong ch này thì bit chi u l i ch chi u truy n ngư c l i. Chu i d li u ư c phát i trên SDA b i DS 1307 trong khi chu i xung clock vào chân SCL. Các i u ki n START và STOP ư c nh n d ng khi b t u ho c k t thúc truy n m t chu i. byte a ch nh n ư c u tiên khi master phát i i u ki n START. Byte a ch ch a 7 bit a ch c a slave và 1 bit chi u cho phép c là 1. sau khi nh n và gi i mã byte a ch thì thi t b s nh n 1 bit acknowledge trên ư ng SDA. Sau ó DS1307 b t u g i d li u t i a ch con tr thanh ghi thông qua con tr thanh ghi. n u con tr thanh ghi c ư c thi t l p thì a ch u tiên ư c c s là không ư c vi t vào trư c khi ch a ch cu i cùng ch a trong con tr thanh ghi .DS1307 s nh n ư c m t tín hi u Not Acknowledge khi k t thúc quá trình c. ch c d li u-ch slave phát

• sơ

th i gian th c hi n vi c ng b :

c,ghi d li u c a DS1307:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 9 ng h RTC_DS1307_ HC3T

c tính và th i gian th c hi n:

V/ T ng quan v vi i u khi n PIC16F877A:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 10 ng h RTC_DS1307_ HC3T

PIC 16F877A trong m ch là lo i có 40 chân,v i 5 c ng vào ra la Port A(RA0÷RA5),Port nh th i là B(RB0÷RB7),Port C(RC0÷RC7),Port D(RD0÷RD7),Port E(RE0÷RE2). Có 3 b timer0,timer1,timer2. 8K b nh chương trình flash. T ch c b nh : Có 3 kh i b nh trong pic16F877A: b nh chương trình ,b nh d li u và kh i b nh EEPROM. b nh chương trình và b nh d li u có ư ng bus riêng vì v y có th truy c p vào t ng b nh m t cách riêng r . B m chương trình có 13 bit vì v y không gian a ch s là 8k word x 8bit. Truy c p ngoài vùng không gian trên s gây l i. B nh d li u ư c chia thành 4 bank (Bank0÷Bank3) ,trong các bank ch a các thanh ghi thư ng và các thanh ghi ch c năng c bi t. Bank ư c ch n ph thu c vào bit RP1 và RP0 (bit th 6 và bit th 5) c a thanh ghi tr ng thái status. RP1:RP0 00 01 10 11 Bank 0 1 2 3

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 11 ng h RTC_DS1307_ HC3T

Các thanh ghi ch c năng c bi t ư c CPU và b ngo i vi s d ng i u khi n các thi t b . các thanh ghi này ho t ng như m t thanh RAM tĩnh. Thanh ghi tr ng thái ch a tr ng thái s h c c a ALU,tr ng thái Reset và các bit ch n bank b nh d li u. R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x Z DC C IRP RP1 RP0 PD TO Bit 7 bit 0 Các c ng vào ra c a pic: Port A: có 6 bit (tương ng v i 6 chân RA0÷RA5) các chân c a c ng A có tích h p m t s ch c năng ngo i vi,n u m t thi t b ngo i vi ư c enable thì c ng này s không ho t ng như m t c ng vào ra . Bình thư ng Port A s là m t c ng vào ra 2 chi u. Thanh ghi xác inh chi u tương ng c a các chân port A là thanh ghi TrisA. Các bit thanh ghi TrisA b ng 1 s xác nh các chân port A là u vào ngư c l i s là u ra. Port B: r ng 8 bit(tương ng v i 8 chân RB0÷RB7),là m t c ng vào ra 2 chi u. Thanh ghi qui inh chi u c a c ng B là thanh ghi Tris B. thi t l p các bit thanh ghi TrisB b ng 1 s làm cho c ng B là c ng vào ngư c l i s là c ng ra. Port C: r ng 8 bit(tương ng v i các chân RC0÷RC7),bình thư ng nó là m t c ng vào ra 2 chi u, thanh ghi qui nh chi u c a c ng là thanh ghi TrisC. Các chân RC3,RC4 dùng k t n i truy n nhân thông tin v i các thi t b ngo i vi. Port D: r ng 8 bit (RD0÷RD7),nó có th là c ng vào ho c c ng ra. Port D có th ư c c u hình như m t c ng vi x lý r ng 8 bit (c ng slave song song) b ng cách thiêt l p bit i u khi n PSPSTATUS (TrisE.4). ch này thì u vào la tín hi u TTL. Port E: r ng 3 bit(RE0÷RE2), ư c c u hình là u ra ho c u vào. Port E có th là u vào i u khi n I/O khi bit PSPSTATUS (TrisE.4) ư c thi t l p. pic có th ho t ng T hình v ta có th th y, pic16F877A có 2 chân Vcc và 2 chân GND, ư c ta ph i c p ngu n cho t t c các chân này. Ngoài c p ngu n cung c p ta ph i c p ngu n xung dao ng cho vi i u khi n ho t ng. ta s dùng m t th ch anh 20MHz c p xung dao ng. ngu n dao ng ư c c p thông qua 2 chân 13 và 14 c a pic. M ch reset cho vi i u khi n là m t công t c h thông qua chân MCLR c a vi i u khi n. m ch s th c hi n reset khi chân này t m c logic 1 xu ng logic 0. khi công t c h thì chân này luôn mang m c logic 1 do luôn ư c n i v i ngu n thông qua m t i n tr h n dòng R1, i n tr này ph i có giá tr nh hơn 40k m b o i n áp cung c p cho vi i u khi n.

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 12 ng h RTC_DS1307_ HC3T

m ch reset c a pic16f877a VI/ Kh i hi n th : - Kh i hi n th dùng 8 led +, ch hi n th ngày tháng năm:2 led hi n th ngày ,2 led hi n th tháng ,4 led hi n th năm . hi n th gi ,phút, giây: 2 led dùng hi n th gi ,2 led dùng hi n th phút, 2 led +, ch hi n th giây, 1 led dùng hi n th th trong tu n (ch nh t led hi n giá tr 1,th 2 hi n dùng giá tr 2…th 7 hi n giá tr 7) T t c các led chung ư ng tín hi u a,…,g còn các chân i u khi n thì m c v i các khoá i n t (8 Tranzito A1015) i u khi n vi c óng ng t các led. - vi c c p ngu n cho các led d a trên thu t quét led.

thu t quét led:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 13 b t u quét led ng h RTC_DS1307_ HC3T

kh i t o h th ng

g i d li u cho led 1

c p ngu n cho led 1

tr 1ms

ng t ngu n led 1

g i d li u cho led 8

c p ngu n cho led 8

tr 1ms

ng t ngu n led 8

VII/ kh i i u khi n : G m 4 phím b m: status-mode(button1)-increase(button2)-decrease(button3) - Phím status dùng ch n ch hi n th trên các led là hi n th ngày ,tháng , năm hay là gi ,phút, giây,th - Phím mode dùng ch nh gi ,phút,giây,ngày,tháng,năm - Phím increase tăng giá tr - Phím decrease gi m giá tr

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 14 Thu t toán i u khi n: + , thay i ch hi n th : ng h RTC_DS1307_ HC3T

S Status=0

Quét led hi n th ngày,tháng,năm

+,Ch nh th i gian:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 15 ng h RTC_DS1307_ HC3T

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 16 ng h RTC_DS1307_ HC3T

Set hours:

Set minutes:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 17 ng h RTC_DS1307_ HC3T

Set year:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 18 ng h RTC_DS1307_ HC3T

Set month:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 19 ng h RTC_DS1307_ HC3T

Set day:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 20 ng h RTC_DS1307_ HC3T

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 21 ng h RTC_DS1307_ HC3T

Set date:

VIII/ Sơ

kh i c a m ch:

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 22 ng h RTC_DS1307_ HC3T

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 23 ng h RTC_DS1307_ HC3T

IX,ngôn ng l p trình: - ngôn ng l p trình cho pic là C, dùng CCS 3.227 biên d ch - s d ng I2C tích h p s n trong PIC giao ti p v i DS1307 - s d ng các hàm có s n trong CCS là:I2C_START;I2C_STOP; I2C_READ; I2C_WRITE dùng kh i t o, c giá tr t DS1307 sang PIC. - vi c hi n th th i gian là liên t c ,ta dùng 8 byte RAM làm b m hi n th (các bi n led1,..led8), các giá tr th i gian c t DS1307 sau khi ã chuy n sang BCD s ư c lưu trong các bi n này. - Ta s c các giá tr th i gian t DS1307 nhưng ch c giá tr giây, sau 1 phút ta m i c p nh t toàn b thanh ghi th i gian c a DS1307 và ưa ra hi n th . - Chương trình quét bàn phím s xác nh phím ch c năng và g i hàm x lý tương ng như: chuy n ch , ch nh gi ,tăng,gi m giá tr …

X/ Code: //#include <16F877A.h> #include <led7seg.h> #include <def_877a.h> #use delay(clock=20000000) #use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)

// Cac dinh nghia #define status rd4 #define mode rd5 #define increase rd6 #define decrease rd7 #define led1 ra0 #define led2 ra1 #define led3 ra2 #define led4 ra3 #define led5 ra4 #define led6 ra5 #define led7 re0 #define led8 re1 //Cac bien int8 sec,min,hour,dow,date,month,year; int8 const led_code[16]={0b00000011,0b10011111,0b00100101,0b00001101,0b10011001,0b01001001,0b0100 0001,0b00011111,0b00000001,0b00001001,0b01000001,0b01000001,0b01000001,0b01000001,0b01 000001,0b01000001}; int8 sec1,sec2,min1,min2,hour1,hour2,day,date1,date2,month1,month2,year1,year2,year3,year4;

void display1();

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 24 void display2(); void update_time(); void set_time(void) ; void set_min(void); void set_hour(void); void set_date(void); void set_day(void); void set_month(void); void set_year(void); void main() { set_tris_a(0x00); set_tris_b(0x01); set_tris_e(0x00); set_tris_d(0xff); // Cong A lam dau ra // Cong B lam dau ra ( tru RB0) // Cong B lam dau ra // Cong D lam dau vao ( ban phim) ng h RTC_DS1307_ HC3T

porta=porte=1; while (1) { update_time(); display1(); if (status==0) {display2();} if (mode==0) { set_time();} } } void update_time() { i2c_start(); i2c_write(0xD0); //Gui dia chi cua slave i2c_write(0x00); //thiet lap lai con tro - set register pointer i2c_stop(); I2C_start(); I2C_write(0xD1); /* gui lenh doc du lieu */ sec = i2c_read(1); /* starts w/last address stored in register pointer */ min = i2c_read(1); hour = i2c_read(1); //che do 24h ko can AND dow = i2c_read(1); date = i2c_read(1); month = i2c_read(1); year = i2c_read(0); i2c_stop(); //========================= sec1=sec & 0x0F; sec2=(sec & 0x70)>>4; //convert to BCD SEC min1=min & 0x0F; min2=(min & 0x70)>>4; //convert to BCD MIN

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 25 hour1=hour & 0x0F; hour2=(hour & 0x30)>>4; //convert to BCD HOUR day=(dow & 0x07); date1=date & 0x0F; date2=(date & 0x30)>>4; //convert to BCD DATE month1=month & 0x0F; month2=(month & 0x10)>>4; //convert to BCD MONTH year1=year & 0x0F; year2=(year & 0xF0)>>4; //convert to BCD YEAR } void display1() { // sec - min - hour PortB=led_code[sec1]; led6=0;//SEC1 delay_us(500); led6=1; PortB=led_code[sec2]; led5=0;//SEC2 delay_us(500); led5=1; PortB=led_code[min1]; led4=0;//MIN1 delay_us(500); led4=1; PortB=led_code[min2]; led3=0;//MIN2 delay_us(500); led3=1; PortB=led_code[hour1]; led2=0;//HOUR1 delay_us(500); led2=1; PortB=led_code[hour2]; led1=0;//HOUR2 delay_us(500); led1=1; PortB=led_code[day]; led8=0;//DAY delay_us(500); led8=1; } void display2(){ // Dow - Date - Month - Year int16 i=0; while (status==0) {} while (i<600) { PortB=led_code[date]; led2=0;//DATE1 delay_us(500); led2=1; PortB=led_code[date2]; led1=0;//DATE2 delay_us(500); led1=1; PortB=led_code[month1]; led4=0;//MONTH1 delay_us(500); led4=1; PortB=led_code[month2]; led3=0;//MONTH2 delay_us(500); led3=1; PortB=led_code[year1]; led8=0;//YEAR1 delay_us(500); led8=1; ng h RTC_DS1307_ HC3T

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 26 PortB=led_code[year2]; led7=0;//YEAR2 delay_us(500); led7=1; PortB=led_code[0]; led6=0;//YEAR1 delay_us(500); led6=1; PortB=led_code[2]; led5=0;//YEAR2 delay_us(500); led5=1; i++; } } void update_ds1307(void) { int8 data=0; // luu tru du lieu tam thoi de gui vao ds1307 i2c_start(); i2c_write(0xd0); i2c_write(0x00); // ghi du lieu bat dau tu vi tri 00 data=sec1+(sec2<<4); data=data & 0b01111111; i2c_write(data); data=min1+(min2<<4); i2c_write(data); data=hour1+(hour2<<4); i2c_write(data); data=day; i2c_write(data); data=date1+(date2<<4); i2c_write(data); data=month1+(month2<<4); i2c_write(data); data=year1+(year2<<4); i2c_write(data); data=0x00; i2c_write(data); i2c_stop(); // ket thuc truyen du lieu } void set_time(void) { set_year(); ng h RTC_DS1307_ HC3T

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 27 set_month(); set_date(); set_day(); set_hour(); set_min(); while (mode==0) {} update_ds1307(); } void set_year(void) { // Cai dat nam while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha year1++; if ((year2==9)&(year1==10)) {year1=year2=0;} if (year1==10) {year1=0;year2++;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // khong lam gi cho phim nha year1--; if ((year2==0)&(year1==255)) {year1=year2=9;} if (year1==255) {year1=9;year2--;} } portb=led_code[2]; led5=0; delay_us(500); led5=1; portb=led_code[0]; led6=0; delay_us(500); led6=1; portb=led_code[year2]; led7=0; delay_us(500); led7=1; portb=led_code[year1]; led8=0; delay_us(500); led8=1; } while (mode==1); } ng h RTC_DS1307_ HC3T

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 28 ng h RTC_DS1307_ HC3T

void set_month(void) { // Cai dat thang while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha month1++; if ((month2==1) & (month1==3)) { month2=0;month1=1;} if (month1==10) { month2++;month1=0;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // cho phim nha month1--; if ((month2==0) & (month1==0)) {month2=1;month1=2; } if (month1==0) {month2--;month1=9;} } portb=led_code[month2]; led3=0; delay_us(500); led3=1; portb=led_code[month1]; led4=0; delay_us(500); led4=1; } while (mode==1); } void set_date(void) { // Cai dat thang while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha date1++; if ((date2==3) & (date1==2)) { date2=0;date1=1;} if (date1==10) { date2++;date1=0;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // cho phim nha date1--; if ((date2==0) & (date1==0)) {date2=3;date1=1; } if (date1==255) {date2--;date1=9;} } portb=led_code[date2]; led1=0; delay_us(500);

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 29 led1=1; portb=led_code[date1]; led2=0; delay_us(500); led2=1; } while (mode==1); } void set_day(void) { while (mode==0) {}; do { if (increase==0) { while (increase==0) {} day++; if (day==8) { day=1;} } if (decrease==0) { while (decrease==0) {} day--; if (day==255) {day=7;} } portb=led_code[day]; led8=0; delay_us(500); led8=1; } while (mode==1); } void set_hour(void) { // Cai dat thang while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha hour1++; if ((hour2==2) & (hour1==4)) { hour2=0;hour1=0;} if (hour1==10) { hour2++;hour1=0;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // cho phim nha hour1--; if ((hour2==0) & (hour1==255)) {hour2=2;hour1=3; } if (hour1==255) {hour2--;hour1=9;} } portb=led_code[hour2]; ng h RTC_DS1307_ HC3T

Tài liệu này được upload & download miễn phí tại website: http://hutonline.net 30 led1=0; delay_us(500); led1=1; portb=led_code[hour1]; led2=0; delay_us(500); led2=1; } while (mode==1); } void set_min(void) { // Cai dat thang while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha min1++; if ((min2==5) & (min1==10)) { min2=0;min1=0;} if (min1==10) { min2++;min1=0;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // cho phim nha min1--; if ((min2==0) & (min1==255)) {min2=5;min1=9; } if (min1==255) {min2--;min1=9;} } portb=led_code[min2]; led3=0; delay_us(500); led3=1; portb=led_code[min1]; led4=0; delay_us(500); led4=1; } while (mode==1); } ng h RTC_DS1307_ HC3T

Sign up to vote on this title
UsefulNot useful