ban xem thử cái này
Kinh nghiệm làm mạch đồng hồ DS1307
Collapse
X
-
-
nếu ở mức 1, thì at89s52 thi hành chương trình ROM nội nếu ở mức không thì at89s52 thì hành chương trình từ bộ nhớ mở rộng
nếu bạn không cấp nguồn 5v cho chân 31 IC thì mạch không bao giờ chạysống trong đời sống cần có một tấm lòng!
email:
Comment
-
Cám ơn mấy anh chỉ giúp, em nối chân 31 lên Vcc rồi mà vẫn không chạy luôn, bây giờ mấy anh làm ơn xem lại giúp em cái code xem, trước tiên là cái code lập trình như vậy đã đúng chưa vậy, hay là tại cái code sai nên nãy giờ toàn lo cái mạch(file mô phỏng em làm đã chạy ok, cái file dochangloat.asm là em làm gần như là theo cái giản đồ thời gian của datasheet, chỉ có 1 cái là khi READ thì em phải READ từng thanh ghi một chứ không thể READ 1 loạt giây phút giờ 1 lúc đc, không biết mấy anh có lập trình như vậy ko), còn nếu code đã ok thì việc ráp lại mạch em ráp lại mấy cái nữa cũng ko sao ak.
SWAP.zip
Comment
-
code này chạy RTC DS1307 chuẩn 100 %, nhớ khai báo các thanh ghiPHP Code:;=====ADD_LOW LA THANH GHI CHUA DIA CHI CUA CUA CAC THANH GHI CUA RTC ;=====I2CDATA LA BIEN LUU GIA TRI THU DUOC KHI LAY TU RTC ADD_LOW data 0bH //dia chi ban thay doi tuy` y' I2CDATA data 0cH //dia chi ban thay doi tuy` y' CONT_BYTE_W EQU 0D0H //byte dieu khien ghi CONT_BYTE_R EQU 0D1H //byte dieu khien doc scl bit P1.6 //xung clock cho rtc //dat lai tuy` y' sda bit P1.7 //dat lai tuy` y' //==================================== ;=====STOP I2C I2C_STOP: CLR SDA SETB SCL NOP SETB SDA RET ;***************************************************** WRITE_BYTE: CLR SDA ;BIT START CHO I2C CLR SCL MOV A,#CONT_BYTE_W ;GUI BYTE DIEU KHIEN CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,WRITE_BYTE ;HOI VONG` DE KIEM TRA CO` BAN CLR SCL MOV A,ADD_LOW ;GUI DIA CHI VAO RTC QUA I2C CALL LOOP_BYTE ;CHUONG TRINH CON GUI DIA CHI BANG I2C SETB SDA SETB SCL JB SDA,WRITE_BYTE ;HOI VONG DE KIEM TRA CO BAN CLR SCL MOV A,I2CDATA ;GUI DATA VAO DIA CHI TRONG RTC CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,WRITE_BYTE ;LAP LAI NEU CO` BAN CHUA DUOC XOA' CLR SDA CLR SCL SETB SCL ;STOP BIT SETB SDA RET ;******************************************************CHUONG TRINH CON DOC BYTE TU RTC KIEU I2C READ_BYTE: CLR SDA ;START BIT CLR SCL MOV A,#CONT_BYTE_W ;GUI BYTE DIEU KHIEN CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,READ_BYTE ;LAP LAI NEU CO` BAN CLR SCL MOV A,ADD_LOW ;GUI DIA CHI CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,READ_BYTE ;LAP LAI NEU CO` BAN SDA CHUA DC XOA' CLR SCL SETB SCL SETB SDA CLR SDA ;STOP BIT CLR SCL MOV A,#CONT_BYTE_R ;GUI BYTE DIEU KHIEN CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,READ_BYTE ;LAP LAI NEU CO` BAN CHUA DUOC XOA' CLR SCL CALL LOOP_READ SETB SDA SETB SCL CLR SCL SETB SCL ;STOP BIT SETB SDA RET ;******************************************************************************* ;* GHI VAO RTC THEO PHUONG THUC I2C * ;* INPUT: ACC * ;******************************************************************************* LOOP_BYTE: PUSH 02H MOV R2,#08H LOOP_SEND: RLC A MOV SDA,C SETB SCL CLR SCL DJNZ R2,LOOP_SEND POP 02H RET ;******************************************************************************* ;* DOC TU RTC THEO PHUONG THUC I2C * ;* OUTPUT: ACC * ;******************************************************************************* LOOP_READ: PUSH 02H MOV R2,#08H LOOP_READ1: SETB SCL MOV C,SDA CLR SCL RLC A DJNZ R2,LOOP_READ1 MOV I2CDATA,A POP 02H RET
Comment
-
code này viết dựa trên code cả bạn (chumanh) tạo xung 1hz tại chân 7 ds1307 mô phỏng trên proteus ok.Nguyên văn bởi ylotus Xem bài viếtCám ơn mấy anh chỉ giúp, em nối chân 31 lên Vcc rồi mà vẫn không chạy luôn, bây giờ mấy anh làm ơn xem lại giúp em cái code xem, trước tiên là cái code lập trình như vậy đã đúng chưa vậy, hay là tại cái code sai nên nãy giờ toàn lo cái mạch(file mô phỏng em làm đã chạy ok, cái file dochangloat.asm là em làm gần như là theo cái giản đồ thời gian của datasheet, chỉ có 1 cái là khi READ thì em phải READ từng thanh ghi một chứ không thể READ 1 loạt giây phút giờ 1 lúc đc, không biết mấy anh có lập trình như vậy ko), còn nếu code đã ok thì việc ráp lại mạch em ráp lại mấy cái nữa cũng ko sao ak.
[ATTACH]28064[/ATTACH]
bạn lên nhớ rằng phần cứng cũng rất quan trọng.Code:;=====ADD_LOW LA THANH GHI CHUA DIA CHI CUA CUA CAC THANH GHI CUA RTC ;=====I2CDATA LA BIEN LUU GIA TRI THU DUOC KHI LAY TU RTC ADD_LOW EQU 20H //dia chi ban thay doi tuy` y' I2CDATA EQU 21H //dia chi ban thay doi tuy` y' CONT_BYTE_W EQU 0D0H //byte dieu khien ghi CONT_BYTE_R EQU 0D1H //byte dieu khien doc scl bit P3.0 //xung clock cho rtc // nhớ kết nối cho đúng sda bit P3.1 //nhớ kết nối cho đúng //==================================== ORG 0000H MAIN: mov ADD_LOW,#0 ;thanhghi 0 mov I2CDATA,#0 ;CH=0 call WRITE_BYTE mov ADD_LOW,#7 ;thanhghi 7 mov I2CDATA,#00010000b ;tao xung 1hz tai chan 7 ds1307 call WRITE_BYTE jmp $ ;=====STOP I2C I2C_STOP: CLR SDA SETB SCL NOP SETB SDA RET ;***************************************************** WRITE_BYTE: CLR SDA ;BIT START CHO I2C CLR SCL MOV A,#CONT_BYTE_W ;GUI BYTE DIEU KHIEN CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,WRITE_BYTE ;HOI VONG` DE KIEM TRA CO` BAN CLR SCL MOV A,ADD_LOW ;GUI DIA CHI VAO RTC QUA I2C CALL LOOP_BYTE ;CHUONG TRINH CON GUI DIA CHI BANG I2C SETB SDA SETB SCL JB SDA,WRITE_BYTE ;HOI VONG DE KIEM TRA CO BAN CLR SCL MOV A,I2CDATA ;GUI DATA VAO DIA CHI TRONG RTC CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,WRITE_BYTE ;LAP LAI NEU CO` BAN CHUA DUOC XOA' CLR SDA CLR SCL SETB SCL ;STOP BIT SETB SDA RET ;******************************************************CHUONG TRINH CON DOC BYTE TU RTC KIEU I2C READ_BYTE: CLR SDA ;START BIT CLR SCL MOV A,#CONT_BYTE_W ;GUI BYTE DIEU KHIEN CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,READ_BYTE ;LAP LAI NEU CO` BAN CLR SCL MOV A,ADD_LOW ;GUI DIA CHI CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,READ_BYTE ;LAP LAI NEU CO` BAN SDA CHUA DC XOA' CLR SCL SETB SCL SETB SDA CLR SDA ;STOP BIT CLR SCL MOV A,#CONT_BYTE_R ;GUI BYTE DIEU KHIEN CALL LOOP_BYTE SETB SDA SETB SCL JB SDA,READ_BYTE ;LAP LAI NEU CO` BAN CHUA DUOC XOA CLR SCL CALL LOOP_READ SETB SDA SETB SCL CLR SCL SETB SCL ;STOP BIT SETB SDA RET ;******************************************************************************* ;* GHI VAO RTC THEO PHUONG THUC I2C * ;* INPUT: ACC * ;******************************************************************************* LOOP_BYTE: PUSH 02H MOV R2,#08H LOOP_SEND: RLC A MOV SDA,C SETB SCL CLR SCL DJNZ R2,LOOP_SEND POP 02H RET ;******************************************************************************* ;* DOC TU RTC THEO PHUONG THUC I2C * ;* OUTPUT: ACC * ;******************************************************************************* LOOP_READ: PUSH 02H MOV R2,#08H LOOP_READ1: SETB SCL MOV C,SDA CLR SCL RLC A DJNZ R2,LOOP_READ1 MOV I2CDATA,A POP 02H RET END
ngày trước làm ds1307 2 con điện trở kéo lên tại chân 5,6 là 4.7k nó không chạy,thay bằng 10k nó mới chịu chạy.
1:kiểm tra xung 1hz thì dùng đồng hồ đo vol .
2:lắp một con led vào chân số 7 xem nó có nhấp nháy hay không.Last edited by tdm; 25-03-2011, 11:12.|
Comment
-
Tình hình là em đã nạp và đo thử chân số 7 của DS1307 nhưng chả thấy tín hiệu j hết, chả lẽ cái modul DS1307 nhỏ xíu vậy mà khó chạy dữ vậy trời.
Anh tdm cho em hỏi chỗ cái code
Em nhìn cái giải thuật MAIN thì ko thấy gọi chương trình READ nào mà chỉ có WRITE và nhảy tại chỗ vậy READ RTC ở đâu vậy anh. còn cái I2C_STOP cũng ko thấy gọi chương trình này luôn. hùi trước em có thay con điện trở 4k7 và 10k rồi cũng ko thấy chạy. cái mạch em đã up ở trang 1 chả lẽ sai hả huynhCode:MAIN: mov ADD_LOW,#0 ;thanhghi 0 mov I2CDATA,#0 ;CH=0 call WRITE_BYTE mov ADD_LOW,#7 ;thanhghi 7 mov I2CDATA,#00010000b ;tao xung 1hz tai chan 7 ds1307 call WRITE_BYTE jmp $ ;=====STOP I2C I2C_STOP: CLR SDA SETB SCL NOP SETB SDA RET
Comment
-
code này chỉ để kiểm tra xem ds1307 đã chạy chưa, không cần dùng read_byte.I2C_STOP đã viết sẵn trong ct con WRITE_BYTE.Cũng lâu rồi anh không còn làm 89 nữa lên không còn mạch để chạy thử.Nguyên văn bởi ylotus Xem bài viếtTình hình là em đã nạp và đo thử chân số 7 của DS1307 nhưng chả thấy tín hiệu j hết, chả lẽ cái modul DS1307 nhỏ xíu vậy mà khó chạy dữ vậy trời.
Anh tdm cho em hỏi chỗ cái code
Em nhìn cái giải thuật MAIN thì ko thấy gọi chương trình READ nào mà chỉ có WRITE và nhảy tại chỗ vậy READ RTC ở đâu vậy anh. còn cái I2C_STOP cũng ko thấy gọi chương trình này luôn. hùi trước em có thay con điện trở 4k7 và 10k rồi cũng ko thấy chạy. cái mạch em đã up ở trang 1 chả lẽ sai hả huynhCode:MAIN: mov ADD_LOW,#0 ;thanhghi 0 mov I2CDATA,#0 ;CH=0 call WRITE_BYTE mov ADD_LOW,#7 ;thanhghi 7 mov I2CDATA,#00010000b ;tao xung 1hz tai chan 7 ds1307 call WRITE_BYTE jmp $ ;=====STOP I2C I2C_STOP: CLR SDA SETB SCL NOP SETB SDA RET|
Comment
-
Anh có thể xem qua cái code em viết xem nó có sai ko anh, em cũng ko biết bây giờ phải làm sao với cái mạch này nữa, tại em muốn tự mình viết để có thể đọc và hiểu cách nó hoạt động ntn, em có lấy VOM đo chân p3.0 và p3.1 của 89 mà thấy nó lên 5V rồi đứng im trên đó luôn.
Comment
-
Huhu!Bác này giống em ghê.Nhưng mà em viết bằng ct C.Mô phỏng chạy ngon lành.Chẳng hiểu sao làm mạch thật thì không chạy.
Đã có pin 3V, SDA và SCL có R 10k kéo lên Vcc.
VDK 89s52 đã rest thử chạy ngon lành.
Sao chân 7 nó chẳng có tín hiệu gì cả.
ai giúp em với
Comment
-
-
-
Bạn viết ct reset 1307 thử?Mạch nạp Pickit 2 SE ---> 170k BH 1 năm
Pic 18F2550 PDIP Thailand bao test 60K/1c
Comment
-
Comment
Bài viết mới nhất
Collapse
-
-
bởi bqvietĐám UPS cửa cuốn đời cổ vẫn chạy 1 biến áp sắt từ vừa để hạ áp điện lưới nạp bình điện, vừa để kích áp bình điện thành sóng vuông đầu ra đấy thôi. Kiểu tiết kiệm này đã có từ mấy chục năm nay. Sơ đồ đại loại như link
https://www.homemade-circuits.com/si...rchargerchang/...-
Channel: Nguồn!
06-09-2026, 16:49 -
-
bởi dinhthuong92Không biết nó thiết kế kiểu gì mà dùng chung được cuộn cảm L cho cả mạch Buck hạ áp để sạc pin và Boost nâng áp cho Led. Muốn vẽ mạch để xem mà nhiều linh kiện quá, e không kham nổi!
Bác nào có sơ đồ xin up lên cho mọi người tham khảo nhé!...-
Channel: Nguồn!
04-09-2026, 11:09 -
-
-
Trả lời cho TCL - Tập hợp các vấn đề về màn hình màu TCLbởi dtvankhoeBác nào có file rom này cho em xin em cảm ơn ạ TCL L43S6500 – TPD.RT2841.PB772
-
Channel: Điện tử truyền hình
30-08-2026, 21:08 -

Comment