Commande SERIN dans le module AXE133Y ? (Serial OLED display interface)

zorgloub

Member
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 !?


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
Merci pour votre aide.
 
Last edited:

PieM

Senior Member
Bonjour,
Le code lit bien 2 bytes.

Si on a une boucle rapide, on peut très bien avoir des serin qui se suivent.
serin xxxx , xxxx,( b1)
serin xxxx , xxxx,( b2)
donnera le même résultat que
serin xxxx , xxxx,( b1, b2)
 
Top