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

📄 ap0610-receive.asm

📁 定时器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***************************************KH-004*******************************************;
;MDT Ltd					;
;							;
;File: receive.ASM		Editor: KEN KONG		;
;							;
;Date: 06 - 05 - 12		Ver:  1.0				;
;							;
;Type: 53A1		int RC: 4MHz			;
;							;
;*******************************************************************************************;
;                   LIST P=12C509                			;
;-------------------FSR DEFINE--------------------;
;*************************************************;
INDF		EQU		00H               	;
TMR0		EQU		01H               	;
STATUS		EQU		03H               	;
FSR			EQU		04H               	;
PORTB		EQU		06H					;
PB			EQU		06H					;
CODE1		EQU		10H
CODE2		EQU		11H
CODE3		EQU		12H
CODE4		EQU		13H
RF1			EQU		10H
RF2			EQU		11H
RF3			EQU		12H
RF4			EQU		13H
CODE11		EQU		0CH
CODE21		EQU		0DH
CODE31		EQU		0EH
CODE41		EQU		0FH
CODE5		EQU		1EH
COUNT		EQU		9H
COUNT1		EQU		0AH
NUM			EQU		0BH
DELAY1		EQU		8H
DELAY2		EQU		15H
DELAY3		EQU		16H
RF_BUFF		EQU		17H
BUFF		EQU		17H	
ADDR_I2C	EQU		18H
VALUE		EQU		19H
R_STATUS	EQU		1AH
COUNT_RF	EQU		1BH
H_LEVEL		EQU		1CH
L_LEVEL		EQU		1DH
BIT_COUNT	EQU		14H
PB_TEMP		EQU		1AH
TIME0		EQU		1FH
;*************************************************;
;-----------------PORT DEFINE---------------------;
;*************************************************;

;*************************************************;
;----------------REGISTER DEFINE------------------;
#DEFINE		CONTROL_OUT			PB,0
#DEFINE		SCL					PB,1
#DEFINE		SDA					PB,2
#DEFINE		RF_IN				PB,3
#DEFINE		S_LEARN					PB,4
;*************************************************;
;--------------------PROGRAMME  START------------------------;
;*************************************************
		ORG    	03FFH
		GOTO 	START
;*************************************************
		ORG		0000H
		GOTO	START
;*************************************************

;*************************************************;
;-----------------------------  PORT INITIALIZATION  ---------------------------------------------;
;*************************************************;
DELAY80US
	MOVLW	0CH
	GOTO	$+3
DELAY20US                                           ; 延时20uS(连调用时间)
	GOTO    $+1
DELAY18US
	MOVLW	2H
	NOP
	MOVWF	DELAY1
DELAY_USC         
	GOTO      $+1
	CLRWDT
	DECFSZ		DELAY1,F
	GOTO	DELAY_USC 
	RETLW     0H    
;***************************************************************
;************************************************************************
;****************************I2C W/R*************************************	
;************************************************************************
WR_EEPROM:			;主设备往I2C芯片写数据
	CALL I2C_START		;起始位产生
	MOVLW B'10100000' 	;24c01地址标志为1010,A<2:0>=000,写数据
	CALL I2C_DATAOUT	;发送操作命令到I2C芯片
	MOVF ADDR_I2C,W		;24C01数据地址
	CALL I2C_DATAOUT 	;8bit数据发送
	MOVF VALUE,W 		;选择24c01,写数据
	CALL I2C_DATAOUT	;8bit数据发送
	CALL I2C_STOP		;停止位产生,I2C写交易结束
	CALL DLY2 		;延时5ms(24C01数据Twr延时最大值为5ms)
	RETLW	0H
;********************************************************
RD_EEPROM:			;主设备往I2C芯片读数据
	CALL I2C_START		;起始位产生
	MOVLW B'10100000' 	;24c01地址标志为1010,A<2:0>=000,写数据
	CALL I2C_DATAOUT	;8bit数据发送
	MOVF ADDR_I2C,W		;24C01数据地址
	CALL I2C_DATAOUT	;8bit数据发送
	CALL I2C_RESTART	;重复起始位产生
	MOVLW B'10100001' 	;选择24c01,读数据
	CALL I2C_DATAOUT	;8bit数据发送
	CALL I2C_DATAIN		;8bit数据输入
	CALL I2C_STOP		;停止位产生,I2C读交易结束
	RETLW	0H		
;********************************************************
;在I2C总线上产生起始位
I2C_START:	
	BSF SDA			;SDA=1
	GOTO	$+1
	GOTO	$+1
	BSF SCL			;SCL=1
	GOTO	$+1
	GOTO	$+1
	BCF SDA			;SDA=0,起始位标志产生
	GOTO	$+1
	GOTO	$+1
	BCF SCL			;SCL=0
    RETLW 0H		;返回

;********************************************************

;在I2C总线上产生停止位
I2C_STOP:          
	BCF SDA			;SDA=0
	BSF SCL			;SCL=1
	GOTO	$+1
	GOTO	$+1
	BSF SDA			;SDA=1,停止位标志产生
	GOTO	$+1
	GOTO	$+1
	BCF SCL			;SCL=0
        RETLW 0H		;返回

;********************************************************
;在I2C总线上产生重复起始位
I2C_RESTART:	
	BCF SCL			;SCL=0
	BSF SDA			;SDA=1
	GOTO	$+1
	GOTO	$+1
	BSF SCL			;SCL=1
	GOTO	$+1
	GOTO	$+1
	BCF SDA			;SDA=0,重复起始位标志产生
	GOTO	$+1
	GOTO	$+1
	BCF SCL			;SCL=0
    	RETLW 0H		;返回

;********************************************************
;主设备向从设备输出数据
I2C_DATAOUT:  
	MOVWF BUFF		;发送数据到移位寄存器
	MOVLW .8		;8 位输出
	MOVWF NUM		;设置计数器初值
_I2CBITOUT:   
	BTFSS BUFF,7		;高位先发,判断移位寄存器最高位
	GOTO $+3		;为0则跳转
	BSF SDA			;为1则置位SDA
	GOTO $+2		;跳到时钟发送
	BCF SDA			;为0则清零SDA
	BSF SCL			;SCL=1
	GOTO	$+1
	GOTO	$+1
	BCF SCL			;SCL=0,1 位传输结束
	RLF	BUFF,F		;发送数据左移1位
	DECFSZ NUM,F		;8 位全部输出?
	GOTO _I2CBITOUT		;否,继续发送数据位
	BSF SDA			;数据发送完成,释放SDA准备检测从设备应答
	BSF SCL			;SCL=1
	GOTO	$+1
	GOTO	$+1
	BCF SCL			;SCL=0
	RETLW 0H		;返回

;********************************************************
;主设备从I2C总线上读取数据,放入I2C_BUFF单元
I2C_DATAIN:	
	MOVLW .8		;8 位数据输出
	MOVWF NUM		;设置计数寄存器初值
	MOVLW B'00011100'	;TRISB,SDA设为输入
	TRIS PORTB
_I2CBITIN	
	RLF	BUFF,F		;接收移位寄存器左移一位
	BSF SCL			;SCL=1
	BCF BUFF,0		;接收移位寄存器最低位预清0
	BTFSC SDA		;测试SDA电平
	BSF BUFF,0		;为1则移入数据为1
	BCF SCL			;SCL=0
	GOTO	$+1
	GOTO	$+1
	DECFSZ NUM,F		;8 位数据接收完成?
	GOTO _I2CBITIN		;否,继续接收
	MOVLW B'00011000'	;TRISB,SDA设为输出
	TRIS PORTB
	BSF SDA 		;主设备发出非应答位,SDA=1
	BSF SCL			;SCL=1
	GOTO	$+1
	GOTO	$+1
	BCF SCL			;SCL=0
	RETLW 0H		;返回

;***************************************************************
;延迟5.1ms子程序,为保证I2C写入有充分的缓冲时间Twr
DLY2:    
	MOVLW 0FFH		;内循环次数255
	MOVWF DELAY1
DLY2_LP
	GOTO	$+1
	GOTO	$+1
	GOTO 	$+1
	GOTO	$+1
	GOTO 	$+1
	GOTO	$+1
	GOTO	$+1	
	GOTO	$+1
	CLRWDT
	DECFSZ DELAY1,F
	GOTO DLY2_LP
	RETLW 0H
;************************************************************************
DLY1
	CLRWDT
	NOP
	GOTO	$+1
	RETLW	0H
;*************************************************
;********************************************************************	
DELAY500MS				;延时子程序,500ms
;	MOVLW	02H
;	MOVWF	DELAY3
DELAY500MS_1
	MOVLW	0F4H
	MOVWF	DELAY1
DELAY500MS_2
	CLRWDT
	MOVLW	0FFH
	MOVWF	DELAY2
DELAY500MS_3
;	BTFSC	RF_IN
;	GOTO	RF_RECEIVE
	NOP
	DECFSZ	DELAY2,1
	GOTO DELAY500MS_3
	DECFSZ	DELAY1,1
	GOTO DELAY500MS_2
;	DECFSZ	DELAY3,1
;	GOTO DELAY500MS_1
	RETLW 0H	

;*************************************************;
START
		MOVLW	B'00000011'
		OPTION	
		MOVLW B'00011010'		;设置PB口
		TRIS PORTB
		CLRF PORTB
		CLRF	R_STATUS
		CLRF	CODE5
		BTFSS	PB,4
		BSF	CODE5,0
		BSF	PB,5
		CLRF	CODE41	
		GOTO	READ_CODE
		
;*************************************************
MAIN
		BTFSC	TMR0,7
		CALL	TMR0_OUT
		BTFSS	S_LEARN
		GOTO	CHECK_LEARN
		BTFSC	RF_IN
		GOTO	RECEIVE
		BCF		R_STATUS,1
		BCF		R_STATUS,0
		CLRWDT
		GOTO	MAIN

TMR0_OUT
		BCF	TMR0,7
		INCF	TIME0,F
		BTFSS	TIME0,7
		RETLW	0H
		BCF	TIME0,7
		BCF	R_STATUS,6	
		MOVLW	B'01010000'
		XORWF	CODE41,W
		BZ	TMR0_1
		BSF	R_STATUS,6	
TMR0_1		
		BTFSS	R_STATUS,6
		GOTO	TMR0_2
		BTFSC	R_STATUS,7
		GOTO	TMR0_2
		BTFSC	CODE5,0		;加入测试模式		
		BCF	PB,5
;		BSF	PB,5
		BSF	R_STATUS,7
		RETLW	0H
TMR0_2
		BSF	PB,5
		BCF	R_STATUS,7
		RETLW	0H		

;SET_INIT
;		BSF	PB,5
;		CALL	DELAY500MS
;		BCF	PB,5
;		CALL	DELAY500MS
;		BTFSC	S_LEARN
;		GOTO	CHECK_LEARN		
;		GOTO	MAIN
CHECK_LEARN
		BTFSC	R_STATUS,1
		GOTO	LEARN
		CALL	DELAY500MS
		BTFSC	S_LEARN
		GOTO	RECEIVE
		BSF		R_STATUS,1
		GOTO	LEARN		
;*******************************************************
		
;*************************************************;		
;*************************************************;
RECEIVE
;		BTFSS	RF_IN				;再判断一次接收信号
;		GOTO	MAIN
; **************************************************************************
; *************************** RF_IN射频接收程序 ****************************    
; **************************************************************************

⌨️ 快捷键说明

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