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
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|