Сб янв 04, 2014 16:08:08
TCCR0B = TCCR0B|(1<<CS01)|(0<<CS00);//установка прескалера таймера = 1/8частоте.(т.к. на авывод надо 2 такта.. нам этого хватит)
Вс янв 12, 2014 12:04:34
.include "tn2313def.inc"
.list
.cseg
.org 0
rjmp RESET ; Reset Handler
.org OVF0addr
rjmp OVF0Handler ; TIMER0 overflow
;
OVF0Handler:
cli
inc r23
cpi r23,19
brne ExitInt
sbis PinB,5
rjmp ExitInt
ldi r21,0b00100100
in r20, PORTB
eor r20, r21 ;
out PORTB,r20
nop
nop
ExitInt: sei
reti
RESET:
ldi r16, low(RAMEND); Main program start
out SPL,r16 ; Set Stack Pointer to top of RAM
ldi r16, 0b00001000 ; set up ports
out DDRD,r16
nop
ldi r16, 0b01110111
out PORTD,r16 ; PULL
nop
ldi r16, 0b11111111 ;
out DDRB,r16
nop
ldi r16, 0b00000100
out PORTB,r16
nop
; TIMER0 INIT
ldi r16, 0b00001101 ; PRESCALER
out TCCR0B,r16
ldi r16, 0b00000000
ldi r16, 0b11111111
out TIMSK,r16
sei
clr r20
clr r21
clr r22
clr r23
main_cycle:
sbic PinD,4
rjmp main_cycle
rcall Delay
sbic PinD,4
rcall Togg8
rjmp main_cycle
Togg8:
clr r23
out TCNT0,r23
ldi r21,0b00100100
in r20, PORTB
eor r20, r21
out PORTB,r20
nop
nop
rjmp main_cycle
Delay:
; ----------
ldi r17,0
ldi r18,100
ldi r19,1
Loop: dec r17
brne Loop
dec r18
brne Loop
dec r19
brne Loop
; ----------
ldi r17,0
ldi r18,200
ldi r19,1
Loop1: dec r17
brne Loop1
dec r18
brne Loop1
dec r19
brne Loop1
ret
Вс фев 09, 2014 23:24:50
Пн фев 10, 2014 15:19:08
Пн фев 10, 2014 15:24:04
Пн фев 10, 2014 15:25:53
amd9800 писал(а):Какие это дает преимущества.
Пн фев 10, 2014 15:31:29
ICR1 - в этот регистр записывается текущее состояние счётчика при появлении активного входного сигнала на выводе ICP (бит 0 порта B)
Пн фев 10, 2014 15:41:06
amd9800 писал(а):И не могу понять логику - почему так происходит?
Пн фев 10, 2014 15:43:26
Пн фев 10, 2014 15:44:18
Пн фев 10, 2014 15:49:27
Пн фев 10, 2014 17:15:37
Пн фев 10, 2014 22:56:07
Вт фев 11, 2014 01:05:28
Пн фев 24, 2014 22:29:11
Пн мар 03, 2014 12:58:38
DDRB = CE_3V | CE_5V | PWM_5V; // pwm_5v - нога на ШИМ. настроена как выход
...........
while(1)
{
//toggle_pin(2);
// настраиваем таймер и начинаем выдавать ШИМ
TCCR0A |= (1 << COM0A1) | (1 << COM0A0) | (1 << WGM01) | (1 << WGM00);
TCCR0B |= (1 << CS02) | (1 << WGM02);
OCR0A = 20; // не больше 25
OCR0B = 20;
//TCNT0 = 0;
}
Пн мар 03, 2014 14:04:39
while(1)
{
...
}
Пн мар 03, 2014 14:37:57
Пн мар 03, 2014 14:45:57
Пн мар 03, 2014 14:58:29