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

📄 text2_xicor9241.asm

📁 本程序是试验数字电位器9241的演示程序
💻 ASM
字号:
;*********************************************************
;*
;* 80C31 MICROCONTROLLER ROUTINES FOR MANIPULATING AN X9241
;* QUAD EEPOT
;*
;* (C) XICOR INC. 1993
;* GHC IV
;*********************************************************			
			
			SDA BIT P0.0
			SCL BIT P0.1
			ACK BIT 00H
			TEMP EQU R1 ;* SCRATCH REGISTER
			COUNT EQU R2 ;* LOOP COUNTING REGISTER
			PULSES EQU R3 ;* BITS -> DIR X###### (# = 1 or 0)
			COMMAND EQU R4 ;* INSTRUCTION (I.E. 0,4,8,12,16,...)
			ID EQU R5 ;* BITS -> 0 0 0 0 P1 P0 R1 R0
			ADDR_BYTE EQU R6 ;* BITS -> 0 1 0 1 A3 A2 A1 A0
			DATA_BYTE EQU R7 ;* BITS -> CM DW D5 D4 D3 D2 D1 D0
			TEMP1 EQU 40H
			DATA0 EQU 41H
			DATA1 EQU 42H
			DATA2 EQU 43H
			DATA3 EQU 44H
			BITCNT EQU 46H        	;I2C位计数器
        	BYTECNT EQU 47H       	;数据字节长度计数器
        	SLVADR EQU 48H         	;从机寻址字节                
        	RCVDAT EQU 49H         	;IIC接收数据缓冲区
        	XMTDAT EQU 4AH			;IIC发送数据缓冲区


			ORG 0000H
			JMP MAIN

MAIN:		
			MOV R2,#0FFH
			DJNZ R2,$
LOOP:		MOV TEMP1,#80H
			MOV DATA0,#80H
			MOV DATA1,#0C0H
			MOV DATA2,#0C0H
			MOV DATA3,#0C0H
			CALL X9241_INI
LOOP0:		CALL D20MS
			CALL D20MS
			CALL D20MS
			CALL START
			MOV A,#50H
			CALL SENDBYTE
			MOV A,#0A0H
			CALL SENDBYTE
			MOV A,TEMP1
			CALL SENDBYTE
			CALL STOP
			INC TEMP1
			MOV A,TEMP1
			CJNE A,#0C0H,LOOP0
			MOV TEMP1,#80H
			MOV DATA0,#0C0H
			MOV DATA1,#80H
			MOV DATA2,#0C0H
			MOV DATA3,#0C0H
			CALL X9241_INI
LOOP1:		CALL D20MS
			CALL D20MS
			CALL D20MS
			CALL START
			MOV A,#50H
			CALL SENDBYTE
			MOV A,#0A4H
			CALL SENDBYTE
			MOV A,TEMP1
			CALL SENDBYTE
			CALL STOP
			INC TEMP1
			MOV A,TEMP1
			CJNE A,#0C0H,LOOP1
			MOV TEMP1,#80H
			MOV DATA0,#0C0H
			MOV DATA1,#0C0H
			MOV DATA2,#80H
			MOV DATA3,#0C0H
			CALL X9241_INI
LOOP2:		CALL D20MS
			CALL D20MS
			CALL D20MS
			CALL START
			MOV A,#50H
			CALL SENDBYTE
			MOV A,#0A8H
			CALL SENDBYTE
			MOV A,TEMP1
			CALL SENDBYTE
			CALL STOP
			INC TEMP1
			MOV A,TEMP1
			CJNE A,#0C0H,LOOP2
			MOV TEMP1,#80H
			MOV DATA0,#0C0H
			MOV DATA1,#0C0H
			MOV DATA2,#0C0H
			MOV DATA3,#80H
			CALL X9241_INI
LOOP3:		CALL D20MS
			CALL D20MS
			CALL D20MS
			CALL START
			MOV A,#50H
			CALL SENDBYTE
			MOV A,#0ACH
			CALL SENDBYTE
			MOV A,TEMP1
			CALL SENDBYTE
			CALL STOP
			INC TEMP1
			MOV A,TEMP1
			CJNE A,#0C0H,LOOP3
			MOV TEMP1,#80H
			JMP LOOP
			SJMP $


;******************X9241初始化子程序*******************
X9241_INI:
;*****************WCR0*****************
			CALL START
			MOV A,#50H				;器件地址50H
			CALL SENDBYTE
			MOV A,#0A0H				;命令字,对WCR0写数据
			CALL SENDBYTE
			MOV A,DATA0				;数据字:串联,滑动端正常联到引脚
			CALL SENDBYTE			;滑动端位置为0
			CALL STOP
;*****************WCR1*****************
			CALL START
			MOV A,#50H				;器件地址50H
			CALL SENDBYTE
			MOV A,#0A4H				;命令字,对WCR1写数据
			CALL SENDBYTE
			MOV A,DATA1				;数据字:串联,滑动端悬浮
			CALL SENDBYTE
			CALL STOP
;*****************WCR2*****************
			CALL START
			MOV A,#50H				;器件地址50H
			CALL SENDBYTE
			MOV A,#0A8H				;命令字,对WCR2写数据
			CALL SENDBYTE
			MOV A,DATA2				;数据字:串联,滑动端悬浮
			CALL SENDBYTE
			CALL STOP
;*****************WCR3*****************
			CALL START
			MOV A,#50H				;器件地址50H
			CALL SENDBYTE
			MOV A,#0ACH				;命令字,对WCR3写数据
			CALL SENDBYTE
			MOV A,DATA3				;数据字:串联,滑动端悬浮
			CALL SENDBYTE
			CALL STOP
			RET

;***************延时子程序****************
D20MS:		MOV R6,#14H				 ;20MS
D201:		ACALL D1MS
			DJNZ R6,D201
			RET
D1MS:		MOV R7,#0C7H			;1MS,1T
DD1:		NOP						;1T
			NOP						;1T
			NOP						;1T
			DJNZ R7,DD1				;2T
			RET						;2T
D250MS:		MOV R5,#0CH				;250MS
DD2:		ACALL D20MS
			DJNZ R5,DD2
			RET
D500MS:		MOV R5,#19H				;500MS
DD3:		ACALL D20MS
			DJNZ R5,DD3
			RET
D400MS:		MOV R5,#16H		 		;400MS
DD4A:		ACALL D20MS
			DJNZ R5,DD3
			RET		
D1S:		MOV R5,#32H				;1S
DD4:		ACALL D20MS
			DJNZ R5,DD4
			RET
					
D1M:		MOV R6,#20H				;32S
D1MA:		LCALL D1S
			DJNZ R6,D1MA
			RET	
D2S:		MOV R5,#64H				;2S
DD5:		ACALL D20MS
			DJNZ R5,DD5
			RET

D80MS:		MOV R3,#50H			;20MS软件延时程序
DD1B:		ACALL D1MS
        	DJNZ R3,DD1B		;喂狗
        	RET

D6S:		MOV R5,#0A0H
DD2A:    	ACALL D20MS
			DJNZ R5,DD2A
        	RET
;**************延时子程序结束*************

;***************发送数据程序*************

INPUT:		MOV SLVADR,A
			MOV BYTECNT,#1
			ACALL RCVDATA
			RET
OUTPUT:		MOV SLVADR,A
			MOV BYTECNT,#1
			;MOV XMTDAT,#0AAH
			ACALL SENDDATA
			RET
SENDDATA:	ACALL START
			MOV A,SLVADR
			ACALL SENDBYTE
			JB F0,SENDRETURN
			MOV R0,#XMTDAT
SENTNEXT:	MOV A,@R0
			ACALL SENDBYTE
			JB F0,SENDRETURN
			INC R0
			DJNZ BYTECNT,SENTNEXT
			ACALL STOP
DELAY10:	MOV R7,#30H
D1:			MOV R6,#34H
D2:			DJNZ R6,D2
			DJNZ R7,D1
SENDRETURN:	RET

;****************接收数据程序*************
;
RCVDATA:	ACALL START
			MOV A,SLVADR
			SETB ACC.0
			ACALL SENDBYTE
  			JB F0,RCVRETURN
			CLR ACK
			MOV R0,#RCVDAT
			DJNZ BYTECNT,RCVNEXT
			SJMP RCVLAST
RCVNEXT:	ACALL RCVBYTE
			MOV @R0,A
			INC R0
			DJNZ BYTECNT,RCVNEXT
RCVLAST:	SETB ACK
			ACALL RCVBYTE
			MOV @R0,A
			ACALL STOP
RCVRETURN:	RET

;***************虚拟IIC子程序**********
;
START:		SETB SDA
			NOP
			SETB SCL
			NOP
			NOP
			NOP
			NOP
			NOP
			CLR SDA
			NOP
			NOP
			NOP
			NOP
			NOP
			CLR SCL
			RET
;
STOP:		CLR SDA
			NOP
			SETB SCL
			NOP
			NOP
			NOP
			NOP
			NOP
			SETB SDA
			NOP
			NOP
			NOP
			NOP
			NOP
			RET

SENDBYTE:	MOV BITCNT,#08H
SENDB:		RLC A
			JC SEND1
			CLR SDA
			SJMP SEND
SEND1:		SETB SDA
			NOP
SEND:		NOP
			SETB SCL
			NOP
			NOP
			NOP
			NOP
			NOP
			CLR SCL
			DJNZ BITCNT,SENDB
			NOP
			NOP
			SETB SDA
			NOP
			NOP
			SETB SCL
			NOP
			NOP
			CLR F0
			JNB SDA,ACKEND
			SETB F0
ACKEND:		NOP
			CLR SCL
			RET
;
RCVBYTE:	SETB SDA
			MOV BITCNT,#08H
RCV:		NOP
			CLR SCL
			NOP
			NOP
			NOP
			NOP
			NOP
			SETB SCL
			NOP
			NOP
			CLR C
			JNB SDA,RCV0
			SETB C
RCV0:		RLC A
			NOP
			NOP
			DJNZ BITCNT,RCV
			CLR SCL
			NOP
			NOP
			NOP
			CLR SDA
			JNB ACK,SENDACKB
			SETB SDA
SENDACKB:	NOP
			NOP
			SETB SCL
			NOP
			NOP
			NOP
			NOP
			NOP
			CLR SCL
			CLR ACK
			RET
;****************虚拟IIC子程序结束*************
			END

⌨️ 快捷键说明

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