INFO - FAQ - CC2-Forum - CCPro-Forum |
|
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 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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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ck ;exitinc: clrh lda bufferstart-buffersize,x sta $80 rts |
Antwort schreiben |