www.pudn.com > My_LCD_Driver.rar > TEST.ASM


AD_DA		bit	P2.3		;ADC的数据线 
AD_CS		bit	P2.4		;ADC的/CS线 
 AD_CLock	bit	P2.5		;ADC的时钟线 
 
AD_Staly	bit	08h		;标志位 
 
?PR?_AD_Read?_AD_Read 		SEGMENT CODE 
 ?PR?AD_temp?_AD_Read           SEGMENT DATA 
        PUBLIC AD_Data,AD_Data_h,AD_Data_l,AD_Comp    
        RSEG ?PR?AD_temp?_AD_Read 
        AD_Data: DS 1                   ;AD转换的结果存放在此 
	AD_Comp: DS 1 
      AD_Data_h: DS 1                   ;扫描管子得到的数据,并发往主控CPU显示以调试 
      AD_Data_l: DS 1			;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~低8位 
	PUBLIC AD_Read 
	public _DData_To 
	public _DIV16 
	RSEG ?PR?_AD_Read?_AD_Read 
AD_Read: 
	PUSH	acc 
        push    psw 
	mov	r1,#08h 
	mov	a,#00h 
	clr	AD_Clock 
	clr	AD_CS 
	call 	Delay01		;;;延时可以再短一些 
AD_Read1: 
	rl	a 
	setb	AD_Clock 
	nop 
	jb	AD_DA,AD_Read_h 
	sjmp	AD_Read_Next 
AD_Read_h: 
	setb	acc.0 
AD_Read_Next: 
	clr	AD_Clock 
	djnz	r1,AD_Read1 
	mov	AD_Data,a 
	mov	r1,#02h 
AD_Read3: 
	setb	AD_Clock 
	nop 
	nop 
	clr	AD_Clock 
	djnz	r1,AD_Read3 
	setb	AD_CS 
	clr	AD_Clock 
        pop     psw 
	POP  	acc 
	RET 
	 
;	public	Delay01 
;;//========================================================================================// 
;;//Program:延时程序 
;;//2004年2月2日  小丑于哈工程  Robot实验室 
;;//========================================================================================// 
Delay01: 
	PUSH	acc 
	mov	acc,r1 
	PUSH	acc 
	mov	r1,#0afh 
Delay02: 
	djnz	r1,Delay02 
	POP	acc 
	mov	r1,acc 
	POP	acc 
	ret 
 
;;//========================================================================================// 
;;//Program:阵列传感器位处理 
;;//InPut:第一个参数(数组的指针)放在r7中,第二个参数(对比数值)放在r5中 
;;//Output:AD_Data_l,AD_Data_h 
;;//2004年2月2日  小丑于哈工程  Robot实验室		V1。0 
;;//04年2月25日做第一次修改     调整16位的数据		V1。1 
;;//========================================================================================// 
_DData_To: 
	push	acc 
	push    psw 
	mov	a,r7 
	mov	r0,a 
	mov	r1,#16; 
DData_Loop: 
	clr	c 
	mov	a,AD_Data_l 
	rlc	a 
	mov	AD_Data_l,a 
	mov	a,AD_Data_h 
	rlc	a 
	mov	AD_Data_h,a 
	mov	a,@r0 
	cjne	a,AD_Comp,Led_001			;;;;;;;;;??????????#08h暂时用来作为AD转换后黑白线界限值 
	sjmp	Led_000 
Led_001: 
	jnc	Led_high 
Led_000: 
	mov	a,AD_Data_l 
	clr	acc.0 
	sjmp	Led_Next 
Led_high: 
	mov	a,AD_Data_l 
	setb	acc.0 
Led_Next: 
	mov	AD_Data_l,a 
	inc	r0 
	djnz	r1,DData_Loop 
	pop     psw 
	pop	acc 
	ret 
 
;;十六位除八位子程序   C语言中调用,r7保存结果,r6存放余数 
DIV16: 
 _DIV16: mov   b,#8 
 div161: clr   c 
         xch   a,r7 
         rlc   a 
         xch   a,r7 
         xch   a,r6 
         rlc   a 
         xch   a,r6 
         jc    div163 
         mov   a,r6 
         subb  a,r5 
         mov   r6,a 
         jnc   div162 
         mov   a,r6 
         add   a,r5 
         mov   r6,a 
         djnz  b,div161 
         ret 
  div163:clr   c 
         mov   a,r6 
         subb  a,r5 
         mov   r6,a 
  div162:inc   r7 
         djnz  b,div161 
         ret 
	 end