CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Output from compiler

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Mortenc



Joined: 22 Feb 2007
Posts: 55

View user's profile Send private message

Output from compiler
PostPosted: Tue Apr 24, 2007 2:23 am     Reply with quote

Hello super forum,

I'am new as C programmer (old ASM-programmer).
I have problem with power-up and the I/O pins
As default the pins at portA at the PIC16F883 is inputs at power-up.
When I look one pin "RA1" I can see this pin is going High at power-up.
I use non-fixed I/O so it have to be an input until I will use it as another.

I look in the .LST file and I can see that there is some code that the compiler has generated before it comes to the C-code I have written.
In line 0031 0032 and 0033 the pin RA1 and RA2 is set to an output
and that is before my code.
Where did that code come from and why is the compiler changing the trisA itself without my control.

.................... void main() {
0019: CLRF 04
001A: BCF 03.7
001B: MOVLW 1F
001C: ANDWF 03,F
001D: MOVLW 61
001E: BSF 03.5
001F: MOVWF 0F
0020: BSF 03.6
0021: MOVF 09,W
0022: ANDLW C0
0023: MOVWF 09
0024: BCF 03.6
0025: BCF 1F.4
0026: BCF 1F.5
0027: MOVLW 00
0028: BSF 03.6
0029: MOVWF 08
002A: BCF 79.5
002B: BSF 79.4
002C: MOVLW 02
002D: MOVWF 7B
002E: MOVLW 04
002F: MOVWF 7A
0030: BCF 03.6
0031: MOVF 05,W
0032: ANDLW F9
0033: MOVWF 05
0034: MOVF 07,W
0035: IORLW 01
0036: ANDLW FD
0037: MOVWF 07
treitmey



Joined: 23 Jan 2004
Posts: 1094
Location: Appleton,WI USA

View user's profile Send private message Visit poster's website

PostPosted: Tue Apr 24, 2007 7:42 am     Reply with quote

You didn't show your c code so I can only assume the compiler is makeing this up as its default code. These lines should get it back to working again.

Code:
 
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
#use fast_io(a)
set_tris_a(0xFF);
Mortenc



Joined: 22 Feb 2007
Posts: 55

View user's profile Send private message

PostPosted: Tue Apr 24, 2007 1:37 pm     Reply with quote

Here is the C-code and the lst-file

#include <16F883.h>
#device ICD=TRUE

#FUSES INTRC_IO // Internal RC Osc, no CLKOUT
#FUSES NOLVP // No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWDT // No Watch Dog Timer
#FUSES PUT // Power Up Timer (64ms)

#use delay(clock=4000000)

#define tp_rod_led PIN_C1 // test


// ******************** main ********************
void main() {
while (true) {
output_high(tp_rod_led);
delay_ms (4);

output_low (pin_A1);
delay_ms (1);
output_high (pin_A1);
delay_ms (1);
output_float(pin_A1);
delay_ms (1);

output_low (tp_rod_led);
delay_ms (5);
}
}

-------------------------------------------------------
and the lst-file after compilation:

0000: NOP
0001: MOVLW 00
0002: MOVWF 0A
0003: GOTO 019
....................
....................
.................... #include <16F883.h>
.................... //////// Standard Header file for the PIC16F883 device ////////////////
.................... #device PIC16F883
.................... #list
....................
.................... #device ICD=TRUE
....................
.................... #FUSES INTRC_IO // Internal RC Osc, no CLKOUT
.................... #FUSES NOLVP // No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
.................... #FUSES NOWDT // No Watch Dog Timer
.................... #FUSES PUT // Power Up Timer (64ms)
....................
.................... #use delay(clock=4000000)
0004: MOVLW 21
0005: MOVWF 04
0006: BCF 03.7
0007: MOVF 00,W
0008: BTFSC 03.2
0009: GOTO 018
000A: MOVLW 01
000B: MOVWF 78
000C: CLRF 77
000D: DECFSZ 77,F
000E: GOTO 00D
000F: DECFSZ 78,F
0010: GOTO 00C
0011: MOVLW 4A
0012: MOVWF 77
0013: DECFSZ 77,F
0014: GOTO 013
0015: GOTO 016
0016: DECFSZ 00,F
0017: GOTO 00A
0018: RETLW 00
....................
.................... #define tp_rod_led PIN_C1 // test
....................
....................
.................... // ******************** main ********************
.................... void main() {
0019: CLRF 04
001A: BCF 03.7
001B: MOVLW 1F
001C: ANDWF 03,F
001D: MOVLW 61
001E: BSF 03.5
001F: MOVWF 0F
0020: BSF 03.6
0021: MOVF 09,W
0022: ANDLW C0
0023: MOVWF 09
0024: BCF 03.6
0025: BCF 1F.4
0026: BCF 1F.5
0027: MOVLW 00
0028: BSF 03.6
0029: MOVWF 08
002A: BCF 79.5
002B: BSF 79.4
002C: MOVLW 02
002D: MOVWF 7B
002E: MOVWF 7A
002F: BCF 03.6
0030: MOVF 05,W
0031: IORLW 02
0032: ANDLW F9
0033: MOVWF 05
0034: MOVF 07,W
0035: IORLW 01
0036: ANDLW FD
0037: MOVWF 07
.................... while (true) {
.................... output_high(tp_rod_led);
0038: MOVLW FF
0039: BCF 03.5
003A: MOVWF 20
003B: BCF 20.1
003C: MOVF 20,W
003D: BSF 03.5
003E: MOVWF 07
003F: BCF 03.5
0040: BSF 07.1
.................... delay_ms (4);
0041: MOVLW 04
0042: MOVWF 21
0043: CALL 004
....................
.................... output_low (pin_A1);
0044: BSF 03.5
0045: BCF 05.1
0046: BCF 03.5
0047: BCF 05.1
.................... delay_ms (1);
0048: MOVLW 01
0049: MOVWF 21
004A: CALL 004
.................... output_high (pin_A1);
004B: BSF 03.5
004C: BCF 05.1
004D: BCF 03.5
004E: BSF 05.1
.................... delay_ms (1);
004F: MOVLW 01
0050: MOVWF 21
0051: CALL 004
.................... output_float(pin_A1);
0052: BSF 03.5
0053: BSF 05.1
.................... delay_ms (1);
0054: MOVLW 01
0055: BCF 03.5
0056: MOVWF 21
0057: CALL 004
....................
.................... output_low (tp_rod_led);
0058: BCF 20.1
0059: MOVF 20,W
005A: BSF 03.5
005B: MOVWF 07
005C: BCF 03.5
005D: BCF 07.1
.................... delay_ms (5);
005E: MOVLW 05
005F: MOVWF 21
0060: CALL 004
.................... }
0061: GOTO 03B
.................... }
0062: GOTO 062

Configuration Fuses:
Word 1: 0CF4 INTRC_IO NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT IESO FCMEN NOLVP DEBUG
Word 2: 3FFF NOWRT BORV40
treitmey



Joined: 23 Jan 2004
Posts: 1094
Location: Appleton,WI USA

View user's profile Send private message Visit poster's website

PostPosted: Tue Apr 24, 2007 3:35 pm     Reply with quote

I don't have a 16F883 but I ran it through a mplab simulator and it didn't show the tris A at address 0x85 being changed. Which part of the asm do you think is changing the tris A ? 31,32,33 don't say anything about 0x85
Mortenc



Joined: 22 Feb 2007
Posts: 55

View user's profile Send private message

PostPosted: Tue Apr 24, 2007 11:59 pm     Reply with quote

The asm-lines 0030 to 0033 changing the trisA.
remember that in line 001E, bank 1 is selected so movwf 05 actually is 85.

I'am wondering where all the lines from "void main" until "while" is coming from. Some of them like line 001A is already cleared by uP itself by power-up.
treitmey



Joined: 23 Jan 2004
Posts: 1094
Location: Appleton,WI USA

View user's profile Send private message Visit poster's website

PostPosted: Wed Apr 25, 2007 7:53 am     Reply with quote

I'm not an ASM guy, so I can't argue that point.

But why didn't the mplab simulator show tris A changing?

The code before main is put in from the compiler for your convenience.
You can't turn it off as far as I know.
Just override it with the set_tris command before your main while.
Mortenc



Joined: 22 Feb 2007
Posts: 55

View user's profile Send private message

PostPosted: Wed Apr 25, 2007 8:41 am     Reply with quote

I have tried single stepping the C-program from reset with the ICD2 from microchip in a another program, and it has the same result. If I look at the TRISA I can see that the TRISA is FF after reset but after the mysterious mentioned code the TRISA is changed.
My hardware construction donĀ“t accept that I changed later with a TRIS command and I am a little disappointed about the compiler, because I know that it's no problem in assembler coding.

Is it a compiler failure?

Does anyone know why these start asm-lines is there?
treitmey



Joined: 23 Jan 2004
Posts: 1094
Location: Appleton,WI USA

View user's profile Send private message Visit poster's website

PostPosted: Wed Apr 25, 2007 10:26 am     Reply with quote

Will this fix the problem?
Code:
#include <16F883.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOLVP
#use fast_io (a)
#byte port_a = 0x05
#byte tris_a = 0x85
//======================= Main ==============================
void main(void)
{
  tris_a=0xFF;
  setup_adc_ports(NO_ANALOGS);
  setup_adc(ADC_OFF);
  while(1)
  {
    tris_a=0b11111101;// only output is A1
    port_a=0b11111101;// output_low(PIN_A1);
  }
}
Mortenc



Joined: 22 Feb 2007
Posts: 55

View user's profile Send private message

PostPosted: Wed Apr 25, 2007 11:51 pm     Reply with quote

No, the "bad code" before our code still is there, but the time with bad TRIS value is a little smaller.
Thanks for trying to help, but I think I will try to ask CCS about it.
Mortenc



Joined: 22 Feb 2007
Posts: 55

View user's profile Send private message

PostPosted: Mon Apr 30, 2007 11:40 pm     Reply with quote

Solution/information to "treitmey" who tried to help me and others with interrest.

The problem is now solved.
The compiler is updated to the last version 4.033. (My version was 4.032)
This fix the problem with the bad startup code.
treitmey



Joined: 23 Jan 2004
Posts: 1094
Location: Appleton,WI USA

View user's profile Send private message Visit poster's website

PostPosted: Tue May 01, 2007 7:58 am     Reply with quote

Ohhhh hell. Smile
Now it all makes sense. You were using the beta compiler.
I was using 3.249 ((I need to ask for that stuff up-front))
I'm glad it working for you now.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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