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

📄 95sport2-1.c

📁 PIC18系列与RF315MHz连接透过RF传输数值资料
💻 C
字号:
// crystal 4MHz
#include "p18f452.h"
#include "type_define.h"

#define KEY_IN		LATAbits.LATA0	//analog input
#define S0			LATAbits.LATA1	//analog output
#define S1			LATAbits.LATA2	//analog output
#define S2			LATAbits.LATA3	//analog output
#define S3			LATAbits.LATA5	//analog output

#define RB0			LATBbits.LATB0	//digital output
#define RB1			LATBbits.LATB1	//digital output
#define RB2			LATBbits.LATB2	//digital output
#define RB3			LATBbits.LATB3	//digital output
#define RB4			LATBbits.LATB4	//digital output
#define RB5			LATBbits.LATB5	//digital output
#define RB6			LATBbits.LATB6	//digital output
#define RB7			LATBbits.LATB7	//digital output

#define RC0			LATCbits.LATC0	//digital input
#define RC1			LATCbits.LATC1	//digital input
#define RC2			LATCbits.LATC2	//digital input
#define RC3			LATCbits.LATC3	//digital input
#define VT			PORTCbits.RC4	//digital input
#define KEY1		LATCbits.LATC5	//digital output
#define KEY2		LATCbits.LATC6	//digital output
#define KEY3		LATCbits.LATC7	//digital output

#define RD0			LATDbits.LATD0	//digital output
#define RD1			LATDbits.LATD1	//digital output
#define RD2			LATDbits.LATD2	//digital output
#define RD3			LATDbits.LATD3	//digital output
#define TE			LATDbits.LATD4	//digital output

#define LE0			LATEbits.LATE0	//digital output
#define LE1			LATEbits.LATE1	//digital output
#define LE2			LATEbits.LATE2	//digital output

#define DATA		LATB

#define NUMBER_SPACE	10
#define NORMAL	0
#define PLAYER	1
#define TRUE	1
#define FAULT	0
#define NO_KEY_PRESSED	0
#define SETTING_KEY		1
#define SET_MODE_KEY	2
#define CLEAR_KEY		3
#define ON_OFF_KEY		4
#define RF_TR_ENABLE	0
#define RF_TR_DISABLE	1
#define START_CHAR		0xaa

#define bit_sport_mode				flag1.bit0
#define bit_sandbag_kg_set			flag1.bit1
#define bit_sandbag_location_set	flag1.bit2
#define bit_check_even				flag1.bit5

void isr_high_code(void);
void isr_high(void);
void mcu_io_init(void);
void init_val(void);
void bcd_to_bin(void);

typedef struct
{
	unsigned bit0:1;
    unsigned bit1:1;
    unsigned bit2:1;
    unsigned bit3:1;
    unsigned bit4:1;
    unsigned bit5:1;
    unsigned bit6:1;
    unsigned bit7:1;
}uns8_flag;
uns8_flag flag1;

uns8 i,rf_re_buf,rf_re_buf_bak,rx_high8,rx_low8,receive_count,check_num,check_num_bak,check_sum;
uns16 kg;

#pragma code hi_vector=0x0008
void isr_high_code(void)
{
	_asm
		goto	isr_high
	_endasm
}
#pragma code	/* return to the default code section */

#pragma interrupt isr_high //save=PROD//,section(".tmpdata"),TABLAT,TBLPTR,PCLATH,PCLATU
void isr_high(void)
{
	if(TMR0IF && TMR0IE)	//Timer0 interrupt,1ms interrupt one time
	{
		TMR0IF=0;
	}
	if(ADIE && ADIF)
	{
		ADIF=0;
	}
	if(TMR1IE && TMR1IF)
	{
		TMR1IF=0;
	}
	if(INT0IE && INT0IF)
	{
		INT0IF=0;
	}
	if(INT1IE && INT1IF)
	{
		INT1IF=0;
	}
}	
#pragma code

void main(void)
{
	uns8 uns8_temp1,uns8_temp2;
	mcu_io_init();
	init_val();
	while(1)
	{
		if(OERR==1)
		{
			CREN=0;
			CREN=1;
		}
		if(RCIF)
		{
			rf_re_buf=RCREG;
			bit_check_even=TRUE;
			for(i=0;i<8;i++)
			{
				uns8_temp1=rf_re_buf << i;
				uns8_temp1=uns8_temp1 & 0x80;
				if(uns8_temp1!=0)
					bit_check_even=!bit_check_even;
			}
			if((RX9D==1 && bit_check_even==FAULT) || (RX9D==0 && bit_check_even==TRUE))
			{
				receive_count++;
				if(receive_count>4)
					receive_count=5;
				if(rf_re_buf==START_CHAR)
				{
					receive_count=0;
				}
				else
			    {
					uns8_temp1=rf_re_buf & 0b00001111;
					if(uns8_temp1<0x0a)
					{
						uns8_temp1=rf_re_buf & 0b11110000;
						if(uns8_temp1<0xa0)
						{
							if(receive_count==1)
							{
								check_num=rf_re_buf;
								check_sum=check_num & 0b00001111;
								uns8_temp1=check_num>>4;
								check_sum=check_sum + uns8_temp1;
							}
							else if(receive_count==2)
								 {
									rx_high8=rf_re_buf;
									uns8_temp1=rx_high8 & 0b00001111;
									check_sum=check_sum + uns8_temp1;
									uns8_temp1=rx_high8>>4;
									check_sum=check_sum + uns8_temp1;
								 }
							     else if(receive_count==3)
									  {
										rx_low8=rf_re_buf;
										uns8_temp1=rx_low8 & 0b00001111;
										check_sum=check_sum + uns8_temp1;
										uns8_temp1=rx_low8>>4;
										check_sum=check_sum + uns8_temp1;
									  }
									  else if(receive_count==4)
										   {
											uns8_temp1=rf_re_buf & 0b00001111;
											uns8_temp2=rf_re_buf>>4;
											uns8_temp2=uns8_temp2*10;
											uns8_temp1=uns8_temp1 + uns8_temp2;
											if(uns8_temp1==check_sum)
											{
												if(check_num!=check_num_bak)
												{
													bcd_to_bin();
													check_num_bak=check_num;
												}
											}
									   	   }
						}
					}
				 }
			}
			RCIF=0;
		}
	}
}

void mcu_io_init(void)
{
//I/O setting
	// PORTA setting
	PORTA=0x00;
	LATA=0x00;
	TRISA=0xff;
	// PORTB setting
	PORTB=0x00;
	LATB=0x00;
	TRISB=0x00;
	// PORTC setting
	PORTC=0x00;
	LATC=0x00;
	TRISC=0b10011111;
	// PORTD setting
	PORTD=0x00;
	LATD=0x00;
	TRISD=0x00;
	TE=RF_TR_DISABLE;
	// PORTE setting
	PORTE=0x00;
	LATE=0x00;
	TRISE=0x00;
//I/O setting

	//A/D setting
	//A/D setting

	//Timer0 setting
	//Timer0 setting

	//USART setting
	SPBRG=12;
	TXSTA=0x20;
	RCSTA=0b11110000;
	//USART setting

	//Timer1 setting
	//Timer1 setting

	//INT0 setting
	//INT0 setting

	//INT1 setting
	//INT1 setting
}

void init_val(void)
{
	rf_re_buf=0;
	i=0;
	receive_count=0;
	check_num=0;
	check_num_bak=0;
}

void bcd_to_bin(void)
{
	uns8 uns8_temp1,uns8_temp2;
	uns16 uns16_temp1;
	uns8_temp1=rx_high8>>4;
	kg=uns8_temp1*1000;
	uns8_temp1=rx_high8 & 0b00001111;
	uns16_temp1=(uns16)uns8_temp1 * 100;
	kg=kg + uns16_temp1;

	uns8_temp1=rx_low8>>4;
	uns8_temp1=uns8_temp1*10;
	uns8_temp2=rx_low8 & 0b00001111;
	uns8_temp1=uns8_temp1 + uns8_temp2;
	kg=kg + uns8_temp1;
}

⌨️ 快捷键说明

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