Autor Tema: Fallo del ccs pcwh al compilar una interrupcion  (Leído 2301 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado smokerman

  • PIC10
  • *
  • Mensajes: 4
Fallo del ccs pcwh al compilar una interrupcion
« en: 13 de Febrero de 2008, 10:25:13 »
Muy buenas a todos, estoy estudiando electronica y en clase hemos empezado a usar el ccs c para hacer programillas pero tenemos un problema que al compilar un programa con una interrupcion se compila todo y eso pero el programa no traduce bien a ensamblador la rutina de interrupcion. No la traduce a ensamblador. ahora vamos a tener que dar clase cn el mplab usando el c de hitech k es mucho peor. ayuda!!!

Desconectado smokerman

  • PIC10
  • *
  • Mensajes: 4
Re: Fallo del ccs pcwh al compilar una interrupcion
« Respuesta #1 en: 13 de Febrero de 2008, 10:27:25 »
este es el programa en concreto, y la traduccion a ensamblador es esta, si os fijais no traduce bien la rutina de interrupcion :'(


#include "G:\PIC\intermitente\intermitente.h"
#int_TIMER0

int16 desbordamientos;
void  TIMER0_isr(void)
{
   set_timer0(6); // lo ponemos a 6 porque queremos que cuente 250
   clear_interrupt(INT_TIMER0); // borramos el flag de interrupcion
   desbordamientos++;
   
}


   
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   set_timer0(6); // lo ponemos a 6 porque queremos que cuente 250
   clear_interrupt(INT_TIMER0); // borramos el flag de interrupcion
   // por si le hubiese dado tiempo en las lineas de antes a activarse
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   output_bit(PIN_A0,0); // estado inicial de salida
   desbordamientos=0;
   while(1)
   {
   while(desbordamientos<2500);
   output_toggle(PIN_A0);
   desbordamientos=0;
   }
   

}

CCS PCM C Compiler, Version 4.049, 51655               16-feb-08 13:26

               Filename: intermitente.lst

               ROM used: 91 words (1%)
                         Largest free fragment is 2048
               RAM used: 9 (2%) at main() level
                         9 (2%) worst case
               Stack:    0 locations

*
0000:  MOVLW  00
0001:  MOVWF  0A
0002:  GOTO   004
0003:  NOP
.................... #include "G:\PIC\intermitente\intermitente.h"
.................... #include <16F877.h>
.................... //////// Standard Header file for the PIC16F877 device ////////////////
.................... #device PIC16F877
.................... #list
.................... 
.................... #device adc=8
.................... 
.................... #FUSES NOWDT                    //No Watch Dog Timer
.................... #FUSES HS                       //High speed Osc (> 4mhz)
.................... #FUSES PUT                      //Power Up Timer
.................... #FUSES NOPROTECT                //Code not protected from reading
.................... #FUSES NOBROWNOUT               //No brownout reset
.................... #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
.................... #FUSES NOCPD                    //No EE protection
.................... #FUSES NOWRT                    //Program memory not write protected
.................... #FUSES NODEBUG                  //No Debug mode for ICD
.................... 
.................... #use delay(clock=20000000,RESTART_WDT)
.................... 
.................... 
.................... #int_TIMER0
.................... 
.................... int16 desbordamientos;
.................... void  TIMER0_isr(void)
.................... {
....................    set_timer0(6); // lo ponemos a 6 porque queremos que cuente 250
....................    clear_interrupt(INT_TIMER0); // borramos el flag de interrupcion
....................    desbordamientos++;
.................... }
.................... 
.................... 
....................     
.................... void main()
.................... {
0004:  CLRF   04
0005:  BCF    03.7
0006:  MOVLW  1F
0007:  ANDWF  03,F
0008:  BSF    03.5
0009:  BSF    1F.0
000A:  BSF    1F.1
000B:  BSF    1F.2
000C:  BCF    1F.3
.................... 
....................    setup_adc_ports(NO_ANALOGS);
*
0010:  BSF    03.5
0011:  BSF    1F.0
0012:  BSF    1F.1
0013:  BSF    1F.2
0014:  BCF    1F.3
....................    setup_adc(ADC_OFF);
0015:  BCF    03.5
0016:  BCF    1F.0
....................    setup_psp(PSP_DISABLED);
0017:  BSF    03.5
0018:  BCF    09.4
....................    setup_spi(SPI_SS_DISABLED);
*
000D:  MOVLW  FF
000E:  BCF    03.5
000F:  MOVWF  22
*
0019:  BCF    03.5
001A:  BCF    14.5
001B:  BCF    22.5
001C:  MOVF   22,W
001D:  BSF    03.5
001E:  MOVWF  07
001F:  BCF    03.5
0020:  BSF    22.4
0021:  MOVF   22,W
0022:  BSF    03.5
0023:  MOVWF  07
0024:  BCF    03.5
0025:  BCF    22.3
0026:  MOVF   22,W
0027:  BSF    03.5
0028:  MOVWF  07
0029:  MOVLW  01
002A:  BCF    03.5
002B:  MOVWF  14
002C:  MOVLW  00
002D:  BSF    03.5
002E:  MOVWF  14
....................    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
002F:  MOVF   01,W
0030:  ANDLW  C0
0031:  IORLW  01
0032:  MOVWF  01
....................    setup_timer_1(T1_DISABLED);
0033:  BCF    03.5
0034:  CLRF   10
....................    setup_timer_2(T2_DISABLED,0,1);
0035:  MOVLW  00
0036:  MOVWF  78
0037:  MOVWF  12
0038:  MOVLW  00
0039:  BSF    03.5
003A:  MOVWF  12
....................    set_timer0(6); // lo ponemos a 6 porque queremos que cuente 250
003B:  MOVLW  06
003C:  BCF    03.5
003D:  MOVWF  01
....................    clear_interrupt(INT_TIMER0); // borramos el flag de interrupcion
003E:  BCF    0B.2
....................    // por si le hubiese dado tiempo en las lineas de antes a activarse
....................    enable_interrupts(INT_TIMER0);
003F:  BSF    0B.5
....................    enable_interrupts(GLOBAL);
0040:  MOVLW  C0
0041:  IORWF  0B,F
....................    output_bit(PIN_A0,0); // estado inicial de salida
0042:  BCF    05.0
0043:  BSF    03.5
0044:  BCF    05.0
....................    desbordamientos=0;
0045:  BCF    03.5
0046:  CLRF   21
0047:  CLRF   20
....................    while(1)
....................    {
....................    while(desbordamientos<2500);
0048:  MOVF   21,W
0049:  SUBLW  09
004A:  BTFSS  03.0
004B:  GOTO   052
004C:  BTFSS  03.2
004D:  GOTO   048
004E:  MOVF   20,W
004F:  SUBLW  C3
0050:  BTFSC  03.0
0051:  GOTO   048
....................    output_toggle(PIN_A0);
0052:  BSF    03.5
0053:  BCF    05.0
0054:  MOVLW  01
0055:  BCF    03.5
0056:  XORWF  05,F
....................    desbordamientos=0;
0057:  CLRF   21
0058:  CLRF   20
....................    }
0059:  GOTO   048
....................     
.................... 
.................... }
005A:  SLEEP

Configuration Fuses:
   Word  1: 3F32   HS NOWDT PUT NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG

Desconectado smokerman

  • PIC10
  • *
  • Mensajes: 4
Re: Fallo del ccs pcwh al compilar una interrupcion
« Respuesta #2 en: 13 de Febrero de 2008, 10:28:35 »
se mete en el programa principal, traduce mal a ensamblador el programa. xq puede ser?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Fallo del ccs pcwh al compilar una interrupcion
« Respuesta #3 en: 13 de Febrero de 2008, 10:37:17 »
Esto #int_TIMER0 tiene que ir justo delante de la función de interrupción. He visto que enmedio tienes la declaración de una variable.
Prueba a cambiarlo y nos dices qué tal.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Fallo del ccs pcwh al compilar una interrupcion
« Respuesta #4 en: 13 de Febrero de 2008, 11:25:06 »
Esa declaracion de variable queda como una variable global, si la juntas con las demas declaraciones, mejor, y limpias de paso la rutina de interrupcion....
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado smokerman

  • PIC10
  • *
  • Mensajes: 4
Re: Fallo del ccs pcwh al compilar una interrupcion
« Respuesta #5 en: 13 de Febrero de 2008, 16:35:10 »
¿osea que creeis que el motivo es que la declaracion de la variable esté en medio de #int_TIMER0 y la rutina de interupcion? No será que en clase usan una versión crackeada o yo k sé del programa? jue k pena :(

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Fallo del ccs pcwh al compilar una interrupcion
« Respuesta #6 en: 13 de Febrero de 2008, 16:42:13 »
Prueba solo mover la declaracion una posicion antes de la declaracion de #int_timer0 y luego nos dices si funciona.
una version crackeada deberia darte montones de errores, algunos indescifrables... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271
Re: Fallo del ccs pcwh al compilar una interrupcion
« Respuesta #7 en: 13 de Febrero de 2008, 19:02:39 »
¿osea que creeis que el motivo es que la declaracion de la variable esté en medio de #int_TIMER0 y la rutina de interupcion? No será que en clase usan una versión crackeada o yo k sé del programa? jue k pena :(

No creo q tenga q ver si es una version crackeada o no..deberia compilar igual loq ue pasa es que algunas versiones del ccs tare unos pequeños bugs al compilar ciertas lineas..prueba con la 4.057!!!!!!!