Mitch64
03.09.2016, 10:10
Hallo zusammen,
ich habe mal eine Frage zum Alias in Bascom.
Alias ist doch ein ErsatzBezeichnung?
In der Bascom-Hilfe steht etwa, dass man damit Pins/Ports einen Namen verpassen kann. Ist auch logisch und funktioniert.
Beispiel: LED Alias PortB.1
Damit kann ich LED (also den Alias) anstelle der Port-Bezeichnung verwenden. Alles gut.
Nun hatte ich das Problem bei einer Lib schreiben, die einen externen Interrupt verwenden soll, dass ich nicht vorhersehen kann, welchen externen Interrupt (INT0/INT1) der Benutzer letztendlich verwendet.
Kurzum wollte ich für den externen Interrupt einen Alias verwenden. Gleiches gilt auch für einen 8-Bit Timer, den ich in der Lib verwende.
Auch hier weiß ich nicht, ob der Timer vom Anwender nicht bereits verwendet wird und man auf den Anderen Timer ausweichen muss.
Also dachte ich, ich verwende einfach einen Alias für den externen Interrupt (MyInterrupt) und auch einen Alias für den Timer (MyTimer).
Der Alias funktioniert leider nur beim Timer, nicht aber beim Interrupt.
Ich habe hier ein kleines Demo geschrieben für BascomAVR (2.0.7.8), welches genau den Sachverhalt demonstriert.
' Demo,
' Alias für Timer und externe Interrupts verwenden
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
MyInterrupt Alias INT0 ' Alias für ext. Interrupt setzen (INT0|INT1)
MyTimer Alias Timer0 ' Alias für 8-Bit Timer (TIMER0|TIMER2)
' Alias mit Timer geht offensichtlich
Config MyTimer = Timer , Prescale = 8 ' geht!
' Alias mit Interrupt geht nur teilweise
Config MyInterrupt = Rising ' geht!
On MyInterrupt ISR_INTn ' geht wohl nicht
Enable MyInterrupt ' geht wohl auch nicht
Enable Interrupts ' Global Interrupts zulassen
Do
' nichts zu tun
Loop
ISR_INTn:
' Interrupt-Routine
Return
Könnt ihr mir sagen, warum das nicht geht?
Oder muss ich das anders machen?
Der Compiler meckert jedenfalls.
Danke für eure Tips.
Micha
ich habe mal eine Frage zum Alias in Bascom.
Alias ist doch ein ErsatzBezeichnung?
In der Bascom-Hilfe steht etwa, dass man damit Pins/Ports einen Namen verpassen kann. Ist auch logisch und funktioniert.
Beispiel: LED Alias PortB.1
Damit kann ich LED (also den Alias) anstelle der Port-Bezeichnung verwenden. Alles gut.
Nun hatte ich das Problem bei einer Lib schreiben, die einen externen Interrupt verwenden soll, dass ich nicht vorhersehen kann, welchen externen Interrupt (INT0/INT1) der Benutzer letztendlich verwendet.
Kurzum wollte ich für den externen Interrupt einen Alias verwenden. Gleiches gilt auch für einen 8-Bit Timer, den ich in der Lib verwende.
Auch hier weiß ich nicht, ob der Timer vom Anwender nicht bereits verwendet wird und man auf den Anderen Timer ausweichen muss.
Also dachte ich, ich verwende einfach einen Alias für den externen Interrupt (MyInterrupt) und auch einen Alias für den Timer (MyTimer).
Der Alias funktioniert leider nur beim Timer, nicht aber beim Interrupt.
Ich habe hier ein kleines Demo geschrieben für BascomAVR (2.0.7.8), welches genau den Sachverhalt demonstriert.
' Demo,
' Alias für Timer und externe Interrupts verwenden
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
MyInterrupt Alias INT0 ' Alias für ext. Interrupt setzen (INT0|INT1)
MyTimer Alias Timer0 ' Alias für 8-Bit Timer (TIMER0|TIMER2)
' Alias mit Timer geht offensichtlich
Config MyTimer = Timer , Prescale = 8 ' geht!
' Alias mit Interrupt geht nur teilweise
Config MyInterrupt = Rising ' geht!
On MyInterrupt ISR_INTn ' geht wohl nicht
Enable MyInterrupt ' geht wohl auch nicht
Enable Interrupts ' Global Interrupts zulassen
Do
' nichts zu tun
Loop
ISR_INTn:
' Interrupt-Routine
Return
Könnt ihr mir sagen, warum das nicht geht?
Oder muss ich das anders machen?
Der Compiler meckert jedenfalls.
Danke für eure Tips.
Micha