logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C] Jak ustawić przerwanie Timera 2 co 1 ms na DS89C450? Wyjaśnienie CYCLE 20

ostryas 07 Lis 2007 14:53 1760 4
REKLAMA
  • #1 4455405
    ostryas
    Poziom 13  
    Posty: 121
    Pomógł: 2
    Ocena: 12
    Mam szybkie pytanko: Jak ustawić przerwanie od Timera 2 (procek DS89C450) np co 1 ms. Początek programu jest następujący:

    
    #include <REG420.H>                
    #include <stdio.h>
    #include <stdlib.h>                
    #include <intrins.H>
    #include <absacc.H>
    #include "MAX1270.h"
    
    #define WDIR 0x4FFFF
    
    #define IE3 0x20
    #define IE5 0x80
    
    #define XtalFreq (11059490)/*main crystal frequency */
    #define  TM0_DIV (-XtalFreq/1200*5) /* 50 ms */
    #define  CYCLE    20  /* 1 s */
    #define  L1SEK    20  /* 1 s */
    


    i może ktoś mi wyjaśniić łopatologicznie dlaczego CYCLE 20 to jedna sekunda wiem że jest to 50ms*20. I wiem skąd jest 50 ms. Tylko programowo jak to 20 ma sie do 50ms...

    Pozdrawiam wszystkich

    ostry
  • REKLAMA
  • Pomocny post
    #2 4455551
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Program skacze do przerwania co 50ms więc żeby odmierzyć 1s musi skoczyć 20 razy. Poprostu w programie jest zmienna która jest ładowana stałą 20 i odejmuje się w każdym przerwaniu o jeden. Jak dojdzie do zera to jest 1s i cykl się powtarza (znowu jest przypisywane 20).

    np:
    co 50ms w przerwaniu:

    if(zmienna){zmienna--;}
    else {
              zmienna=CYCLE;
              MINELA_SEKUNDA=1;
            }
  • REKLAMA
  • #3 4455567
    ostryas
    Poziom 13  
    Posty: 121
    Pomógł: 2
    Ocena: 12
    Dzięki dzięki jest jasne!!! :D Tylko teraz jeszcze pomóżcie z tym przerwaniem od Timera co 1 ms...

    ostry
  • REKLAMA
  • Pomocny post
    #4 4455593
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Skoro dla 50ms
    #define  TM0_DIV (-XtalFreq/1200*5) /* 50 ms */ 


    to dla 1ms będzie 50 razy mniej :wink:

    #define  TM0_DIV (-XtalFreq/((1200*5)/50) /* 1 ms */


    W sumie to tak wnioskuję bo nie przedstawiłeś kodu inicjalizacji timera i nie wiem jak ta etykieta TM0_DIV jest uwzględniana.
  • #5 4455617
    ostryas
    Poziom 13  
    Posty: 121
    Pomógł: 2
    Ocena: 12
    No dokładnie tak jak mówisz będzie jakieś zamroczenie dziś straszne mam. A pozatym to laik jestem :D Pozdro dzięki

    tylko czy nie czasami zamiast:

    
    #define  TM0_DIV (-XtalFreq/((1200*5)/50)
    


    ma być
    
    #define  TM0_DIV (-XtalFreq/1200*5)/50
    
REKLAMA