|
|
View previous topic :: View next topic |
Author |
Message |
rbarrios
Joined: 10 May 2008 Posts: 1
|
Incorrect file registers on assembler listing |
Posted: Sat May 10, 2008 12:11 pm |
|
|
Hi all,
I've got code that is not working and I've found something which, to me, seems too wrong not to be my fault... This is happening of various lines of the program, but for illustration purposes, I will just show one switch sentence which is failing.
This is the C code:
...
...
for (Pointer=0;Message[Pointer]!='\0';Pointer++){
Message[Pointer]=Symbol;
switch (Symbol){
case '.' : tone(DITC); break;
case '-' : tone(DITC*3); break;
case ' ' : delay_ms(DITS*2); break; // (1+2) DITs between letters
case '&' : delay_ms(DITS*6); break; // (1+6) DITs between words
};
};
...
...
And this is what the .LST has for this code:
...
...
.................... for (Pointer=0;Message[Pointer]!='\0';Pointer++){
0084: CLRF 0A
0085: MOVF 0A,W
0086: CALL 027
0087: XORLW 00
0088: BTFSC 03.2
0089: GOTO 0B4
.................... Message[Pointer]=Symbol;
008A: MOVF 0A,W
008B: CALL 027
008C: MOVWF 08
.................... switch (Symbol){
008D: MOVLW 2E
008E: SUBWF 07,W
008F: BTFSC 03.2
0090: GOTO 09E
0091: MOVLW 2D
0092: SUBWF 07,W
0093: BTFSC 03.2
0094: GOTO 0A2
0095: MOVLW 20
0096: SUBWF 07,W
0097: BTFSC 03.2
0098: GOTO 0A6
0099: MOVLW 26
009A: SUBWF 07,W
009B: BTFSC 03.2
009C: GOTO 0AA
009D: GOTO 0B2
...
...
Note that the compiler is using file register number 8 to store Symbol (008C: MOVWF 08), but after that, it compares the characters with the file register number 7 (008E: SUBWF 07,W)...
Of course, the code does not work as intended because none of the case conditions is ever met.
¿Ant ideas?
Thank you all,
Roberto |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat May 10, 2008 12:21 pm |
|
|
What is your PIC and your compiler version ? |
|
|
Guest
|
|
Posted: Sat May 10, 2008 12:37 pm |
|
|
Version is 4.033 and the device is a 12C508A (I know it's old but I've got lots of them and they are OK for some applications)
Thank you |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun May 11, 2008 12:56 pm |
|
|
I don't have that version of the PCB compiler. I only have 3.249.
I tried to make a test program that would demonstrate your problem,
but I could not get the compiler to generate SUBWF code to do the
comparisons. It generated XORLW statements instead.
It could be that your problem is caused by a compiler bug.
If so, it's a serious bug (in your early version) and it prevents
the compiler from operating. For example, here's a statement
from the CCS versions page:
Quote: | 4.036 A problem with some PCM switch statements is fixed |
That's regarding the PCM compiler, but it probably applies to PCB as well.
If you don't have current compiler "maintenance" in effect, you could
make the case to CCS that your version is seriously defective in that
switch-case statements don't work, and then request that they upgrade
you to a slightly later version that doesn't have this problem. They
might do it. Be sure to include your User Reference number in your
email so they know you own the compiler. |
|
|
RLScott
Joined: 10 Jul 2007 Posts: 465
|
|
Posted: Sun May 11, 2008 6:09 pm |
|
|
Roberto,
The 12C508A hardly seems big enough to bother with "C". Why not avoid the problem and just use assembler?
Also, it looks like you are generating Morse code, right?
Robert Scott
Real-Time Specialties |
|
|
Ttelmah Guest
|
|
Posted: Mon May 12, 2008 2:00 am |
|
|
Worth remembering, that PCB, comes 'with' MPLAB, as a freebie. The versions supplied are older, but don't display this problem, so why not use these?...
Best Wishes |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|