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

📄 rf73c1.c

📁 以C语言和Java语言、嵌入式开发、算法实现为主
💻 C
📖 第 1 页 / 共 2 页
字号:
			{goto	RCV2;}
			else	{NOP();}
		}
RCV2:
	CNT0=0;
	CNT1=0;
RCV3:
	if(RFIN)	{goto	RCV6;}
	else	{NOP();}	asm("MOVLW	5 ;(MAX+2559)/10/256");	// ?
	CNT0++;
	if(!ZERO)	{goto	RCV5;}
	else	{NOP();}
	CNT1++;
	asm("SUBWF	_CNT1,W");
	if(CARRY)	{goto	RMT_0;}
	else	{NOP();}RCV5:
	asm("CLRWDT");
	goto	RCV3;
RCV6:
	CARRY=0;

	CNT1=CNT1>>1;
	CNT0=CNT0>>1;
	CNT1=CNT1>>1;
	CNT0=CNT0>>1;
	CNT1=CNT1>>1;
	CNT0=CNT0>>1;

	if(CNT0<MIN/80)	{goto	RMT_0;}
	else	{NOP();}
	CNT1=NBITS;
	CNT2=CNT0;
	CNT2-=5;
	goto	DL1;

RCV8:
	CNT2=CNT0-1;
// RCV9:
	for(;CNT2>0;CNT2--)
	{
		if(RFIN)	{goto	RCV11;}
		else	{NOP();}
		asm("CLRWDT");
	}
	CNT2=CNT0<<1;
// RCV10:
	for(;CNT2>0;CNT2--)
	{
		if(RFIN)	{goto	RMT01;}
		else	{NOP();}
		asm("CLRWDT");
	}
	CNT2=0xff;
// RCV10A:
	for(;CNT2>0;CNT2--)
	{
		if(RFIN)	{goto	RCV11;}
		else	{goto	RMT01;}
	}
RCV11:
	CNT2=CNT0;
	CNT2--;
	CNT2--;
	NOP();
	NOP();

DL1:
	for(;CNT2>0;CNT2--)
	{
		asm("CLRWDT");
	}
	if(!RFIN)	{goto	RMT01;}
	else	{NOP();}
	CNT2=CNT0;
	CNT2--;
	CARRY=0;
	CNT2=CNT2<<1;
	NOP();
	NOP();
// DL2:
	for(;CNT2>0;CNT2--)
	{
		asm("CLRWDT");
	}

	asm("BCF	_FLAGS,0");
	if(!RFIN)	{asm("BSF	_FLAGS,0");}
	else	{NOP();}
	CNT2=CNT0;
	CARRY=0;
	CNT2=CNT2<<1;
	CNT2-=5;
	CARRY=0;

	rot_shift();

	if(FLAGS&&0X01)	{asm("BSF	_CSR7,7");}
	else	{NOP();}// DL3:
	for(;CNT2>0;CNT2--)
	{
		asm("CLRWDT");
	}
	if(RFIN)	{goto	RMT0;}
	else	{NOP();}
	tst_rtcc();

	CNT1--;
	if(CNT1)	{goto	RCV8;}
	else	{goto	RMT1;}

RMT_0:
	asm("BSF	_CNT1,4");
RMT0:
	CNT1--;
RMT01:
	tst_rtcc();

	if(CNT1>=9)	{return;}
	else	{NOP();}// RMT2:

	for(;CNT1>0;CNT1--)
	{
		rot_shift();
	}
	asm("CLRF	_CSR7");
	asm("BSF	_FLAGS,5");
RMT1:
	CARRY=0;
	asm("MOVF	_SREG,W");
	asm("XORLW	0CAH");
	if(ZERO)	{return;}
	else	{NOP();}
	if(FLAGS&&0X80)	{O_RFLED=1;}
	else	{NOP();}	CARRY=0;

	return;
}
/*=====================================*/
void tst_rtcc(void)
{
	asm("CLRWDT");

#asm	// a10
	MOVF	_STATUS,W
	XORWF	_TMR0,W
	ANDLW	080H
#endasm	// a10n

	if(ZERO)	{return;}
	else	{NOP();}
#asm	// a11
	MOVF	_TMR0,W
	ANDLW	080H
	IORWF	_STATUS
#endasm	// a11n

	CNT_LW++;
	if(ZERO)	{CNT_HI++;}
	else	{NOP();}
	TRISC=RDCFG;

	if(!TMR0^0X80)	{return;}
	else	{NOP();}
	if(SREG^PASS1)	{O_RFLED=1;}
	else	{NOP();}
	if(CNT_LW&&0X08)
	{
		asm("BCF	_FLAGS,7");
		OLD_BUT=0;
	}
	else	{NOP();}
	if(SREG^NORMAL)	{return;}
	else	{NOP();}
	if(!CNT_HI&&0X04)	{return;}
	else	{NOP();}
	CSR3=0;
	OLD_BUT=0;
	FLAGS=0;
	CSR1=0;
	CSR0=0;

	SREG=NORMAL;

	return;	// ?
}
/*=====================================*/
void tx_lookup(void)
{
	asm("CLRWDT");

	tx_lookup2();
	asm("MOVWF	_ADDRESS");
	return;
}
/*=====================================*/
void rot_shift(void)
{
	asm("CLRWDT");
#asm	// a12
        RRF     _CSR7
        RRF     _CSR6
        RRF     _CSR5
        RRF     _CSR4
        RRF     _CSR3
        RRF     _CSR2
        RRF     _CSR1
        RRF     _CSR0
#endasm	// a12n
	return;
}
/*=====================================*/
void chk_pass2(void)
{
	asm("CLRWDT");

	asm("MOVLW	0CAH");
	asm("XORWF	_SREG,W");
	return;
}
/*=====================================*/
void ee_read1(void)
{
	asm("CLRWDT");

	OUTBYT=ADDRESS;
	asm("BSF	_OUTBYT,7");
	sendc();

	TRISC=RDCFG;

	CNT1=16;
	for(;CNT1>0;CNT1--)
	{
		CLK=1;
		TMP2=TMP2<<1;
		asm("BCF	_TMP2,0");
		if(DIO)	{asm("BSF	_TMP2,0");}
		else	{NOP();}
		CLK=0;
		TMP1=TMP1<<1;
	}
	CS=0;

	CNT1=16;
	for(;CNT1>0;CNT1--)
	{
		rotl();
		OUTBYT=TMP1&&0X07;
#asm	// a12
	MOVLW	(EE_KEY-KEYBASE)
	ADDWF	_OUTBYT,W
#endasm	// a12n

		key_lookup();
		asm("XORWF	_TMP2");
	}
	return;
}
/*=====================================*/
void decrypt(void)
{
	asm("CLRWDT");

	CNT1=11+1;
	for(;CNT1>0;CNT1--)
	{
		CNT0=48;
		for(;CNT0>0;CNT0--)
		{
			asm("CLRWDT");

			if(CNT1^1)	{goto	ROTATE_KEY;}
			else	{NOP();}

			CARRY=0;
			if(HOP3&&0X08)	{OUTBYT=0X10;}
			else	{OUTBYT=1;}

			if(CSR1&&0X01)	{OUTBYT=OUTBYT<<2;}
			else	{NOP();}

			if(HOP1&&0X01)	{OUTBYT=OUTBYT<<1;}
			else	{NOP();}

#asm	// a13
	MOVLW   0
	BTFSC   _CSR3,1
	IORLW   2
	BTFSC   _CSR3,6
	IORLW   4

	ADDWF   _PCL

	MOVLW   02EH
	GOTO    TABLE_END

	MOVLW   074H
	GOTO    TABLE_END

	MOVLW   05CH
	GOTO    TABLE_END

	MOVLW   03AH
	GOTO    TABLE_END

TABLE_END:
	ANDWF   _OUTBYT
	MOVLW   0
	BTFSS   3,2
	MOVLW   10000000B

	XORWF   _CSR1,W
	XORWF   _CSR3,W
	XORWF   _TMP1,W

	MOVWF   _OUTBYT
#endasm	// a13n

			OUTBYT=OUTBYT<<1;
			HOP1=HOP1<<1;
			CSR1=CSR1<<1;
			HOP3=HOP3<<1;
			CSR3=CSR3<<1;

ROTATE_KEY:
			CARRY=0;
			if(KEY7&&0X40)	{CARRY=1;}
			else	{NOP();}

			KEY0=KEY0<<1;
			TMP1=TMP1<<1;
			KEY2=KEY2<<1;
			KEY3=KEY3<<1;
			KEY4=KEY4<<1;
			KEY5=KEY5<<1;
			KEY6=KEY6<<1;
			KEY7=KEY7<<1;
		}
	}
	return;
}
/*=====================================*/
void ee_write1(void)
{
	asm("CLRWDT");

	for(CNT1=16;CNT1>0;CNT1--)
	{
		OUTBYT=TMP1&&0X07;

#asm	// a13
	MOVLW	(EE_KEY-KEYBASE)
	ADDWF	_OUTBYT,W
#endasm	// a13n

	key_lookup();

	asm("XORWF	_TMP2");
	rotr();
	}

	OUTBYT=0X30;
	sendc();
	CS=0;
	OUTBYT=ADDRESS;
	asm("BSF	_OUTBYT,6");
	sendc();

	for(CNT1=16;CNT1>0;CNT1--)
	{
		if(TMP1^0X80)	{DIO=1;}
		else	{DIO=0;}
		NOP();
		TMP2=TMP2<<1;
		CLK=1;
		NOP();
		TMP1=TMP1<<1;
		CLK=0;
	}
	CS=0;

	TRISC=RDCFG;

	CS=1;

	while(!DIO)
	{
		chk_timer();
	}

	CS=0;
	OUTBYT=0;
	sendc();
	ADDRESS++;

	return;
}
/*=====================================*/
void but_lookup(void)
{
	asm("CLRWDT");

#asm	// a9
	MOVF	_TXNUM,W
	ADDWF	_PCL,F
	RETLW	02H
	RETLW	03H
	RETLW	08H
	RETLW	09H
	RETLW	0AH
	RETLW	0BH
#endasm	// a9n
// AQ1 ?
}
/*=====================================*/
void key_lookup(void)
{
	asm("CLRWDT");

#asm	// a7
	ADDWF	_PCL,F

KEYBASE	EQU	$
MAS_KEY	EQU	$

	RETLW	0AFH	; MKEY_0 LSB	200505
	RETLW	018H	; MKEY_1
	RETLW	032H	; MKEY_2
	RETLW	005H	; MKEY_3
	RETLW	030H	; MKEY_4
	RETLW	004H	; MKEY_5
	RETLW	005H	; MKEY_6
	RETLW	020H	; MKEY_7 MSB

EN_KEY	EQU	$
	RETLW	0FFH
	RETLW	0FFH

EE_KEY	EQU	$
	RETLW	088H			; EKEY_0 LSB
	RETLW	077H			; EKEY_1
	RETLW	066H			; EKEY_2
	RETLW	055H			; EKEY_3
	RETLW	044H			; EKEY_4
	RETLW	033H			; EKEY_5
	RETLW	022H			; EKEY_6
	RETLW	011H			; EKEY_7 MSB

#endasm	// a7n

}
/*=====================================*/
void tx_lookup2(void)
{
	asm("CLRWDT");

#asm	// a8
	MOVF	_TXNUM,W
	ADDWF	_PCL,F
	RETLW	10H
	RETLW	18H
	RETLW	20H
	RETLW	28H
	RETLW	30H
	RETLW	38H
#endasm	// a8n

}
/*=====================================*/
void rotl(void)
{
	asm("CLRWDT");

	TMP2=TMP2<<1;
	TMP1=TMP1<<1;

	if(CARRY)	{asm("BSF	_TMP2,0");}
	else	{asm("BCF	_TMP2,0");}

	return;
}
/*=====================================*/
void sendc(void)
{
	asm("CLRWDT");

	CS=0;
	CLK=0;
	DIO=0;

	TRISC=WRCFG;

	CS=1;
	CARRY=1;

	for(CNT1=9;CNT1>0;CNT1--)
	{
		if(CARRY)	{DIO=1;}
		else	{DIO=0;}
		NOP();
		OUTBYT=OUTBYT<<1;
		CLK=1;
		NOP();
		NOP();
		CLK=0;
	}
	DIO=0;

	return;
}
/*=====================================*/
void rotr(void)
{
	asm("CLRWDT");

	TMP1=TMP1>>1;
	TMP2=TMP2>>1;
	if(CARRY)	{asm("BSF	_TMP1,7");}
	else	{asm("BCF	_TMP1,7");}

	return;
}
/*=====================================*/
void chk_timer(void)
{
	asm("CLRWDT");

	if(!TMR0&&0X80)	{return;}
	else	{NOP();}
	asm("BCF	_TMR0,7");
	CNT_LW++;
	if(ZERO)	{CNT_HI++;}
	else	{NOP();}
	if(!FLAGS&&0X10)	{CNT1=10;}
	else	{asm("BSF	_FLAGS,4");}

	if(CNT1--)	{return;}
	else	{NOP();}
	CSR3=0;
	OLD_BUT=0;
	FLAGS=0;
	CSR1=0;
	CSR0=0;

	SREG=NORMAL;

	return;	// ?
}
/*=====================================*/
/***************************************/

⌨️ 快捷键说明

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