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

📄 rf905rx.asm

📁 再发一个RF905的接收程序
💻 ASM
字号:
	E1	BIT	P1.1
	E2	BIT	P1.2
	RS	BIT	P1.0  ;向液晶读写指令数据
	CD	BIT	P3.0
	AM	BIT	P3.1
	DR	BIT	P3.2
	MISO	BIT	P3.4
	MOSI	BIT	P3.5
	SCK	BIT	P3.6
	CSN	BIT	P3.7
	TRX_CE	BIT	P1.7
	PWR_UP	BIT	P1.6
	TX_EN	BIT	P1.5
	CHARC	EQU	40H     ;   液晶显示时调用的三个参量
	PAGE1 	EQU	41H      
	COLUMN	EQU	42H      
	WC	EQU	00H		;写配置寄存器
	RC	EQU	10H	   	;读配置寄存器
	WTP	EQU	20H		;向TX-PAYLOAD寄存器写入发送数据	
	RTP	EQU	21H		;从TX-PAYLOAD寄存器读取有效数据
	WTA	EQU	22H		;向TX-ADDRESS	寄存器写入发送数据
	RTA	EQU	23H		;向TX-ADDRESS	寄存器读取发送数据
	RRP	EQU	24H		;从RX-PAYLOAD寄存器读取接收到的有效数据
	
	BUF	EQU 70H

	ORG	0000H
	JMP	MAIN


	ORG	100H
		
MAIN:
	MOV	SP,#30H
	MOV A,#00H   ;累加器清零
	MOV P1,A     ;清输入输出 液晶初始化
	LCALL INITM  ;  初始化
	LCALL MS200  ;  调用延时
	LCALL BLACK1 ;  在屏幕上写入FF
	LCALL MS200  ;
	LCALL WHITE1  ;	清屏
	LCALL MS200
	MOV DPTR,#TX_BUF
	MOV A,#0
	MOVC A,@A+DPTR
	MOV R7,A
	MOV		R1,#0
	CALL DISPBYTE1
	CALL 	INIT905
	CALL	CONFIGWORD
t2:
	CALL	SET_RXMODE
	MOV 	R1,#16
	MOV		A,#6
	CALL	DISPBYTE2
	CALL	DELAY650
	CALL	DELAY650
	CALL	DELAY650
	CALL	delay650
	CALL	TEST_RXREADY
	MOV 	R1,#32
	MOV		A,#1
	CALL	DISPBYTE2
	CALL	SET_STBY	
	CALL	RD_DATA

	MOV		R0,#BUF
	MOV		A,@R0
	MOV		R1,#0
	INC		R0
	CALL	DISPBYTE

	MOV		A,@R0
	MOV		R1,#16
	INC		R0
	CALL	DISPBYTE

	MOV		A,@R0
	MOV		R1,#32
	INC		R0
	CALL	DISPBYTE	
	
	MOV		A,@R0
	MOV		R1,#48
	INC		R0
	CALL	DISPBYTE
	
		MOV		A,@R0
	MOV		R1,#0
	INC		R0
	CALL	DISPBYTE1
	
		MOV		A,@R0
	MOV		R1,#16
	INC		R0
	CALL	DISPBYTE1
	
		MOV		A,@R0
	MOV		R1,#32
	INC		R0
	CALL	DISPBYTE1
	
		MOV		A,@R0
	MOV		R1,#48
	INC		R0
	CALL	DISPBYTE1	
	TTT:  JMP t2
/*	MOV	A,R7
	MOV	R3,BUF
	SUBB	A,R3
	MOV 	R0,BUF
	MOV	R3,A
	MOV	R3,#3
	MOV 	R1,#1
*/
DISPLAY1:
	MOV	A,@R0
	INC	R0
	CALL	DISPBYTE
	MOV	A,R1
	ADD	A,#8
	MOV	R1,A
	DJNZ	R3,DISPLAY1


	

;*=========  905的初始化;
INIT905:
	SETB	CSN
	CLR	SCK
	SETB	DR
	SETB	AM
	SETB	CD
	SETB	PWR_UP
	CLR	TRX_CE
	CLR	TX_EN
	RET
;  =========== 写入配置字;
CONFIGWORD:	
	CLR		CSN
	MOV	A,#WC
	CALL	SPI_WR
	MOV	R1,#10
	MOV	DPTR,#CONFIG
	MOV	R5,#0
CONF1:
	MOV	A,R5
	MOVC	A,@A+DPTR
	CALL	SPI_WR
	INC	R5
	DJNZ	R1,CONF1
	SETB	CSN
	RET

; ============   写入要发送的数据
WR_DATA:	  
	CLR		CSN
	MOV	A,#WTP
	CALL	SPI_WR
	MOV	R1,#8		;DATA LENGTH
	MOV	DPTR,#TX_BUF	;DATA ADDRESS
	MOV	R5,#0
WR_DA1:
	MOV	A,R5
	MOVC	A,@A+DPTR
	CALL	SPI_WR
	INC	R5
	DJNZ	R1,WR_DA1
	SETB	CSN
	RET

;==========  写入要发送到的地址信息
WR_ADDR:
	CLR		CSN
	MOV	A,#WTA
	CALL	SPI_WR
	MOV	R1,#4
	MOV	DPTR,#TX_ADDRESS
	MOV	R5,#0
WR_ADDR1:
	MOV	A,R5
	MOVC	A,@A+DPTR
	CALL	SPI_WR
	INC	R5
	DJNZ	R1,WR_ADDR1
	SETB	CSN
	RET

; =========  向905写A内容 
SPI_WR:
	MOV 	R3,#8
SPI1:
	CLR	SCK
	RLC	A
	JNC	SPI2
	SETB	MOSI
	JMP 	SPI3
SPI2:
	CLR	MOSI
SPI3:
	SETB	SCK
	DJNZ	R3,SPI1
	CLR	SCK
	RET

; ==========  从905读数据 ->A
SPI_READ:
	MOV	R3,#8
SPI_R1:
	SETB	SCK
	NOP
	JNB	MISO,SPI_R2
	SETB	C
	JMP	SPI_R3
SPI_R2:
	CLR	C
SPI_R3:
	RLC	A
	CLR	SCK
	DJNZ	R3,SPI_R1
	RET

;*******************接收数据************
;  ======== 接收数据准备好
TEST_RXREADY:
	JNB	DR,TEST_RXREADY
	CLR	TRX_CE
	RET



; ======== 读取数据		 ;
RD_DATA:
	CLR  	CSN
	MOV 	R0,#BUF
	MOV		A,#RRP
	CALL	SPI_WR
RD_DATA1:
	CALL	SPI_READ
	MOV		@R0,A
	INC 	R0

	CALL	SPI_READ
	MOV		@R0,A
	INC 	R0
	JB	    DR,RD_DATA1	  
	SETB	CSN
	RET


	


;************************设置发送模式;
SET_TXMODE:
	SETB	TX_EN
	SETB	TRX_CE
	CALL	DELAY650
	RET
;***********************************

;************************设置接收模式:
SET_RXMODE:
	SETB	TRX_CE
	CLR	TX_EN
	CALL	DELAY650
	RET
;*************************************

;***********************设置standby和SPI编程模式:
SET_STBY:
	CLR	TRX_CE
	CALL	DELAY650
	RET
;*****************************************

;***********************延时650us
DELAY650:
	MOV	R4,#13
DELAY1:
	MOV	R5,#23
	DJNZ	R5,$
	DJNZ	R4,DELAY1
	RET


;*****************************************************
                      ;显示模块
;*****************************************************
DISPCHAR:
	MOV PAGE1,#0BaH
	MOV COLUMN,R1
	MOV CHARC,A	;WRITE A CHINESE(16X16 DOTS)转	
	LCALL NUMBERL
	RET
DISPBYTE:
	MOV R2,A
	RR  A
	RR  A
	RR  A
	RR  A
	ANL A,#0FH
	CALL DISPCHAR
	MOV A,R1
	ADD A,#8
	MOV R1,A
	MOV A,R2
	ANL A,#0FH
	CALL DISPCHAR
	RET

DISPCHAR1:
	MOV PAGE1,#0BAH
	MOV COLUMN,R1
	MOV CHARC,A	;WRITE A CHINESE(16X16 DOTS)转	
	LCALL NUMBERR
	RET
DISPBYTE1:
	MOV R2,A
	RR  A
	RR  A
	RR  A
	RR  A
	ANL A,#0FH
	CALL DISPCHAR1
	MOV A,R1
	ADD A,#8
	MOV R1,A
	MOV A,R2
	ANL A,#0FH
	CALL DISPCHAR1
	RET

DISPCHAR2:
	MOV PAGE1,#0B8H
	MOV COLUMN,R1
	MOV CHARC,A	;WRITE A CHINESE(16X16 DOTS)转	
	LCALL NUMBERL
	RET
DISPBYTE2:
	MOV R2,A
	RR  A
	RR  A
	RR  A
	RR  A
	ANL A,#0FH
	CALL DISPCHAR2
	MOV A,R1
	ADD A,#8
	MOV R1,A
	MOV A,R2
	ANL A,#0FH
	CALL DISPCHAR2
	RET
	
;%^^^^^^^^^^^^^^^^^^^^^^^液晶显示工具程序集^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^%
CHINAR:     ;左汉字
	MOV A,CHARC	;CHAR CODE IN *.LIB
	MOV DPTR,#TABLE1
	MOV B,#032
	MUL AB
	ADD A,DPL
	MOV DPL,A
	MOV A,B
	ADDC A,DPH
	MOV DPH,A
	MOV R5,#32
	MOV A,PAGE1
	LCALL WMI
	MOV A,COLUMN
	LCALL WMI

CHL1:
    	MOV A,#00H
	MOVC A,@A+DPTR
	LCALL WMD
	INC DPTR
	DEC R5
	CJNE R5,#16,CHL1
	INC PAGE1
	MOV A,PAGE1
	LCALL WMI
	MOV A,COLUMN
	LCALL WMI
CHL2:
        MOV A,#00H
	MOVC A,@A+DPTR
	LCALL WMD
        INC DPTR
	DJNZ R5,CHL2
	RET

NUMBERR:        ;左数字
	MOV A,CHARC	;CHAR CODE IN *.LIB
	MOV DPTR,#TABLE
	MOV B,#016
	MUL AB
	ADD A,DPL
	MOV DPL,A
	MOV A,B
	ADDC A,DPH
	MOV DPH,A
	MOV R5,#16
	MOV A,PAGE1
	LCALL WMI
	MOV A,COLUMN
	LCALL WMI

NUML1:
        MOV A,#00H
	MOVC A,@A+DPTR
	LCALL WMD
        INC DPTR
	DEC R5
	CJNE R5,#8,NUML1
	INC PAGE1
	MOV A,PAGE1
	LCALL WMI
	MOV A,COLUMN
	LCALL WMI
NUML2:
        MOV A,#00H
	MOVC A,@A+DPTR
	LCALL WMD
        INC DPTR
	DJNZ R5,NUML2
	RET
NUMBERL:   ;右数字
	MOV A,CHARC	;CHAR CODE IN *.LIB
	MOV DPTR,#TABLE
	MOV B,#016
	MUL AB
	ADD A,DPL
	MOV DPL,A
	MOV A,B
	ADDC A,DPH
	MOV DPH,A
	MOV R5,#16
	MOV A,PAGE1	  ;	页设置
	LCALL WSI
	MOV A,COLUMN
	LCALL WSI
NUMR1:
    	MOV A,#00H
	MOVC A,@A+DPTR
	LCALL WSD
	INC DPTR
	DEC R5
	CJNE R5,#8,NUMR1
	INC PAGE1
	MOV A,PAGE1
	LCALL WSI
	MOV A,COLUMN
	LCALL WSI
NUMR2:
    	MOV A,#00H
	MOVC A,@A+DPTR
	LCALL WSD
	INC DPTR
	DJNZ R5,NUMR2
	RET
CHINAL:         ;右汉字
	MOV A,CHARC	;CHAR CODE IN *.LIB
	MOV DPTR,#TABLE1
	MOV B,#032
	MUL AB
	ADD A,DPL
	MOV DPL,A
	MOV A,B
	ADDC A,DPH
	MOV DPH,A
	MOV R5,#32
	MOV A,PAGE1
	LCALL WSI
	MOV A,COLUMN
	LCALL WSI

CHR1:
        MOV A,#00H
	MOVC A,@A+DPTR
	LCALL WSD
	INC DPTR
	DEC R5
	CJNE R5,#16,CHR1
	INC PAGE1
	MOV A,PAGE1
	LCALL WSI
	MOV A,COLUMN
	LCALL WSI
CHR2:
       MOV A,#00H
	MOVC A,@A+DPTR
	LCALL WSD
	INC DPTR
	DJNZ R5,CHR2
	RET
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

BLACK1:
	MOV R2,#04H
	MOV R1,#0B8H
B12:	MOV R0,#61
	MOV A,R1
	LCALL WMI
	LCALL WSI
	MOV A,#00H
	LCALL WMI
	LCALL WSI
B11:	MOV A,#0FFH
	LCALL WMD
	LCALL WSD
	DJNZ R0,B11
	INC R1
	DJNZ R2,B12
	RET
;**********************************************
WHITE1:				;清屏CLEAR SCREEN
	MOV R2,#04H
	MOV R1,#0B8H
W2:	MOV R0,#61
	MOV A,R1		;SET PAGE
	LCALL WMI
	LCALL WSI
	MOV A,#00H		;SET COLUMN
	LCALL WMI
	LCALL WSI
W1:	MOV A,#00H
	LCALL WMD
	LCALL WSD
	DJNZ R0,W1
	INC R1
	DJNZ R2,W2
	RET
;**********************************************


INITM:
	MOV	   A,#0E2H
	LCALL	WMI			;RESET MASTER
	LCALL	WSI			;RESET SLAVE
	MOV	   A,#0AEH
	LCALL	WMI			;OFF MASTER DISPLAY
	LCALL	WSI			;OFF SLAVE DISPLAY
	MOV	   A,#0A4H
	LCALL	WMI			;OFF MASTER STATIC DRIVE	 关闭静态显示;
	LCALL	WSI			;OFF SLAVE STATIC DRIVE
	MOV	A,#0A9H
	LCALL	WMI			;MASTER SELECT 1/32 DUTY
	LCALL	WSI			;SLAVE SELECT 1/32 DUTY
	MOV	   A,#0A0H
	LCALL	WMI			;MASTER ADC SELECT:RIGHTWARD OUTPUT			设置显示方向 正向;
	LCALL	WSI			;SLAVE ADC SELECT:RIGHTWARD OUTPUT
	MOV	   A,#0EEH
	LCALL	WMI			;MASTER READ MODIFY WRITE OFF						  关闭“读修改写”模式
	LCALL	WSI			;SLAVE READ MODIFY WRITE OFF
	MOV	   A,#0C0H
	LCALL	WMI			;MASTER DISPLAY START LINE:0							  设置起始的行数为0
	LCALL	WSI			;SLAVE DISPLAY START LINE :0
	MOV	   A,#00H
	LCALL	WMI			;MASTER COLUMN ADDRESS OF DISPLAY RAM SET					起始的列数为0;
	LCALL	WSI			;SLAVE COLUMN ADDRESS OF DISPLAY RAM SET
	MOV	   A,#0AFH
	LCALL	WMI			;ON DISPLAY MASTER						 开显示和关显示就差最后一位的1;
	LCALL	WSI			;ON DISPLAY SLAVE
	RET

;**********************************************
WMI:
	CLR  RS
	CLR  RS
	CLR  E2
	CLR  E2
	SETB E1
	SETB E1
	MOV  p0,A
	MOV  p0,A
	CLR  E1
	CLR  E1
	RET
;**********************************************
WSI:	
	CLR  RS
	CLR  RS
	CLR  E1
	CLR  E1
	SETB E2
	SETB E2
	MOV  p0,A
	MOV  p0,A
	CLR  E2
	CLR  E2
	RET
;**********************************************
WMD:	SETB RS
	SETB RS
	CLR  E2
	CLR  E2
	SETB E1
	SETB E1
	MOV  p0,A
	MOV  p0,A
	CLR  E1
	CLR  E1
	RET
;**********************************************
WSD:	SETB RS
	SETB RS
	CLR  E1
	CLR  E1
	SETB E2
	SETB E2
	MOV  p0,A
	MOV  p0,A
	CLR  E2
	CLR  E2
        RET
;**********************************************

MS200:
	MOV R4,#00H
MS10:	MOV R3,#0AAH
MS1:	NOP
	NOP
	DJNZ R3,MS1
	DJNZ R4,MS10
	RET

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


CONFIG:		DB	0x4c, 0x0c, 0x44, 0x8, 0x8, 0xDD, 0xDD, 0xDD, 0xDD, 0x58
TX_BUF:		DB	0x09,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20;	10111011B;A
		DB	0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00; 				B 
TX_ADDRESS:	DB	0xCC,0xCC,0xCC,0xCC

TRANSTABLE:
	DB 0X0D,0X0E,0X0F,0X0C,0X09,0X0A,0X0B,0X08
	DB 0X05,0X06,0X07,0X04,0X01,0X02,0X03,0X00
TABLE:
DB		000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H;	;0
DB		000H,010H,010H,0F8H,000H,000H,000H,000H,000H,020H,020H,03FH,020H,020H,000H,000H;	;1
DB		000H,070H,008H,008H,008H,088H,070H,000H,000H,030H,028H,024H,022H,021H,030H,000H;	;2
DB		000H,030H,008H,088H,088H,048H,030H,000H,000H,018H,020H,020H,020H,011H,00EH,000H;	;3
DB		000H,000H,0C0H,020H,010H,0F8H,000H,000H,000H,007H,004H,024H,024H,03FH,024H,000H		;4
DB  		000H,0F8H,008H,088H,088H,008H,008H,000H,000H,019H,021H,020H,020H,011H,00EH,000H	 	;5
DB  		000H,0E0H,010H,088H,088H,018H,000H,000H,000H,00FH,011H,020H,020H,011H,00EH,000H		;6
DB  		000H,038H,008H,008H,0C8H,038H,008H,000H,000H,000H,000H,03FH,000H,000H,000H,000H		;7
DB		000H,070H,088H,008H,008H,088H,070H,000H,000H,01CH,022H,021H,021H,022H,01CH,000H;	;8
DB		000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,000H,031H,022H,022H,011H,00FH,000H;	;9
DB		0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20;	;A
DB		0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00;	;B
DB		0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00		;C
DB		0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00	   	;D
DB		0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00		;E
DB		0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00	 	;F



TABLE0:
;--  文字:  0  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,00FH,010H,020H,020H,010H,00FH,000H
;--  文字:  1  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,010H,010H,0F8H,000H,000H,000H,000H,000H,020H,020H,03FH,020H,020H,000H,000H
;--  文字:  2  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,070H,008H,008H,008H,088H,070H,000H,000H,030H,028H,024H,022H,021H,030H,000H
;--  文字:  3  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,030H,008H,088H,088H,048H,030H,000H,000H,018H,020H,020H,020H,011H,00EH,000H
;--  文字:  4  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,000H,0C0H,020H,010H,0F8H,000H,000H,000H,007H,004H,024H,024H,03FH,024H,000H
;--  文字:  5  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,0F8H,008H,088H,088H,008H,008H,000H,000H,019H,021H,020H,020H,011H,00EH,000H
;--  文字:  6  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,0E0H,010H,088H,088H,018H,000H,000H,000H,00FH,011H,020H,020H,011H,00EH,000H
;--  文字:  7  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,038H,008H,008H,0C8H,038H,008H,000H,000H,000H,000H,03FH,000H,000H,000H,000H
;--  文字:  8  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,070H,088H,008H,008H,088H,070H,000H,000H,01CH,022H,021H,021H,022H,01CH,000H
;--  文字:  9  --
;--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --
DB  000H,0E0H,010H,008H,008H,010H,0E0H,000H,000H,000H,031H,022H,022H,011H,00FH,000H
;A:
DB 	0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20
;B
DB	0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00
;C:
DB	0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00
;D;
DB	0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00
;E
DB	0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00
;F
DB	0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00

TABLE1:
//对齐方式:左上
//横向取模 高位在左

⌨️ 快捷键说明

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