Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 AssemblerModul interruptgesteuerter serieller Empfang Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von wolfi1956 - 9.04.2012 22:06)
wolfi1956 nutzt:  CC1-M-Unit V1.1, CC1-Station V1.1, Open-Micro
Hallo  Assembler-Experten,

ich habe das Assembler-Modul von Renè Stadler ausprobiert.

Es wird der Port PTA1 als Input genutzt.
Der Beschreibung  nach ist mit kleinen Ă„nderungen der Input
auch auf PTA0 möglich.
Leider habe ich keine Ahnung, was alles dazu geändert werden muß. Deshalb hoffe ich auf eure Hilfe.
Den Port PTA1 möchte ich als Ausgang nutzen. Ich hoffe, daß das so möglich ist.

GruĂź

Wolfgang



; Serieller Input auf PTA1
; analog auf PTA0 m”glich
; geschrieben in AS05-Assembler auf der Open-Micro V0.5

  include "6808macr.asm"

pta  equ 0
pta0 equ 0 ; fr pta0
pta1 equ 1

tscr    equ $20
trst    equ 4 ; timer reset
tstop   equ 5 ; timer stop
tmodh   equ $23
tmodl   equ tmodh+1
tsc0    equ $25 ; fr pta0
tsc1    equ $28
rising  equ 2
falling equ 3
tch0l   equ $27 ; fr pta0
tch1l   equ $2A

urena    equ $e2
tovl     equ 4
mtovl    equ 1<<tovl
tim1     equ 3
mtim1    equ 1<<tim1
freeram1 equ $e6 ; sollte man korrekt &#129;ber ,x machen
freeram2 equ $e7
noreceive equ 7

bufferlen equ $bf
bufferstart equ $be
buffersize equ 8 ; kann (1,2,)4,8,16 oder 32 sein

  org $fd00    
irqservice:
  bset #trst,tscr ; timer resetten - viel einfacher so!
  sub #mtovl ; Overflow?
  brset #noreceive,freeram2,startbit ; Startbit?
  beq fromtovl ; n”tig, falls h”chstes Bit gesetzt, und kein Zeichen folgt
start1:  
  bset #tovl,urena ; Workaround
  lda tch1l ; nur low-byte auswerten
start:  
  brset #pta1,pta,weiter1 ; Carry passend setzten - negative Logik
weiter1:
  ror freeram1
  bcs exitready ; Startbit durchgeschoben?
  sub #5 ; bei prescale 64,9600Bd exakt 5,208..., praktisch 4-5
  bhi start
  brset #pta1,pta,exitishigh
exitislow:
  bclr #noreceive,freeram2 ; Flag - lesen aktiv
;  mov_imm $44,tsc1 ; toie1 - rising edge
  bset #rising,tsc1 ; sollte gen&#129;gen
exit:  
  rts
startbit:  
  bne exitislow
  rts ; war ein tovl - kann eigentlich nicht sein!
fromtovl:  
;  clra ; unn”tig durch sub
;  clc ; unn”tig durch Logik des Flags
  ror freeram1
  bcc fromtovl
exitready:
  pusha
  lda bufferlen ; L„nge
  add bufferstart ; start Ringpuffer
  and #(buffersize-1)
  tax
  lda freeram1
  coma ; negative Logik umdrehen
  sta bufferstart-buffersize,x

  inc bufferlen ; length Ringpuffer
  lda bufferlen
  cbeqa_imm (buffersize+1),incstartpointer
weiter2:

  popa
  clr freeram1
  cmp #5
  bhi exitislow ; neues Startbit?
init1:
  bclr #tovl,urena ; geh”rt zum Workaround
  bset #noreceive,freeram2 ; Flag
exitishigh:  
  mov_imm $48,tsc1 ; toie1 - falling edge
  clc ; f&#129;r Overflow-Int. , der Timer stimmt aber ohnehin nicht mehr
  rts
init: ; Initialisierung
  clr bufferstart
  clr bufferlen
init2: ; Initialisierung ohne Puffer zu l”schen
  clr freeram1
  bset #tim1,urena
  bra init1
quit:
  brclr #noreceive,freeram2,quit ; Zeichen abwarten
  clr tsc1
;  bclr #tim1,urena ; unn”tig, da keine Quelle!
  rts
getbyte:
  lda bufferlen ; length
  beq getbyte
  lda bufferstart
  and #(buffersize-1)
  tax
incstartpointer:  
  inc bufferstart
  dec bufferlen
;  bpl exitinc ; kann nicht vorkommen!
;  clr bufferlen
  cbeqa_imm (buffersize+1),weiter2 ; nach exitready zur&#129;ck
;exitinc:
  clrh
  lda bufferstart-buffersize,x
  sta $80
  rts

 Antwort schreiben

Bisherige Antworten:

Re: AssemblerModul interruptgesteuerter serieller Empfang (von ogoianer - 10.04.2012 14:11)
    Re: AssemblerModul interruptgesteuerter serieller Empfang (von wolfi56 - 10.04.2012 14:57)
        Re: AssemblerModul interruptgesteuerter serieller Empfang (von wolfi56 - 11.04.2012 19:28)
            Re: AssemblerModul interruptgesteuerter serieller Empfang (von ogoianer - 13.04.2012 12:55)