Trasmissione caratteri via seriale

Stato
Discussione chiusa ad ulteriori risposte.

R4z0r_Cr4sH

Utente Electrum
10 Giugno 2007
501
11
6
148
Posto il codice fatto questa mattina a scuola (in sistemi) che permette (anche se molto semplicemente) di far comunicare via seriale due pc.Supporta il tasto invio (che manda il cursore a capo su entrambi i pc) ed è possibile terminare su entrambi i pc il programma digitando semplicemente "-" (senza virgolette :p).Il codice è ampliamente commentato tuttavia per ogni domanda non esitate :D!

Codice:
;R4z0r_Cr4$H

DOSSEG
.MODEL SMALL
.DATA
       
btot db 00000000b
s_v db 10,13,'inserire la velocità (digitare 1 per 9600 o 2 per 4800):$'
s_l db 10,13,'inserire la lunghezza del carattere (digitare 1 per 8bit o 2 per 7bit):$'
s_e db  10,13,'Valore errato!',10,13,'$'

.CODE
inizio: mov AX, @DATA
        mov DS, AX

 fase1: mov ah, 9             ;stampa a
        mov dx,offset s_v    ;video la
        int 21h              ;stringa s_v

        mov AH,01h           ;attende che si
        int 21h              ;prema un tasto,il carattere viene messo in AL

        cmp al,49            ;controlla se il carattere
        jne p1               ;immesso è 1
        or btot,11100000b    ;concatena a btot 9600
        jmp v2
     p1:cmp al,50            ;controlla se il carattere
        jne p2               ;immesso è 2
        or btot,11000000b    ;concatena a btot 4800
        jmp v2

     p2:mov ah, 9            ;stampa a
        mov dx,offset s_e    ;video la
        int 21h              ;stringa s_e
        jmp fase1

     v2:mov ah, 9            ;stampa a
        mov dx,offset s_l    ;video la
        int 21h              ;stringa s_l

        mov AH,01h           ;attende che si
        int 21h              ;prema un tasto,il carattere viene messo in AL

        cmp al,49            ;controlla se il carattere
        jne p11              ;immesso è 1
        or btot,00000011b    ;concatena a btot 8bit
        jmp v3
     p11:cmp al,50           ;controlla se il carattere
        jne pe               ;immesso è 2
        or btot,00000010b    ;concatena a btot 7bit
        jmp v3

     pe:mov ah, 9            ;stampa a
        mov dx,offset s_e    ;video la
        int 21h              ;stringa s_e
        jmp v2
 
     v3:mov ah,0             ;
        mov al,btot          ;inizializza
        mov dx,0             ;la
        int 14h              ;porta

torn:
        mov ah,3             ;
        mov dx,0             ;inizia la ricezione
        int 14h              ;

        and ah,00000001b     ;controllo
        cmp ah,0             ;di parità
        je contrt            ;

        mov ah,2             ;riceve
        mov dx,0             ;il carattere
        int 14h              ;dalla seriale

        mov ah,02h           ;stampa
        mov dl,al            ; a
        int 21h              ; video

        cmp al,45            ;se riceviamo il carattere ' - '
        je fine              ;termina il programma

contrt: mov ah,01h           ;effettua il controllo
        int 16h              ;nel buffer di tastiera,settando a 0 lo ZF se è presente un carattere
        jz torn              ;avvia la procedura inviaC se il flag ZF è a 1 (carattere non presente)

inviaC:     
        mov ah,00h           ;preleva il carattere
        int 16h              ;dal buffer di tastiera

        mov ah,02h           ;stampa a video
        mov bl,al
        mov dl,bl                     ;
        int 21h              ;il carattere appena letto,il carattere è in AL
        mov al,bl            ;
         
        mov ah,01h           ;Invia il carattere
        mov dx,0             ;sulla porta seriale
        int 14h              ;

        cmp bl,13            ;controlla se si preme ' invio '
        jnz ex               ;se  è diverso da invio salta all'etichetta ex

        mov dl,10            ;stampo a
        mov ah,2             ;video
        int 21h              ;line feed (vai a capo)

        mov ah,01h           ;invia
        mov dx,0             ;sulla porta
        mov al,10            ;seriale il
        int 14h              ;line feed (vai a capo)


 ex:    cmp bl,45            ;se il carattere è ' - '
        je fine              ;termina il programma
        jmp torn



fine: mov AH, 4Ch
      int 21h
      end inizio

[ot]wow...so 2 anni che non programmo in assembly :D![/ot]
 
uhm bravo...per essere due anni che stavi fermo non sei niente male(scherzo sei il migliore e non lo nego soprattutto in java) comunque l'importante è tenere allenata la mente che le idee vengono da li poi se queste idee si trasformano in programmi o altro ben venga......
 
Stato
Discussione chiusa ad ulteriori risposte.