es funktioniert jetzt
hier der Code-Ausschnitt mit Soft UART als einfaches ECHO der Tastatur (Demo - ansonsten sollte ein SoftUart-Printbin einer einer ISR nie verwenden).
Code:
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600 'Die Baudrate für RS232 Ausgabe.
Open "comB.1:9600,8,n,1" For Output As #1 'pin for output
Open "comD.2:9600,8,n,1" For Input As #2 'INT0 pin for input
On Int0 Int0_int
Enable Int0
Config Int0 = Falling
Enable Interrupts
Dim A As Byte
Do
Waitms 100
Loop
End
Rem The Interrupt Handler For The Int0 Interrupt
Int0_int:
A = Inkey(#2) 'get it
Printbin #1 , A
Gifr = Gifr Or &H40 ' flag INT0 cleared (logical one)
Return
Erwähnen will ich noch, dass Bascom die Inkey-Routine für die Software UART der Atmel application note AVR305 entsprechen.
http://www.atmel.com/dyn/resources/p...ts/doc0952.pdf
http://www.atmel.com/dyn/resources/p...nts/avr305.asm
hier zum Vergleich der BASCOM-Code für 8MHz (Dissambler)
Code:
; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
sub_CF: ; CODE XREF: ROM:0070 p
sbis PINB, 0 ; Inkey()
rjmp loc_D3
clr r24
ret
; ---------------------------------------------------------------------------
loc_D3: ; CODE XREF: sub_CF+1 j
ldi r18, 9
loc_D4: ; CODE XREF: sub_CF+6 j
sbic PINB, 0
rjmp loc_D4
rcall sub_C6
loc_D7: ; CODE XREF: sub_CF+11 j
rcall sub_C6
rcall sub_C6
clc
sbic PINB, 0
sec
dec r18
breq locret_E1
ror r24
ror r25 ; warum R24 und R25 ?
rjmp loc_D7
; ---------------------------------------------------------------------------
; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
sub_C6: ; CODE XREF: sub_CF+7 p
; sub_CF+8 p ...
push r24
push r25 ;R25 ist unnötig
ldi r24, 0x63 ; 'c' ; 99 Dezimal
ldi r25, 0
loc_CA: ; CODE XREF: sub_C6+5 j
sbiw r24, 1
brne loc_CA
pop r25
pop r24
ret
; End of function sub_C6
...schön zu sehen, wie Bascom immer ein paar Register zu viel mit herumschleppt
Lesezeichen