Пн июн 05, 2023 11:36:03
#define F_CPU 9600000UL
int main(void)
{
cli();
DDRB|=_BV(PB0);
outputHigh();
TCNT0=0;
TCCR0A=0x02;
TCCR0B=0x01;
OCR0A=0x01;
TIMSK0|=1<<OCIE0A;
sei();
while(1)
{
}
}
ISR(TIM0_COMPA_vect)
{
if(isHigh==1)
{
isHigh=0;
outputLow();
}
else
{
isHigh=1;
outputHigh();
}
}
typedef unsigned int bool;
bool isHigh=1;
inline void outputHigh(void)
{
PORTB|=_BV(PB0);
}
inline void outputLow(void)
{
PORTB&=~_BV(PB0);
}
Вт июн 06, 2023 05:06:08
.INCLUDE "tn13Adef.inc"
.CSEG
SBI DDRB,0
LDI R22,1
OUT OCR0A,R22
LDI R22,1<<COM0A0|1<<WGM01
OUT TCCR0A,R22
LDI R22,1<<CS00
OUT TCCR0B,R22
RJMP PC
.EXIT
Вт июн 06, 2023 08:14:49
Ср июн 07, 2023 14:40:41
.INCLUDE "tn13Adef.inc"
.CSEG
SBI DDRB,0
LDI R22,1
OUT OCR0A,R22
LDI R22,1<<COM0A0|1<<WGM01
OUT TCCR0A,R22
LDI R22,1<<CS00
OUT TCCR0B,R22
RJMP PC
.EXIT
.equ DDRB,0x17
.equ PORTB,0x18
.data
.section .text
.org 0x0000
vectors:
rjmp main
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
main:
cli
in R16,DDRB
in R17,PORTB
sbr R16,0x01
cbr R17,0x01
out DDRB,R16
out PORTB,R17
ldi R18,0x01
loop:
eor R17,R18 ; 1 cycle
out PORTB,R17 ; 1 cycle
rjmp loop ; 2 cycles
___________--___________--___________--___________
__--__--__--__--__--__--__--__--__--__--__--__--__--__--
Ср июн 07, 2023 16:35:12
ошибаешься. это режим сброса по сравнению.dubrovkin писал(а):Но, если я не ошибаюсь, то тут используется PWM режим.
задают, что счетчик таймера после установки в 1 сразу сбрасывается.akl писал(а): LDI R22,1
OUT OCR0A,R22
а записывая в OCR0A разные числа, можно изменять период следования импульсов.dubrovkin писал(а):А мне же, вообще, нужно чтобы у меня сигнал был разного интервала
Ср июн 07, 2023 17:31:09
ошибаешься. это режим сброса по сравнению.dubrovkin писал(а):Но, если я не ошибаюсь, то тут используется PWM режим.
задают, что счетчик таймера после установки в 1 сразу сбрасывается.akl писал(а): LDI R22,1
OUT OCR0A,R22
а записывая в OCR0A разные числа, можно изменять период следования импульсов.dubrovkin писал(а):А мне же, вообще, нужно чтобы у меня сигнал был разного интервала
Чт июн 08, 2023 04:44:09
А её и нет. Используются возможности аппаратного модуля таймера. В Вашем случае лучше использовать режим с буферированием.dubrovkin писал(а):Если тут речь про таймер, то где функция обработки прерывания таймера? Я её не вижу по коду.
.INCLUDE "tn13Adef.inc"
;.equ DDRB,0x17 ; такие установки делаются вручную
;.equ PORTB,0x18
;.data
;.section .text
.org 0x0000
vectors:
rjmp main
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
main:
cli
LDI R16,0x17
LDI R17,0x19
out DDRB,R16
out PORTB,R17
LDI R18,0x03
; ldi R18,0x01
loop:
eor R17,R18 ; 1 cycle
out PORTB,R17 ; 1 cycle
rjmp loop ; 2 cycles
.EXIT
Чт июн 08, 2023 05:39:40
.INCLUDE "tn13Adef.inc"
;.equ DDRB,0x17 ; такие установки делаются вручную
;.equ PORTB,0x18
;.data
;.section .text
.org 0x0000
vectors:
rjmp main
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
rjmp vectors
main:
cli
LDI R16,0x17
LDI R17,0x19
out DDRB,R16
out PORTB,R17
LDI R18,0x03
; ldi R18,0x01
loop:
out PINB,R18 ; 1 cycle
rjmp loop ; 2 cycles
.EXIT
Вс июн 11, 2023 02:09:59
Вс июн 11, 2023 10:36:33
Вс июн 11, 2023 12:56:03
int main(void) {
PORTB = 0;
DDRB = 0;
DDRB |= (1 << DDB0); // RB0 output
TCCR0A = 0;
TCCR0A |= (1 << WGM01); // CTC mode
TCCR0A |= (1 << COM0A0); // toggle OC0A on compare match
// FOCnx = Fclk_IO / (2 * N * (1 + OCRnx)
// N (prescale factor) = 1, 8, 64, 256, or 1024
TCCR0B |= (0 << CS02) | (0 << CS01) | (1 << CS00); // no prescaler
OCR0A = 1; // 0: 4.8 MHz, 1: 2.4 MHz, 2: 1,6 MHz, 4: 1.2 MHz ...
while (1) {
}
return 0;
}