Emulace komunikace 8051 po sériovém portu v Linuxu.
Komunikace s virtuální 8051 pod linuxem.
Francesco Balducci, 01.11.2010-00:00

Fígl je v použití socat k emulování sériové komunikace a uCsim k emulování čipu 8051. Vytvoříme systém jako na obrázku:


Potřebné programy jsou:


Abyste nainstalovali vše potřebné na Linuxu odvozeném od Debianu, spusťte následující jako root:

apt-get install sdcc sdcc-ucsim socat screen


Vytvořte soubor s názvem serialtest.c, to bude program, který poběží uvnitř emulátoru 8051:

  1. #include <mcs51/8051.h> //
  2. #include <stdio.h>#include <ctype.h>char getchar (void) {
  3.  char c;
  4.  while (!RI); /* wait to receive */
  5.  c = SBUF; /* receive from serial */
  6.  RI = 0;
  7.  return c;
  8. }
  9.  
  10. void putchar (char c) {
  11.  while (!TI); /* wait end of last transmission */
  12.  TI = 0;
  13.  SBUF = c; /* transmit to serial */
  14. }
  15.  
  16. void UART_Init() {
  17.  SCON = 0x50; /* configure serial */
  18.  TMOD = 0x20; /* configure timer */
  19.  TH1 = 0xE6; /* baud rate 1200 */
  20.  TL1 = 0xE6; /* baud rate 1200 */
  21.  TR1 = 1; /* enable timer */
  22.  TI = 1; /* enable transmitting */
  23.  RI = 0; /* waiting to receive */
  24. }
  25.  
  26. void main() {
  27.  UART_Init();
  28.  for(;;) {
  29.   char c;
  30.   c = getchar();
  31.   c = toupper(c);
  32.   putchar(c);
  33.  }
  34. }



Program přijme jeden bajt a pošleho převedený na velké písmeno zpět.

Přeložte program a vytvořte soubor IntelHex

sdcc -mmcs51 serialtest.c -o serialtest.ihx


Následující příkaz vytvoří v aktuálním adresáři dva pseudoterminály (tty1 a tty2). Terminály jsou propojeny navzájem jako fyzickým sériovým kabelem.

socat -v -x PTY,link=./tty1 PTY,link=./tty2


Přepínače "-v -x" vypisují kanálem přenesené bajty a označují směr přenosu a ASCII kód.

Otevřete další systémový terminál (shell) a spusťte serialtest pomocí simulátoru 8051 uCsim.

s51 serialtest.ihx -s ./tty1


Simulátor se připojí k prvnímu pseudoterminálu (tty1) a nabídne prompt; spusťte příkaz "run" abyste spustili přeložený program.

Abyste se mohli k simulátoru připojit z druhé strany kanálu, otevřete další shell a spusťte:

screen ./tty2


Program se připojí k druhému pseudoterminálu a začne přes socat komunikovat s programem v 8051. Text psaný do screen zobrazí terminál převedená programem v 8051 na velká. Vyměněná data jsou zobrazena v logu socat.

Když nastane čas na migraci do reálného hardware, tak program v C pro 8051 zůstane stejný a počítačový program (v našem příadě screen) jen potřebuje místo pseudoterminálu otevřít jiný terminál, např./dev/ttyS0 (RS232) nebo /de/ttyUSB0 (UB kabel.





Poznámka prekladatela:
Při ověřování, se mi na Debianu výše uvedený postup nepodařil rozchodit (záleží na verzii SDCC!). Ani stažení zdrojových kódů nedopadlo dobře. Nicméně v gentoo se zadařilo.
Nainstalujte si z portage subversion (svn), socat a screen.
Dále si stáhněte zdrojové soubory pomocí svn (v době překladu článku byla testována revize 6024)
svn co -r 6024 https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc~/sdcc

Pokud chcete nejnovější verzi projektu, pak vynechte přepínač '-r 6024'.
Pokud byste snad zatoužili po celém archivu pak to zařídí příkaz, po kterém bude čas na kávu.

svn co -r 6024 https://sdcc.svn.sourceforge.net/svnroot/sdcc~/sdcc

Můžeme překládat. Přejděte do adresáře sdcc, pokud jste stahovali jen
"trunk". Případně do sdcc/trunk/sdcc, pokud jste si stáhli celý archiv.

Spusťte konfiguraci
./configure

Následně spusťte jako root překlad a instalaci
make install

Poté již můžete pokračovat překladem souboru serialtest.c


Homepage projektu: http://balau82.wordpress.com: Emulating 8051 serial port communication on Linux

Zverejnené zo súhlasom autora.
Preklad, test: krepa


tento článok je z mikroZONE
( https://www.mikrozone.sk/pluginy/content/content.php?content.83 )