Gracias por tu interés. Como puedes suponer el código es bastante extenso, pero te voy a mostrar una de las partes donde se me presenta el error:
CCS PCH C Compiler, Version 3.242, 16465 05-May-06 09:27
Filename: SoloControl.lst
ROM used: 1648 bytes (5%)
Largest free fragment is 31120
RAM used: 21 (1%) at main() level
49 (3%) worst case
Stack: 3 locations
*
0000: GOTO 05F8
.................... #include <18F452.h>
.................... //////// Standard Header file for the PIC18F452 device ////////////////
.................... #device PIC18F452
.................... #list
....................
.................... #device adc=10
....................
.................... #fuses WDT32, XT, NOPROTECT, BROWNOUT, BORV45, NOPUT, NOCPD
.................... #fuses NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD
.................... #fuses NOWRTC, NOWRTB, NOEBTR, NOEBTRB, NOCPB
....................
.................... #use delay(clock=4000000)
*
0004: CLRF FEA
0006: MOVLW 23
0008: MOVWF FE9
000A: MOVF FEF,W
000C: BZ 002C
000E: MOVLW 01
0010: MOVWF 01
0012: CLRF 00
0014: DECFSZ 00,F
0016: BRA 0014
0018: DECFSZ 01,F
001A: BRA 0012
001C: MOVLW 4A
001E: MOVWF 00
0020: DECFSZ 00,F
0022: BRA 0020
0024: NOP
0026: NOP
0028: DECFSZ FEF,F
002A: BRA 000E
002C: RETLW 00
....................
.................... #byte PuertoB =0xF84
.................... #bit t_ok =PuertoB.0 // RB0, pin33
.................... #bit t_mas =PuertoB.1 // RB1, pin34
.................... #bit t_mns =PuertoB.2 // RB2, pin35
....................
.................... #byte PuertoD =0xF81 //Define direccion del puerto D
.................... #bit Compresor_On =PuertoD.7 // RD0, pin19
.................... #bit Comp_Aux_On =PuertoD.6 // RD1, pin20
.................... #bit Valvula_On =PuertoD.5 // RD2, pin21
.................... #bit Valv_Aux_On =PuertoD.4 // RD3, pin21
....................
.................... #include <Fuzzy_Tesis.h>
.................... char __IDOM[2];
....................
.................... /* define los bit del puerto para realizar el control
.................... #byte PuertoD =0xF83 //Define direccion del puerto D
.................... #bit Compresor_On =PuertoD.0 // RD0, pin19
.................... #bit Comp_Aux_On =PuertoD.1 // RD1, pin20
.................... #bit Valvula_On =PuertoD.2 // RD2, pin21
.................... #bit Valv_Aux_On =PuertoD.3 // RD3, pin21*/
....................
.................... // Se definen algunas operaciones que se requieren en el control difuso
.................... #define F_UNO 0xff
.................... #define F_CERO 0x00
.................... #define F_OR(a,b) ((a) > (b) ? (a) : (b))
.................... #define F_AND(a,b) ((a) < (b) ? (a) : (b))
.................... #define F_NOT(a) (F_UNO+F_CERO-a)
....................
....................
....................
....................
.................... /* Este controlador trabaja midiendo la corriente cuando la unidad
.................... está subiendo y la corriente cuando la unidad está bajando, entonces
.................... hace el cálculo de la diferencia de la corriente en estas dos
.................... posiciones así:
....................
.................... Corriente = Corriente Máxima Subiendo - Corriente Máxima Bajando
....................
.................... Así pues tenemos que cuando los signos de la corriente son + o -
.................... se tiene:
....................
.................... Corriente (+) = Indica que la unidad se FORZA SUBIENDO
.................... Corriente (-) = Indica que la unidad se FORZA BAJANDO
....................
.................... Se mide además la PRESIÓN para determinar los rangos aceptables de
.................... operación en los que puede trabajar el cilindro.
....................
.................... Las entradas numéricas CRISP mas adelante se transforman en
.................... grados de pertenencia GdP con variables lingüísticas.
....................
.................... Las siguientes son las variables lingüísticas que van a ser usadas:
....................
.................... ------------------------------------------------------
.................... VARIABLE FISICA V. LINGÜISTICA RANGO
.................... ------------------------------------------------------
.................... PRESIÓN muy baja 0 - 120 psi
.................... baja 120 - 280 psi
.................... normal 280 - 420 psi
.................... alta 400 - 500 psi
.................... muy alta 480 - 600 psi
.................... ------------------------------------------------------
.................... CORRIENTE Forza_baja -80 a -3 Amp
.................... C_balance -5 a 5 Amp
.................... Forza_sube 3 a 80 Amp
.................... ------------------------------------------------------
....................
.................... -------------------------------------------------------*/
.................... //Variable Física: Presión Tipo int MIN 0 MAX 600 psi//
.................... //-----------------------------------------------------
....................
.................... /* MIEMBRO: muy_baja { 0 , 0 , 100 , 120 } */
.................... /*
....................
.................... 1-| ...
.................... | . ·
.................... | . ·
.................... | . .
.................... 0-| . ·..........................
.................... ----------------------------------
.................... 0 150 300 450 600
.................... */
....................
.................... int P_muy_baja (int __CRISP)
.................... {
.................... {
.................... if (__CRISP <= 100) return(255);
*
0298: MOVF 1D,W
029A: SUBLW 64
029C: BNC 02A6
029E: MOVLW FF
02A0: MOVWF 01
02A2: BRA 02C4
.................... else
02A4: BRA 02C4
.................... {
.................... if (__CRISP <= 120)
02A6: MOVF 1D,W
02A8: SUBLW 78
02AA: BNC 02BE
.................... return((( + 120 - __CRISP) * 12) + 7);
02AC: MOVLW 78
02AE: BSF FD8.0
02B0: SUBFWB 1D,W
02B2: MULLW 0C
02B4: MOVF FF3,W
02B6: ADDLW 07
02B8: MOVWF 01
02BA: BRA 02C4
.................... else
02BC: BRA 02C4
.................... return(0);
02BE: MOVLW 00
02C0: MOVWF 01
02C2: BRA 02C4
.................... }
.................... }
.................... }
02C4: GOTO 042C (RETURN)
....................
.................... /* MIEMBRO: baja { 75 , 100 , 350 , 375 } */
.................... /*
....................
.................... 1-| ......
.................... | . .
.................... | . .
.................... | . .
.................... 0-| ....· ·............
.................... ----------------------------------
.................... 0 150 300 450 600
....................
.................... */
....................
.................... int P_baja (int __CRISP)
.................... {
.................... if (__CRISP < 75) return(0);
*
02F8: MOVF 1D,W
02FA: SUBLW 4A
02FC: BNC 0306
02FE: MOVLW 00
0300: MOVWF 01
0302: BRA 0322
.................... else
0304: BRA 0322
.................... {
.................... if (__CRISP <= 100) return(((__CRISP - 75) * 10) + 5);
0306: MOVF 1D,W
0308: SUBLW 64
030A: BNC 031C
030C: MOVLW 4B
030E: SUBWF 1D,W
0310: MULLW 0A
0312: MOVF FF3,W
0314: ADDLW 05
0316: MOVWF 01
0318: BRA 0322
.................... else
031A: BRA 0322
.................... {
.................... if (__CRISP <= 350) return(255);
031C: MOVLW FF
031E: MOVWF 01
0320: BRA 0322
.................... else
.................... {
.................... if (__CRISP <= 375)
.................... return((( + 375 - __CRISP) * 10) + 5);
.................... else
.................... return(0);
.................... }
.................... }
.................... }
.................... }
0322: RETLW 00
....................
.................... /* MIEMBRO: normal { 350 , 380 , 420 , 450 } */
.................... /*
....................
.................... 1-| .....
.................... | . .
.................... | . .
.................... | . .
.................... 0-| .............. ............
.................... ----------------------------------
.................... 0 150 300 450 600
....................
.................... */
....................
.................... int P_normal (int __CRISP)
.................... {
.................... if (__CRISP < 350) return(0);
*
0386: MOVLW 00
0388: MOVWF 01
.................... else
.................... {
.................... if (__CRISP <= 380) return(((__CRISP - 350) *8 ) +8 );
.................... else
.................... {
.................... if (__CRISP <= 420) return(255);
.................... else
.................... {
.................... if (__CRISP <= 450)
.................... return((( + 450 - __CRISP) *8 ) +8 );
.................... else
.................... return(0);
.................... }
.................... }
.................... }
.................... }
038A: RETLW 00
Como te puedes percatar, el código en negrilla escrito en C no tiene su equivalente en asembler y por tanto el proteus simplemente no lo ejecuta. ¿alguna sugerencia?¿algún fusible no es el adecuado?¿debo activar alguna opción a la hora de compilar el proyecto?. En realidad esta es sólo una parte del código, pues se supone que tiene que haber visualización en un módulo LCD, pero creí que era por eso que no ejecutaba correctamente, así que aislé la etapa de visualización y dejé sólo la parte de control que es la que expongo.
Cordial Saludo y Gracias.
Optimvs