реклама на сайте
подробности

 
 
> ТС1 в 8535, Частота переполнения в 2 раза ниже, чем была определена
golovin
сообщение Apr 20 2007, 09:48
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 37
Регистрация: 13-04-07
Пользователь №: 27 012



Добрый день!

МК 8535, кварц 11.0592МГц.
Использую ТС1 с предделителем 256. считает от 0 до максимума.
По идее должен считать за ~1.5 сек, а считает за ~3сек.
Длительность отслеживаю по светодиоду.


Код

;Начало программы
PROG:                         ;PROG
   ldi  R16,high(RAMEND)
   out  SPH,R16
   ldi  R16,low(RAMEND)
   out  SPL,R16
   ldi  R16,(1<<TOIE1)
   out  TIMSK,R16
   ldi  R16,$00
   out  TCCR1A,R16
   ldi  R16,(1<<CS12)
   out  TCCR1B,R16
   sbi  DDRB,1
   clr  R20
   sei

END_PROG:
   rjmp  END_PROG

;-----------------------------------------------------------------
SUBI_TIMER1_OVERFLOW:
   push R16
   in   R16,SREG
   push R16
   inc  R20
   sbrc R20,1
   rjmp  Label1
   sbi  PORTB,1  
LABEL1:
   sbrs R20,1        
   rjmp  Label2
   cbi  PORTB,1    
LABEL2:
   pop  R16            
   out  SREG,R16
   pop  R16
   reti


Голову уже сломал, но понять не могу.
Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Guest_=AVR=_*
сообщение Apr 20 2007, 10:44
Сообщение #2





Guests






"Будь проще, и люди за тобой потянутся!"(с)


Код
.def    stat   = r2       ; Сюда сохраняй SR в любых прерываниях - будет 1 такт вместо 5
.equ    LED    = PB1      ; Обращайся к LED по-человечески

SUBI_TIMER1_OVERFLOW:
    in    stat,SREG
    push    r16

    inc    r20

    bst    r20,0           ; SR.T = r20.0
    in    r16,PORTB        ; r16 = PORTB
    bld    r16,LED         ; LEDbit in r16 = r20.0
    out    PORTB,r16       ; LEDbit in PORTB = r20.0

    pop    r16
    out    SR,stat
    reti
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 20 2007, 16:58
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(=AVR= @ Apr 20 2007, 06:44) *
"Будь проще, и люди за тобой потянутся!"(с)
Код
.def    stat   = r2      ; Сюда сохраняй SR в любых прерываниях - будет 1 такт вместо 5
.equ    LED    = PB1     ; Обращайся к LED по-человечески

SUBI_TIMER1_OVERFLOW:
    in    stat,SREG
    push    r16

    inc    r20

    bst    r20,0          ; SR.T = r20.0
    in    r16,PORTB    ; r16 = PORTB
    bld    r16,LED        ; LEDbit in r16 = r20.0
    out    PORTB,r16      ; LEDbit in PORTB = r20.0

    pop    r16
    out    SR,stat
    reti

Тогда уж так
Код
ovr1: sbic   portb,1     ;skip if <1>pb=0
      rjmp   ovr2        ;<1>pb=0
      sbi    portb,1     ;1--><1>pb
      reti               ;
ovr2: cbi    portb,1     ;0--><1>pb
      reti               ;

Люди ещё больше потянутся(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 04:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016