Hello,

Ik ben een programma aan het schrijven voor een atmega64 in assembler.
Ik heb op mijn print 16 uitgangen op poorten C en D.
Ik heb ook 16 ingangen op poort e, de eerste vier van poort g en de laatste vier van poort f.
Als ik onderstaande regels programmeer:

opnieuw: sbis pinf,pinf4
rjmp uit
sbi portc,pc0
uit: sbic pinf,pinf4
rjmp weg
cbi portc,pc0
weg: rjmp opnieuw

dan lukt dit voor alle ingangen behalve die van poort G.
Er verschijnt de volgende foutmelding:

operand 1 out of range: 0x63

Met welke instructies kan ik deze ingangen wel gebruiken?

Poort G kan je niet als gewone I/O gebruiken
Staat in de datasheet

Moet ik dan deze poort eerst inlezen in een register om dan de ingangen te kennen of lukt dit ook ni

Ik stel de datasheet voor, al hier ;)
Op pagina 83 staat het een en ander over poort G

Akkoord maar dit geld wanneer hij in atmega103 compatibility mode staat (zie pagina 5)

Wanneer de M103C fuse niet geprogrammeerd staat dan is poort G een 5-bit bi-dirctionele I/O poort ( pagina 6 )

Blijkbaar is er geen enkele instructie echt bruikbaar voor het aanspreken van poort G. of vergis ik mij

Uit de datasheet:


The ATmega64 is a highly complex microcontroller where the number of I/O locations
supersedes the 64 I/O location reserved in the AVR instruction set. To ensure backward
compatibility with the ATmega103, all I/O locations present in ATmega103 have the
same location in ATmega64. Most additional I/O locations are added in an Extended I/O
space starting from 0x60 to 0xFF (i.e., in the ATmega103 internal RAM space). These
location can be reached by using LD/LDS/LDD and ST/STS/STD instructions only, not
by using IN and OUT instructions.

Je kan poort G dus wel gebruiken, zij het niet met de gebruikelijke instructies.

Ok bedankt
dit ga ik direct eens testen

Dat moet je met STS en LDS doen volgens mij....