res_v |= ADC_DB3RL;
res_t = ADC_DB3RH << 8;
res_t |= ADC_DB4RL;
Код: Выделить всё
switch(led_num){
case 0:
PC_ODR_bit.ODR4 = 1;
PC_ODR_bit.ODR5 = 0;
PC_ODR_bit.ODR6 = 0;
PC_ODR_bit.ODR7 = 0;
led_num = (bat_level > 1) ? 1 : 0;
break;
case 1:
PC_ODR_bit.ODR4 = 0;
PC_ODR_bit.ODR5 = 1;
PC_ODR_bit.ODR6 = 0;
PC_ODR_bit.ODR7 = 0;
led_num = (bat_level > 2) ? 2 : 0;
break;
case 2:
PC_ODR_bit.ODR4 = 0;
PC_ODR_bit.ODR5 = 0;
PC_ODR_bit.ODR6 = 1;
PC_ODR_bit.ODR7 = 0;
led_num = (bat_level > 3) ? 3 : 0;
break;
case 3:
PC_ODR_bit.ODR4 = 0;
PC_ODR_bit.ODR5 = 0;
PC_ODR_bit.ODR6 = 0;
PC_ODR_bit.ODR7 = 1;
led_num = 0;
break;
}Код: Выделить всё
PC_ODR &= ((0x10 << led_num++) | 0x0F); // Это неправильно, верный вариант VladislavS написал в следующем сообщении
if (led_num > 3) led_num = 0;Код: Выделить всё
PC_ODR &= ((0x10 << led_num++) | 0x0F);Код: Выделить всё
PC_ODR=(PC_ODR&0x0F)|(0x10<<led_num++);Код: Выделить всё
#pragma vector = TIM2_OVR_UIF_vector
__interrupt void TIM2_OVR_UIF_handler(void)
{
if (seconds%2) ADC_CSR_bit.CH = 3;
else ADC_CSR_bit.CH = 4;
PD_CR2_bit.C23 = 0;
ADC_CR1_bit.ADON = 1;
ADC_CR1_bit.ADON = 1;
TIM2_SR1_bit.UIF = 0;
}
#pragma vector = ADC1_EOC_vector
__interrupt void ADC1_EOC_handler(void)
{
if(seconds%2){
res_v = ADC_DRH << 8;
res_v |= ADC_DRL;}
else{
res_t = ADC_DRH << 8;
res_t |= ADC_DRL;
}
ADC_CR1_bit.ADON = 0;
PD_CR2_bit.C23 = 1;
if (res_t > 903 && (mode == 2 || mode == 3)) PD_ODR_bit.ODR1 = 1; //Heater on
else PD_ODR_bit.ODR1 = 0; //Heater off
bat_level = 0;
if (res_v > 513) bat_level = 1;
else if (res_v > 490) bat_level = 2;
else if (res_v > 478) bat_level = 3;
else if (res_v > 466) bat_level = 4;
seconds++;
ADC_CSR_bit.EOC = 0;
}Практически всё. Начиная с того, что изучаете программирование мк на непрофильном drive2sergey.UA писал(а):Что я делаю не так ?