Accueil > > > COMMUNICATION SÉRIE RS232 AVEC INTERRUPTIONS
COMMUNICATION SÉRIE RS232 AVEC INTERRUPTIONS
Information sur la source
Description
Ce code permet la communication série entre deux PCs. Lors de la reception d'un nouveau caractère sur la liaison série, l'interruption IRQ4 se déclenche, et une routine prend en charge son traitement. Une interruption est aussi générée dans le cas d'une erreur de réception.
Source
- .386
-
- donnees segment
-
- ;;;;;;;;;;;;;;; Port COM ;;;;;;;;;;;;;;;;;;;;
-
- commprt equ 03F8h ; adresse de base du com1
- THR equ commprt ; THR
- DL_LSB equ commprt ; divisor latch LSB
- DL_MSB equ commprt+1 ; divisor latch MSB
- IER equ commprt+1 ; IT enable
- IIR equ commprt+2 ; IT identification
- FCR equ commprt+2 ; Fifo ctrl register
- LCR equ commprt+3 ; ctrl ligne
- MCR equ commprt+4 ; ctrl modem
- LSR equ commprt+5 ; status ligne
- MSR equ commprt+6 ; status modem
-
- ;;;;;;;;;;;;;;; Controlleur d'interruption ;;;;;;;;;
-
- interr equ 21h
-
- donnees ends
-
- pile segment stack
- dw 80 dup(?)
- pile ends
-
- code segment use16
-
- assume cs:code,ds:donnees
- prog proc far
-
- ;;;;;;;;;;;;; Sauvegarde des registres ;;;;;;;;;;;;;;;
-
- push ds
- push es
- push ax
- push si
- push dx
-
- ;;;;;;;;;;;;; Initialisation des registres de segments ;;;;;;;;;;;;;;;;;;
-
- mov ax,donnees
- mov ds,ax
- mov es,ax
-
- ;;;;;;;;;;;;; détournement de l'IRQ4 ;;;;;;;;;;;;;;;;;
-
- cli ; désactive les interruptions
- xor ax,ax
- mov fs,ax ; fs = 0
- mov dx,interr
- in al,interr ; lecture du masque d'interruption
- and al,0EFh ; démasque l'IRQ4
- out dx,al ; écriture du masque
- mov ax,cs ;
- shl eax,16 ; eax = cs00h
- mov ax,offset irq4 ; eax contient segment et offset de la nvlle routine d'interruption
- mov fs:[0Ch*4],eax ; détourne l'irq4
-
- ;;;;;;;;;;;;; Initialisation du port COM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- mov al,80h ; DLAB=1
- mov dx,LCR
- out dx,al
-
- mov al,0Ch ; 9600 bits/s
- mov dx,DL_LSB
- out dx,al
- xor al,al
- mov dx,DL_MSB
- out dx,al
-
- mov al,03h ; DLAB=0, 8 bits de données, 1 bit d'arrêt, aucune parité
- mov dx,LCR
- out dx,al
-
- mov al,5 ; Active l'interruption donnee prete et l'interruption de changement du status de ligne
- mov dx,IER
- out dx,al
-
- sti ; Autorise les interruptions
-
- ;;;;;;;;;;;;; programme principal ;;;;;;;;;;;;;;;;;;;;;;
-
-
- start:
- xor si,si
- lea dx,moi
- mov ah,09h
- int 21h
-
-
- loop1:
- xor ax,ax ; lecture d'un caractère
- int 16h
- call send_char
-
- cmp al,27 ; teste si touche=esc
- jz fin ; sortir
-
- mov dl,al ; afficher le caractère
- mov ah,02h
- int 21h
-
- jnz loop1
-
- send_quit:
- call send_char
- fin:
- pop dx
- pop si
- pop ax
- pop es
- pop ds
-
- mov ax,4C00h
- int 21h
- prog endp
-
- irq4:
- push ax
- push dx
- push ds
-
- ;;;;; Source de l'interruption ;;;;;;
-
- mov dx,IIR
- in al,dx
- and al,6 ; conserver que bits 1 et 2
- test al,6
- jz erreur_ligne ; erreur ligne
-
- ; sinon donnée prête
- mov dx,commprt ; lit un caractère du tampon de réception
- in al,dx
-
- mov dl,al
- mov ah,02h ; l'affiche à l'écran
- int 21h
- jmp fin_irq4
-
- erreur_ligne:
- mov dx,LSR ; lecture de l'état de la ligne
- in al,dx
- test al,2 ; si bit 1 est = 1 => erreur overrun
- jz overrun
- test al,8
- jz cadrage ; si bit 3 est = 1 => erreur cadrage (forme)
- jmp fin_irq4
-
- overrun:
- lea dx,overrun_msg
- mov ax,cs
- mov ds,ax
- mov ah,9
- int 21h
- jmp fin_irq4
-
- cadrage:
- lea dx,cadrage_msg
- mov ax,cs
- mov ds,ax
- mov ah,9
- int 21h
-
- fin_irq4:
- mov al,20h ; EOI
- out 20h,al
- pop ds
- pop dx
- pop ax
- iret
-
- overrun_msg db "erreur overrun$"
- cadrage_msg db "erreur cadrage$"
-
- ;;;;;;;;;;;;; routine d'envoi d'un caracactère ;;;;;;;;;;;;;;;;
-
- send_char proc near
- push dx
- push ax
- mov dx,LSR
- attend:
- in al,dx
- test al,20h
- jz attend
- pop ax
- mov dx,commprt
- out dx,al
- pop dx
- ret
- send_char endp
-
-
- code ends
- end prog
.386
donnees segment
;;;;;;;;;;;;;;; Port COM ;;;;;;;;;;;;;;;;;;;;
commprt equ 03F8h ; adresse de base du com1
THR equ commprt ; THR
DL_LSB equ commprt ; divisor latch LSB
DL_MSB equ commprt+1 ; divisor latch MSB
IER equ commprt+1 ; IT enable
IIR equ commprt+2 ; IT identification
FCR equ commprt+2 ; Fifo ctrl register
LCR equ commprt+3 ; ctrl ligne
MCR equ commprt+4 ; ctrl modem
LSR equ commprt+5 ; status ligne
MSR equ commprt+6 ; status modem
;;;;;;;;;;;;;;; Controlleur d'interruption ;;;;;;;;;
interr equ 21h
donnees ends
pile segment stack
dw 80 dup(?)
pile ends
code segment use16
assume cs:code,ds:donnees
prog proc far
;;;;;;;;;;;;; Sauvegarde des registres ;;;;;;;;;;;;;;;
push ds
push es
push ax
push si
push dx
;;;;;;;;;;;;; Initialisation des registres de segments ;;;;;;;;;;;;;;;;;;
mov ax,donnees
mov ds,ax
mov es,ax
;;;;;;;;;;;;; détournement de l'IRQ4 ;;;;;;;;;;;;;;;;;
cli ; désactive les interruptions
xor ax,ax
mov fs,ax ; fs = 0
mov dx,interr
in al,interr ; lecture du masque d'interruption
and al,0EFh ; démasque l'IRQ4
out dx,al ; écriture du masque
mov ax,cs ;
shl eax,16 ; eax = cs00h
mov ax,offset irq4 ; eax contient segment et offset de la nvlle routine d'interruption
mov fs:[0Ch*4],eax ; détourne l'irq4
;;;;;;;;;;;;; Initialisation du port COM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov al,80h ; DLAB=1
mov dx,LCR
out dx,al
mov al,0Ch ; 9600 bits/s
mov dx,DL_LSB
out dx,al
xor al,al
mov dx,DL_MSB
out dx,al
mov al,03h ; DLAB=0, 8 bits de données, 1 bit d'arrêt, aucune parité
mov dx,LCR
out dx,al
mov al,5 ; Active l'interruption donnee prete et l'interruption de changement du status de ligne
mov dx,IER
out dx,al
sti ; Autorise les interruptions
;;;;;;;;;;;;; programme principal ;;;;;;;;;;;;;;;;;;;;;;
start:
xor si,si
lea dx,moi
mov ah,09h
int 21h
loop1:
xor ax,ax ; lecture d'un caractère
int 16h
call send_char
cmp al,27 ; teste si touche=esc
jz fin ; sortir
mov dl,al ; afficher le caractère
mov ah,02h
int 21h
jnz loop1
send_quit:
call send_char
fin:
pop dx
pop si
pop ax
pop es
pop ds
mov ax,4C00h
int 21h
prog endp
irq4:
push ax
push dx
push ds
;;;;; Source de l'interruption ;;;;;;
mov dx,IIR
in al,dx
and al,6 ; conserver que bits 1 et 2
test al,6
jz erreur_ligne ; erreur ligne
; sinon donnée prête
mov dx,commprt ; lit un caractère du tampon de réception
in al,dx
mov dl,al
mov ah,02h ; l'affiche à l'écran
int 21h
jmp fin_irq4
erreur_ligne:
mov dx,LSR ; lecture de l'état de la ligne
in al,dx
test al,2 ; si bit 1 est = 1 => erreur overrun
jz overrun
test al,8
jz cadrage ; si bit 3 est = 1 => erreur cadrage (forme)
jmp fin_irq4
overrun:
lea dx,overrun_msg
mov ax,cs
mov ds,ax
mov ah,9
int 21h
jmp fin_irq4
cadrage:
lea dx,cadrage_msg
mov ax,cs
mov ds,ax
mov ah,9
int 21h
fin_irq4:
mov al,20h ; EOI
out 20h,al
pop ds
pop dx
pop ax
iret
overrun_msg db "erreur overrun$"
cadrage_msg db "erreur cadrage$"
;;;;;;;;;;;;; routine d'envoi d'un caracactère ;;;;;;;;;;;;;;;;
send_char proc near
push dx
push ax
mov dx,LSR
attend:
in al,dx
test al,20h
jz attend
pop ax
mov dx,commprt
out dx,al
pop dx
ret
send_char endp
code ends
end prog
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Interruption Bios ou Dos ? [ par Valmont ]
Quand choisir d'utiliser une int Dos plutot que Bios et inversement qd il y a + ou - doublon, comme par ex. pour la lecture/ecriture de secteur sur un
interruption du bios et du dos sous windows [ par eedy31 ]
eedy31Salut a tous est ce que quelqu'un pourait m'aider car je ne sais pascomment faire pour utiliser les interruption du dos et du bios sous windows!
Rs232 et pic16f84 [ par bwoufy82 ]
Voila je recherche un code source en C (qui sera ensuite mis dans le pic16f84)qui a pour but de recupere un caractere au pic, envoyé par mon soft ecri
probleme avec l interruption affichage de chaine [ par M0NTOYA ]
bon voila mon probleme ,qd j utilse cette procedure(presentation) pour afficher une chaine de caractere presentation PROC PUSHA MOV AH,09h INT 21h POP
probleme avec l interruption affichage de chaine [ par M0NTOYA ]
bon voila mon probleme ,qd j utilse cette procedure(presentation) pour afficher une chaine de caractere presentation PROC PUSHA MOV AH,09h INT 21h POP
liaison rs232 avec pic16f84a [ par Lastar ]
Bonjour à tous, voila je voudrais allumer et éteindre une led à partir du clavier d'un PC. J'ai donc pour cela mis un MAX232CPE avec le pic. Le prob
interruption BIOS [ par project0 ]
est ce quelqu un connais les interruptions BIOS qui arrete le systeme ( avec mise sous tension ) et celle qui permet un reboot ( redemarrage propre pa
communication par liaison rs232 vers LCD graphic [ par lcoumar ]
Bonjours!voilà je suis débutant en asembleur, j'envoie d'un pc des chaines de caractère vers un afficheur LCD graphic(type hitachi LMG6912)via la liai
Creation commande port série [ par hypotamtam ]
Bonjours, je suis novice dans l'electronique et je voudrais savoir si quelqu'un pourrais m'aide ou me donner des liens internet.Je souhaiterai juste s
rs232 & assembleur& c++ version microsoft [ par elbair32 ]
bonjour;je n'arrive pas à ecrire une fonction sur c++ en utilisant dedant des mnemoniques Tasm pour gérer les ports série je sais comment sa se fait e
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE [WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE[WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE par FREMYCOMPANY
Je pense qu'ils ont besoin d'une piqure de rappel chez Microsoft : c'est bien gentil d'avoir une interface jolie, mais si c'est pour avoir un truc qui ne convainct pas dedans, c'est peine perdue.
---->
Système ouvert ----> Fermé ?
P...
Cliquez pour lire la suite de l'article par FREMYCOMPANY
Forum
RE : CSHARPRE : CSHARP par ghuysmans99
Cliquez pour lire la suite par ghuysmans99
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|