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

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

    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:
    Click image for larger version

Name:	HINH MO PHONG.png
Views:	1
Size:	50.2 KB
ID:	1412445Click image for larger version

Name:	HINH MO PHONG.png
Views:	1
Size:	50.2 KB
ID:	1412445
    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
    Code DS1307 tienhuypro.zip
    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" !
    Attached Files

    Email:
    Tel: 0983.497.310

  • #2
    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" !
    Mình đang ngâm cứu về cái,có gì không hiểu mình hỏi bác hướng dẩn mình, thanks bác nhiều nha

    Comment


    • #3
      Nguyên văn bởi phucan2104 Xem bài viết
      Mình đang ngâm cứu về cái,có gì không hiểu mình hỏi bác hướng dẩn mình, thanks bác nhiều nha
      Có gì không hiểu hỏi luôn đi bạn.

      Email:
      Tel: 0983.497.310

      Comment


      • #4
        cha nội viết bằng C rồi chuyển sang ASEM cũng được mà. trong keil viết từ C chuyển sang ASEM ngâm cứu tại đó cũng được

        Comment


        • #5
          cha nội viết bằng C rồi chuyển sang ASEM cũng được mà. trong keil viết từ C chuyển sang ASEM ngâm cứu tại đó cũng được
          Bạn viết C chưa, viết rồi thì cho mình xem cái code ASM Keil dịch ra như thế nào. "Cha nội" ý bạn là sao đó ?

          Email:
          Tel: 0983.497.310

          Comment


          • #6
            cảm ơn bạn tienhuypro nhiều nha!hi hi
            Bùi Thành Hậu

            Gmail:
            Fb:

            Comment


            • #7
              Sao không có ai thắc mắc nhỉ? hỏi mau chứ ít hôm nữa quên hết là trả lời không được đâu đó

              Email:
              Tel: 0983.497.310

              Comment


              • #8
                Nguyên văn bởi tienhuypro Xem bài viết
                Sao không có ai thắc mắc nhỉ? hỏi mau chứ ít hôm nữa quên hết là trả lời không được đâu đó
                vâng! em mới bắt đầu học vi điều khiển thôi nên vịt lắm!!!anh giúp em câu hỏi này:trước khi mô phỏng 89C51 với protues thì mình phải nạp chương trình cho Ic trước phải ko ạ và nạp với protues 7.9 thì phải làm thế nào!!thanks very much!!(nếu em có làm phiền nhiều quá thì anh cũng đừng giận nha!hi hi)
                Bùi Thành Hậu

                Gmail:
                Fb:

                Comment


                • #9
                  trước khi mô phỏng 89C51 với protues thì mình phải nạp chương trình cho Ic trước phải ko ạ và nạp với protues 7.9 thì phải làm thế nào
                  Kích đúp vô IC rồi nó sẽ hiện ra hộp thoại sau
                  Click image for larger version

Name:	Nap chuong trinh.png
Views:	1
Size:	37.3 KB
ID:	1359684
                  Chọn biểu tượng folder dẫn tới file .hex --->chạy thôi

                  Email:
                  Tel: 0983.497.310

                  Comment


                  • #10
                    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ùi Thành Hậu

                    Gmail:
                    Fb:

                    Comment


                    • #11
                      Phần mềm thì nhiều nhưng đơn giản nhất là ASEM51
                      Code ASM viết bằng notepad có đuôi .asm thay vì là .txt
                      Viết code xong thì save lại và giữ chuột kéo file .asm thả vào file ASEM51 là được 1 file .LST(kiểm tra lỗi) và 1 file .Hex
                      Attached Files

                      Email:
                      Tel: 0983.497.310

                      Comment


                      • #12
                        Nguyên văn bởi tienhuypro Xem bài viết
                        Phần mềm thì nhiều nhưng đơn giản nhất là ASEM51
                        Code ASM viết bằng notepad có đuôi .asm thay vì là .txt
                        Viết code xong thì save lại và giữ chuột kéo file .asm thả vào file ASEM51 là được 1 file .LST(kiểm tra lỗi) và 1 file .Hex
                        hay quá anh ạ! em làm được rồi.hi hi!!cảm ơn anh nhiều nhiều lắm
                        Bùi Thành Hậu

                        Gmail:
                        Fb:

                        Comment


                        • #13
                          Nguyên văn bởi thanhhaudt33 Xem bài viết
                          hay quá anh ạ! em làm được rồi.hi hi!!cảm ơn anh nhiều nhiều lắm
                          Muốn debug thì dùng Keil C viết ASM cũng được
                          Click image for larger version

Name:	Debug Keil C.jpg
Views:	1
Size:	91.2 KB
ID:	1359980
                          Viết trên Keil C sướng hơn nhưng tốn time tạo và khởi động Keil C

                          Email:
                          Tel: 0983.497.310

                          Comment


                          • #14
                            Nguyên văn bởi tienhuypro Xem bài viết
                            Muốn debug thì dùng Keil C viết ASM cũng được
                            [ATTACH=CONFIG]43561[/ATTACH]
                            Viết trên Keil C sướng hơn nhưng tốn time tạo và khởi động Keil C
                            em còn dốt lắm.sau này có thắc mắc gì thì em sẽ hỏi anh sau nha! cảm ơn anh trước.hi hi
                            Bùi Thành Hậu

                            Gmail:
                            Fb:

                            Comment


                            • #15
                              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.

                              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