IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

Timer en µsecondes


Sujet :

x86 16-bits Assembleur

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2002
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Timer en µsecondes
    Quelles sont les interruptions BIOS et DOS permettants d'avoir un comptage du temps le plus petit possible (vitesse du quartz de la CM ?).
    C'est pour essayer d'obtenir une vitesse variable et contrôlable des datas sur le port parrallèle (ECP)?[/img][/quote]

  2. #2
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    C'est l'int 0 qui est en charge de l'horloge interne. Néanmoins, il ne faut pas tenter de détourner cette interruption.

    A la place, il faut se servir de l'int 8, dont on peut modifier la fréquence d'appel avec le port 41h (si j'ai bonne mémoire).

    Si jamais la précision nécessaire est moindre, alors on peut se contenter de détourner l'int 1Ch, appelée par l'int 8 en standard, mais à intervalles plus longs.

    A+
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  3. #3
    fd
    fd est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 162
    Points
    162
    Par défaut irq et int
    Il faut utiliser l'IRQ 8 soit l'int 70h.
    Il faut avant la valider sur le PIC.

    Par défaut cette irq fait 1024 it/secondes
    mais elle peut etre reprogrammé

    Fait des recherches sur RTC (Real Time Clock)

  4. #4
    jbe
    jbe est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 32
    Points : 38
    Points
    38
    Par défaut
    moi,

    j'ai developpe il y a un petit moment, mes propres routines de gestion de l'IRQ0 via le 8253 et ca fonctionne tres bien !

    a+

    JB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    ;       Variables du Timer 8253
    old_irq0        dd      ?               ; 
     
    debut:
    ;       installation de la routine du timer 8253
            call    rinstall8253irq         ;sauvegarde les irq du 8253
     
    lance:
            call    rselectfreq8253irq      ;ajuste le compteur du 8253
                                            ;sur la frequence en cours
    fin:
            call    rrestore8253irq         ;retabli l'interruption du 8253
     
     
    ;********************************************************************
    ;   TIMER_PROCEDURE
    ;********************************************************************
    timer_procedure proc    near
     
            push    ds
            push    es
            pushad
     
            mov     ax,cs
            mov     ds,ax
     
    ; Vos routines
    ;
    ;  ICI
    ;
     
    fintimerprocedure:
            popad
            pop     es
            pop     ds        
            iret
    timer_procedure  endp                    
     
     
    ;       Gestion du timer 8253
     
    CONTROL_8253    equ     43h
    COUNTER_0       equ     40h
     
     
    ;********************************************************************
    ;   RINSTALL8253IRQ
    ;********************************************************************
    rinstall8253irq  proc    near
     
     
    ;       Sauve l'ancienne IRQ0
            mov     eax,gs:[08h*4]
            mov     old_irq0,eax        
     
    ;       Installe la nouvelle IRQ0
            mov     ax,cs
            shl     eax,16
            mov     ax,offset timer_procedure
            mov     gs:[08h*4],eax
     
            ret
    rinstall8253irq endp
     
    ;********************************************************************
    ;   RRESTORE8253IRQ
    ;********************************************************************
    rrestore8253irq  proc    near
     
    ;       restore l'ancienne frequence
            mov     eax,18                  ;c'est a dire 1 193 180 fois
            mov     ebx,eax
     
            mov     ax,03ch
            out     CONTROL_8253,ax
            xor     edx,edx
            mov     eax,1193180
            div     ebx
     
            cmp     eax,0ffffh
            jb      okfreq
            mov     ax,0ffffh
    okfreq:
     
            out     COUNTER_0,al
            mov     al,ah
            out     COUNTER_0,al
     
    ;       restore l'ancienne routine
            xor     eax,eax
            mov     eax,old_irq0
            mov     gs:[08h*4],eax
     
            ret
    rrestore8253irq endp
     
     
    ;********************************************************************
    ;   RSELECTFREQ8253IRQ
    ;********************************************************************
    rselectfreq8253irq  proc    near
     
     
            xor     ax,ax
            mov     ax,frequence
            mov     ebx,eax
     
            mov     ax,03ch
            out     CONTROL_8253,ax
            xor     edx,edx
            mov     eax,1193180
            div     ebx
     
            cmp     eax,0ffffh
            jb      okfreq
            mov     ax,0ffffh
    okfreq:
     
            out     COUNTER_0,al
            mov     al,ah
            out     COUNTER_0,al       
     
            ret        
    rselectfreq8253irq  endp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Timer avec pas de 1 micro-seconde
    Par ApprentiIngenieur dans le forum C
    Réponses: 9
    Dernier message: 30/01/2015, 22h47
  2. Timer de 3 secondes, puis stop !
    Par gastoncs dans le forum VB.NET
    Réponses: 4
    Dernier message: 15/07/2011, 13h59
  3. [80c535] Timer de 3 secondes et gestion d'un afficheur HD44780U
    Par malabar969 dans le forum Autres architectures
    Réponses: 7
    Dernier message: 02/12/2010, 23h50
  4. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  5. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo