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

📄 cc2500-dongle-rx-v40.asm

📁 这个是CC2500在em78p447的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*****************************************************************
INDF	==	0X00;INDIRECT ADDRESSING REGISTER
TCC	==	0X01;TIME CLOCK/TIMER
PC	==	0X02;PROGRAM COUNTER & STACK
STATUS	==	0X03
	C	==	0
	DC	==	1
	Z	==	2
	P	==	3
	T	==	4
	PS0	==	5
	PS1	==	6
	GP	==	7
FSR	==	0X04		;RAM SELECT REGISTER
PORT5	==	0X05
	CSN		EQU	0
	GDO0	EQU	1
	GDO2	EQU	2
	SI		EQU	3
PORT6	==	0X06
	SO		EQU	0
	SCLK	EQU	1
	_LED	EQU	2
	
	
PORT7	==	0X07

ISR	==	0X3F
	TCIF	==	0
	EXIF	==	3
IOCB	==	0X0B
IOCE	==	0X0E
IOCF	==	0X0F
;*****************=====*****************************
TEMP1		EQU		0X08
ADDR		EQU		0X09
DATA0		EQU		0X0A
RW_COUNT	EQU		0X0B
TEMP0		EQU		0X0D
FLAG		EQU		0X0E
	RX_FIFO_FLAG	EQU	0
rand		equ		0x0f
rand1		equ		0x10
rand_h		equ		0x11
rand_l		equ		0x12
;*****************BANK0*****************************
PK_TX_LENGH	EQU		0X20
RRX_MODE	EQU		0X21
RRX_SMALL	EQU		0X22
RRX_BIG		EQU		0X23

RF_STATUS	EQU		0X25
PK_RX_LENGH	EQU		0X26
RTX_MODE     EQU	0X27			;these bytes used to commucate with RF
RTX_KEY1     EQU	0X28			;DO NOT MOVE REG!!!!!!!!
RTX_KEY2     EQU	0X29			;DO NOT MOVE REG!!!!!!!!
RTX_RX       EQU	0X2A			;DO NOT MOVE REG!!!!!!!!
RTX_RY       EQU	0X2B			;DO NOT MOVE REG!!!!!!!!
RTX_LX       EQU	0X2C			;DO NOT MOVE REG!!!!!!!!
RTX_LY       EQU	0X2D			;DO NOT MOVE REG!!!!!!!!
RTX_RIGHT    EQU	0X2E			;DO NOT MOVE REG!!!!!!!!
RTX_LEFT     EQU	0X2F			;DO NOT MOVE REG!!!!!!!!
RTX_UP       EQU	0X30			;DO NOT MOVE REG!!!!!!!!
RTX_DOWN     EQU	0X31			;DO NOT MOVE REG!!!!!!!!
RTX_TRIANGLE EQU	0X32			;DO NOT MOVE REG!!!!!!!!
RTX_CIRCLE   EQU	0X33			;DO NOT MOVE REG!!!!!!!!
RTX_CROSS    EQU	0X34			;DO NOT MOVE REG!!!!!!!!
RTX_SQUARE   EQU	0X35			;DO NOT MOVE REG!!!!!!!!
RTX_L1       EQU	0X36			;DO NOT MOVE REG!!!!!!!!
RTX_R1       EQU	0X37			;DO NOT MOVE REG!!!!!!!!
RTX_L2       EQU	0X38			;DO NOT MOVE REG!!!!!!!!
RTX_R2       EQU	0X39			;DO NOT MOVE REG!!!!!!!!
RSSI		 EQU	0X3a
LQI			EQU		0X3B









;*****************************************************************
        ORG 0X00
		JMP RESET
;*****************************************************************	
		ORG 0X01
		RETI
;*****************************************************************	
		ORG 0X02
		RETI

RESET:
		CALL	INIT_MCU

		CALL	POWER_RESET		

		CALL	CONFIG_RF
		JMP		$+1
		JMP		$+1
		JMP		$+1
		JMP		$+1
		JMP		$+1

		CALL	CHECK_RF_REG		
		XOR		A,@0XFF
		JBC		STATUS,Z
		JMP		RESET
		
		CALL	TCCEQ1MS
		JBS		ISR,TCIF
		JMP		$-1		
		
		MOV	A,@0XFB					;0dB
		MOV	DATA0,A
		MOV	A,@0X3E
		MOV	TEMP0,A
		MOV	ADDR,A
		CALL	WRITE_SINGLE_BYTE	
		
		CALL	TCCEQ1MS
		JBS		ISR,TCIF
		JMP		$-1		
		
		MOV		A,@0X3A				;FLUSH RX FIFO
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE	
		
		mov		a,@0x55
		mov		rand_h,a
		mov		a,@0x11
		mov		rand_l,a
MAIN:
		call	randm

		MOV		A,@0X34				;RX
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE			
		
		
		CALL	TCCEQ10MS
		JBC		PORT5,GDO2
		JMP		RX_FIFO		
		JBS		ISR,TCIF
		JMP		$-3	
		
		CALL	TCCEQ3MS
		JBC		PORT5,GDO2
		JMP		RX_FIFO		
		JBS		ISR,TCIF
		JMP		$-3	
		
RF_IDLE:		
		MOV		A,@0X36				;idle
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE	

		MOV		A,@0X3A				;FLUSH RX FIFO
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE	
		
		CALL	TCCEQ1MS
		JBS		ISR,TCIF
		JMP		$-1	
		JMP		MAIN


RX_FIFO:			
		
		CALL	READ_BURST_22BYTE	
		XOR		A,@0X00				;A==00H LENGTH IS WRONG
		JBC		STATUS,Z
		JMP		RF_IDLE
		CALL	CAL_DATA
		
		MOV		A,@0X36				;idle
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE	
		
		MOV		A,@0X3A				;FLUSH RX FIFO
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE	
		
		MOV		A,PORT6
		XOR		A,@0X04
		MOV		PORT6,A
		
		;MOV		A,@0X36				;idle
		;MOV		TEMP0,A
		;CALL	WRITE_COMMAND_STROBE			
		
		CALL	TCCEQ1MS
		JBS		ISR,TCIF
		JMP		$-1	
		
		MOV		A,@0X55
		MOV		RRX_MODE,A
		MOV		RRX_SMALL,A
		MOV		RRX_BIG,A
		BC		STATUS,C
		RLC		RRX_BIG	
		
		MOV		A,@0X3F
		MOV		ADDR,A		
		CALL	WRITE_BURST_3BYTE	
		

		
		MOV		A,@0X35					;TX
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE			
		
		CALL	TCCEQ1MS
		JBC		PORT5,GDO0
		JMP		$+4
		JBS		ISR,TCIF
		JMP		$-3
		JMP		MAIN
		
		CALL	TCCEQ1MS
		JBS		PORT5,GDO0
		JMP		$+4		
		JBS		ISR,TCIF
		JMP		$-3		
		JMP		MAIN
		
		MOV		A,PORT7
		XOR		A,@0X08
		MOV		PORT7,A
		
		MOV		A,@0X36				;idle
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE			
		
		CALL	TCCEQ1MS
		JBS		ISR,TCIF
		JMP		$-1	
		
		JMP		MAIN
		
;***********************************************
;
;***********************************************
CAL_DATA:
		MOV		A,PK_RX_LENGH
		XOR		A,@0X13
		JBS		STATUS,Z
		JMP		CAL_DATA_ERROR
		MOV		A,RTX_MODE
		XOR		A,@0X87
		JBS		STATUS,Z
		JMP		CAL_DATA_ERROR
		MOV		A,RTX_R2
		XOR		A,@0X55
		JBC		STATUS,Z
		RET	
CAL_DATA_ERROR:		
		BC		PORT7,2
		RET
		
;*******************************************
;setup 1MS timeout to TCC
;*******************************************
TCCEQ50US:
	MOV A,@(256-1)	;f=XTAL/2/256/47
	MOV TCC,A		;XTAL=12MHz, T=1MS
	MOV	A,@0XFE		;clear TCIF 1st
	MOV	ISR,A	
	RET
;*******************************************
;setup 1MS timeout to TCC
;*******************************************
TCCEQ1MS:
	MOV A,@(256-24)	;f=XTAL/2/256/47
	MOV TCC,A		;XTAL=12MHz, T=1MS
	MOV	A,@0XFE		;clear TCIF 1st
	MOV	ISR,A	
	RET
;*******************************************
;setup 1MS timeout to TCC
;*******************************************
TCCEQ3MS:
	MOV A,@(256-24-24-24)	;f=XTAL/2/256/47
	MOV TCC,A		;XTAL=12MHz, T=1MS
	MOV	A,@0XFE		;clear TCIF 1st
	MOV	ISR,A	
	RET	
;***************************************
;setup 10MS timeout to TCC
;***************************************
TCCEQ10MS:
	MOV A,@(256-234);f=XTAL/2/256/234,XTAL=12MHz, T=10MS
	MOV TCC,A
	MOV	A,@0XFE		;clear TCIF 1st
	MOV	ISR,A	
	RET	
;***************************************************
;INITIALIZE THE MCU 
;***************************************************
INIT_MCU:
		DISI				 
    	MOV 	A,@0X11
   	 	IOW 	IOCE        ;DISABLE WATCH DOG TIMER

        MOV 	A,@0X07		;TCC=1/256
        CONTW           	;set PORT6 as  pull-up
		MOV 	A,@0X01		;disable TCC interrupt
        IOW 	IOCF
		MOV		A,@0XFF
		IOW		IOCB
		
		MOV 	A,@0B11111111	 
		MOV 	PORT5,A
		MOV 	A,@0B11110110	 
		IOW 	PORT5

		MOV 	A,@0B11111101	 
		MOV 	PORT6,A
		MOV 	A,@0B11111001	 
		IOW 	PORT6
		
		MOV		A,@0B11110111
		MOV		PORT7,A	
		MOV		A,@0B11110011
		IOW		PORT7


		MOV		A,@0X0A
		MOV		FSR,A
CLR_GENERAL_REG:			;CLEAR ALL OF THE USER'S RAM
		CLR		INDF
		INC		FSR
		MOV		A,FSR
		JBC		STATUS,Z
		JMP		CLR_GENERAL_REG_END
		AND		A,@0B00111111
		JBS		STATUS,Z
		JMP		CLR_GENERAL_REG
		MOV		A,@0X0A
		ADD		FSR,A
		JMP		CLR_GENERAL_REG
CLR_GENERAL_REG_END:
	
		RET
;**********************************************
;
;
;**********************************************
CONFIG_RF:
		CLR		ADDR
		CLR		TEMP1	;RF REG COUNT
CONFIG_RF_LOOP:		
		MOV		A,TEMP1
		CALL	CONFIG_TABLE
		MOV		DATA0,A
		MOV		A,ADDR
		MOV		TEMP0,A
		CALL	WRITE_SINGLE_BYTE
		INC		ADDR
		INC		TEMP1
		MOV		A,TEMP1
		XOR		A,@0X27
		JBS		STATUS,Z
		JMP		CONFIG_RF_LOOP
		RET
;**********************************************
;
;
;**********************************************	
POWER_RESET:
		BS		PORT5,CSN
		BS		PORT6,SCLK
		JMP		$+1
		JMP		$+1
		JMP		$+1
		JMP		$+1
		JMP		$+1
		JMP		$+1
		BC		PORT5,CSN
		JMP		$+1
		JMP		$+1
		JMP		$+1
		JMP		$+1
		JMP		$+1
		JMP		$+1
		BS		PORT5,CSN

		CALL	TCCEQ50US
		JBS		ISR,TCIF
		JMP		$-1	
		
		BC		PORT5,CSN
		JBC		PORT6,SO
		JMP		$-1
		
		MOV		A,@0X30				;RESET
		MOV		TEMP0,A
		CALL	WRITE_COMMAND_STROBE	
		
		JBC		PORT5,GDO2
		JMP		$-1		
		RET	

;************************************************
CHECK_RF_REG:
		CLR		ADDR
		CLR		TEMP1	;RF REG COUNT
CHECK_RF_REG_LOOP:		
		MOV		A,ADDR
		MOV		TEMP0,A
		CALL	READ_SINGLE_BYTE		
		MOV		A,TEMP1
		CALL	CONFIG_TABLE
		XOR		A,DATA0
		JBS		STATUS,Z
		JMP		CHECK_RF_REG_ERROR
		INC		ADDR
		INC		TEMP1
		MOV		A,TEMP1
		XOR		A,@0X27
		JBS		STATUS,Z
		JMP		CHECK_RF_REG_LOOP
		MOV		A,@0X00
CHECK_RF_REG_END:		
		RET		

⌨️ 快捷键说明

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