www.pudn.com > Moniterrfid.rar > rfid.$$$
//****************************************************************************************** A 1 :V17
// 头文件处理 A 2 :
//****************************************************************************************** A 3 :
#include <18F252.H> A 4 :
//////// Standard Header file for the PIC18F252 device //////////////// B 1 :I1
#device PIC18F252 B 2 :
#nolist B 3N:X0
//////// Program memory: 16384x16 Data RAM: 1536 Stack: 31 B 4N:
//////// I/O: 23 Analog Pins: 5 B 5N:
//////// Data EEPROM: 256 B 6N:
//////// C Scratch area: 00 ID Location: 2000 B 7N:
//////// Fuses: LP,XT,HS,RC,EC,EC_IO,H4,RC_IO,PROTECT,NOPROTECT,OSCSEN B 8N:
//////// Fuses: NOOSCSEN,NOBROWNOUT,BROWNOUT,WDT1,WDT2,WDT4,WDT8,WDT16,WDT32 B 9N:
//////// Fuses: WDT64,WDT128,WDT,NOWDT,BORV20,BORV27,BORV42,BORV45,PUT,NOPUT B 10N:
//////// Fuses: CCP2C1,CCP2B3,NOSTVREN,STVREN,NODEBUG,DEBUG,NOLVP,LVP,WRT B 11N:
//////// Fuses: NOWRT,NOWRTD,WRTD,NOWRTB,WRTB,WRTC,NOWRTC,CPD,NOCPD,CPB B 12N:
//////// Fuses: NOCPB,EBTR,NOEBTR,EBTRB,NOEBTRB B 13N:
//////// B 14N:
////////////////////////////////////////////////////////////////// I/O B 15N:
// Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(), B 16N:
// PORT_B_PULLUPS(), INPUT(), B 17N:
// OUTPUT_LOW(), OUTPUT_HIGH(), B 18N:
// OUTPUT_FLOAT(), OUTPUT_BIT() B 19N:
// Constants used to identify pins in the above are: B 20N:
B 21N:
#define PIN_A0 31744 B 22N:
#define PIN_A1 31745 B 23N:
#define PIN_A2 31746 B 24N:
#define PIN_A3 31747 B 25N:
#define PIN_A4 31748 B 26N:
#define PIN_A5 31749 B 27N:
#define PIN_A6 31750 B 28N:
B 29N:
#define PIN_B0 31752 B 30N:
#define PIN_B1 31753 B 31N:
#define PIN_B2 31754 B 32N:
#define PIN_B3 31755 B 33N:
#define PIN_B4 31756 B 34N:
#define PIN_B5 31757 B 35N:
#define PIN_B6 31758 B 36N:
#define PIN_B7 31759 B 37N:
B 38N:
#define PIN_C0 31760 B 39N:
#define PIN_C1 31761 B 40N:
#define PIN_C2 31762 B 41N:
#define PIN_C3 31763 B 42N:
#define PIN_C4 31764 B 43N:
#define PIN_C5 31765 B 44N:
#define PIN_C6 31766 B 45N:
#define PIN_C7 31767 B 46N:
B 47N:
////////////////////////////////////////////////////////////////// Useful defines B 48N:
#define FALSE 0 B 49N:
#define TRUE 1 B 50N:
B 51N:
#define BYTE int B 52N:
#define BOOLEAN short int B 53N:
B 54N:
#define getc getch B 55N:
#define fgetc getch B 56N:
#define getchar getch B 57N:
#define putc putchar B 58N:
#define fputc putchar B 59N:
#define fgets gets B 60N:
#define fputs puts B 61N:
B 62N:
////////////////////////////////////////////////////////////////// Control B 63N:
// Control Functions: RESET_CPU(), SLEEP(), RESTART_CAUSE() B 64N:
// Constants returned from RESTART_CAUSE() are: B 65N:
B 66N:
#define WDT_TIMEOUT 4 B 67N:
#define MCLR_FROM_SLEEP 8 B 68N:
#define NORMAL_POWER_UP 12 B 69N:
#define BROWNOUT_RESTART 14 B 70N:
B 71N:
////////////////////////////////////////////////////////////////// Timer 0 B 72N:
// Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER0(), B 73N:
// SET_TIMER0() or SET_RTCC(), B 74N:
// GET_TIMER0() or GET_RTCC() B 75N:
// Constants used for SETUP_TIMER0() are: B 76N:
#define RTCC_INTERNAL 0 B 77N:
#define RTCC_EXT_L_TO_H 32 B 78N:
#define RTCC_EXT_H_TO_L 48 B 79N:
B 80N:
#define RTCC_DIV_1 8 B 81N:
#define RTCC_DIV_2 0 B 82N:
#define RTCC_DIV_4 1 B 83N:
#define RTCC_DIV_8 2 B 84N:
#define RTCC_DIV_16 3 B 85N:
#define RTCC_DIV_32 4 B 86N:
#define RTCC_DIV_64 5 B 87N:
#define RTCC_DIV_128 6 B 88N:
#define RTCC_DIV_256 7 B 89N:
B 90N:
#define RTCC_OFF 0x80 B 91N:
B 92N:
#define RTCC_8_BIT 0x40 B 93N:
B 94N:
// Constants used for SETUP_COUNTERS() are the above B 95N:
// constants for the 1st param and the following for B 96N:
// the 2nd param: B 97N:
B 98N:
////////////////////////////////////////////////////////////////// WDT B 99N:
// Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above) B 100N:
// RESTART_WDT() B 101N:
// B 102N:
#define WDT_ON 0x100 B 103N:
#define WDT_OFF 0 B 104N:
B 105N:
////////////////////////////////////////////////////////////////// Timer 1 B 106N:
// Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1 B 107N:
// Constants used for SETUP_TIMER_1() are: B 108N:
// (or (via |) together constants from each group) B 109N:
#define T1_DISABLED 0 B 110N:
#define T1_INTERNAL 0x85 B 111N:
#define T1_EXTERNAL 0x87 B 112N:
#define T1_EXTERNAL_SYNC 0x83 B 113N:
B 114N:
#define T1_CLK_OUT 8 B 115N:
B 116N:
#define T1_DIV_BY_1 0 B 117N:
#define T1_DIV_BY_2 0x10 B 118N:
#define T1_DIV_BY_4 0x20 B 119N:
#define T1_DIV_BY_8 0x30 B 120N:
B 121N:
////////////////////////////////////////////////////////////////// Timer 2 B 122N:
// Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2 B 123N:
// Constants used for SETUP_TIMER_2() are: B 124N:
#define T2_DISABLED 0 B 125N:
#define T2_DIV_BY_1 4 B 126N:
#define T2_DIV_BY_4 5 B 127N:
#define T2_DIV_BY_16 6 B 128N:
B 129N:
////////////////////////////////////////////////////////////////// Timer 3 B 130N:
// Timer 3 Functions: SETUP_TIMER_3, GET_TIMER3, SET_TIMER3 B 131N:
// Constants used for SETUP_TIMER_3() are: B 132N:
// (or (via |) together constants from each group) B 133N:
#define T3_DISABLED 0 B 134N:
#define T3_INTERNAL 0x85 B 135N:
#define T3_EXTERNAL 0x87 B 136N:
#define T3_EXTERNAL_SYNC 0x83 B 137N:
B 138N:
#define T3_DIV_BY_1 0 B 139N:
#define T3_DIV_BY_2 0x10 B 140N:
#define T3_DIV_BY_4 0x20 B 141N:
#define T3_DIV_BY_8 0x30 B 142N:
B 143N:
////////////////////////////////////////////////////////////////// CCP B 144N:
// CCP Functions: SETUP_CCPx, SET_PWMx_DUTY B 145N:
// CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH B 146N:
// Constants used for SETUP_CCPx() are: B 147N:
#define CCP_OFF 0 B 148N:
#define CCP_CAPTURE_FE 4 B 149N:
#define CCP_CAPTURE_RE 5 B 150N:
#define CCP_CAPTURE_DIV_4 6 B 151N:
#define CCP_CAPTURE_DIV_16 7 B 152N:
#define CCP_COMPARE_SET_ON_MATCH 8 B 153N:
#define CCP_COMPARE_CLR_ON_MATCH 9 B 154N:
#define CCP_COMPARE_INT 0xA B 155N:
#define CCP_COMPARE_INT_AND_TOGGLE 0x2 B 156N:
#define CCP_COMPARE_RESET_TIMER 0xB B 157N:
#define CCP_PWM 0xC B 158N:
#define CCP_PWM_PLUS_1 0x1c B 159N:
#define CCP_PWM_PLUS_2 0x2c B 160N:
#define CCP_PWM_PLUS_3 0x3c B 161N:
#define CCP_USE_TIMER3 0x100 B 162N:
long CCP_1; B 163N:V18
#byte CCP_1 = 0xfbe B 164N:
#byte CCP_1_LOW= 0xfbe B 165N:
#byte CCP_1_HIGH= 0xfbf B 166N:V19
long CCP_2; B 167N:V20V21
#byte CCP_2 = 0xfbb B 168N:
#byte CCP_2_LOW= 0xfbb B 169N:
#byte CCP_2_HIGH= 0xfbc B 170N:V22
////////////////////////////////////////////////////////////////// SPI B 171N:
// SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN B 172N:
// Constants used in SETUP_SSP() are: B 173N:
#define SPI_MASTER 0x20 B 174N:
#define SPI_SLAVE 0x24 B 175N:
#define SPI_L_TO_H 0 B 176N:
#define SPI_H_TO_L 0x10 B 177N:
#define SPI_CLK_DIV_4 0 B 178N:
#define SPI_CLK_DIV_16 1 B 179N:
#define SPI_CLK_DIV_64 2 B 180N:
#define SPI_CLK_T2 3 B 181N:
#define SPI_SS_DISABLED 1 B 182N:
B 183N:
#define SPI_SAMPLE_AT_END 0x8000 B 184N:
#define SPI_XMIT_L_TO_H 0x4000 B 185N:
B 186N:
////////////////////////////////////////////////////////////////// UART B 187N:
// Constants used in setup_uart() are: B 188N:
// FALSE - Turn UART off B 189N:
// TRUE - Turn UART on B 190N:
#define UART_ADDRESS 2 B 191N:
#define UART_DATA 4 B 192N:
// TRUE - Turn UART on B 193N:
////////////////////////////////////////////////////////////////// INTERNAL RC B 194N:
// Constants used in setup_oscillator() are: B 195N:
#define OSC_TIMER1 1 B 196N:
#define OSC_NORMAL 0 B 197N:
B 198N:
////////////////////////////////////////////////////////////////// ADC B 199N:
// ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A), B 200N:
// SET_ADC_CHANNEL(), READ_ADC() B 201N:
// Constants used in SETUP_ADC_PORTS() are: B 202N:
#define NO_ANALOGS 0x86 // None B 203N:
#define ALL_ANALOG 0x80 // A0 A1 A2 A3 A5 E0 E1 E2 Ref=Vdd B 204N:
#define ANALOG_RA3_REF 0x81 // A0 A1 A2 A5 E0 E1 E2 Ref=A3 B 205N:
#define A_ANALOG 0x82 // A0 A1 A2 A3 A5 Ref=Vdd B 206N:
#define A_ANALOG_RA3_REF 0x83 // A0 A1 A2 A5 Ref=A3 B 207N:
#define RA0_RA1_RA3_ANALOG 0x84 // A0 A1 A3 Ref=Vdd B 208N:
#define RA0_RA1_ANALOG_RA3_REF 0x85 // A0 A1 Ref=A3 B 209N:
#define ANALOG_RA3_RA2_REF 0x88 // A0 A1 A5 E0 E1 E2 Ref=A2,A3 B 210N:
#define ANALOG_NOT_RE1_RE2 0x89 // A0 A1 A2 A3 A5 E0 Ref=Vdd B 211N:
#define ANALOG_NOT_RE1_RE2_REF_RA3 0x8A // A0 A1 A2 A5 E0 Ref=A3 B 212N:
#define ANALOG_NOT_RE1_RE2_REF_RA3_RA2 0x8B // A0 A1 A5 E0 Ref=A2,A3 B 213N:
#define A_ANALOG_RA3_RA2_REF 0x8C // A0 A1 A5 Ref=A2,A3 B 214N:
#define RA0_RA1_ANALOG_RA3_RA2_REF 0x8D // A0 A1 Ref=A2,A3 B 215N:
#define RA0_ANALOG 0x8E // A0 B 216N:
#define RA0_ANALOG_RA3_RA2_REF 0x8F // A0 Ref=A2,A3 B 217N:
// Constants used for SETUP_ADC() are: B 218N:
#define ADC_OFF 0 // ADC Off B 219N:
#define ADC_CLOCK_DIV_2 1 B 220N:
#define ADC_CLOCK_DIV_4 0x101 B 221N:
#define ADC_CLOCK_DIV_8 0x41 B 222N:
#define ADC_CLOCK_DIV_16 0x141 B 223N:
#define ADC_CLOCK_DIV_32 0x81 B 224N:
#define ADC_CLOCK_DIV_64 0x181 B 225N:
#define ADC_CLOCK_INTERNAL 0xc1 // Internal 2-6us B 226N:
B 227N:
// Constants used in READ_ADC() are: B 228N:
#define ADC_START_AND_READ 7 // This is the default if nothing is specified B 229N:
#define ADC_START_ONLY 1 B 230N:
#define ADC_READ_ONLY 6 B 231N:
B 232N:
////////////////////////////////////////////////////////////////// INT B 233N:
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(), B 234N:
// EXT_INT_EDGE() B 235N:
// B 236N:
// Constants used in EXT_INT_EDGE() are: B 237N:
#define L_TO_H 0x40 B 238N:
#define H_TO_L 0 B 239N:
// Constants used in ENABLE/DISABLE_INTERRUPTS() are: B 240N:
#define GLOBAL 0xF2C0 B 241N:
#define INT_RTCC 0xF220 B 242N:
#define INT_TIMER0 0xF220 B 243N:
#define INT_TIMER1 0x9D01 B 244N:
#define INT_TIMER2 0x9D02 B 245N:
#define INT_TIMER3 0xA002 B 246N:
#define INT_EXT 0xF210 B 247N:
#define INT_EXT1 0xF008 B 248N:
#define INT_EXT2 0xF010 B 249N:
#define INT_RB 0xF208 B 250N:
#define INT_AD 0x9D40 B 251N:
#define INT_RDA 0x9D20 B 252N:
#define INT_TBE 0x9D10 B 253N:
#define INT_SSP 0x9D08 B 254N:
#define INT_CCP1 0x9D04 B 255N:
#define INT_CCP2 0xA001 B 256N:
#define INT_BUSCOL 0xA008 B 257N:
#define INT_LOWVOLT 0xA004 B 258N:
#define INT_EEPROM 0xA010 B 259N:
B 260N:
#list B 261 :X1E
B 261 :
#device ICD=TRUE A 5 :
#fuses HS,NOWDT,NOLVP A 6 :
#use delay(clock=4000000) A 7 :V24V26
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) A 8 :
#use fast_io(c) A 9 :
#use fast_io(a) A 10 :
#use fast_io(b) A 11 :
//****************************************************************************************** A 12 :
// IO口处理 A 13 :
//****************************************************************************************** A 14 :
#define RF_DATA_IN PIN_C2 A 15 :
#bit Time_Out= 0xff2.2 A 16 :V30
#bit Star_Timer= 0xfd5.7 A 17 :V31
//****************************************************************************************** A 18 :
// 变量处理 A 19 :
//****************************************************************************************** A 20 :
// LCD 模块命令 A 21 :
#define DISP_ON 0x0C //开显示 A 22 :
#define DISP_ON_C 0x0E //开显示, 开指针 A 23 :
#define DISP_ON_B 0x0F //开显示, 开指针,开闪烁 A 24 :
#define DISP_OFF 0x08 //关显示 A 25 :
#define CLR_DISP 0x01 //清显示的操作数 A 26 :
#define ENTRY_INC 0x06 //操作数 A 27 :
#define ENTRY_INC_S 0x07 //操作数 A 28 :
#define ENTRY_DEC 0x04 //操作数 A 29 :
#define ENTRY_DEC_S 0x05 //操作数 A 30 :
#define DD_RAM_ADDR 0x80 //初始化第一行显示的操作数 A 31 :
#define DD_RAM_UL 0xc0 //初始化第二行显示的操作数 A 32 :
//******************************************************* A 33 :
int16 TIMER_1=0; A 34 :V32V33
int8 moniter_Data[11],normal_Data[11]; A 35 :V34V35
int8 sendData[11]; A 36 :V36
int1 Check_Data_bit; A 37 :V37
int8 temp; A 38 :V38
int8 flag,jing; A 39 :V39V40
int16 last_timer,width,haha; A 40 :V41V42V43
int8 timeout=0,bit_over=1,bitdata=0; A 41 :V44V45V46
int8 a=0,b=0; A 42 :V47V48
A 43 :
//****************************************************************************************** A 44 :
// 寄存器处理 A 45 :
//****************************************************************************************** A 46 :
#byte ADCON0=0xfc2 A 47 :
#byte ADCON1=0xfc1 A 48 :V49
#byte TRISA=0xf92 A 49 :V50
#byte ADRESH=0xfc4 A 50 :V51
#byte STATUS=0xfd8 A 51 :V52
#byte PORTA=0xf80 A 52 :V53
#byte PORTB=0xf81 A 53 :V54
#byte TRISA=0xf92 A 54 :V55
#byte TRISB=0xf93 A 55 :
#byte SPBRG=0xfaf A 56 :V56
#byte TXSTA=0xfac A 57 :V57
#byte RCSTA=0xfab A 58 :V58
#byte TRISC=0xf94 A 59 :V59
#byte PIE1=0xf9d A 60 :V60
#byte RCREG=0xfae A 61 :V61
#define GO 2 A 62 :
#define C 0 A 63 :
#define RCIE 5 A 64 :
#bit tim3Str= 0xfb1.0 A 65 :V62
#bit over= flag.0 A 66 :V63
#bit LCD_DB7= PORTB.5 A 67 :V64
#bit LCD_DB6= PORTB.4 A 68 :V65
#bit LCD_DB5= PORTB.3 A 69 :V66
#bit LCD_DB4= PORTB.2 A 70 :V67
#bit LCD_E= PORTA.5 A 71 :V68
#bit LCD_RS= PORTB.1 A 72 :V69
#bit LCD_DB7_DIR= TRISB.5 A 73 :V70
#bit LCD_DB6_DIR= TRISB.4 A 74 :V71
#bit LCD_DB5_DIR= TRISB.3 A 75 :V72
#bit LCD_DB4_DIR= TRISB.2 A 76 :V73
#bit LCD_E_DIR= TRISA.5 A 77 :V74
#bit LCD_RS_DIR= TRISB.1 A 78 :V75
#bit CFE_DIR= TRISA.2 A 79 :V76
#bit CFE = PORTA.2 A 80 :V77
//****************************************************************************************** A 81 :
// 函数声明处理 A 82 :
//****************************************************************************************** A 83 :
void moniter(void); A 84 :V78f335P335
void moniter_Inti(void); A 85 :f336P336
void moniter_Clern_Number(void); A 86 :f337P337
void moniter_Recive(void); A 87 :f338P338
//****************************************************************************************** A 88 :
void normal(void); A 89 :f339P339
void normal_Inti(void); A 90 :f340P340
void normal_Clern_Number(void); A 91 :f341P341
void normal_Recive(void); A 92 :f342P342
//******************************************************************************* A 93 :
void simulation_Inti(void); A 94 :f343P343
void simulation(void); A 95 :f344P344
void TIMER3_isr(void); A 96 :f345P345
//******************************************************************************* A 97 :
void InitADKEY(void); A 98 :f346P346
int8 GetADKEY(void); A 99 :f347P347
void InitLCD(void); A 100 :f348P348
void putcLCD(int8 Byte); A 101 :f349V94P349
void SendCmd(int8 Byte); A 102 :f350V96P350
void clrLCD(void); A 103 :f351P351
void write(int8 Byte); A 104 :f352V99P352
//****************************************************************************************** A 105 :
// 监听模块 A 106 :
//****************************************************************************************** A 107 :
#INT_CCP1 A 108 :
void rise (void) A 109 :f353
{ A 110 :{52
if(a==1) A 111 :
{ A 112 :
b=1; A 113 :{56
if(CCP_1320) A 133 :
{ A 134 :
if(width>330&&width<800) A 135 :{76
{ A 136 :
bitdata=1; A 137 :{81
bit_over=1; A 138 :
last_timer=CCP_1; A 139 :
} A 140 :}82
else A 141 :
{ A 142 :
timeout=1; A 143 :{84
} A 144 :}85
} A 145 :}86
} A 146 :}87
#INT_CCP2 A 147 :
void fall (void) A 148 :f354
{ A 149 :{89
a=1; A 150 :
if(CCP_2320) A 160 :
{ A 161 :
if(width>330&&width<800) A 162 :{102
{ A 163 :
bitdata=0; A 164 :{107
bit_over=1; A 165 :
last_timer=CCP_2; A 166 :
} A 167 :}108
else A 168 :
{ A 169 :
timeout=1; A 170 :{110
} A 171 :}111
} A 172 :}112
} A 173 :}113
void moniter_Inti(void) A 174 :f336
{ A 175 :{114
setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise A 176 :
setup_ccp2(CCP_CAPTURE_FE); // Configure CCP2 to capture fall A 177 :
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // Start timer 1 A 178 :
setup_timer_0(RTCC_INTERNAL|RTCC_OFF|RTCC_8_BIT|RTCC_DIV_1); A 179 :
set_tris_c(0x86); A 180 :
disable_interrupts(GLOBAL); A 181 :
enable_interrupts(INT_CCP1); A 182 :
enable_interrupts(INT_CCP2); A 183 :
} A 184 :}117
//************************************************************ A 185 :
void moniter_Clern_Number(void) A 186 :f337
{ A 187 :{118
moniter_Data[0]=0; A 188 :
moniter_Data[1]=0; A 189 :
moniter_Data[2]=0; A 190 :
moniter_Data[3]=0; A 191 :
moniter_Data[4]=0; A 192 :
moniter_Data[5]=0; A 193 :
moniter_Data[6]=0; A 194 :
moniter_Data[7]=0; A 195 :
moniter_Data[8]=0; A 196 :
moniter_Data[9]=0; A 197 :
moniter_Data[10]=0; A 198 :
} A 199 :}120
//************************************************************ A 200 :
void moniter_Recive(void) A 201 :f338
{ A 202 :{121
int8 header,pc; A 203 :V102V103
int8 temp,temp1; A 204 :V104V105
int16 temp2; A 205 :V106
int8 ByteCounter; A 206 :V107
int8 *PData,*PData1; A 207 :V108V109
int8 BitCounter; A 208 :V110
int16 fall,rise,num; A 209 :V111V112V113
int16 value,delay_time; A 210 :V114V115
str: A 211 :
disable_interrupts(GLOBAL); A 212 :L116
if(input(RF_DATA_IN)==1) A 213 :
if(input(RF_DATA_IN)==1) A 214 :
if(input(RF_DATA_IN)==1) A 215 :
if(input(RF_DATA_IN)==1) A 216 :
if(input(RF_DATA_IN)==1) A 217 :
{ A 218 :
enable_interrupts(GLOBAL); A 219 :{145
while(b==0); A 220 :
a=0;b=0; A 221 :
delay_us(1); A 222 :
if(haha<430||haha>550) A 223 :
{ A 224 :
A 225 :
goto str; A 226 :{153
} A 227 :}154
last_timer=CCP_1; A 228 :
header=0; A 229 :
value=0; A 230 :
do A 231 :
{ A 232 :
jing=header; A 233 :{158
bit_over=0; A 234 :
timeout=0; A 235 :
num=0; A 236 :
while(!bit_over) A 237 :
{ A 238 :
delay_us(1); A 239 :{162
num++; A 240 :
if(num>600) A 241 :
{ A 242 :
timeout=1; A 243 :{165
break; A 244 :
} A 245 :}166
} A 246 :}167
bit_over=0; A 247 :
if(!(timeout==0&&bitdata==1)) A 248 :
{ A 249 :
timeout=0; A 250 :{172
goto str; A 251 :
} A 252 :}173
// value+=TIMER_1; A 253 :
header=header+1; A 254 :
}while(header<8); A 255 :}174
// delay_time=value*0.2; A 256 :
if(header==8) A 257 :
{ A 258 :
ByteCounter=0; A 259 :{179
PData=moniter_Data; A 260 :
do A 261 :
{ A 262 :
BitCounter=5; A 263 :{183
temp1=0; A 264 :
do A 265 :
{ A 266 :
bit_over=0; A 267 :{187
timeout=0; A 268 :
num=0; A 269 :
while(!bit_over) A 270 :
{ A 271 :
delay_us(1); A 272 :{191
num++; A 273 :
if(num>600) A 274 :
{ A 275 :
timeout=1; A 276 :{194
break; A 277 :
} A 278 :}195
} A 279 :}196
bit_over=0; A 280 :
if(timeout==1) A 281 :
{ A 282 :
timeout=0; A 283 :{199
goto str; A 284 :
} A 285 :}200
temp=bitdata; A 286 :
temp1=(temp1<<1)|temp; A 287 :
BitCounter--; A 288 :
}while(BitCounter); A 289 :}201
*(PData+ByteCounter)=temp1; A 290 :
ByteCounter=ByteCounter+1; A 291 :
}while(ByteCounter<11); A 292 :}204
if(temp==0) A 293 :
{ A 294 :
A 295 :
PData=moniter_Data; A 296 :{209
PData1=sendData; A 297 :
for(ByteCounter=0;ByteCounter<11;ByteCounter++)//有5个字节数据 A 298 :
{ A 299 :
temp=(((*(PData+ByteCounter))&0x10)>>4)+(((*(PData+ByteCounter))&0x08)>>3)+(((*(PData+ByteCounter))&0x04)>>2)+(((*(PData+ByteCounter))&0x02)>>1); A 300 :{216
if(ByteCounter==10) A 301 :
{ A 302 :
temp1=*(PData+ByteCounter)&0x1f; A 303 :{219
*(PData1+ByteCounter)=temp1; A 304 :
A 305 :
} A 306 :}220
else A 307 :
{ A 308 :
if((temp&0x01)==((*(PData+ByteCounter))&0x01))//效验高4位 A 309 :{222
{ A 310 :
temp1=*(PData+ByteCounter)&0x1f; A 311 :{225
*(PData1+ByteCounter)=temp1; A 312 :
temp1=(temp1&0x1e)>>1; A 313 :
*(PData+ByteCounter)=temp1; A 314 :
} A 315 :}226
else A 316 :
{ A 317 :
moniter_Clern_Number();//并清所有数据 A 318 :{228
goto str; A 319 :
} A 320 :}229
} A 321 :}230
} A 322 :}231
output_high(PIN_C5); A 323 :
delay_ms(1000); A 324 :
output_low(PIN_C5); A 325 :
Check_Data_bit=1; A 326 :
disable_interrupts(GLOBAL); A 327 :
disable_interrupts(INT_CCP1); A 328 :
disable_interrupts(INT_CCP2); A 329 :
SendCmd(0xc0); A 330 :
putcLCD(' '); A 331 :
putcLCD(' '); A 332 :
putcLCD(' '); A 333 :
putcLCD(' '); A 334 :
putcLCD(' '); A 335 :
putcLCD('s'); A 336 :
putcLCD('u'); A 337 :
putcLCD('c'); A 338 :
putcLCD('c'); A 339 :
putcLCD('e'); A 340 :
putcLCD('s'); A 341 :
putcLCD('s'); A 342 :
} A 343 :}236
else A 344 :
{ A 345 :
moniter_Clern_Number(); A 346 :{238
goto str; A 347 :
} A 348 :}239
} A 349 :}240
} A 350 :}241
} A 351 :}242
//*************************************************************** A 352 :
void moniter(void) A 353 :f335
{ A 354 :{243
int8 temp; A 355 :V117
A 356 :
delay_ms(100); A 357 :
moniter_Inti(); A 358 :
wo: A 359 :
moniter_Recive(); A 360 :L118
if(Check_Data_bit==0) A 361 :
goto wo; A 362 :
else A 363 :
{ A 364 :
Check_Data_bit=0; A 365 :{251
simulation_Inti(); A 366 :
while(1) A 367 :
{ A 368 :
simulation(); A 369 :{254
} A 370 :}255
} A 371 :}256
} A 372 :}257
//****************************************************************************************** A 373 :
// 读卡模块 A 374 :
//****************************************************************************************** A 375 :
void normal_Inti(void) A 376 :f340
{ A 377 :{258
setup_ccp1(CCP_CAPTURE_RE); // Configure CCP1 to capture rise A 378 :
setup_ccp2(CCP_CAPTURE_FE); // Configure CCP2 to capture fall A 379 :
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // Start timer 1 A 380 :
setup_timer_0(RTCC_INTERNAL|RTCC_OFF|RTCC_8_BIT|RTCC_DIV_1); A 381 :
set_tris_c(0x86); A 382 :
} A 383 :}260
//************************************************************ A 384 :
void normal_Clern_Number(void) A 385 :f341
{ A 386 :{261
normal_Data[0]=0; A 387 :
normal_Data[1]=0; A 388 :
normal_Data[2]=0; A 389 :
normal_Data[3]=0; A 390 :
normal_Data[4]=0; A 391 :
normal_Data[5]=0; A 392 :
normal_Data[6]=0; A 393 :
normal_Data[7]=0; A 394 :
normal_Data[8]=0; A 395 :
normal_Data[9]=0; A 396 :
normal_Data[10]=0; A 397 :
} A 398 :}263
//************************************************************ A 399 :
void normal_Recive(void) A 400 :f342
{ A 401 :{264
int8 header,pc; A 402 :V119V120
int8 temp,temp1; A 403 :V121V122
int16 temp2; A 404 :V123
int8 ByteCounter; A 405 :V124
int8 *PData,*PData1; A 406 :V125V126
int8 BitCounter; A 407 :V127
int16 fall,rise; A 408 :V128V129
str: A 409 :
if(input(RF_DATA_IN)==0) A 410 :L130
if(input(RF_DATA_IN)==0) A 411 :
if(input(RF_DATA_IN)==0) A 412 :
if(input(RF_DATA_IN)==0) A 413 :
if(input(RF_DATA_IN)==0) A 414 :
{ A 415 :
while(input(RF_DATA_IN)==0); A 416 :{287
rise=CCP_1; A 417 :
delay_us(10); A 418 :
while(input(RF_DATA_IN)==1); A 419 :
fall=CCP_2; A 420 :
TIMER_1=fall-rise; A 421 :
if(falltemp2) A 425 :
{ A 426 :
goto str; A 427 :{303
} A 428 :}304
temp2=540; A 429 :
if(TIMER_1temp2) A 447 :
{ A 448 :
header=0; A 449 :{328
goto str; A 450 :
} A 451 :}329
temp2=230; A 452 :
if(TIMER_1>4)+(((*(PData+ByteCounter))&0x08)>>3)+(((*(PData+ByteCounter))&0x04)>>2)+(((*(PData+ByteCounter))&0x02)>>1); A 566 :{442
if(ByteCounter==10) A 567 :
{ A 568 :
temp1=*(PData+ByteCounter)&0x1f; A 569 :{445
*(PData1+ByteCounter)=temp1; A 570 :
A 571 :
} A 572 :}446
else A 573 :
{ A 574 :
if((temp&0x01)==((*(PData+ByteCounter))&0x01))//效验高4位 A 575 :{448
{ A 576 :
temp1=*(PData+ByteCounter)&0x1f; A 577 :{451
*(PData1+ByteCounter)=temp1; A 578 :
temp1=(temp1&0x1e)>>1; A 579 :
*(PData+ByteCounter)=temp1; A 580 :
} A 581 :}452
else A 582 :
{ A 583 :
normal_Clern_Number();//并清所有数据 A 584 :{454
goto str; A 585 :
} A 586 :}455
} A 587 :}456
} A 588 :}457
output_high(PIN_C5); A 589 :
delay_ms(1000); A 590 :
output_low(PIN_C5); A 591 :
Check_Data_bit=1; A 592 :
SendCmd(0xc0); A 593 :
putcLCD(' '); A 594 :
putcLCD(' '); A 595 :
putcLCD(' '); A 596 :
putcLCD(' '); A 597 :
putcLCD(' '); A 598 :
putcLCD('s'); A 599 :
putcLCD('u'); A 600 :
putcLCD('c'); A 601 :
putcLCD('c'); A 602 :
putcLCD('e'); A 603 :
putcLCD('s'); A 604 :
putcLCD('s'); A 605 :
} A 606 :}459
else A 607 :
{ A 608 :
normal_Clern_Number(); A 609 :{461
goto str; A 610 :
} A 611 :}462
} A 612 :}463
} A 613 :}464
} A 614 :}465
//*************************************************************** A 615 :
void normal(void) A 616 :f339
{ A 617 :{466
int8 temp; A 618 :V131
delay_ms(100); A 619 :
normal_Inti(); A 620 :
ni: A 621 :
normal_Recive(); A 622 :L132
if(Check_Data_bit==0) A 623 :
goto ni; A 624 :
else A 625 :
{ A 626 :
Check_Data_bit=0; A 627 :{474
simulation_Inti(); A 628 :
while(1) A 629 :
{ A 630 :
simulation(); A 631 :{477
} A 632 :}478
} A 633 :}479
} A 634 :}480
//****************************************************************************************** A 635 :
// 模拟卡片模块 A 636 :
//****************************************************************************************** A 637 :
#INT_TIMER3 A 638 :
void TIMER3_isr(void) A 639 :f345
{ A 640 :{481
over=1; A 641 :
set_timer3(65082); A 642 :
} A 643 :}483
void simulation_Inti(void) A 644 :f343
{ A 645 :{484
setup_timer_3(T3_INTERNAL|0x00); A 646 :
set_timer3(65082); A 647 :
over=0; A 648 :
enable_interrupts(INT_TIMER3); A 649 :
enable_interrupts(global); A 650 :
CFE_DIR=0; A 651 :
} A 652 :}486
void simulation(void) A 653 :f344
{ A 654 :{487
int8 header,*PData,count,i,run; A 655 :V133V134V135V136V137
tim3Str=1; A 656 :
for(header=0;header<9;header++) A 657 :
{ A 658 :
tim3Str=1; A 659 :{495
CFE=1; A 660 :
delay_us(251); A 661 :
CFE=0; A 662 :
while(over==0); A 663 :
over=0; A 664 :
tim3Str=0; A 665 :
} A 666 :}502
PData=sendData; A 667 :
for(count=0;count<11;count++) A 668 :
{ A 669 :
temp=*(PData+count); A 670 :{509
temp=temp<<3; A 671 :
// delay_us(1); A 672 :
for(i=0;i<5;i++) A 673 :
{ A 674 :
run=temp&0x80; A 675 :{516
if(run==0) A 676 :
{ A 677 :
tim3Str=1; A 678 :{519
CFE=0; A 679 :
delay_us(256); A 680 :
CFE=1; A 681 :
} A 682 :}521
else A 683 :
{ A 684 :
tim3Str=1; A 685 :{523
CFE=1; A 686 :
delay_us(256); A 687 :
CFE=0; A 688 :
} A 689 :}525
temp=temp<<1; A 690 :
while(over==0); A 691 :
over=0; A 692 :
tim3Str=0; A 693 :
} A 694 :}531
} A 695 :}532
} A 696 :}533
//****************************************************************************************** A 697 :
// 主函数模块 A 698 :
//****************************************************************************************** A 699 :
void InitADKEY(void) A 700 :f346
{ A 701 :{534
#asm A 702 :
movlw 0x41 A 703 :
movwf ADCON0 A 704 :
movlw 0x02 A 705 :
movwf ADCON1 A 706 :
bsf TRISA,0 A 707 :
#endasm A 708 :
} A 709 :}536
int8 GetADKEY(void) A 710 :f347
{ A 711 :{537
int8 ADKEYH; A 712 :V138
int8 KEYRES; A 713 :V139
#asm A 714 :
bsf ADCON0,GO A 715 :
IsOver: A 716 :
btfsc ADCON0,GO A 717 :
goto IsOver A 718 :
movf ADRESH,W A 719 :
movwf ADKEYH A 720 :
movlw 0x31 A 721 :
movwf KEYRES A 722 :
KEY1: A 723 :
movlw 0xcb A 724 :
subwf ADKEYH,W A 725 :
btfss STATUS,C A 726 :
goto KEY2 A 727 :
goto KEYOUT A 728 :
KEY2: A 729 :
incf KEYRES,F A 730 :
movlw 0xa8 A 731 :
subwf ADKEYH,W A 732 :
btfss STATUS,C A 733 :
goto KEY3 A 734 :
goto KEYOUT A 735 :
KEY3: A 736 :
incf KEYRES,F A 737 :
movlw 0x8f A 738 :
subwf ADKEYH,W A 739 :
btfss STATUS,C A 740 :
goto KEY4 A 741 :
goto KEYOUT A 742 :
KEY4: A 743 :
incf KEYRES,F A 744 :
movlw 0x7c A 745 :
subwf ADKEYH,W A 746 :
btfss STATUS,C A 747 :
goto KEY5 A 748 :
goto KEYOUT A 749 :
KEY5: A 750 :
incf KEYRES,F A 751 :
movlw 0x6f A 752 :
subwf ADKEYH,W A 753 :
btfss STATUS,C A 754 :
goto KEY6 A 755 :
goto KEYOUT A 756 :
KEY6: A 757 :
incf KEYRES,F A 758 :
movlw 0x63 A 759 :
subwf ADKEYH,W A 760 :
btfss STATUS,C A 761 :
goto KEY7 A 762 :
goto KEYOUT A 763 :
KEY7: A 764 :
incf KEYRES,F A 765 :
movlw 0x5a A 766 :
subwf ADKEYH,W A 767 :
btfss STATUS,C A 768 :
goto KEY8 A 769 :
goto KEYOUT A 770 :
KEY8: A 771 :
incf KEYRES,F A 772 :
movlw 0x53 A 773 :
subwf ADKEYH,W A 774 :
btfss STATUS,C A 775 :
goto KEY9 A 776 :
goto KEYOUT A 777 :
KEY9: A 778 :
incf KEYRES,F A 779 :
movlw 0x4c A 780 :
subwf ADKEYH,W A 781 :
btfss STATUS,C A 782 :
goto KEY0 A 783 :
goto KEYOUT A 784 :
KEY0: A 785 :
movlw 0x30 A 786 :
movwf KEYRES A 787 :
KEYOUT: A 788 :
movf KEYRES,W A 789 :
#endasm A 790 :
return KEYRES; A 791 :
} A 792 :}551
void InitLCD(void) A 793 :f348
{ A 794 :{552
LCD_DB7_DIR=0; A 795 :
LCD_DB6_DIR=0; A 796 :
LCD_DB5_DIR=0; A 797 :
LCD_DB4_DIR=0; A 798 :
LCD_E_DIR=0; A 799 :
LCD_RS_DIR=0; A 800 :
LCD_DB7=0; A 801 :
LCD_DB6=0; A 802 :
LCD_DB5=0; A 803 :
LCD_DB4=0; A 804 :
LCD_E=0; A 805 :
LCD_RS=0; A 806 :
LCD_E=1; //清数据线 A 807 :
LCD_E=0; A 808 :
LCD_DB5=1; //设置LCD工作方式 A 809 :
LCD_E=1; A 810 :
LCD_E=0; A 811 :
delay_ms(1000); A 812 :
SendCmd(0x28); A 813 :
SendCmd(DISP_ON); A 814 :
SendCmd(ENTRY_INC); A 815 :
SendCmd(DD_RAM_ADDR); A 816 :
clrLCD(); A 817 :
A 818 :
} A 819 :}555
void putcLCD(int8 mychar) A 820 :f349V94
{ A 821 :{556
LCD_RS=1; //设置为送数据模式 A 822 :
write(mychar); A 823 :
mychar=mychar<<4; A 824 :
write(mychar); A 825 :
delay_ms(100); A 826 :
} A 827 :}558
void SendCmd(int8 mychar) A 828 :f350V96
{ A 829 :{559
A 830 :
LCD_RS=0; //设置为送命令模式 A 831 :
write(mychar); A 832 :
mychar=mychar<<4; A 833 :
write(mychar); A 834 :
delay_ms(100); A 835 :
} A 836 :}561
void clrLCD(void) A 837 :f351
{ A 838 :{562
SendCmd(CLR_DISP); A 839 :
} A 840 :}564
void write(int8 mychar) A 841 :f352V99
{ A 842 :{565
if((mychar&0x80)!=0) A 843 :
LCD_DB7=1; A 844 :
else A 845 :
LCD_DB7=0; A 846 :
if((mychar&0x40)!=0) A 847 :
LCD_DB6=1; A 848 :
else A 849 :
LCD_DB6=0; A 850 :
if((mychar&0x20)!=0) A 851 :
LCD_DB5=1; A 852 :
else A 853 :
LCD_DB5=0; A 854 :
if((mychar&0x10)!=0) A 855 :
LCD_DB4=1; A 856 :
else A 857 :
LCD_DB4=0; A 858 :
LCD_E=1; A 859 :
LCD_E=0; A 860 :
} A 861 :}579
void main(void) A 862 :f387
{ A 863 :{581
int8 temp; A 864 :V153
CFE_DIR=0; A 865 :
InitADKEY(); A 866 :
InitLCD(); A 867 :
SendCmd(0x40); A 868 :
SendCmd(0x40); A 869 :
putcLCD(0x18); A 870 :
putcLCD(0x18); A 871 :
putcLCD(0x07); A 872 :
putcLCD(0x08); A 873 :
putcLCD(0x08); A 874 :
putcLCD(0x08); A 875 :
putcLCD(0x07); A 876 :
putcLCD(0x00); A 877 :
while(1) A 878 :
{ A 879 :
SendCmd(0x80); A 880 :{586
putcLCD(' '); A 881 :
putcLCD(' '); A 882 :
putcLCD(' '); A 883 :
putcLCD(' '); A 884 :
putcLCD('M'); A 885 :
putcLCD('a'); A 886 :
putcLCD('i'); A 887 :
putcLCD('n'); A 888 :
putcLCD(' '); A 889 :
putcLCD('M'); A 890 :
putcLCD('e'); A 891 :
putcLCD('n'); A 892 :
putcLCD('u'); A 893 :
SendCmd(0xc0); A 894 :
putcLCD('1'); A 895 :
putcLCD(':'); A 896 :
putcLCD('M'); A 897 :
putcLCD('o'); A 898 :
putcLCD('n'); A 899 :
putcLCD('M'); A 900 :
putcLCD('o'); A 901 :
putcLCD('d'); A 902 :
putcLCD('2'); A 903 :
putcLCD(':'); A 904 :
putcLCD('N'); A 905 :
putcLCD('o'); A 906 :
putcLCD('r'); A 907 :
putcLCD('M'); A 908 :
putcLCD('o'); A 909 :
putcLCD('d'); A 910 :
temp=0; A 911 :
while(GetADKEY()==0x30); A 912 :
temp=GetADKEY(); A 913 :
delay_ms(20); A 914 :
if(temp!=GetADKEY()) A 915 :
continue; A 916 :
while(GetADKEY()!=0x30); A 917 :
clrLCD(); A 918 :
delay_us(1); A 919 :
if(temp==0x31) A 920 :
{ A 921 :
SendCmd(0x80); A 922 :{597
putcLCD(' '); A 923 :
putcLCD(' '); A 924 :
putcLCD(' '); A 925 :
putcLCD(' '); A 926 :
putcLCD('M'); A 927 :
putcLCD('o'); A 928 :
putcLCD('n'); A 929 :
putcLCD('M'); A 930 :
putcLCD('o'); A 931 :
putcLCD('d'); A 932 :
delay_ms(1000); A 933 :
moniter(); A 934 :
clrLCD(); A 935 :
} A 936 :}599
else if(temp==0x32) A 937 :
{ A 938 :
SendCmd(0x80); A 939 :{603
putcLCD(' '); A 940 :
putcLCD(' '); A 941 :
putcLCD(' '); A 942 :
putcLCD(' '); A 943 :
putcLCD('N'); A 944 :
putcLCD('o'); A 945 :
putcLCD('r'); A 946 :
putcLCD('M'); A 947 :
putcLCD('o'); A 948 :
putcLCD('d'); A 949 :
delay_ms(1000); A 950 :
normal(); A 951 :
clrLCD(); A 952 :
} A 953 :}605
else A 954 :
{ A 955 :
SendCmd(0x80); A 956 :{607
putcLCD(' '); A 957 :
putcLCD(' '); A 958 :
putcLCD('E'); A 959 :
putcLCD('o'); A 960 :
putcLCD('r'); A 961 :
putcLCD('r'); A 962 :
putcLCD(' '); A 963 :
putcLCD('C'); A 964 :
putcLCD('h'); A 965 :
putcLCD('o'); A 966 :
putcLCD('i'); A 967 :
putcLCD('c'); A 968 :
putcLCD('e'); A 969 :
delay_ms(1000); A 970 :
clrLCD(); A 971 :
} A 972 :}609
} A 973 :}610
A 974 :
} A 975 :}611E
A 975 :