📄 95sport2-1.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 + -