|
|
View previous topic :: View next topic |
Author |
Message |
cindy Guest
|
CCS compile error? -- PIC16F676 |
Posted: Wed Mar 02, 2005 3:24 am |
|
|
Hi, Buddy,
I found sth strange when debugging PIC16F676. original and after compile code is listed below. please compare these two sets code and take note the line with *****. Even the name is wrong, (should be TRISA/TRISC), it sets the correct register in fact.
1, Can anybody explain why this happens?
(I found CCS change my variable names also.)
2, above code set RA5=0, but when I run, RA5=1 instead, why???
previously I thought the problem of compiler, so I change these code to asmbly, but RA5 still set to 1.
Very much appreciate for your reply
Cindyw
-------------------
Original Code-
//-----------------------
#asm
bcf 0x03,0x5 //bank 0
clrf 0x05 //;Init PORTA
clrf 0x07 //;Init PORTC
bsf 0x03,0x5 //bank 1
movlw 0x08
movwf 0x85 ;//set TRISA RA0-2,RA4,5 as output
movlw 0x0f
movwf 0x87 ;//set TRISC Rc4,5 as output,other as input
#endasm
//---------------------------------------------------------------------
After compile by CCS-PCWH, IDE ver.3.43, PCB etc. ver.3.188
//----------------------------------------------------------------------
bcf STATUS,0x5 //bank 0
clrf PORTA
clrf PORTC
bsf STATUS,0x5 //bank 1
movlw 0x08
bsf STATUS,0x5 //bank 1
movwf PORTA *****
movlw 0xf
movwf PORTC *****
Remarks:
PORTA address in Bank0, #05h
TRISA address in Bank1, #85h
PORTC address in Bank0, #07h
TRISC address in Bank1, #87h
[/code] |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Mar 02, 2005 1:19 pm |
|
|
The compiler doesn't try to simulate your ASM code when it generates
the .LST file. It doesn't try to keep track of the bank in your ASM code.
It just looks up the register number in a symbol table and puts it into
the .LST file.
Look at the Program Memory window in MPLAB. You should see the
correct ASM instructions there.
With respect to your RA5 problem, it's probably because RA5 can
be configured as the Oscillator input pin, or as a general purpose i/o pin.
You may not have it configured correctly. Or, there may be some other
problem. If you want some help on this, then do this:
1. Post a complete (but small) test program which shows the problem.
Make sure you post your all compiler directives, such as
the #fuses statement, etc. That's essential.
2. Post your version of the compiler. Look at the top of the .LST file
which is generated after you compile a program. The version number
will be a number like this: 3.219 |
|
|
cindyw
Joined: 21 Oct 2004 Posts: 9
|
MPLAB SIM & ICD2 get different result |
Posted: Thu Mar 03, 2005 2:31 am |
|
|
[quote="PCM programmer"]
Look at the Program Memory window in MPLAB. You should see the
correct ASM instructions there.
----------------
Above after compile code is from view/program Memory window in MPLAB.[/b]
Here is a testing code. I found the PORTA is correct by running MPLAB SIM , however, the actual test result by run MPLAB ICD2, PinPA5 always on(PORTA=0x20)
compiler version 3.188
Thanks PCM programmer
Code: |
#include <16F676.h>
#DEVICE adc=8 //only use 8 bit ??
#fuses INTRC_IO,NOWDT,NOPROTECT//NOBROWNOUT //MCLR
#use delay (clock=4000000) //4M hz internal osc
//#endif
void init();
/************************************************************
Main program
*************************************************************/
void main() { int temp;
init(); // init for ADC, I/O, Timer
CHANNEL_1: output_high(PIN_A4 );
temp=read_adc(); //read noise
output_low(PIN_A4 ); //RA4--Status_LED
delay_us(100);
delay_us(100);
goto CHANNEL_1;
}
void init()
{
//----I/O initialization---
/*
OUTPUT_low( RLY) ; //can not use OUTPUT_A( 0x00);OUTPUT_C( 0x0F)
OUTPUT_low( status_led) ;
OUTPUT_low( LED1) ;
OUTPUT_low( LED2) ;
OUTPUT_low( CUR) ; // change on 19/1/2005
*/ // change to asm code due to register not set correctly
#asm
bcf 0x03,0x5; //bank 0
clrf 0x05; //;Init PORTA
clrf 0x07; //;Init PORTC
bsf 0x03,0x5; //bank 1
movlw 0x08;
movwf 0x85 ;//set TRISA RA0-2,RA4,5 as output, system not recognize TRISA, use address instead
movlw 0x0f;
movwf 0x87 ;//set TRISC Rc4,5 as output,other as input
#endasm
//----ADC initialization---
SETUP_ADC_PORTS(sAN4|sAN5|sAN6|sAN7|VSS_VDD); // AN4:7 A/D. others digital
setup_adc( ADC_CLOCK_INTERNAL ); //internal oscillator 2-6us
set_adc_channel(5);
SETUP_COMPARATOR(NC_NC_NC_NC); // add to off comparators in 7/12
//----Timer initialization---
SETUP_TIMER_1(T1_INTERNAL|T1_DISABLED|T1_DIV_BY_8); //prescale=1:8, internal clock, need disable??
}
---code end
|
_________________ CC
Last edited by cindyw on Thu Mar 03, 2005 2:34 am; edited 1 time in total |
|
|
|
|
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
|