Gast
#923925
Hallo, ich habe ein sehr merkwürdiges Problem mit einem PIC 12F615 einige der GPIO schalten sich ab wenn ich einen anderen PIN auf 1 lege. Ich dachte erst ich habe ein Hardwareproblem, aber der Simulator verhält sich ähnlich, wenn auch nicht gleich. Ich habe dazu ein minimal Testprogramm geschrieben um den Fehler auf den Grund zu gehen. #include <htc.h> __CONFIG(0x3f4c); void main(void) { TRISIO = 0x04; while (1) { CLRWDT(); GP5 = !GP5; GP0 = !GP0; GP3 = !GP3; } } wenn ich mit dem Debugger in die while-Schleife komme hat das GPIO Register den Wert 0x00 am Ende der while-Schleife würde ich jetzt den Wert 0x31 erwarten. Es steht dann aber 0x20 im GPIO nach dem zweiten durchlauf wieder 0x00 und so weiter Also im Einzelschritt: nach GP5 = !GP5; --> GPIO = 0x20 nach GP0 = !GP0; --> GPIO = 0x21 nach GP3 = !GP3; --> GPIO = 0x20 zweiter Durchlauf nach GP5 = !GP5; --> GPIO = 0x00 nach GP0 = !GP0; --> GPIO = 0x01 nach GP3 = !GP3; --> GPIO = 0x00 der erzeugte Assembler-Code sieht für mich als C-Programmierer auch erstmal gut aus: 1: #include <htc.h> 2: __CONFIG(0x3f4c); 3: 4: void main(void) { 5: 6: TRISIO = 0x14; 001 3014 MOVLW 0x14 002 1683 BSF 0x3, 0x5 003 0085 MOVWF 0x5 7: while (1) { 00C 2804 GOTO 0x4 8: CLRWDT(); 9: 004 0064 CLRWDT 10: GP5 = !GP5; 005 1283 BCF 0x3, 0x5 006 3020 MOVLW 0x20 007 0685 XORWF 0x5, F 11: GP0 = !GP0; 008 3001 MOVLW 0x1 009 0685 XORWF 0x5, F 12: GP3 = !GP3; 00A 3008 MOVLW 0x8 hat jemand eine Idee hierzu? habe ich was übersehen? Gruß und Danke schon mal Markus