PDA

Visualizza la versione completa : Assembler - Funzione Timer ?


Paulin
20-02-2005, 23:01
risolto il problema dell'Entry Point ora mi trovo ad affrontare un nuovo scoglio...

Con questo codice riesco ad accendere un led collegato al Pin 2 - GND della porta parallela:

MOV DX,0378H
MOV AL,1
OUT DX,AL

...e così lo spengo:

MOV DX,0378H
MOV AL,0
OUT DX,AL

Ora, tra i due codici vorrei iserire una funzione Timer per tenerlo acceso un tempo determinato. Ho rivoltato i miei manuali ma non sono riuscito a trovare qualcosa del genere, o più probabilmente sono io che non riesco a trovare una soluzione che potrei avere sotto il naso.

Qualche suggerimento?

Paolo

cso
21-02-2005, 12:41
Le cose sono due:

1- Usi le PUSH e le POP
2- Usi il Timer del sistema

Se usi le push e le pop riuscirai a produrre un ritardo che andrà bene solo alla macchina in cui stai provando il programma infatti, se lo esegui su un 286 vedrai che il ritardo sarà molto più grande che in un pentium 4.

Se usi il timer del sistema il tuo ritardo sarà uguale sia su un 286 che su un pentium 4.

PUSH POP:


Delay: MOV CX,000FFh ; cambia questo valore
Ciclo1: PUSH CX
MOV CX,0FFFFh ; e a limite questo per
; variare la durata del
; del ritardo
Ciclo2: LOOP Ciclo2
POP CX
LOOP Ciclo1
RET

TIMER DEL SISTEMA:
http://www.giobe2000.it/Giobe/Giobe.zip

Scaricando questa libreria potrai usare il timer del sistema.
Se devi fare un programma casereccio volendo puoi anche copiare solo il pezzo di codice che ti interessa senò devi chiedere a Giorgio Ober (l'admin del sito Giobe2000) che tra l'altro è iscritto anche a questo forum.
http://forum.html.it/forum/member.php?s=&action=getinfo&userid=24084

Paulin
21-02-2005, 13:41
Grazie cso per i preziosi suggerimenti, li testerò al più presto e li aggiungerò alle mie nuove aquisizioni.

Nel frattempo avevo trovato un metodo che sembra funzionare:

MOV CX, valore
MOV AH, 86h
INT 15h

Dove "valore" è una variabile temporale, ma non ho ancora capito se attinge al clock del processore o al timer di sistema.

P.S. In queste giornate buie e fredde, anziché fare le parole crociate, ho incominciato a studiare l'assembler. Le pagine e i manuali di Giobe2000 sono una risorsa inegualiabile che ho scoperto solamente pochi giorni fa e ancora ho da studiarli a fondo. Non sapevo che navigasse anche su questo forum.

Paolo :ciauz:

cso
21-02-2005, 14:28
Essendo una Interrupt attinge al BIOS e naturalmete ce ne sono di tanti tipi.

Qui dice che dipende dalla versione del bios (come volevasi dimostrare) (http://www.ctyme.com/intr/rb-1525.htm)



P.S. In queste giornate buie e fredde, anziché fare le parole crociate, ho incominciato a studiare l'assembler. Le pagine e i manuali di Giobe2000 sono una risorsa inegualiabile che ho scoperto solamente pochi giorni fa e ancora ho da studiarli a fondo. Non sapevo che navigasse anche su questo forum.
Una volta ogni tanto ci viene ma non sperare di trovarlo spesso :(

Quell'uomo è diventato un'idolo per me (anche meglio di superman :zizi: )

Loading