Thông báo

Collapse
No announcement yet.

Code ASM giao tiếp DS1307 và 8051/89S52... truyền thông nối tiếp RS232

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Nguyên văn bởi mrscorpion_b Xem bài viết
    Anh tienhuypro có thể giúp em câu này : khi mình làm mạch chính thức thì có cần nạp giá trị ban đầu cho ds1307 k ạ.Em còn lơ ngơ lắm,a đừng cười nge.
    Tất nhiên là có rồi và làm thế này:
    1. Lần đầu tiên khởi động DS1307 thì phải nạp trị cho nó như ngày, tháng, năm, giờ, phút, giây
    2. Nạp xong rồi thì sửa code lại bằng cách bỏ dòng lệnh nạp các giá trị đó đi, nếu không mỗi lần khởi động lại DS1307 hay mất điện rồi có điện lại thì nó sẽ nạp lại các giá trị đó ---> DS1307 chạy lại từ đầu

    Cách khác: Nếu thiết kế mạch có các phím để set time and date thì khỏi cần làm theo các bước trên vì mình tự cài đặt được mà.

    Email:
    Tel: 0983.497.310

    Comment


    • #17
      Anh tienhuypro có mạch đồng hố số nào hoàn chỉnh k a.Có cả set time.Có thể share cho e tham khảo được k ạ.Thank a nhiều

      Comment


      • #18
        Nguyên văn bởi mrscorpion_b Xem bài viết
        Anh tienhuypro có mạch đồng hố số nào hoàn chỉnh k a.Có cả set time.Có thể share cho e tham khảo được k ạ.Thank a nhiều
        Không em ah, mà em search trên diễn đàn xem --> nhiều lắm

        Email:
        Tel: 0983.497.310

        Comment


        • #19
          thank bạn nhiều

          Comment


          • #20
            cám ơn bác nhiều lắm
            cho em hỏi câu này hơi ngu téo ạ: em muốn viết bằng C thì dùng cái gì để viết ạ

            Comment


            • #21
              Nguyên văn bởi thanhhaudt33 Xem bài viết
              anh tienhuypro có thể giúp em câu này: phần mềm Assembly em tìm để tải về mà ko thấy ạ, anh có thể giúp em địa chỉ tải về được ko và nếu có cả bài hướng dẫn nữa thì quá tốt rồi ạ!!! hi hi em cảm ơn anh nhiều
              bạn lên google đánh vào reads51 là ok
              chúc bạn sớm thành công
              thân


              MOV NHÀ,ANH
              MOV NHÀ,EM
              ADD ANH,EM

              Comment


              • #22
                chào a Tiến,e lấy code của a về giao tiếp và xuất ra 595 nhưng mô phỏng thây chậm 2p,cái này là do code e sai hay do mô phỏng hả a?
                Code:
                SCL		BIT P1.0
                SDA		BIT P1.1
                DA_TA 	BIT P3.0
                SH		BIT P3.1
                ST		BIT P3.2
                MODE	BIT P3.3
                UP		BIT P3.4
                DOWN	BIT P3.5
                
                DV_M	EQU	60H
                CH_M	EQU	61H
                DV_H	EQU	62H
                CH_H	EQU 63H
                
                F_SEND_TIME	BIT	00H
                F_SEND_DATE	BIT	01H
                F_SEND		BIT	02H
                SECONDS		DATA	30H
                MINUTES		DATA	31H
                HOUR		DATA	32H
                DAY			DATA	33H
                DATE		DATA	34H
                MONTH		DATA	35H
                YEAR		DATA	36H
                	ORG 00H
                	CLR SH
                	CLR ST
                	LJMP MAIN
                MAIN:
                	CALL	I2C_INIT
                	CALL	DS1307_INIT
                	CALL	DS1307_OUTPUT
                	;MOV	SECONDS,#31H	
                	;MOV	MINUTES,#31H
                	;MOV	HOUR,#10H
                DOC_GIO:
                	CALL	DS1307_READ_TIME
                	MOV	A,HOUR
                	swap	a
                	anl	a,#0fh
                	MOV CH_H,A
                	MOV	A,HOUR
                	anl	a,#0fh
                	MOV DV_H,A
                	MOV	A,MINUTES
                	swap	a
                	anl	a,#0fh
                	MOV CH_M,A
                	MOV	A,MINUTES
                	anl	a,#0fh
                	MOV DV_M,A
                	call	SERIAL
                	JMP DOC_GIO
                ;************************************************    	
                SERIAL:
                		PUSH ACC
                		MOV DPTR,#DU_LIEU
                    	MOV A,DV_M
                		MOVC A,@a+dptr
                		CALL DICH
                		MOV	A,CH_M
                		MOVC A,@A+DPTR
                		CALL DICH
                		MOV A,DV_H
                		MOVC A,@A+DPTR
                		CALL DICH
                		MOV A,CH_H
                		MOVC A,@A+DPTR
                		CALL DICH
                		SETB ST
                		CLR ST
                		;CALL DELAY
                		POP ACC
                		RET
                ;**************************************************
                DICH:
                		MOV R5,#8
                LOOP:
                	 	CLR C
                		RLC A
                		MOV DA_TA,C
                		SETB SH
                		CLR SH
                		DJNZ R5,LOOP
                		RET
                DS1307_INIT:
                	CALL	I2C_START
                	MOV	A,#0D0H		;DIA CHI DS1307
                	LCALL	I2C_WRITE	;
                	;JC	$-5	
                	MOV	A,#00H		;DIA CHI THANH GHI 0
                	LCALL	I2C_WRITE
                	MOV	A,#00H		;ENABLE	THE oscillator (CH bit = 0)
                	LCALL	I2C_WRITE
                	CALL	I2C_STOP
                	RET
                DS1307_OUTPUT:
                	CALL	I2C_START
                	MOV	A,#0D0H		;DIA CHI DS1307
                	CALL	I2C_WRITE	;
                	MOV	A,#07H		;DIA CHI THANH GHI 0
                	CALL	I2C_WRITE
                	MOV	A,#10H		;ENABLE	THE OUTPUT oscillator F=1HZ 
                	CALL	I2C_WRITE
                	CALL	I2C_STOP
                	RET
                DS1307_WRITE_TIME:
                	CALL	I2C_START
                	MOV	A,#0D0H		;DIA CHI DS1307
                	CALL	I2C_WRITE	;
                	MOV	A,#00H		;DIA CHI THANH GHI 0
                	CALL	I2C_WRITE
                	MOV	A,SECONDS	;
                	CALL	I2C_WRITE
                	MOV	A,MINUTES	;
                	CALL	I2C_WRITE
                	MOV	A,HOUR		;
                	CALL	I2C_WRITE
                	CALL	I2C_STOP
                	RET
                DS1307_WRITE_DATE:
                	CALL	I2C_START
                	MOV	A,#0D0H		;DIA CHI DS1307
                	CALL	I2C_WRITE	;
                	MOV	A,#03H		;DIA CHI THANH GHI 3
                	CALL	I2C_WRITE
                	MOV	A,DAY		;THU	
                	CALL	I2C_WRITE
                	MOV	A,DATE		;NGAY
                	CALL	I2C_WRITE
                	MOV	A,MONTH		;THANG
                	CALL	I2C_WRITE	
                	MOV	A,YEAR		;NAM
                	CALL	I2C_WRITE
                	CALL	I2C_STOP
                	RET
                DS1307_READ_TIME:
                	CALL	I2C_START
                	MOV	A,#0D0H		;DIA CHI DS1307 VA WRITE
                	CALL	I2C_WRITE	;
                	MOV	A,#00H		;DIA CHI THANH GHI 0
                	CALL	I2C_WRITE
                	CALL	I2C_RESTART
                	MOV	A,#0D1H		;DIA CHI DS1307 VA READ
                	CALL	I2C_WRITE
                	CALL	I2C_READ_ACK
                	MOV	SECONDS,A
                	CALL	I2C_READ_ACK
                	MOV	MINUTES,A
                	CALL	I2C_READ_NACK
                	MOV	HOUR,A
                	CALL	I2C_STOP
                	RET
                DS1307_READ_DATE:
                	CALL	I2C_START
                	MOV	A,#0D0H		;DIA CHI DS1307 VA WRITE
                	CALL	I2C_WRITE	;
                	MOV	A,#03H		;DIA CHI THANH GHI 3
                	CALL	I2C_WRITE
                	CALL	I2C_RESTART
                	MOV	A,#0D1H		;DIA CHI DS1307 VA READ
                	CALL	I2C_WRITE
                	CALL	I2C_READ_ACK
                	MOV	DAY,A
                	CALL	I2C_READ_ACK
                	MOV	DATE,A
                	CALL	I2C_READ_ACK
                	MOV	MONTH,A
                	CALL	I2C_READ_NACK
                	MOV	YEAR,A
                	CALL	I2C_STOP
                	RET
                I2C_WRITE:
                	PUSH	07H
                	MOV	R7,#8
                   ___LOOP_I2C_WRITE:
                	CLR	SCL
                	RLC	A
                	MOV	SDA,C
                	NOP
                	NOP
                	SETB	SCL
                	NOP
                	NOP
                	DJNZ	R7,___LOOP_I2C_WRITE
                	CLR	SCL
                	NOP
                	NOP
                	NOP
                	NOP
                	SETB	SDA		;CAU HINH NGO VAO SDA DOC ACK
                	SETB	SCL
                	NOP
                	MOV	C,SDA		;KIEM TRA CO "C" DE XAC DINH LOI 
                	NOP
                	NOP
                	CLR	SCL
                	POP	07H
                	RET
                I2C_READ_ACK:
                	PUSH	07H
                	MOV	R7,#8
                	SETB	SDA		;CAU HINH NGO VAO SDA
                ___LOOP_I2C_READ_ACK:
                	SETB	SCL
                	NOP
                	MOV	C,SDA
                	RLC	A		;BYTE DOC VE LUU TRONG THANH GHI "A"
                	NOP
                	CLR	SCL
                	NOP
                	NOP
                	NOP
                	DJNZ	R7,___LOOP_I2C_READ_ACK
                	CLR	SDA
                	NOP
                	SETB	SCL
                	NOP
                	NOP
                	NOP
                	NOP
                	CLR	SCL
                	POP	07H
                	RET
                I2C_READ_NACK:
                	PUSH	07H
                	MOV	R7,#8
                	SETB	SDA		;CAU HINH NGO VAO SDA
                ___LOOP_I2C_READ_NACK:
                	SETB	SCL
                	NOP
                	MOV	C,SDA
                	RLC	A		;BYTE DOC VE LUU TRONG THANH GHI "A"
                	NOP
                	CLR	SCL
                	NOP
                	NOP
                	NOP
                	DJNZ	R7,___LOOP_I2C_READ_NACK
                	SETB	SDA
                	NOP
                	SETB	SCL
                	NOP
                	NOP
                	NOP
                	NOP
                	CLR	SCL
                	POP	07H
                	RET
                I2C_INIT:
                	SETB	SCL
                	SETB	SDA
                	RET
                I2C_START:
                	SETB	SDA
                	SETB	SCL
                	NOP		;DELAY 4.7US
                	NOP		;Bus Free Time Between a STOP and START Condition
                	NOP	
                	NOP
                	NOP
                	CLR	SDA
                	NOP		;DELAY 4US
                	NOP		;Hold Time (Repeated) START Condition
                	NOP	
                	NOP
                	CLR	SCL
                	RET
                I2C_STOP:
                	CLR	SDA
                	SETB	SCL
                	NOP		;DELAY	4.7US
                	NOP		;Setup Time for STOP Condition
                	NOP
                	NOP	
                	NOP
                	SETB	SDA
                	RET
                I2C_RESTART:
                	SETB	SDA
                	SETB	SCL
                	NOP		;DELAY 4.7US
                	NOP		;Setup Time for a Repeated START Condition
                	NOP	
                	NOP
                	NOP
                	CLR	SDA
                	NOP		;DELAY 4US
                	NOP		;Hold Time (Repeated) START Condition
                	NOP	
                	NOP
                	CLR	SCL
                	NOP
                	NOP
                	RET
                SCL_HIGH:
                	NOP		;DELAY 4US
                	NOP		;HIGH Period of SCL Clock
                	SETB	SCL
                	NOP
                	NOP
                	RET
                SCL_LOW:
                	NOP		;DELAY 4.7US
                	NOP		;LOW Period of SCL Clock
                	CLR	SCL
                	NOP
                	NOP
                	NOP
                	RET
                DU_LIEU:
                	DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H 
                END
                đây là mạch:
                Attached Files
                Không biết thì hỏi,muốn giỏi phải học.
                E-mail:

                Comment


                • #23
                  cái của anh tiến huy bạn làm thật áioh đến gẫy cổ nó còn chưa chạy,anh ấy làm cái chạy vui đấy,thích làm tìm cái khác đi,giao diện giao tiếp còn chưa có đừng nói đến làm thật cái mạch đó ;D

                  Comment


                  • #24
                    Nguyên văn bởi hoanganh1991 Xem bài viết
                    cái của anh tiến huy bạn làm thật áioh đến gẫy cổ nó còn chưa chạy,anh ấy làm cái chạy vui đấy,thích làm tìm cái khác đi,giao diện giao tiếp còn chưa có đừng nói đến làm thật cái mạch đó ;D
                    ồ,thank bác,nhưng e đang tìm hiểu về mãng này,nếu bác biết thì chỉ giáo dùm e.
                    Không biết thì hỏi,muốn giỏi phải học.
                    E-mail:

                    Comment


                    • #25
                      A Tiến có thể sửa giúp code của em thêm phần chình giờ đc ko?
                      Không biết thì hỏi,muốn giỏi phải học.
                      E-mail:

                      Comment


                      • #26
                        mấy pro cho em hỏi xíu nha !!!
                        con ic ds 1307 có cần lập trình không vậy ? hay chỉ cần lập trình cho con 89xx thôi
                        Cha mẹ khó nhọc nuôi ta lớn !!!
                        Bạn bè Chơi Chó khiến ta khôn !!!

                        Comment


                        • #27
                          Nguyên văn bởi quyennh1230 Xem bài viết
                          mấy pro cho em hỏi xíu nha !!!
                          con ic ds 1307 có cần lập trình không vậy ? hay chỉ cần lập trình cho con 89xx thôi
                          lập trình 89 giao tiếp với DS để đọc và ghi,lấy dữ liệu ra xử lý.DS là IC cứng.
                          Không biết thì hỏi,muốn giỏi phải học.
                          E-mail:

                          Comment


                          • #28
                            cuối cùng e cũng ghi dữ liệu đc tuy là code còn lộn xộn,hehe
                            Click image for larger version

Name:	dh595.jpg
Views:	1
Size:	114.3 KB
ID:	1376867
                            Code:
                            SCL		BIT P1.0
                            SDA		BIT P1.1
                            DA_TA 	BIT P3.0
                            SH		BIT P3.1
                            ST		BIT P3.2
                            MODE	BIT P3.3
                            UP		BIT P3.4
                            DOWN	BIT P3.5
                            
                            LED1	EQU	60H
                            LED2	EQU	61H
                            LED3	EQU	62H
                            LED4	EQU 63H
                            
                            TEMP 	EQU	37H
                            CDOI1	EQU	38H
                            CDOI2	EQU	39H
                            F_MODE	EQU	40H
                            BIEN_GIO EQU 41H
                            BIEN_PHUT EQU 42H
                            F_SEND_TIME	BIT	00H
                            F_SEND_DATE	BIT	01H
                            F_SEND		BIT	02H
                            SECONDS		DATA	30H
                            MINUTES		DATA	31H
                            HOUR		DATA	32H
                            DAY			DATA	33H
                            DATE		DATA	34H
                            MONTH		DATA	35H
                            YEAR		DATA	36H
                            	ORG 00H
                            	CLR SH
                            	CLR ST
                            	LJMP MAIN
                            MAIN:
                            	MOV DPTR,#DU_LIEU
                            	CALL	I2C_INIT
                            	CALL	DS1307_INIT
                            	;CALL	DS1307_OUTPUT
                            	;MOV	SECONDS,#31H	
                            	;MOV	MINUTES,#31H
                            	;MOV	HOUR,#10H
                            LOOP_MAIN:
                            	CALL DOC_GIO
                            	CALL SERIAL
                            	setb p3.7
                            	;CALL SCAN_PHIM
                            	CALL DELAY1S
                            	clr p3.7
                            	call delay1s
                            	JMP LOOP_MAIN
                            ;****************************************
                            SCAN_PHIM:
                            	JNB MODE,THIET_LAP_MODE
                            	RET
                            ;****************************************
                            DELAY1S:
                            	PUSH ACC
                            	PUSH 00
                            	MOV TMOD,#01
                            	MOV R0,#60
                            LOOPDELAY1S:
                            	MOV TH0,#HIGH(-10000)
                            	MOV TL0,#LOW(-10000)
                            	SETB TR0
                            	JNB MODE,THIET_LAP_MODE
                            	JNB TF0,$
                            	CLR TF0
                            	CLR TR0
                            	DJNZ R0,LOOPDELAY1S
                            	POP 00
                            	POP ACC
                            	RET
                            ;*****************************************
                            THIET_LAP_MODE:
                            	CLR P3.7
                            	CLR TF0
                            	CLR TR0
                            	JNB MODE,$
                            	INC F_MODE
                            	MOV A,F_MODE
                            	CJNE A,#1,NEXT
                            	JMP CHINH_GIO
                            NEXT:
                            	CJNE A,#2,NEXT1
                            	JMP CHINH_PHUT
                            NEXT1:
                            	CJNE A,#3,NEXT2
                            	MOV F_MODE,#0
                            	JMP SCAN_PHIM
                            NEXT2:
                            	RET
                            ;******************************************
                            DELAY300MS:
                            	PUSH 00
                            	PUSH 01
                            	MOV R0,#255
                            LL:
                            	MOV R1,#255
                            	DJNZ R1,$
                            	DJNZ R0,LL
                            	POP 01
                            	POP 00
                            	RET
                            ;******************************************
                            CHINH_GIO:
                            KT_UP:
                            	CALL HIEN_THI_GIO	
                            	JNB MODE,THIET_LAP_MODE
                            	JNB UP,TANG_GIO
                            	JNB DOWN,GIAM_GIO
                            	CALL SERIAL
                            	CALL DELAY300MS
                            	MOV LED3,#10
                            	MOV LED4,#10
                            	CALL SERIAL
                            	CALL DELAY300MS
                            	JMP KT_UP
                            ;******************************************
                            TANG_GIO:
                            	JNB UP,$
                            	MOV A,HOUR
                            	CJNE A,#23H,SKIP
                            	MOV HOUR,#0
                            	JMP SKIP1
                            SKIP:
                            	ADD A,#1
                            	DA A
                            	MOV HOUR,A
                            SKIP1:
                            	MOV BIEN_GIO,A
                            	CALL HIEN_THI_GIO
                            	JMP KT_UP
                            GIAM_GIO:
                            	JNB DOWN,$
                            	MOV A,HOUR
                            	CJNE A,#00H,SKIP3
                            	MOV HOUR,#23H
                            	JMP SKIP4
                            SKIP3:
                            	ADD A,#99H
                            	DA A
                            	MOV HOUR,A
                            SKIP4:
                            	MOV BIEN_GIO,A
                            	CALL HIEN_THI_GIO
                            	JMP KT_UP
                            ;******************************************
                            CHINH_PHUT:
                            KT_DOWN:
                            	CALL HIEN_THI_PHUT
                            	JNB MODE,LUU_THOAT_PHUT
                            	JNB UP,TANG_PHUT
                            	JNB DOWN,GIAM_PHUT
                            	CALL SERIAL
                            	CALL DELAY300MS
                            	MOV LED1,#10
                            	MOV LED2,#10
                            	CALL SERIAL
                            	CALL DELAY300MS
                            	JMP KT_DOWN
                            ;******************************************
                            LUU_THOAT_PHUT:
                            	MOV HOUR,BIEN_GIO
                            	MOV MINUTES,BIEN_PHUT
                            	MOV SECONDS,#00H
                            	CALL DS1307_WRITE_TIME
                            	JMP THIET_LAP_MODE
                            TANG_PHUT:
                            	JNB UP,$
                            	MOV A,MINUTES
                            	CJNE A,#59H,SKIPM
                            	MOV MINUTES,#0
                            	JMP SKIPM1
                            SKIPM:
                            	ADD A,#1
                            	DA A
                            	MOV MINUTES,A
                            SKIPM1:
                            	MOV BIEN_PHUT,A
                            	CALL HIEN_THI_PHUT
                            	JMP KT_DOWN
                            GIAM_PHUT:
                            	JNB DOWN,$
                            	MOV A,MINUTES
                            	CJNE A,#00H,SKIPM3
                            	MOV MINUTES,#59H
                            	JMP SKIPM4
                            SKIPM3:
                            	ADD A,#99H
                            	DA A
                            	MOV MINUTES,A
                            SKIPM4:
                            	MOV BIEN_PHUT,A
                            	CALL HIEN_THI_PHUT
                            	JMP KT_DOWN
                            ;***************************************
                            DOC_GIO:
                            	CALL	DS1307_READ_TIME
                            	MOV TEMP,MINUTES
                            	CALL HIEN_THI_GIO
                            	CALL HIEN_THI_PHUT
                            	RET
                            ;****************************************
                            HIEN_THI_PHUT:
                            	MOV TEMP,MINUTES
                            	CALL BCD2HEX
                            	MOV LED1,CDOI1
                            	MOV LED2,CDOI2
                            	RET
                            ;****************************************
                            HIEN_THI_GIO:
                            	ANL HOUR,#3FH
                            	MOV TEMP,HOUR
                            	CALL BCD2HEX
                            	MOV LED3,CDOI1
                            	MOV LED4,CDOI2
                            	RET
                            ;****************************************
                            BCD2HEX:
                            	MOV CDOI1,TEMP
                            	MOV CDOI2,TEMP
                            	ANL CDOI1,#0FH
                            	ANL CDOI2,#0F0H
                            	MOV A,CDOI2
                            	SWAP A
                            	MOV CDOI2,A
                            	RET
                            ;****************************************	   	
                            SERIAL:
                            		PUSH ACC
                                	MOV A,LED1
                            		MOVC A,@a+dptr
                            		CALL DICH
                            		MOV	A,LED2
                            		MOVC A,@A+DPTR
                            		CALL DICH
                            		MOV A,LED3
                            		MOVC A,@A+DPTR
                            		CALL DICH
                            		MOV A,LED4
                            		MOVC A,@A+DPTR
                            		CALL DICH
                            		SETB ST
                            		CLR ST
                            		;CALL DELAY
                            		POP ACC
                            		RET
                            ;**************************************************
                            DICH:
                            		MOV R5,#8
                            LOOP:
                            	 	CLR C
                            		RLC A
                            		MOV DA_TA,C
                            		SETB SH
                            		NOP
                            		CLR SH
                            		DJNZ R5,LOOP
                            		RET
                            DS1307_INIT:
                            	CALL	I2C_START
                            	MOV	A,#0D0H		;DIA CHI DS1307
                            	LCALL	I2C_WRITE	;
                            	;JC	$-5	
                            	MOV	A,#00H		;DIA CHI THANH GHI 0
                            	LCALL	I2C_WRITE
                            	MOV	A,#00H		;ENABLE	THE oscillator (CH bit = 0)
                            	LCALL	I2C_WRITE
                            	CALL	I2C_STOP
                            	RET
                            DS1307_OUTPUT:
                            	CALL	I2C_START
                            	MOV	A,#0D0H		;DIA CHI DS1307
                            	CALL	I2C_WRITE	;
                            	MOV	A,#07H		;DIA CHI THANH GHI 0
                            	CALL	I2C_WRITE
                            	MOV	A,#10H		;ENABLE	THE OUTPUT oscillator F=1HZ 
                            	CALL	I2C_WRITE
                            	CALL	I2C_STOP
                            	RET
                            DS1307_WRITE_TIME:
                            	CALL	I2C_START
                            	MOV	A,#0D0H		;DIA CHI DS1307
                            	CALL	I2C_WRITE	;
                            	MOV	A,#00H		;DIA CHI THANH GHI 0
                            	CALL	I2C_WRITE
                            	MOV	A,SECONDS	;
                            	CALL	I2C_WRITE
                            	MOV	A,MINUTES	;
                            	CALL	I2C_WRITE
                            	MOV	A,HOUR		;
                            	CALL	I2C_WRITE
                            	CALL	I2C_STOP
                            	RET
                            DS1307_WRITE_DATE:
                            	CALL	I2C_START
                            	MOV	A,#0D0H		;DIA CHI DS1307
                            	CALL	I2C_WRITE	;
                            	MOV	A,#03H		;DIA CHI THANH GHI 3
                            	CALL	I2C_WRITE
                            	MOV	A,DAY		;THU	
                            	CALL	I2C_WRITE
                            	MOV	A,DATE		;NGAY
                            	CALL	I2C_WRITE
                            	MOV	A,MONTH		;THANG
                            	CALL	I2C_WRITE	
                            	MOV	A,YEAR		;NAM
                            	CALL	I2C_WRITE
                            	CALL	I2C_STOP
                            	RET
                            DS1307_READ_TIME:
                            	CALL	I2C_START
                            	MOV	A,#0D0H		;DIA CHI DS1307 VA WRITE
                            	CALL	I2C_WRITE	;
                            	MOV	A,#00H		;DIA CHI THANH GHI 0
                            	CALL	I2C_WRITE
                            	CALL	I2C_RESTART
                            	MOV	A,#0D1H		;DIA CHI DS1307 VA READ
                            	CALL	I2C_WRITE
                            	CALL	I2C_READ_ACK
                            	MOV	SECONDS,A
                            	CALL	I2C_READ_ACK
                            	MOV	MINUTES,A
                            	CALL	I2C_READ_NACK
                            	MOV	HOUR,A
                            	CALL	I2C_STOP
                            	RET
                            DS1307_READ_DATE:
                            	CALL	I2C_START
                            	MOV	A,#0D0H		;DIA CHI DS1307 VA WRITE
                            	CALL	I2C_WRITE	;
                            	MOV	A,#03H		;DIA CHI THANH GHI 3
                            	CALL	I2C_WRITE
                            	CALL	I2C_RESTART
                            	MOV	A,#0D1H		;DIA CHI DS1307 VA READ
                            	CALL	I2C_WRITE
                            	CALL	I2C_READ_ACK
                            	MOV	DAY,A
                            	CALL	I2C_READ_ACK
                            	MOV	DATE,A
                            	CALL	I2C_READ_ACK
                            	MOV	MONTH,A
                            	CALL	I2C_READ_NACK
                            	MOV	YEAR,A
                            	CALL	I2C_STOP
                            	RET
                            I2C_WRITE:
                            	PUSH	07H
                            	MOV	R7,#8
                               ___LOOP_I2C_WRITE:
                            	CLR	SCL
                            	RLC	A
                            	MOV	SDA,C
                            	NOP
                            	NOP
                            	SETB	SCL
                            	NOP
                            	NOP
                            	DJNZ	R7,___LOOP_I2C_WRITE
                            	CLR	SCL
                            	NOP
                            	NOP
                            	NOP
                            	NOP
                            	SETB	SDA		;CAU HINH NGO VAO SDA DOC ACK
                            	SETB	SCL
                            	NOP
                            	MOV	C,SDA		;KIEM TRA CO "C" DE XAC DINH LOI 
                            	NOP
                            	NOP
                            	CLR	SCL
                            	POP	07H
                            	RET
                            I2C_READ_ACK:
                            	PUSH	07H
                            	MOV	R7,#8
                            	SETB	SDA		;CAU HINH NGO VAO SDA
                            ___LOOP_I2C_READ_ACK:
                            	SETB	SCL
                            	NOP
                            	MOV	C,SDA
                            	RLC	A		;BYTE DOC VE LUU TRONG THANH GHI "A"
                            	NOP
                            	CLR	SCL
                            	NOP
                            	NOP
                            	NOP
                            	DJNZ	R7,___LOOP_I2C_READ_ACK
                            	CLR	SDA
                            	NOP
                            	SETB	SCL
                            	NOP
                            	NOP
                            	NOP
                            	NOP
                            	CLR	SCL
                            	POP	07H
                            	RET
                            I2C_READ_NACK:
                            	PUSH	07H
                            	MOV	R7,#8
                            	SETB	SDA		;CAU HINH NGO VAO SDA
                            ___LOOP_I2C_READ_NACK:
                            	SETB	SCL
                            	NOP
                            	MOV	C,SDA
                            	RLC	A		;BYTE DOC VE LUU TRONG THANH GHI "A"
                            	NOP
                            	CLR	SCL
                            	NOP
                            	NOP
                            	NOP
                            	DJNZ	R7,___LOOP_I2C_READ_NACK
                            	SETB	SDA
                            	NOP
                            	SETB	SCL
                            	NOP
                            	NOP
                            	NOP
                            	NOP
                            	CLR	SCL
                            	POP	07H
                            	RET
                            I2C_INIT:
                            	SETB	SCL
                            	SETB	SDA
                            	RET
                            I2C_START:
                            	SETB	SDA
                            	SETB	SCL
                            	NOP		;DELAY 4.7US
                            	NOP		;Bus Free Time Between a STOP and START Condition
                            	NOP	
                            	NOP
                            	NOP
                            	CLR	SDA
                            	NOP		;DELAY 4US
                            	NOP		;Hold Time (Repeated) START Condition
                            	NOP	
                            	NOP
                            	CLR	SCL
                            	RET
                            I2C_STOP:
                            	CLR	SDA
                            	SETB	SCL
                            	NOP		;DELAY	4.7US
                            	NOP		;Setup Time for STOP Condition
                            	NOP
                            	NOP	
                            	NOP
                            	SETB	SDA
                            	RET
                            I2C_RESTART:
                            	SETB	SDA
                            	SETB	SCL
                            	NOP		;DELAY 4.7US
                            	NOP		;Setup Time for a Repeated START Condition
                            	NOP	
                            	NOP
                            	NOP
                            	CLR	SDA
                            	NOP		;DELAY 4US
                            	NOP		;Hold Time (Repeated) START Condition
                            	NOP	
                            	NOP
                            	CLR	SCL
                            	NOP
                            	NOP
                            	RET
                            SCL_HIGH:
                            	NOP		;DELAY 4US
                            	NOP		;HIGH Period of SCL Clock
                            	SETB	SCL
                            	NOP
                            	NOP
                            	RET
                            SCL_LOW:
                            	NOP		;DELAY 4.7US
                            	NOP		;LOW Period of SCL Clock
                            	CLR	SCL
                            	NOP
                            	NOP
                            	NOP
                            	RET
                            DU_LIEU:
                            	DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
                            	DB 0FFH 
                            END
                            Không biết thì hỏi,muốn giỏi phải học.
                            E-mail:

                            Comment


                            • #29
                              code viet bang c de nhung rat cong kenh, nặng nề làm load cpu lên cao. bạn viết cho thach anh 12 Mhz thi ngon

                              Comment


                              • #30
                                Nguyên văn bởi tienhuypro Xem bài viết
                                Thấy trên diễn đàn có nhiều code giao tiếp DS1307 và Vi Xử Lý 8051 nhưng viết bằng ngôn ngữ C.
                                Nay viết bằng Assembly để các bạn có thể phát triển nó bằng ASM.
                                Đặc điểm code là :
                                - Xử lý xung CLK có tần số chuẩn 100khz
                                - Cách lấy mẫu DATA, ACK, NACK, START, STOP theo đúng datasheet
                                - Các hàm con riêng biệt: Khởi động giao tiếp I2C, cấu hình DS1307, đọc và ghi thời gian với DS1307,...
                                - Thời gian và ngày tháng năm được truyền qua UART (baud rate: 57600) mô phỏng trên Protues 7.8Sp2
                                - Thạch anh sử dụng: 11.0592Mhz
                                1. Hình chạy mô phỏng:
                                [ATTACH=CONFIG]42879[/ATTACH][ATTACH=CONFIG]42879[/ATTACH]
                                2. Code ASM:
                                Code:
                                SDA	BIT	P1.0
                                SCL	BIT	P1.1
                                F_SEND_TIME	BIT	00H
                                F_SEND_DATE	BIT	01H
                                F_SEND		BIT	02H
                                SECONDS		DATA	30H
                                MINUTES		DATA	31H
                                HOUR		DATA	32H
                                DAY		DATA	33H
                                DATE		DATA	34H
                                MONTH		DATA	35H
                                YEAR		DATA	36H
                                org	0000h
                                ljmp	main
                                org	0003h		;NGAT NGOAI0
                                	SETB	F_SEND_TIME
                                	SETB	F_SEND_DATE
                                	SETB	F_SEND
                                	RETI
                                ORG 0030H
                                MAIN:
                                	mov	scon,#42h
                                	mov	tmod,#20h
                                	mov	a,pcon			;nhan doi toc do baud
                                	setb	acc.7
                                	mov	pcon,a
                                	mov	th1,#0fFh		;57600  11.0592Mhz
                                	setb	tr1
                                	setb	it0		;ngat ngoai 0 kich canh xuong
                                	mov	ie,#81h		;cho phep ngat ngoai0
                                
                                	CALL	I2C_INIT
                                	CALL	DS1307_INIT
                                	CALL	DS1307_OUTPUT
                                	MOV	SECONDS,#31H	
                                	MOV	MINUTES,#31H
                                	MOV	HOUR,#10H
                                	;CALL	DS1307_WRITE_TIME
                                   ___WHILE1:
                                	JNB	F_SEND,$
                                	CLR	F_SEND
                                	CALL	SEND_UART_TIME
                                	CALL	SEND_UART_DATE
                                	SJMP	___WHILE1
                                
                                SEND_UART_TIME:
                                	JB	F_SEND_TIME,___SEND_TIME
                                	JMP	___EXIT_SEND_TIME
                                   ___SEND_TIME:
                                	CLR	F_SEND_TIME
                                	MOV	A,#'T'
                                	CALL	OUTCHAR
                                	MOV	A,#'I'
                                	CALL	OUTCHAR
                                	MOV	A,#'M'
                                	CALL	OUTCHAR
                                	MOV	A,#'E'
                                	CALL	OUTCHAR
                                	MOV	A,#' '
                                	CALL	OUTCHAR
                                	CALL	DS1307_READ_TIME
                                	MOV	A,HOUR
                                	swap	a
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,HOUR
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,#':'
                                	call	outchar
                                	MOV	A,MINUTES
                                	swap	a
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,MINUTES
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,#':'
                                	call	outchar
                                	MOV	A,SECONDS
                                	swap	a
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,SECONDS
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,#0DH
                                	call	outchar
                                	MOV	A,#0AH
                                	call	outchar
                                   ___EXIT_SEND_TIME:
                                	RET
                                
                                SEND_UART_DATE:
                                	JB	F_SEND_DATE,___SEND_DATE
                                	JMP	___EXIT_SEND_DATE
                                   ___SEND_DATE:
                                	CLR	F_SEND_DATE
                                	MOV	A,#'D'
                                	CALL	OUTCHAR
                                	MOV	A,#'A'
                                	CALL	OUTCHAR
                                	MOV	A,#'T'
                                	CALL	OUTCHAR
                                	MOV	A,#'E'
                                	CALL	OUTCHAR
                                	MOV	A,#' '
                                	CALL	OUTCHAR
                                	CALL	DS1307_READ_DATE
                                	MOV	A,DAY
                                	swap	a
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,DAY
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,#':'
                                	call	outchar
                                	MOV	A,DATE
                                	swap	a
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,DATE
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,#':'
                                	call	outchar
                                	MOV	A,MONTH
                                	swap	a
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,MONTH
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,#':'
                                	call	outchar
                                	MOV	A,YEAR
                                	swap	a
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,YEAR
                                	anl	a,#0fh
                                	add	a,#48
                                	call	outchar
                                	MOV	A,#0DH
                                	call	outchar
                                	MOV	A,#0AH
                                	call	outchar
                                   ___EXIT_SEND_DATE:
                                	RET
                                DS1307_INIT:
                                	CALL	I2C_START
                                	MOV	A,#0D0H		;DIA CHI DS1307
                                	LCALL	I2C_WRITE	;
                                	;JC	$-5	
                                	MOV	A,#00H		;DIA CHI THANH GHI 0
                                	LCALL	I2C_WRITE
                                	MOV	A,#00H		;ENABLE	THE oscillator (CH bit = 0)
                                	LCALL	I2C_WRITE
                                	CALL	I2C_STOP
                                	RET
                                DS1307_OUTPUT:
                                	CALL	I2C_START
                                	MOV	A,#0D0H		;DIA CHI DS1307
                                	CALL	I2C_WRITE	;
                                	MOV	A,#07H		;DIA CHI THANH GHI 0
                                	CALL	I2C_WRITE
                                	MOV	A,#10H		;ENABLE	THE OUTPUT oscillator F=1HZ 
                                	CALL	I2C_WRITE
                                	CALL	I2C_STOP
                                	RET
                                DS1307_WRITE_TIME:
                                	CALL	I2C_START
                                	MOV	A,#0D0H		;DIA CHI DS1307
                                	CALL	I2C_WRITE	;
                                	MOV	A,#00H		;DIA CHI THANH GHI 0
                                	CALL	I2C_WRITE
                                	MOV	A,SECONDS	;
                                	CALL	I2C_WRITE
                                	MOV	A,MINUTES	;
                                	CALL	I2C_WRITE
                                	MOV	A,HOUR		;
                                	CALL	I2C_WRITE
                                	CALL	I2C_STOP
                                	RET
                                DS1307_WRITE_DATE:
                                	CALL	I2C_START
                                	MOV	A,#0D0H		;DIA CHI DS1307
                                	CALL	I2C_WRITE	;
                                	MOV	A,#03H		;DIA CHI THANH GHI 3
                                	CALL	I2C_WRITE
                                	MOV	A,DAY		;THU	
                                	CALL	I2C_WRITE
                                	MOV	A,DATE		;NGAY
                                	CALL	I2C_WRITE
                                	MOV	A,MONTH		;THANG
                                	CALL	I2C_WRITE	
                                	MOV	A,YEAR		;NAM
                                	CALL	I2C_WRITE
                                	CALL	I2C_STOP
                                	RET
                                DS1307_READ_TIME:
                                	CALL	I2C_START
                                	MOV	A,#0D0H		;DIA CHI DS1307 VA WRITE
                                	CALL	I2C_WRITE	;
                                	MOV	A,#00H		;DIA CHI THANH GHI 0
                                	CALL	I2C_WRITE
                                	CALL	I2C_RESTART
                                	MOV	A,#0D1H		;DIA CHI DS1307 VA READ
                                	CALL	I2C_WRITE
                                	CALL	I2C_READ_ACK
                                	MOV	SECONDS,A
                                	CALL	I2C_READ_ACK
                                	MOV	MINUTES,A
                                	CALL	I2C_READ_NACK
                                	MOV	HOUR,A
                                	CALL	I2C_STOP
                                	RET
                                DS1307_READ_DATE:
                                	CALL	I2C_START
                                	MOV	A,#0D0H		;DIA CHI DS1307 VA WRITE
                                	CALL	I2C_WRITE	;
                                	MOV	A,#03H		;DIA CHI THANH GHI 3
                                	CALL	I2C_WRITE
                                	CALL	I2C_RESTART
                                	MOV	A,#0D1H		;DIA CHI DS1307 VA READ
                                	CALL	I2C_WRITE
                                	CALL	I2C_READ_ACK
                                	MOV	DAY,A
                                	CALL	I2C_READ_ACK
                                	MOV	DATE,A
                                	CALL	I2C_READ_ACK
                                	MOV	MONTH,A
                                	CALL	I2C_READ_NACK
                                	MOV	YEAR,A
                                	CALL	I2C_STOP
                                	RET
                                I2C_WRITE:
                                	PUSH	07H
                                	MOV	R7,#8
                                   ___LOOP_I2C_WRITE:
                                	CLR	SCL
                                	RLC	A
                                	MOV	SDA,C
                                	NOP
                                	NOP
                                	SETB	SCL
                                	NOP
                                	NOP
                                	DJNZ	R7,___LOOP_I2C_WRITE
                                	CLR	SCL
                                	NOP
                                	NOP
                                	NOP
                                	NOP
                                	SETB	SDA		;CAU HINH NGO VAO SDA DOC ACK
                                	SETB	SCL
                                	NOP
                                	MOV	C,SDA		;KIEM TRA CO "C" DE XAC DINH LOI 
                                	NOP
                                	NOP
                                	CLR	SCL
                                	POP	07H
                                	RET
                                I2C_READ_ACK:
                                	PUSH	07H
                                	MOV	R7,#8
                                	SETB	SDA		;CAU HINH NGO VAO SDA
                                   ___LOOP_I2C_READ_ACK:
                                	SETB	SCL
                                	NOP
                                	MOV	C,SDA
                                	RLC	A		;BYTE DOC VE LUU TRONG THANH GHI "A"
                                	NOP
                                	CLR	SCL
                                	NOP
                                	NOP
                                	NOP
                                	DJNZ	R7,___LOOP_I2C_READ_ACK
                                	CLR	SDA
                                	NOP
                                	SETB	SCL
                                	NOP
                                	NOP
                                	NOP
                                	NOP
                                	CLR	SCL
                                	POP	07H
                                	RET
                                I2C_READ_NACK:
                                	PUSH	07H
                                	MOV	R7,#8
                                	SETB	SDA		;CAU HINH NGO VAO SDA
                                   ___LOOP_I2C_READ_NACK:
                                	SETB	SCL
                                	NOP
                                	MOV	C,SDA
                                	RLC	A		;BYTE DOC VE LUU TRONG THANH GHI "A"
                                	NOP
                                	CLR	SCL
                                	NOP
                                	NOP
                                	NOP
                                	DJNZ	R7,___LOOP_I2C_READ_NACK
                                	SETB	SDA
                                	NOP
                                	SETB	SCL
                                	NOP
                                	NOP
                                	NOP
                                	NOP
                                	CLR	SCL
                                	POP	07H
                                	RET
                                I2C_INIT:
                                	SETB	SCL
                                	SETB	SDA
                                	RET
                                I2C_START:
                                	SETB	SDA
                                	SETB	SCL
                                	NOP		;DELAY 4.7US
                                	NOP		;Bus Free Time Between a STOP and START Condition
                                	NOP	
                                	NOP
                                	NOP
                                	CLR	SDA
                                	NOP		;DELAY 4US
                                	NOP		;Hold Time (Repeated) START Condition
                                	NOP	
                                	NOP
                                	CLR	SCL
                                	RET
                                I2C_STOP:
                                	CLR	SDA
                                	SETB	SCL
                                	NOP		;DELAY	4.7US
                                	NOP		;Setup Time for STOP Condition
                                	NOP
                                	NOP	
                                	NOP
                                	SETB	SDA
                                	RET
                                I2C_RESTART:
                                	SETB	SDA
                                	SETB	SCL
                                	NOP		;DELAY 4.7US
                                	NOP		;Setup Time for a Repeated START Condition
                                	NOP	
                                	NOP
                                	NOP
                                	CLR	SDA
                                	NOP		;DELAY 4US
                                	NOP		;Hold Time (Repeated) START Condition
                                	NOP	
                                	NOP
                                	CLR	SCL
                                	NOP
                                	NOP
                                	RET
                                SCL_HIGH:
                                	NOP		;DELAY 4US
                                	NOP		;HIGH Period of SCL Clock
                                	SETB	SCL
                                	NOP
                                	NOP
                                	RET
                                SCL_LOW:
                                	NOP		;DELAY 4.7US
                                	NOP		;LOW Period of SCL Clock
                                	CLR	SCL
                                	NOP
                                	NOP
                                	NOP
                                	RET
                                outchar:	
                                	jnb	ti,$
                                	clr 	ti
                                	mov	sbuf,a
                                	ret
                                END
                                3. File Code ASM + mô phỏng
                                [ATTACH]42878[/ATTACH]
                                4. Có gì góp ý hoàn thiện nha và thật là vui nếu các bạn không quên "THANKS" !
                                bạn giải thich cho câu lênh sau với:
                                JNB F_SEND,$
                                thanks

                                Comment

                                Về tác giả

                                Collapse

                                tienhuypro Tìm hiểu thêm về tienhuypro

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X