⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2cbus.asm

📁 IIC总线
💻 ASM
字号:


ansower_ck_bit		bit		00h
sda					bit		p1.6
scl					bit		p1.7
led_run				bit		p1.0
led_right			bit		p1.1
led_wrong			bit		p1.2
data_txd			equ		30h
data_rxd			equ		40h

sla_addr			equ		50h
suba_addr			equ		51h
number_byte			equ		52h
					
				ORG 0000H
				LJMP start
				ORG 0003H
				reti
				ORG 000BH
				reti
				ORG 0023H
				reti
				ORG 0030H
				
				
				
				
				
			
start:			mov		sp,#60h
				;mov		data_txd,#03h
				sjmp	main
main:			nop
				nop
				mov		50h,#0a0h
				mov		51h,#30h
				
				mov		30h,#00h
				mov		31h,#01h
				mov		32h,#02h
				mov		33h,#03h
				mov		34h,#04h
				mov		35h,#05h
				mov		36h,#06h
				mov		37h,#07h
				
				mov		38h,#08h
				mov		39h,#09h
				mov		3ah,#0ah
				mov		3bh,#0bh
				mov		3ch,#0ch
				mov		3dh,#0dh
				mov		3eh,#0eh
				mov		3fh,#0fh
				
				mov		number_byte,#16
				acall	write_in_byte
				acall	d1s
				
				mov		50h,#0a0h
				mov		51h,#50h
				
				mov		30h,#10h
				mov		31h,#11h
				mov		32h,#12h
				mov		33h,#13h
				mov		34h,#14h
				mov		35h,#15h
				mov		36h,#16h
				mov		37h,#17h
				
				mov		38h,#18h
				mov		39h,#19h
				mov		3ah,#1ah
				mov		3bh,#1bh
				mov		3ch,#1ch
				mov		3dh,#1dh
				mov		3eh,#1eh
				mov		3fh,#1fh
				
				mov		number_byte,#16
				acall	write_in_byte
				acall	d1s
				
				
full:				
				mov		50h,#0a0h
				mov		51h,#50h
				mov		number_byte,#16
				acall	read_in_byte
				acall	d1s
				mov		a,41h
				cjne	a,#01h,wrong_0
				cpl		led_right
				sjmp	full				
wrong_0:		cpl		led_wrong
				ajmp	main
;----------------------------
start_iic:		setb	sda
				nop
				setb	scl
				nop
				nop
				nop
				nop
				nop
				clr		sda
				nop
				nop
				nop
				nop
				clr		scl
				nop
				ret

;------------------------------
stop_iic:		clr		sda
				nop
				nop
				setb	scl
				nop
				nop
				nop
				nop
				nop
				setb	sda
				nop
				nop
				nop
				nop
				nop
				ret
;-----------------------------
re_ck_iic:		clr		sda
				nop
				nop
				setb	scl
				nop
				nop
				nop
				nop
				nop
				clr		scl
				nop
				nop
				ret

;------------------------------				
no_re_ck_iic:	setb	sda
				nop
				nop
				setb	scl
				nop
				nop
				nop
				nop
				nop
				clr		scl
				nop
				nop
				ret
;---------------------------------
test_re_bit_iic:setb	sda
				nop
				nop
				setb	scl
				clr		ansower_ck_bit
				nop
				nop
				mov		c,sda
				jc		cend
				setb	ansower_ck_bit
cend:			nop
				clr		scl
				nop
				ret

;---------------------------------------
;in:acc
;---------------------------------------
wr_byte_iic:	mov		r0,#08h
wr_0:			rlc		a	;入口参数
				jc		wr_bit_1
				sjmp	wr_bit_0
wlp1:			djnz	r0,wr_0
				nop
				ret
wr_bit_1:		setb	sda
				nop
				setb	scl
				nop
				nop
				nop
				nop
				nop
				clr		scl
				sjmp	wlp1
wr_bit_0:		clr		sda
				nop
				setb	scl
				nop
				nop
				nop
				nop
				nop
				clr		scl
				sjmp	wlp1

;----------------------------------------
;out:acc
;----------------------------------------
re_byte_iic:	mov		r0,#08h
				setb	sda
				clr		a
re_byte_1:		mov		c,sda
				rlc		a	;出口参数
				setb	scl
				nop
				nop
				nop
				clr		scl
				nop
				nop
				nop
				djnz	r0,re_byte_1
				ret	

;--------------------------------------
;number_byte,sla_addr,suba_addr
;data_txd,
;
;---------------------------------------
write_in_byte:	mov		r3,number_byte
				acall	start_iic
				mov		a,sla_addr
				acall	wr_byte_iic
				acall	test_re_bit_iic
				jnb		ansower_ck_bit,no_re_out
				mov		a,suba_addr
				acall	wr_byte_iic
				acall	test_re_bit_iic
				mov		r1,#data_txd	;30h
wr_data:		mov		a,@r1
				acall	wr_byte_iic
				acall	test_re_bit_iic
				jnb		ansower_ck_bit,write_in_byte
				inc		r1
				djnz	r3,wr_data
no_re_out:		acall	stop_iic
				ret	
						
;-------------------------------------
;number_byte,sla_addr,suba_addr
;data_rxd,
;-------------------------------------
read_in_byte:	
				mov		r3,number_byte
				acall	start_iic
				mov		a,sla_addr
				acall	wr_byte_iic
				acall	test_re_bit_iic
				jnb		ansower_ck_bit,read_no_out
				mov		a,suba_addr
				acall	wr_byte_iic
				acall	test_re_bit_iic
				acall	start_iic
				mov		a,sla_addr
				inc		a
				acall	wr_byte_iic
				acall	test_re_bit_iic
				jnb		ansower_ck_bit,read_in_byte
				mov		r1,#data_rxd	;40h
re_1:			acall	re_byte_iic
				mov		@r1,a
				djnz	r3,sack
				acall	no_re_ck_iic
read_no_out:	acall	stop_iic
				ret
sack:			acall	re_ck_iic
				inc		r1
				sjmp	re_1
 
 
 
 
 
 
 
 
 	
d1s:  push 06h
   nop
   mov  r6,#200
   nop
 d1s_s: nop
   lcall d1ms
   lcall d1ms
   lcall d1ms
   lcall d1ms
   lcall d1ms
   nop
   djnz r6,d1s_s
   pop  06h
   ret 
   
 dms: push 06h
   nop
   mov  r6,#50
   nop
 dms_s: nop
   lcall d1ms
   lcall d1ms
   lcall d1ms
   lcall d1ms
   nop
   djnz r6,dms_s
   pop  06h
   ret  
   
 d10ms: push 07h
   mov r7,#2
   nop
 d10: nop
   nop
   lcall d1ms
   djnz r7,d10
   pop  07h
   ret 
   
 d1ms: nop
   mov  r5,#0ffh
   nop
 d1ms_1: nop
   nop
   nop
   nop
   nop
   nop
   djnz r5,d1ms_1
   ret
 end																																

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -