Hallo Rolf.
Quote by rh
Hallo Thorsten,
es ist wie immer: Code Schnipsel helfen mir nicht weiter. :nein:
Ich brauche eine kleine App wo ich das Problem nachvollziehen kann.
btw.
Seit der REV 5.02.00 hat sich mit der XMega Bitverarbeitung einiges getan.
rolf
Hier der Code, das verodern hat jetzt komischer Weise in den kleinen Testprogramm funktioniert.
Die anderen Punkte laufen aber immer noch nicht.
Code
program TestBit;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = xmega256A3, VCC=3.3;
{ $BOOTRST $20000} {Reset Jump to $20000}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
FuseBits2 = [];
Import SysTick,SerPortC0, XMegaSupport, I2Cport;
From System Import ;
Define
OSCtype = extClock =1843435,
PLLmul=17,
prescA=1,
prescB=1,
prescC=1;
SysTick = 10; {msec}
StackSize = $0512, iData;
FrameSize = $0512, iData;
//Serports
SerPortC0 = 19200, parNone; // Monitor
RxBufferC0 = 255, iData;
// I2C Ports
I2Cport = PortC;
I2Cdat = 0;
I2Cclk = 1;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
TestByte : Byte;
TestBit [@TestByte, 3 ] : bit;
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
EnableInts($87);
loop
WriteLn(SeroutC0, '----------');
TestByte:= 0;
TestBit:= True; // kein Erfolg
WriteLn(SeroutC0, 'BYTE0:'+ByteToBin(TestByte));
mDelay(1000);
TestByte:= 0;
TestByte.2:=True; //kein erfolg
WriteLn(SeroutC0, 'BYTE1:'+ByteToBin(TestByte));
mDelay(1000);
TestByte:= 0;
TestByte:= TestByte or %00000010; // Jetzt in diesem kleinen Demoprogramm geht es warum auch immer
WriteLn(SeroutC0, 'BYTE2:'+ByteToBin(TestByte));
mDelay(1000);
TestByte:= 0;
Incl(TestByte,2); // kein Erfolg
WriteLn(SeroutC0, 'BYTE3:'+ByteToBin(TestByte));
mDelay(1000);
TestByte := %00000010; // das geht
WriteLn(SeroutC0, 'BYTE4:'+ByteToBin(TestByte));
mDelay(1000);
endloop;
end TestBit.
Den ASM-Code hänge ich mal mit dran.
Bei der Ausgabe
Code
----------
BYTE0:00000000
BYTE1:00000000
BYTE2:00000010
BYTE3:00000000
BYTE4:00000010
----------
Nur 2 von 5 Möglichkeiten gehen, ich habe keine AHNUNG warum, das ist das selbe Problem was ich mit den PortInits hatte
Schau doch mal drüber.
Gruss
Thorsten