Het lukt mij aardig met AVR en assembly maar nu probeer ik vanaf mijn main programma een RCALL te doen naar een label. Dit gebeurd ook en op het einde van het label heb ik ook een RET (return) functie. Nu knippert bv laag 2 en daarna wil ik laag 4 laten knipperen. Maar nu blijft alleen de eerste call doorgaan. Ik snap er echt niks van, mischien dat iemand mij de goede richting kan wijzen wat ik fout doe. Het is wel zo als ik CBI en SBI in de main gebruik zonder call te maken naar die functies dat het wel werkt. Hier is mijn lap code:
Code: Selecteer alles
;********************************************************
;* The Cube *
;* Atmel AVR Atmega 32 4x4x4 Mono LEDCube *
;* *
;* Created by Jerry Jacobs *
;* Released under GPLv3 *
;* *
;********************************************************
;**********************
;* ATMega32 Include's *
;**********************
.DEVICE ATmega32 ;Device ATmega 32
;--------------
;PORTA Settings
.EQU PORTA =0x1b ;PORTA Data Register
.EQU DDRA =0x1a ;PORTA Data Direction
;*********************************************
;* Layer settings, on PORTA (pin PA0 to PA3) *
;*********************************************
.equ layer1 = 0 ;Layer 1 on pin PA0
.equ layer2 = 1 ;Layer 2 on pin PA1
.equ layer3 = 2 ;Layer 3 on pin PA2
.equ layer4 = 3 ;Layer 4 on pin PA3
;****************
;* Jump to INIT *
;****************
rjmp init ;Initalisation
;****************************
;* Controller Initalisation *
;****************************
init: sbi DDRA, layer1 ;Set Layer 1 bit on DDRA pin PA0
sbi DDRA, layer2 ;Set Layer 2 bit on DDRA pin PA1
sbi DDRA, layer3 ;Set Layer 3 bit on DDRA pin PA2
sbi DDRA, layer4 ;Set Layer 4 bit on DDRA pin PA3
;****************
;* Main Program *
;****************
.EQU CPU_FREQUENCY=1000000
.CSEG
.INCLUDE "DELAY-MACRO.H"
main: ;rcall layer
;sbi PORTA, layer4
rcall layer2_blink
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;sbi PORTA, layer1 ;Layer 1 On
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;sbi PORTA, layer2 ;Layer 2 On
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;cbi PORTA, layer2
;rcall layer2off
;sbi PORTA, layer3 ;Layer 3 On
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;sbi PORTA, layer4 ;Layer 4 On
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;rcall clr_layers ;Clear Layers
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;sbi PORTA,layer4
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;sbi PORTA,layer3
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;sbi PORTA,layer2
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;sbi PORTA,layer2
;_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
;rcall clr_layers
;_WAIT_10mS CPU_FREQUENCY,8 ;MAKES 80mS DELAY
;rjmp main ;Loop
rjmp main
;*************************
;* Clear Layers Function *
;*************************
clr_layers: CBI PORTA, layer1 ;Clear Layer 1 bit on PORTA
CBI PORTA, layer2 ;Clear Layer 2 bit on PORTA
CBI PORTA, layer3 ;Clear Layer 3 bit on PORTA
CBI PORTA, layer4 ;Clear Layer 4 bit on PORTA
;RET ;Return to code
layer: _WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
SBI PORTA, layer1
_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
CBI PORTA, layer1
RETI
layer2_blink: _WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
SBI PORTA, layer2
_WAIT_10mS CPU_FREQUENCY,40 ;MAKES 80mS DELAY
CBI PORTA, layer2
RET
layer2off: CBI PORTA,layer2
RET