Alternativ till Cpfseq instruktionen i PIC18FXX2
Postat: 7 augusti 2006, 15:08:39
Hej allihop.
Hoppas inte detta låter för korkat, antar att inte Microchip vill göra om designen på sina mikrokontrollers men det är egentligen vad jag önskar att de gör hehe.
Som om de nu skulle det, kanske i nästa generation eller så.
Jag andvänder PIC18F442.
Skulle vilja andvända Cpfseq såhär eftersom jag har ganska mycket val på en massa ställen.
Movlw 0x00
Cpfseq Selection
Call StartMachine
Movlw 0x01
Cpfseq Selection
Call IncreaseSpeed
Movlw 0x02
Cpfseq Selection
Call StopMachine
------
Har andvänt detta system hittils:
-----
Movlw 0x00
Cpfseq Selection
Goto SkipAheadToIncreaseSpeed
Call StartMachine
SkipAheadToIncreaseSpeed
Movlw 0x01
Cpfseq Selection
Goto SkipAheadToStopMachine
Call IncreaseSpeed
SkipAheadToStopMachine
Movlw 0x02
Cpfseq Selection
Goto SomethingElse
Call StopMachine
SomethingElse
Just nu andvänder jag typ 30 selections med värden som ändras lite med tiden, brukar andvända Fsr1 och placera Indf1 i Selection:s ställe eller köra som det står här.
Har fått lära mig att man inte ska andvända Goto för att det genererar spagettikod men vad gör man annars här?
Är det inte lite dum lösning att ha mängder med lables, en för varje selection, blir lite ohållbart tycker jag, eller?
Fick detta av Microchip:
MOVF SELECTION, W
ADDWF PCL, F
BRA StartMachine
BRA IncreaseSpeed
BRA Stopmachine
BRA $ ;TRAP, CODE SHOULD NOT GET HERE
Men är det inte så att om Wreg blir större än antalet vägval så kommer exekveringen o fortsätta efter BRA $ i detta fall skulle väl programmet fortsätta på fel ställe o krasha?
Dessutom måste man ju komma ur subrutinen med en goto och spagettikoden är på god väg eller?
Hoppas inte detta låter för korkat, antar att inte Microchip vill göra om designen på sina mikrokontrollers men det är egentligen vad jag önskar att de gör hehe.
Som om de nu skulle det, kanske i nästa generation eller så.
Jag andvänder PIC18F442.
Skulle vilja andvända Cpfseq såhär eftersom jag har ganska mycket val på en massa ställen.
Movlw 0x00
Cpfseq Selection
Call StartMachine
Movlw 0x01
Cpfseq Selection
Call IncreaseSpeed
Movlw 0x02
Cpfseq Selection
Call StopMachine
------
Har andvänt detta system hittils:
-----
Movlw 0x00
Cpfseq Selection
Goto SkipAheadToIncreaseSpeed
Call StartMachine
SkipAheadToIncreaseSpeed
Movlw 0x01
Cpfseq Selection
Goto SkipAheadToStopMachine
Call IncreaseSpeed
SkipAheadToStopMachine
Movlw 0x02
Cpfseq Selection
Goto SomethingElse
Call StopMachine
SomethingElse
Just nu andvänder jag typ 30 selections med värden som ändras lite med tiden, brukar andvända Fsr1 och placera Indf1 i Selection:s ställe eller köra som det står här.
Har fått lära mig att man inte ska andvända Goto för att det genererar spagettikod men vad gör man annars här?
Är det inte lite dum lösning att ha mängder med lables, en för varje selection, blir lite ohållbart tycker jag, eller?
Fick detta av Microchip:
MOVF SELECTION, W
ADDWF PCL, F
BRA StartMachine
BRA IncreaseSpeed
BRA Stopmachine
BRA $ ;TRAP, CODE SHOULD NOT GET HERE
Men är det inte så att om Wreg blir större än antalet vägval så kommer exekveringen o fortsätta efter BRA $ i detta fall skulle väl programmet fortsätta på fel ställe o krasha?
Dessutom måste man ju komma ur subrutinen med en goto och spagettikoden är på god väg eller?