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).
Erwähnen will ich noch, dass Bascom die Inkey-Routine für die Software UART der Atmel application note AVR305 entsprechen.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
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)
...schön zu sehen, wie Bascom immer ein paar Register zu viel mit herumschlepptCode:; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ 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







Zitieren

Lesezeichen