Сб ноя 05, 2022 19:07:52
Сб ноя 05, 2022 19:32:06
Сб ноя 05, 2022 20:11:14
Сб ноя 05, 2022 20:48:56
Сб ноя 05, 2022 22:01:23
Сб ноя 05, 2022 22:33:38
void setup() {
for (uint32_t i = 0; i < 10000000; i++) {
}
Serial.begin(57600);
Serial.println("--- start ---");
Serial.println(TCCR1B, BIN);
noInterrupts(); // initialize timer1 and disable all interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 62500; // compare match register 16 MHz / 256 / 1 Hz
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
void loop() {
}
ISR(TIMER1_COMPA_vect) {
Serial.println(TCCR1B, BIN);
}
21:31:52.575 -> --- start ---
21:31:52.575 -> 11
21:31:53.575 -> 1100
21:31:54.575 -> 1100
21:31:55.575 -> 1100
21:31:56.575 -> 1100
21:31:58.455 -> --- start ---
21:31:58.455 -> 11
21:31:59.455 -> 1100
21:32:00.455 -> 1100
21:32:01.455 -> 1100
21:32:02.455 -> 1100
...
Вс ноя 06, 2022 06:10:04
veso74 писал(а):в --- start --- нажимаю кнопку RESET
TCCR1B = 0b00000011 - начальное состояние
TCCR1B = 0b00001100 - после установки для 1 Hz
Уточню, для получения интервала 1 секунда, задавать нужноOCR1A = 62500; // compare match register 16 MHz / 256 / 1 Hz
Вс ноя 06, 2022 09:44:03
Вс ноя 06, 2022 12:40:01
.include"m8def.inc"
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
; Инициализация периферии МК
; Настройка портов ввода-вывода
ldi r16, 0xFF ; На входах -- подтяжка
out PORTB, r16
out PORTD, r16
out PORTC, r16
ldi r16, 0x01 ; PB0 -- выход, остальные биты
out DDRB, r16 ; порта B -- входы
clr r16 ; Порты C и D -- входы
out DDRC, r16
out DDRD, r16
; Настройка таймера 0
clr r16
out TCNT0, r16
ldi r16, 0x05 ; Предделитель 1024
out TCCR0, r16
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
; Основная программа
; Выжидание 768 тактов
clr r16
pauseLoop: dec r16
brne pauseLoop
; Проверка содержимого счётчика таймера 0
in r16, TCNT0
tst r16
breq finalLoop
; Если счётчик отличен от нуля, сброс пина PB0 в ноль
ldi r16, 0xFE
out PORTB, r16
; Конец программы
finalLoop: rjmp finalLoop
;==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==
Пн ноя 28, 2022 18:28:22
ISR(WDT_vect)
{
WDTCR |=(1<<WDTIE);
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
{systime++;}
}
if (systime - tmr1 >= 10U)
{
tmr1 = systime;
PORTB ^= (1 << PB3);
}
uint8_t timeLeft = systime - tmr1;
if (timeLeft >=8)
{
tmr1 += 8 * (timeLeft / 8);
PORTB ^= (1 << PB3);
}
Вт ноя 29, 2022 07:50:55
if ((systime - tmr1) >= 10U)
Вт ноя 29, 2022 09:26:01
Вт ноя 29, 2022 09:45:30
uint8_t timeLeft = systime - tmr1;
if (timeLeft >=10)
{
tmr1 += timeLeft;
PORTB ^= (1 << PB3);
}
tmr1 += 8 * (timeLeft / 8);
volatile uint8_t systime = 0; // глобальная переменная, которую крутит прерывание таймера
int main(void)
{
uint8_t tmr1 = 0; // локальная переменная, для интервала софт-таймера
while(1);
{
if()...
}
}
Вт ноя 29, 2022 10:04:58
a &= 0b11111000;
Ср ноя 30, 2022 08:06:47
v = {1,2,3,4}[i > 0 ? 17 ^ b * *с[x]++ : 136 / '\012'];
if(x == 0) y = 'a';
else if(x == 1) y = 'b';
else if(x == 2) у = 'c';
Ср ноя 30, 2022 11:13:04
Ср ноя 30, 2022 15:06:34
Ср ноя 30, 2022 16:04:56
Ср ноя 30, 2022 19:06:27
Ср ноя 30, 2022 20:56:10