/**************************************** * @FL-101Z CONTROL UNIT * 2017.03.04 2017.4.30 2017.6.3 ***************************************/ #include <16f88.h> #fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP,NOMCLR,NOIESO,NOFCMEN,NODEBUG #device ADC=8 //A/D 8bit mode #use fixed_io(a_outputs=PIN_A3,PIN_A4) #use fixed_io(b_outputs=PIN_B2,PIN_B3,PIN_B4,PIN_B5,PIN_B6,PIN_B7) #use delay(clock = 16000000) // clock 16MHz int mode, key, i, TX_flag; long delay_count; ///// key down & PTT interupt #int_EXT void key_on(void) { if ((mode == 2)) //ext2 mode output_b(0x28); //B3,B5 H if ((mode == 3)) //ext1 mode output_b(0x14); //B2,B4 H else output_low(PIN_B7); //RX+ H to L delay_ms(10); //RX to TX delay =10ms while(input(PIN_B0) == 0) { output_high(PIN_A4); // TX+ ON TX_flag = 1; // TX flag set } output_low(PIN_A4); // TX+ OFF i = 0x01; //delay_count reset if ((mode == 1)) // EXT mode output_b(0x14); // RB2,4 H else output_b(0x40); // RB6,H } ///// MAIN void main() { int temp, delay_valu, delay_time2, vfo_sw, fan_on_temp; setup_adc_ports(sAN0 | sAN1 | sAN2 | VSS_VDD); // AN0=Temp,AN1=Delay,AN2=VFO_SW setup_adc(ADC_CLOCK_DIV_32 );// Tad=Fosc/32=2us set_tris_b(0xFC); //B0,B1=input /// intial set port_b_pullups(0x03); //RB0,1 pull up output_high(PIN_B7); //RX+ ON output_low(PIN_A4); //TX+ OFF ///interupt ext_int_edge(H_TO_L); enable_interrupts(INT_EXT); //RB0 interrupt enable_interrupts(GLOBAL); while(1) { /// vfo_sw set_adc_channel(2); //RA2 select delay_us(15); vfo_sw = read_adc(); if ( (vfo_sw > 0xCD) && (vfo_sw < 0xE2) ) //3.9-4.3V EXT mode { mode = 1; //EXT mode output_high(PIN_B2); output_high(PIN_B4); output_low(PIN_B6); } if ( (vfo_sw > 0x2A) && (vfo_sw < 0x3F) ) //0.8-1.2V VFO mode { mode = 4; //VFO mode output_high(PIN_B6); output_low(PIN_B2); output_low(PIN_B3); output_low(PIN_B5); output_low(PIN_B4); } if ( (vfo_sw > 0x61) && (vfo_sw < 0x79) ) //1.8-2.3V EXT2 mode { mode = 2; //ext2 mode output_high(PIN_B6); output_low(PIN_B2); output_low(PIN_B3); output_low(PIN_B5); output_low(PIN_B4); } if ( (vfo_sw > 0x8E) && (vfo_sw < 0xA3) ) //2.7-3.1V EXT1 mode { mode = 3; //ext1 mode output_high(PIN_B6); output_low(PIN_B2); output_low(PIN_B3); output_low(PIN_B5); output_low(PIN_B4); } /// CAL SW ON if (input(PIN_B1) == 0) //CAL SW ON { if ((mode == 2)) //ext2 mode output_b(0x24); //B2,B5 H if ((mode == 3)) //ext1 mode output_b(0x18); //B3,B6 H output_high(PIN_A4); //TX+ ON output_low(PIN_B7); //RX+ OFF } else { output_low(PIN_A4); //TX+ OFF output_high(PIN_B7); //RX+ ON } /// Temp Measure fan_on_temp = 0x16; //fan_on temp=45C set_adc_channel(0); //RA0 Select delay_us(15); temp = read_adc(); if ((temp > fan_on_temp)) { output_high(PIN_A3); } else { output_low(PIN_A3); } /// Delay VR set_adc_channel(1); ////RA1 Select delay_us(15); delay_valu = read_adc(); if ((delay_valu <= 0x03)) //0.05V< delay_count = 0x01; //delay 20ms else delay_count = delay_valu; // TX to RX Delay if ((TX_flag = 1)) // bfore TX { for(i=0x02; i