Bonsoir à l’Equipe des Spécialistes.
[ Post également ouvert sur le Forum-GB: http://www.picaxeforum.co.uk/showthread.php?29928-SERIN-command-in-module-AXE133Y-(Serial-OLED-display-interface) ]
Je me penche sur le code de l’interface Série pour afficheur OLED « AXE133Y » et j’ai un problème de compréhension avec la commande Serin telle qu’employée ici.
Source : http://www.picaxe.com/downloads/axe133y.bas.txt
Imaginons que le MCU du système principal envoie à l’interface Série la commande [Serout C.4, Baud,(254,192) ;Position Ligne.2, Col.1 ]
On envoie donc bien ici 2 bytes (254 et 192). Le premier pour dire "C'est une commande" et le second" pour spécifier le code de cette commande: Position = Ligne2 / Colonne 1 ".
Côté Interface série, qui reçoit ces informations, on devra donc traiter ces deux Bytes.
Pourquoi alors le code de l’interface Série emploie la commande [ Serin RX, Baud, b1 ] et non une commande du genre [ Serin RX, Baud, b1, b2 ] ?
Dans mon esprit, la commande Serin, placée en début de boucle Main, telle qu’utilisée ici, placera bien le premier byte dans b1 mais une fois cela fait, le 2ème byte sera définitivement perdu et je ne vois pas comment la commande Serin suivante, placée plus bas dans la boucle conditionnelle, captera quoi que ce soit puisqu’il n’y aura eu qu’UN SEUL Serout transmis et DEJA LU précédemment et que ce Serout n'aura été envoyé qu'une seule fois et non renouvelé lorsque ce deuxième Serin arrivera !?
Merci pour votre aide.
[ Post également ouvert sur le Forum-GB: http://www.picaxeforum.co.uk/showthread.php?29928-SERIN-command-in-module-AXE133Y-(Serial-OLED-display-interface) ]
Je me penche sur le code de l’interface Série pour afficheur OLED « AXE133Y » et j’ai un problème de compréhension avec la commande Serin telle qu’employée ici.
Source : http://www.picaxe.com/downloads/axe133y.bas.txt
Imaginons que le MCU du système principal envoie à l’interface Série la commande [Serout C.4, Baud,(254,192) ;Position Ligne.2, Col.1 ]
On envoie donc bien ici 2 bytes (254 et 192). Le premier pour dire "C'est une commande" et le second" pour spécifier le code de cette commande: Position = Ligne2 / Colonne 1 ".
Côté Interface série, qui reçoit ces informations, on devra donc traiter ces deux Bytes.
Pourquoi alors le code de l’interface Série emploie la commande [ Serin RX, Baud, b1 ] et non une commande du genre [ Serin RX, Baud, b1, b2 ] ?
Dans mon esprit, la commande Serin, placée en début de boucle Main, telle qu’utilisée ici, placera bien le premier byte dans b1 mais une fois cela fait, le 2ème byte sera définitivement perdu et je ne vois pas comment la commande Serin suivante, placée plus bas dans la boucle conditionnelle, captera quoi que ce soit puisqu’il n’y aura eu qu’UN SEUL Serout transmis et DEJA LU précédemment et que ce Serout n'aura été envoyé qu'une seule fois et non renouvelé lorsque ce deuxième Serin arrivera !?
Code:
main:
serin RX,baud,b1 ; wait for the next byte <------------Premier SERIN ------------------- 1 byte !?
; NB keep character mode test as first item in this list to optimise speed
if b1 < 253 then ; CHARACTERS
let pinsB = b1 ; output the data
pulsout enable,1 ; pulse the enable pin to send data.
goto main ; quickly loop back to top
else if b1 = 254 then ; CONTROL <--------------------------------
low rs ; change to command mode for next character
serin RX,baud,b1 ; wait for the command byte <------- Second SERIN --------------------------???????????????
let pinsB = b1 ; output the data
pulsout enable,1 ; pulse the enable pin to send data.
high rs ; back to character mode
goto main ; quickly loop back to top
else if b1 = 253 then ; MESSAGE
serin RX,baud,b1 ; wait for the next byte
gosub msg ; do the 16 character message
goto main ; back to top
else ; must be 255 ; OUTPUT
serin RX,baud,b1 ; wait for the next byte
let pinsC = b1 & %00000111 | %10000000
; output the data on C.0 to C.2, keep RS high
goto main ; back to top
end if
Last edited: