Make sure the cpu clock (ext. osc) is working, test code with the
internal osc. first.


2013/2/28, Butuza Tamas <tbutu...@freemail.hu>:
> Dear sdcc users and developers,
>
> At the past I used sdcc for 14 bit pic devices with success.Now I'd like to
> use sdcc for a 16 bit pic microcontroller, but I have a problem just at the
> beginning.
> I tried to use timer interrupt, but my program was not able to run. After
> some investigation, I found a misterious problem: Just defining an interrupt
> routine, but not using it (disabled interrupts) makes the program unable to
> run.
>
> At this point I cannot understand why? Just defining a never called routine
> can make the program broken?
> This is my example:
> This works:
>
> #include "pic18f46k22.h"
> #pragma config XINST = OFF
> #pragma config FOSC = HSHP
> #pragma config WDTEN = OFF
> #pragma config MCLRE = EXTMCLR
> #pragma config CP0 = ON
> #pragma config CP1 = ON
> #pragma config CP2 = ON
> #pragma config CP3 = ON
> #pragma config CPB = ON
>
> #define PORTC_OUTPUT_LED1            (0b00010000)
> #define PORTD_OUTPUT_LED2            (0b00001000)
>
> // No iterrupt routine defined
>
> void main(void) {
>     TRISC = 0;
>     TRISD = 0;
>     LATC = PORTC_OUTPUT_LED1;    // Leds should be switched on as the
> program starts run.
>     LATD = PORTD_OUTPUT_LED2;
>     while(1) {
>     }
> }
>
> This one does not work: (The similar program with an interrupt routine
> defined, but interrupts were not enabled at all.)
>
> #include "pic18f46k22.h"
> #pragma config XINST = OFF
> #pragma config FOSC = HSHP
> #pragma config WDTEN = OFF
> #pragma config MCLRE = EXTMCLR
> #pragma config CP0 = ON
> #pragma config CP1 = ON
> #pragma config CP2 = ON
> #pragma config CP3 = ON
> #pragma config CPB = ON
>
> #define PORTC_OUTPUT_LED1            (0b00010000)
> #define PORTD_OUTPUT_LED2            (0b00001000)
>
> // Interrupt routine defined, but never used before interrupts are disabled
> by default.
> // This makes the code actually unable to run! sdcc bug? gputils bug?
> void interruptHigh (void) __interrupt 1 {
>     if(INTCONbits.TMR0IF) {    // Timer0 overflow interrupt
>         INTCONbits.TMR0IF = 0;    // ACK
>     }
> }
>
> void main(void) {
>     TRISC = 0;
>     TRISD = 0;
>     LATC = PORTC_OUTPUT_LED1;    // Leds should be switched on as the
> program starts run.
>     LATD = PORTD_OUTPUT_LED2;
>     while(1) {
>     }
> }
>
> The program has an interrupt routine but the interrupts were not enabled
> (after reset, interrupts are disabled by default.) After programming it into
> the pic, the two leds swould be switched on soon. But it does not occur.When
> I delete the unused interrupt routine from the source and compile and
> reprogram the pic, it works. The two led switched on.
>
> Did I miss something?
> It is not lear to me when and how should use extended instruction set or it
> is necessary?
>
> I use PIC18F46K22
>
> sdcc version:SDCC :
> mcs51/gbz80/z80/z180/r2k/r3ka/ds390/pic16/pic14/TININative/ds400/hc08/s08
> 3.2.1 #8437 (Feb 22 2013) (MINGW32)
>
> gputils version:gpasm-1.0.0 #925 (Dec 23 2012)
>
> compiling and linking:
>
> sdcc -S -mpic16 -p18f46k22 -I. test.c
> gpasm -c test.asm
> gplink -s 18f46k22_g.lkr test.o libdev18f46k22.lib
>
> Thanks in advance,
> Tamas
>
>
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_d2d_feb
> _______________________________________________
> Sdcc-user mailing list
> Sdcc-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sdcc-user
>

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to