unsigned long PLL_Temp; //PLL временное значени
unsigned long Freq_PLL[20] = { 88000, 88600, 90800, 91600, 92400,95800, 96200, 99500, 100000, 101100, 101800,102300, 102900,
103600, 104800, 105500, 106000, 106500, 106900, 107900 } ;
void CCB_delay (void)
{
_delay_us(3);
}
void CCB_tx_8(unsigned char d)
{
char x;
for (x=0; x<8; x++) {
CCB_delay();
if (d & 0x80) {ONE_DI()}
else { NULL_DI()}
CCB_delay();
ONE_CL();
d <<= 1;
CCB_delay();
NULL_CL();
}
}
void CCB_tx_revert16(unsigned int d)
{
char x;
for (x=0; x<16; x++) {
CCB_delay();
if (d & 0x1) {ONE_DI()}
else { NULL_DI()}
CCB_delay();
ONE_CL();
d >>= 1;
CCB_delay();
NULL_CL();
}
}
void send_LC72144(void)
{
unsigned int divisor; // коэффициент делителя
divisor = (PLL_Temp + 10800) / 50; // делим на шаг заданный в R0-R3
NULL_CE();
CCB_tx_8(0b00010100); // address IN1
ONE_CE();
CCB_tx_revert16(divisor); // R0-R15
CCB_tx_8(0b01111000); // SNS,DVS,PDC0,PDC1, R0,R1,R2,R3 Настройка диапазона, шага перестройки (шаг, 50кГц)
CCB_tx_8(0b10101111); // DT0,DT1,ADS,CTE, CTS0,CTS1,GT0,GT1
NULL_CE();
NULL_CE();
CCB_tx_8(0b10010100); //address IN2
ONE_CE();
CCB_tx_8(0b01011110); // I/O-0,I/O-1,I/O-2,I/O-3, I/O-4,I/O-5,ADI0,ADI1
CCB_tx_8(0b10111100); // OUT0,OUT1,OUT2,OUT3, OUT4,OUT5,CTP,CTC
CCB_tx_8(0b11000111); // H/I-6,L/I-7,IL0,IL1, ULD,UL0,UL1,XS0 (XS0=1)
CCB_tx_8(0b11000000); // XS1,X B,DZ0,DZ1, TEST0,TEST1,TEST2,DLC (XS1=1)
NULL_CE();
}
int main(void)
{
DDRC = 0b00111100;
PORTC = 0b11000011;
DDRB = 0x00;
PORTB= 0x00;
unsigned char Current_station ;
Current_station = EEPROM_read(1); // считываем при включении записанный номер станции
send_LC72144();
while (1)
{
PLL_Temp=Freq_PLL[Current_station] ; // получаем значение PLL
if ((PINB&(1 <<PB0))==0)
{
Current_station++; //Указание на следующую радиостанцию
_delay_ms(500); //Задержка, чтобы избежать дребезга кнопки
if(Current_station>19) Current_station=0; //Обнаружение выхода за пределы PLL
EEPROM_write(1, Current_station); // записываем в еепром
send_LC72144(); //Отправить значение PLL, сменить станцию
}
if ((PINB&(1 <<PB1))==0)
{
Current_station--; //Указание на следующую радиостанцию
_delay_ms(500); //Задержка, чтобы избежать дребезга кнопки
if(Current_station<0) Current_station=19; //Обнаружение выхода за пределы PLL
EEPROM_write(1, Current_station); // записываем в еепром
send_LC72144(); //Отправить значение PLL, сменить станцию
}
}
}