{"id":444,"date":"2022-06-16T16:46:16","date_gmt":"2022-06-16T14:46:16","guid":{"rendered":"https:\/\/www.dev-tronic.de\/?p=444"},"modified":"2024-07-16T17:32:22","modified_gmt":"2024-07-16T15:32:22","slug":"z80ardu-pc16550-ausgabe","status":"publish","type":"post","link":"https:\/\/www.dev-tronic.de\/?p=444","title":{"rendered":"Z80Ardu &#8211; PC16550 Ausgabe"},"content":{"rendered":"\n<p>Hier die Routine mit der ich die ersten Daten \u00fcber die serielle Schnittstelle des Z80Ardu ausgegeben habe:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:z80 decode:true \" >;***********************************\n;*  UART Test Program              *\n;*                                 *\n;***********************************\n \n                   ORG 0000H\n \n;******************************************************************\n;INIT_UART\n;Function: Initialize the UART to BAUD Rate 9600 (1.8432 MHz clock input)\n;DLAB  A2 A1 A0 Register\n;Dez    4  2  1\n;0      0  0  0  Receiver Buffer (read),         = 0  = $00\n;                Transmitter Holding\n;                Register (write)\n;0      0  0  1  Interrupt Enable                = 8  = $08\n;X      0  1  0  Interrupt Identification (read) = 16 = $10\n;X      0  1  0  FIFO Control (write)            = 16 = $10\n;X      0  1  1  Line Control                    = 24 = $18\n;X      1  0  0  MODEM Control                   = 32 = $20\n;X      1  0  1  Line Status                     = 40 = $28\n;X      1  1  0  MODEM Status                    = 48 = $30\n;X      1  1  1  Scratch                         = 56 = $38\n;1      0  0  0  Divisor Latch                   = 0  = $00\n;                (least significant byte)\n;1      0  0  1  Divisor Latch                   = 8  = $08\n;                (most significant byte)\n \n;******************************************************************\n \n; --&lt; Globale Variable &gt;-------------------------------------------\nstack:             equ 0CFFFH\nLCR:               equ 003H + 20H        ; Line Control Register\nLSR:               equ 005H + 20H        ; Line Status Register\nDLL:               equ 000H + 20H        ; Divisor Latch LSB\nDLM:               equ 001H + 20H        ; Divisor Latch MSB\nRBR:               equ 001H + 20H        ; Receive Buffer Register\nTHR:               equ 000H + 20H        ; Transmitter Holding Register\nFCR:               equ 002H + 20H        ; FiFo Control Register\n_8N1:              equ 00000011B         ; 8 Datenbits, ein Stopbit, keine Parit\u00e4t\n \n                             \n;******************************************************************\n;Main Program\n;Function: Display A-&gt;Z then a new line and loop\n;******************************************************************\n                  ld sp,stack           ; Stackpointer setzen\n                  ld      b, 0FFH       ;\nwait1:             nop\n                  nop\n                  nop\n                  nop\n                  nop\n                  nop\n                  nop\n                  nop\n                  nop\n                  nop\n                  djnz    wait1\n \n_again:            call    _inituart    ; Serielle Schnittstelle initialisieren\n \n                  ld      hl,_init     ; Text adressieren\n                 \n \n_mainloop:         nop\n                  nop\n                  nop\n                  in      A,(LSR)      ; Line-Status-Register lesen\n                  bit     5,A          ; Teste BIT 5. Es ist gesetzt, wenn UART bereit.\n                  jr      Z,_mainloop  ;\n             \n                   \n                  ld      a, (hl)      ; N\u00e4chsten Buchstaben im Text\n                  cp 0\n \n                  jr      z,ende     ; Dann von Vorne\n                  out     (THR),a      ; Buchstabe ausgeben\n                  inc     hl           ; n\u00e4chster Buchstabe\n                 \n                  jr      _mainloop\n \nende:             halt\n                 \n \n; --&lt; UART initialisieren &gt;---------------------------------------------------------\n_inituart:         ld     a,01H         ; FIFO anschalten\n                  out    (FCR),a      \n                  ld     A,80H         ; DLAB-Flag maskieren -- Divisor Latch\n                  out    (LCR),A\n                  ld     A,1EH         ; 38400 bps und 18,432 Mhz Takt\n                  out    (DLL),A       ; Setze BAUD Rate auf 38400\n                  ld     A,00H\n                  out    (DLM),A       ; Setze BAUD Rate auf 38400\n                  ld     A,_8N1        ;\n                  out    (LCR),A       ; 8 Datenbits, 1 Stopbit, DLAB Flag zur\u00fccksetzen\n                  or     a\n                  out    (LCR),a       ; Und normale Funktion\n                  ret\n \n; --&lt; Texte &gt;---------------------------------------------------------\n_init:             defm    1bh,\"[0;34mZ80Ardu Homebrew Computer^[[0m\",0dH,0ah\n                  defm    \"64K Byte RAM. \",0dh,0ah\n                  defm    0dh,0ah\n                  defm    \"Powered by Atmega 328 &amp; Z80\",0dh,0ah\n                  defm    0dh,0ah\n                  defm    \"\u00a9 2018 by Unilein@dev-tronic.de\",0dh,0ah<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hier die Routine mit der ich die ersten Daten \u00fcber die serielle Schnittstelle des Z80Ardu ausgegeben habe:<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[25,45,10],"class_list":["post-444","post","type-post","status-publish","format-standard","hentry","category-z80codeschnipsel","tag-8-bit","tag-pc16550","tag-z80ardu"],"_links":{"self":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=444"}],"version-history":[{"count":2,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/444\/revisions"}],"predecessor-version":[{"id":573,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/444\/revisions\/573"}],"wp:attachment":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}