Ср окт 04, 2023 20:51:05
Ср окт 04, 2023 20:55:53
Ср окт 04, 2023 21:01:16
Ср окт 04, 2023 21:24:08
Ср окт 04, 2023 21:50:22
Вт окт 17, 2023 01:20:21
Вт окт 17, 2023 01:59:18
Вт окт 17, 2023 09:22:13
Вт окт 17, 2023 10:28:59
#include "stm8s_adc1.h"
...
ADC1_StartConversion();
while(ADC1_GetFlagStatus(ADC1_FLAG_EOC) == FALSE);
val = ADC1_GetConversionValue();
ADC1_ClearFlag(ADC1_FLAG_EOC);
Вт окт 17, 2023 13:53:13
да, верно, забыл исправить после копи-пасте наименования. Спасибо! Исправил.Pjatruha@mail.ru писал(а):допустили опечатку?
__near __no_init volatile unsigned short ADC1_DR @0x5344;
Вт окт 17, 2023 20:57:42
Ср окт 18, 2023 21:12:30
#include "IOSTM8S103F3.h"
volatile int x=0, y=111, m=0;
volatile char i=1,j=0,n=0,k=1,L_1,L_2,L_3;
char ZNAK[8] =
{ //0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
1,0, 1,0, 1,0, 0,1 //7
};
char DIGIT[11][2][8] =
{
{ // 0
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{0,1, 1,0, 0,1, 0,1} //t (1)
},
{ // 1
//1 2 3 4 5 6 7 8
//12 11 10 09
{1,0, 0,1, 0,1, 1,0}, //7 (0)
{1,0, 1,0, 1,0, 1,0} //t (1)
},
{ // 2
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 1,0, 1,0}, //7 (0)
{1,0, 0,1, 0,1, 0,1} //t (1)
},
{ // 3
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{1,0, 0,1, 1,0, 0,1} //t (1)
},
{ // 4
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{1,0, 0,1, 0,1, 1,0}, //7 (0)
{0,1, 0,1, 1,0, 1,0} //t (1)
},
{ // 5
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 1,0, 0,1, 1,0}, //7 (0)
{0,1, 0,1, 1,0, 0,1} //t (1)
},
{ // 6
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 1,0, 0,1, 1,0}, //7 (1)
{0,1, 0,1, 0,1, 0,1} //t (0)
},
{ // 7
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{1,0, 1,0, 1,0, 1,0} //t (1)
},
{ // 8
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{0,1, 0,1, 0,1, 0,1} //t (1)
},
{ // 9
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{0,1, 0,1, 1,0, 0,1} //t (1)
},
{ // PUSTO
{1,0, 1,0, 1,0, 1,0}, //13 (0)
{1,0, 1,0, 1,0, 1,0} //14 (1)
},
};
void DELENIE()
{
L_3=y/100;
L_2=(y-(L_3*100))/10; //260-2*100=60
L_1=(y-(L_3*100))-(L_2*10); //(260-(2*100))-(6*10)
}
#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_interrupt(void)
{
TIM1_SR1_bit.UIF = 0; //Cброс флага прерывания
k++;
if (k == 9)
{
k=1;
}
j=k-1;
if (m > 0)
{
m++;
if (m >= 25)
{
if ((PD_IDR_bit.IDR1 == 1) & (PB_IDR_bit.IDR4 == 1))
{
m = -25;
}
}
}
if (m < 0)
{
m++;
if (m == -1)
{
m = 0;
PB_CR2_bit.C24 = 1; // разрещаем прерывание
PD_CR2_bit.C21 = 1; // разрещаем прерывание
}
}
}
#pragma vector=EXTI1_vector //Кнопка "+"
__interrupt void PinB4_interrupt(void)
{
PB_CR2_bit.C24 = 0; // запрещаем прерывание
PD_CR2_bit.C21 = 0; // запрещаем прерывание
m=1;
y=y+5;
if (y >= 500)
{
y=500;
}
DELENIE();
}
#pragma vector=EXTI3_vector //Кнопка "-"
__interrupt void PinD2_interrupt(void)
{
PB_CR2_bit.C24 = 0; // запрещаем прерывание
PD_CR2_bit.C21 = 0; // запрещаем прерывание
m=1;
y=y-5;
if (y <= 100)
{
y=100;
}
DELENIE();
}
void com_D12()
{
PC_DDR_bit.DDR3 = 0; // Вход com D9
PC_CR1_bit.C13 = 0; // Подтягивающий резистор отключен
PC_ODR_bit.ODR6 = 1; // Высокий уровень на выходе
PC_CR1_bit.C16 = 1; // push-pull
PC_DDR_bit.DDR6 = 1; // Выход com D12
}
void com_D12_()
{
PC_ODR_bit.ODR6 = 0; // Низкий уровень на выходе com D12
}
void com_D11()
{
PC_DDR_bit.DDR6 = 0; // Вход com D12
PC_CR1_bit.C16 = 0; // Подтягивающий резистор отключен
PC_ODR_bit.ODR5 = 1; // Высокий уровень на выходе
PC_CR1_bit.C15 = 1; // push-pull
PC_DDR_bit.DDR5 = 1; // Выход com D11
}
void com_D11_()
{
PC_ODR_bit.ODR5 = 0; // Низкий уровень на выходе com D11
}
void com_D10()
{
PC_DDR_bit.DDR5 = 0; // Вход com D11
PC_CR1_bit.C15 = 0; // Подтягивающий резистор отключен
PC_ODR_bit.ODR4 = 1; // Высокий уровень на выходе
PC_CR1_bit.C14 = 1; // push-pull
PC_DDR_bit.DDR4 = 1; // Выход com D10
}
void com_D10_()
{
PC_ODR_bit.ODR4 = 0; // Низкий уровень на выходе com D10
}
void com_D9()
{
PC_DDR_bit.DDR4 = 0; // Вход com D10
PC_CR1_bit.C14 = 0; // Подтягивающий резистор отключен
PC_ODR_bit.ODR3 = 1; // Высокий уровень на выходе
PC_CR1_bit.C13 = 1; // push-pull
PC_DDR_bit.DDR3 = 1; // Выход com D9
}
void com_D9_()
{
PC_ODR_bit.ODR3 = 0; // Низкий уровень на выходе com D9
}
void COM()
{
switch(k)
{
case 1:
com_D12();
break;
case 2:
com_D12_();
break;
case 3:
com_D11();
break;
case 4:
com_D11_();
break;
case 5:
com_D10();
break;
case 6:
com_D10_();
break;
case 7:
com_D9();
break;
case 8:
com_D9_();
break;
}
}
void SEG()
{
// DIGIT_1
i=!i;
if (n == 1)
{
if ((j == 7) ^ (j == 6))
{
PD_ODR_bit.ODR2 = ZNAK[j]; // Фаренгейт
}
}
else
{
PD_ODR_bit.ODR2 = DIGIT[L_1][i][j]; // seg D14
}
i=!i;
PC_ODR_bit.ODR7 = DIGIT[L_1][i][j]; // seg D13
// DIGIT_2
i=!i;
if (n ==2)
{
if ((j == 7) ^ (j == 6))
{
PD_ODR_bit.ODR6 = ZNAK[j]; // Вилка
}
}
else
{
PD_ODR_bit.ODR6 = DIGIT[L_2][i][j]; // seg D5
}
i=!i;
PA_ODR_bit.ODR1 = DIGIT[L_2][i][j]; // seg D6
// DIGIT_3
i=!i;
if (n == 3)
{
if ((j == 7) ^ (j == 6))
{
PA_ODR_bit.ODR3 = ZNAK[j]; // Цельсий
}
}
else
{
PA_ODR_bit.ODR3 = DIGIT[L_3][i][j]; // seg D8
}
i=!i;
PA_ODR_bit.ODR2 = DIGIT[L_3][i][j]; // seg D7
}
int main (void)
{
CLK_CKDIVR=0; // установка делителя частоты процессора равного 1
PD_DDR_bit.DDR3 = 0; // Вход.Детектор нуля.
PD_CR1_bit.C13 = 1; // Подтягивающий резистор отключен
PD_CR2_bit.C23 = 0; // Прерывая разрещены
EXTI_CR1_bit.PDIS = 3; //прерывание по спаду и подъему фронта на всем порту 'D'
PD_DDR_bit.DDR4 = 0; // Вход.
PD_CR1_bit.C14 = 1; // Подтягивающий резистор подключен
PD_CR2_bit.C24 = 0; // Прерывая запрещены
PD_DDR_bit.DDR5 = 0; // Вход.
PD_CR1_bit.C15 = 1; // Подтягивающий резистор подключен
PD_CR2_bit.C25 = 0; // Прерывая запрещены
PB_DDR_bit.DDR4 = 0; // Вход. Кнопка "+"
PB_CR1_bit.C14 = 0; // Подтягивающий резистор отключен
PB_CR2_bit.C24 = 1; // Прерывая разрещены
EXTI_CR1_bit.PBIS = 3; //прерывание по спаду фронта на всем порту 'B'
PD_DDR_bit.DDR1 = 0; // Вход. Кнопка "-"
PD_CR1_bit.C11 = 1; // Подтягивающий резистор подключен
PD_CR2_bit.C21 = 1; // Прерывая разрещены
//EXTI_CR1_bit.PDIS = 3; //прерывание по спаду фронта
PC_DDR_bit.DDR3 = 0; // Вход com D9
PC_CR1_bit.C13 = 0; // Подтягивающий резистор отключен
PC_CR2_bit.C23 = 0; // Прерывая запрещены
PC_DDR_bit.DDR4 = 0; // Вход com D10
PC_CR1_bit.C14 = 0; // Подтягивающий резистор отключен
PC_CR2_bit.C24 = 0; // Прерывая запрещены
PC_DDR_bit.DDR5 = 0; // Вход com D11
PC_CR1_bit.C15 = 0; // Подтягивающий резистор отключен
PC_CR2_bit.C25 = 0; // Прерывая запрещены
PC_DDR_bit.DDR6 = 0; // Вход com D12
PC_CR1_bit.C16 = 0; // Подтягивающий резистор отключен
PC_CR2_bit.C26 = 0; // Прерывая запрещены
PC_DDR_bit.DDR7 = 1; // Выход SEG D13
PC_CR1_bit.C17 = 1; // push-pull
PC_CR2_bit.C27 = 0; // Cкорость переключения 2МГц
PD_DDR_bit.DDR2 = 1; // Выход SEG D14
PD_CR1_bit.C12 = 1;
PD_CR2_bit.C22 = 0;
PD_DDR_bit.DDR6 = 1; // Выход SEG D5
PD_CR1_bit.C16 = 1;
PD_CR2_bit.C26 = 0;
PA_DDR_bit.DDR1 = 1; // Выход SEG D6
PA_CR1_bit.C11 = 1;
PA_CR2_bit.C21 = 0;
PA_DDR_bit.DDR2 = 1; // Выход SEG D7
PA_CR1_bit.C12 = 1;
PA_CR2_bit.C22 = 0;
PA_DDR_bit.DDR3 = 1; // Выход SEG D8
PA_CR1_bit.C13 = 1;
PA_CR2_bit.C23 = 0;
PB_DDR_bit.DDR5 = 1; // Настройка 5-го бита порта B на вывод.
PB_ODR_bit.ODR5 = 1; // Гашение светодиода.
PB_CR1_bit.C15 = 1; // Переключение порта в режим push-pull.
PB_CR2_bit.C25 = 0; // Cкорость переключения до 2 МГц
//Частота переполнений = 16000000Гц / 32 / 500 = 1000 Гц(1 мс)
TIM1_PSCRH = 0x00;//записываем 2 старших байта числа 31(32-1) в hex формате в регистр предделителя
TIM1_PSCRL = 0x1F;//записываем 2 младших байта числа 31(32-1)в hex формате в регистр предделителя
TIM1_ARRH = 0x01; //записываем 2 старших байта числа 500 в hex формате в регистр автоперезагруски
TIM1_ARRL = 0xF4; //записываем 2 младших байта числа 500 в hex формате в регистр автоперезагруски
TIM1_CR1_bit.DIR = 0; // Cчет вверх
TIM1_CR1_bit.URS = 1; //Прерывание только по переполнению счетчика
TIM1_EGR_bit.UG = 1; //Вызываем Update Event для загрузки предделителя
TIM1_IER_bit.UIE = 1; //Разрешаем прерывание
TIM1_CR1_bit.CEN = 1; //Запускаем таймер
asm("rim");
DELENIE();
while(1)
{
SEG();
COM();
}
}
#include "IOSTM8S103F3.h"
volatile unsigned short z=0, x=0, y=111,L_1,L_2,L_3;
volatile int m=0, t;
volatile char i=1,j=0,n=0,k=1;
void DELENIE()
{
L_3=y/1000;//3300/1000=3
L_2=(y-(L_3*1000))/100; //3300-3*1000=300
L_1=(y-(L_3*1000))-(L_2*100); //(3300-(3*1000))-(3*100)
}
char ZNAK[8] =
{ //0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
1,0, 1,0, 1,0, 0,1 //7
};
char DIGIT[11][2][8] =
{
{ // 0
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{0,1, 1,0, 0,1, 0,1} //t (1)
},
{ // 1
//1 2 3 4 5 6 7 8
//12 11 10 09
{1,0, 0,1, 0,1, 1,0}, //7 (0)
{1,0, 1,0, 1,0, 1,0} //t (1)
},
{ // 2
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 1,0, 1,0}, //7 (0)
{1,0, 0,1, 0,1, 0,1} //t (1)
},
{ // 3
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{1,0, 0,1, 1,0, 0,1} //t (1)
},
{ // 4
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{1,0, 0,1, 0,1, 1,0}, //7 (0)
{0,1, 0,1, 1,0, 1,0} //t (1)
},
{ // 5
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 1,0, 0,1, 1,0}, //7 (0)
{0,1, 0,1, 1,0, 0,1} //t (1)
},
{ // 6
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 1,0, 0,1, 1,0}, //7 (1)
{0,1, 0,1, 0,1, 0,1} //t (0)
},
{ // 7
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{1,0, 1,0, 1,0, 1,0} //t (1)
},
{ // 8
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{0,1, 0,1, 0,1, 0,1} //t (1)
},
{ // 9
//0 1 2 3 4 5 6 7
//1 2 3 4 5 6 7 8
//12 11 10 09
{0,1, 0,1, 0,1, 1,0}, //7 (0)
{0,1, 0,1, 1,0, 0,1} //t (1)
},
{ // PUSTO
{1,0, 1,0, 1,0, 1,0}, //13 (0)
{1,0, 1,0, 1,0, 1,0} //14 (1)
},
};
#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_interrupt(void)
{
TIM1_SR1_bit.UIF = 0; //Cброс флага прерывания
k++;
t++;
if (k == 9)
{
k=1;
}
j=k-1;
}
void com_D12()
{
PC_DDR_bit.DDR3 = 0; // Вход com D9
PC_CR1_bit.C13 = 0; // Подтягивающий резистор отключен
PC_ODR_bit.ODR6 = 1; // Высокий уровень на выходе
PC_CR1_bit.C16 = 1; // push-pull
PC_DDR_bit.DDR6 = 1; // Выход com D12
}
void com_D12_()
{
PC_ODR_bit.ODR6 = 0; // Низкий уровень на выходе com D12
}
void com_D11()
{
PC_DDR_bit.DDR6 = 0; // Вход com D12
PC_CR1_bit.C16 = 0; // Подтягивающий резистор отключен
PC_ODR_bit.ODR5 = 1; // Высокий уровень на выходе
PC_CR1_bit.C15 = 1; // push-pull
PC_DDR_bit.DDR5 = 1; // Выход com D11
}
void com_D11_()
{
PC_ODR_bit.ODR5 = 0; // Низкий уровень на выходе com D11
}
void com_D10()
{
PC_DDR_bit.DDR5 = 0; // Вход com D11
PC_CR1_bit.C15 = 0; // Подтягивающий резистор отключен
PC_ODR_bit.ODR4 = 1; // Высокий уровень на выходе
PC_CR1_bit.C14 = 1; // push-pull
PC_DDR_bit.DDR4 = 1; // Выход com D10
}
void com_D10_()
{
PC_ODR_bit.ODR4 = 0; // Низкий уровень на выходе com D10
}
void com_D9()
{
PC_DDR_bit.DDR4 = 0; // Вход com D10
PC_CR1_bit.C14 = 0; // Подтягивающий резистор отключен
PC_ODR_bit.ODR3 = 1; // Высокий уровень на выходе
PC_CR1_bit.C13 = 1; // push-pull
PC_DDR_bit.DDR3 = 1; // Выход com D9
}
void com_D9_()
{
PC_ODR_bit.ODR3 = 0; // Низкий уровень на выходе com D9
}
void COM()
{
switch(k)
{
case 1:
com_D12();
break;
case 2:
com_D12_();
break;
case 3:
com_D11();
break;
case 4:
com_D11_();
break;
case 5:
com_D10();
break;
case 6:
com_D10_();
break;
case 7:
com_D9();
break;
case 8:
com_D9_();
break;
}
}
void SEG()
{
// DIGIT_1
i=!i;
if (n == 1)
{
if ((j == 7) ^ (j == 6))
{
PD_ODR_bit.ODR2 = ZNAK[j]; // Фаренгейт
}
}
else
{
PD_ODR_bit.ODR2 = DIGIT[L_1][i][j]; // seg D14
}
i=!i;
PC_ODR_bit.ODR7 = DIGIT[L_1][i][j]; // seg D13
// DIGIT_2
i=!i;
if (n ==2)
{
if ((j == 7) ^ (j == 6))
{
PD_ODR_bit.ODR6 = ZNAK[j]; // Вилка
}
}
else
{
PD_ODR_bit.ODR6 = DIGIT[L_2][i][j]; // seg D5
}
i=!i;
PA_ODR_bit.ODR1 = DIGIT[L_2][i][j]; // seg D6
// DIGIT_3
i=!i;
if (n == 3)
{
if ((j == 7) ^ (j == 6))
{
PA_ODR_bit.ODR3 = ZNAK[j]; // Цельсий
}
}
else
{
PA_ODR_bit.ODR3 = DIGIT[L_3][i][j]; // seg D8
}
i=!i;
PA_ODR_bit.ODR2 = DIGIT[L_3][i][j]; // seg D7
}
int main (void)
{
CLK_CKDIVR=0; // установка делителя частоты процессора равного 1
ADC_CSR_bit.AWD=0; //запрет ожидания сигнала от аналогового сторожевого таймера
ADC_CSR_bit.EOCIE=0; //прерывание по окончанию преобразования запрещено
ADC_CSR_bit.AWDIE=0; //прерывание от сторожевого таймера запрещено
ADC_CSR_bit.CH=0x04; //канал AIN4
ADC_CR1_bit.SPSEL=0x04; //выбор делителя частоты. Макс. АЦП F=4МГц при VDD=3.3, при VDD=4В F=6МГц
ADC_CR1_bit.CONT=0; //одиночное преобразование
ADC_CR2_bit.EXTTRIG=0; //преобразование по внешнему событию запрещено
ADC_CR2_bit.ALIGN=0; // выравнивание результата преобразования "по правому краю"
ADC_CR3_bit.DBUF=0; //Буфер данных отключен. Результат преобразования в ADC_DRH и ADC_DRL
ADC_CR3_bit.OVR=0; //очистка флага перед запуском АЦП
ADC_CR1_bit.ADON=1; //подключение АЦП к источнику питания
PD_DDR_bit.DDR3 = 0; // Вход.Детектор напряжения. Скорей всего инициализировать PD3 не нужно
PD_CR1_bit.C13 = 1; // Подтягивающий резистор отключен
PD_CR2_bit.C23 = 0; // Прерывая запрещены
PD_DDR_bit.DDR4 = 0; // Вход.
PD_CR1_bit.C14 = 1; // Подтягивающий резистор подключен
PD_CR2_bit.C24 = 0; // Прерывая запрещены
PD_DDR_bit.DDR5 = 0; // Вход.
PD_CR1_bit.C15 = 1; // Подтягивающий резистор подключен
PD_CR2_bit.C25 = 0; // Прерывая запрещены
PC_DDR_bit.DDR3 = 0; // Вход com D9
PC_CR1_bit.C13 = 0; // Подтягивающий резистор отключен
PC_CR2_bit.C23 = 0; // Прерывая запрещены
PC_DDR_bit.DDR4 = 0; // Вход com D10
PC_CR1_bit.C14 = 0; // Подтягивающий резистор отключен
PC_CR2_bit.C24 = 0; // Прерывая запрещены
PC_DDR_bit.DDR5 = 0; // Вход com D11
PC_CR1_bit.C15 = 0; // Подтягивающий резистор отключен
PC_CR2_bit.C25 = 0; // Прерывая запрещены
PC_DDR_bit.DDR6 = 0; // Вход com D12
PC_CR1_bit.C16 = 0; // Подтягивающий резистор отключен
PC_CR2_bit.C26 = 0; // Прерывая запрещены
PC_DDR_bit.DDR7 = 1; // Выход SEG D13
PC_CR1_bit.C17 = 1; // push-pull
PC_CR2_bit.C27 = 0; // Cкорость переключения 2МГц
PD_DDR_bit.DDR2 = 1; // Выход SEG D14
PD_CR1_bit.C12 = 1;
PD_CR2_bit.C22 = 0;
PD_DDR_bit.DDR6 = 1; // Выход SEG D5
PD_CR1_bit.C16 = 1;
PD_CR2_bit.C26 = 0;
PA_DDR_bit.DDR1 = 1; // Выход SEG D6
PA_CR1_bit.C11 = 1;
PA_CR2_bit.C21 = 0;
PA_DDR_bit.DDR2 = 1; // Выход SEG D7
PA_CR1_bit.C12 = 1;
PA_CR2_bit.C22 = 0;
PA_DDR_bit.DDR3 = 1; // Выход SEG D8
PA_CR1_bit.C13 = 1;
PA_CR2_bit.C23 = 0;
PB_DDR_bit.DDR5 = 1; // Настройка 5-го бита порта B на вывод.
PB_ODR_bit.ODR5 = 1; // Гашение светодиода.
PB_CR1_bit.C15 = 1; // Переключение порта в режим push-pull.
PB_CR2_bit.C25 = 0; // Cкорость переключения до 2 МГц
//Частота переполнений = 16000000Гц / 32 / 500 = 1000 Гц(1 мс)
TIM1_PSCRH = 0x00;//записываем 2 старших байта числа 31(32-1) в hex формате в регистр предделителя
TIM1_PSCRL = 0x1F;//записываем 2 младших байта числа 31(32-1)в hex формате в регистр предделителя
TIM1_ARRH = 0x01; //записываем 2 старших байта числа 500 в hex формате в регистр автоперезагруски
TIM1_ARRL = 0xF4; //записываем 2 младших байта числа 500 в hex формате в регистр автоперезагруски
TIM1_CR1_bit.DIR = 0; // Cчет вверх
TIM1_CR1_bit.URS = 1; //Прерывание только по переполнению счетчика
TIM1_EGR_bit.UG = 1; //Вызываем Update Event для загрузки предделителя
TIM1_IER_bit.UIE = 1; //Разрешаем прерывание
TIM1_CR1_bit.CEN = 1; //Запускаем таймер
i=1000; //временная задержка
do {i--;}
while (i>1);
ADC_CR1_bit.ADON=1; //повторная запись единицы дает команду на старт преобразования
asm("rim");
DELENIE();
while(1)
{
SEG();
COM();
if ((ADC_CSR_bit.EOC==1)&(t==1000))
{
t=0;
x = ((unsigned short)(ADC_DRH << 8 )) | ADC_DRL; //записывае данные из регистров ADC_DRL и ADC_DRH в переменную
PB_ODR_bit.ODR5 = !PB_ODR_bit.ODR5; // Индикатор входа в тело оператора
if (x>y)
{
y=x*3300000/1023;
DELENIE();
}
ADC_CR1_bit.ADON=1; // запускаем преобразование
}
}
}
Ср окт 18, 2023 21:32:19
y=x*3300000/1023;
unsigned long tmp = x * 3300;
tmp /= 1023;
y = (unsigned short)tmp;
L_3 = y / 1000;
L_2 = (y / 100) % 10;
L_1 = (y / 10) % 10;
Ср окт 18, 2023 21:50:37
while(1)
{
SEG();
COM();
if ((ADC_CSR_bit.EOC==1)&(t==1000))
{
t=0;
x = ((unsigned short)(ADC_DRH << 8 )) | ADC_DRL; //записывае данные из регистров ADC_DRL и ADC_DRH в переменную
PB_ODR_bit.ODR5 = !PB_ODR_bit.ODR5; // Индикатор входа в тело оператора
if (x>y)
{
y=111;
DELENIE();
}
ADC_CR1_bit.ADON=1; // запускаем преобразование
}
}
Ср окт 18, 2023 22:07:25
L_3 = y / 1000;
L_2 = (y / 100) % 10;
L_1 = (y / 10) % 10;
L_3=y/1000;
L_2=(y-(L_3*1000))/100;
L_1=(y-(L_3*1000))-(L_2*100);
y = 111;
L_3 = 111 / 1000 = 0;
L_2 = (111 - (L_3 * 1000)) / 100 = (111 - 0) / 100 = 1;
L_1 = (111 - (0 * 1000)) - (1 * 100) = 111 - 100 = 11 ??? -> мусор
Ср окт 18, 2023 23:00:29
if (x>y)
{
y=x;
DELENIE();
}
Ср окт 18, 2023 23:05:31
Ср окт 18, 2023 23:07:01
Ср окт 18, 2023 23:11:28
Ср окт 18, 2023 23:15:48