estoy haciendo un trabajo de un voltimetro para la escuela pero no puedo convertirlo a .hex no se si alguien me pueda ayudar porque lo trate de convertir a asm y me queda un poco raro y el programa no me lo lee bien pero carge el programa en proteus con mi circuito simulado y me corre perfecto
asi en version c
#include <16F877A.h> // seleccionas el PIC a utilizar
#fuses XT //definimos un crystal externo
#device adc=8 // bits para el ADC 0-255
#use delay (clock=4M) // frecuencia del oscilador
#byte TRISB=0x86 // definimos los TRIB en la memoria
#byte PORTB=0x06 // definimos el PORTB en la memoria
float valor11; //coonstantes
int valor,valor1,digito1,digito2,digito3,digito4;
void main() {
TRISB=0x00; // toda el puerto B es salida
PORTB=0x00; // todo el puerto B estra en estado logico 0
setup_adc(ADC_CLOCK_INTERNAL); // seleccionamos el reloj para el ADC
setup_adc_ports(AN0); // puerto que seran AN0
for(;; ){
set_adc_channel(0); // que canal se utilizara, en este caso el canal 0
delay_us(10); // retardo necesario antes de hacer la lectura
valor= read_adc(); //leemos el dato del canal
valor1=valor*30.0/255.0; //15 una regla de 3 simple para trabajar con 30V
digito1=valor1/10; //15/10=1 obtenemos el primer digito
digito2=valor1 - digito1*10; //15-1*10=5 obtenemos el segundo digito
valor11=valor*30.0/255.0; // (15.30)*10=153.0
digito3=valor11*10 - valor1*10; //153.0 - 15*10=3.0
digito4=valor11*100 - valor1*100 - digito3*10;
// multiplexaccion del puerto B
PORTB=0b00010000 + digito1;
delay_ms(5);
PORTB=0b00100000 + digito2;
delay_ms(5);
PORTB=0b01000000 + digito3;
delay_ms(5);
PORTB=0b10000000 + digito4;
delay_ms(5);
}
}
y de esta forma es como me lo convierte en asm
CCS PCM C Compiler, Version 4.104, 5967 04-ago-13 09:31
Filename: C:\Users\PC\Desktop\microelectronica programable\lcdcc.lst
ROM used: 1129 words (14%)
Largest free fragment is 2048
RAM used: 19 (5%) at main() level
35 (10%) worst case
Stack: 1 locations
*
0000: MOVLW 03
0001: MOVWF 0A
0002: GOTO 311
0003: NOP
.................... #include <16F877A.h> // seleccionas el PIC a utilizar
.................... //////// Standard Header file for the PIC16F877A device ////////////////
.................... #device PIC16F877A
.................... #list
....................
.................... #fuses XT //definimos un crystal externo
.................... #device adc=8 // bits para el ADC 0-255
.................... #use delay (clock=4M) // frecuencia del oscilador
02FC: MOVLW 2A
02FD: MOVWF 04
02FE: BCF 03.7
02FF: MOVF 00,W
0300: BTFSC 03.2
0301: GOTO 310
0302: MOVLW 01
0303: MOVWF 78
0304: CLRF 77
0305: DECFSZ 77,F
0306: GOTO 305
0307: DECFSZ 78,F
0308: GOTO 304
0309: MOVLW 4A
030A: MOVWF 77
030B: DECFSZ 77,F
030C: GOTO 30B
030D: GOTO 30E
030E: DECFSZ 00,F
030F: GOTO 302
0310: RETURN
.................... #byte TRISB=0x86 // definimos los TRIB en la memoria
.................... #byte PORTB=0x06 // definimos el PORTB en la memoria
.................... float valor11; //coonstantes
.................... int valor,valor1,digito1,digito2,digito3,digito4;
.................... void main() {
0311: CLRF 04
0312: BCF 03.7
0313: MOVLW 1F
0314: ANDWF 03,F
0315: BSF 03.5
0316: BSF 1F.0
0317: BSF 1F.1
0318: BSF 1F.2
0319: BCF 1F.3
031A: MOVLW 07
031B: MOVWF 1C
.................... TRISB=0x00; // toda el puerto B es salida
031C: CLRF 06
.................... PORTB=0x00; // todo el puerto B estra en estado logico 0
031D: BCF 03.5
031E: CLRF 06
.................... setup_adc(ADC_CLOCK_INTERNAL); // seleccionamos el reloj para el ADC
031F: BSF 03.5
0320: BCF 1F.6
0321: BCF 03.5
0322: BSF 1F.6
0323: BSF 1F.7
0324: BSF 03.5
0325: BCF 1F.7
0326: BCF 03.5
0327: BSF 1F.0
.................... setup_adc_ports(AN0); // puerto que seran AN0
0328: BSF 03.5
0329: BCF 1F.0
032A: BSF 1F.1
032B: BSF 1F.2
032C: BSF 1F.3
....................
.................... for(;; ){
.................... set_adc_channel(0); // que canal se utilizara, en este caso el canal 0
032D: MOVLW 00
032E: MOVWF 78
032F: BCF 03.5
0330: MOVF 1F,W
0331: ANDLW C7
0332: IORWF 78,W
0333: MOVWF 1F
.................... delay_us(10); // retardo necesario antes de hacer la lectura
0334: MOVLW 03
0335: MOVWF 77
0336: DECFSZ 77,F
0337: GOTO 336
.................... valor= read_adc(); //leemos el dato del canal
0338: BSF 1F.2
0339: BTFSC 1F.2
033A: GOTO 339
033B: MOVF 1E,W
033C: MOVWF 24
.................... valor1=valor*30.0/255.0; //15 una regla de 3 simple para trabajar con 30V
033D: CLRF 2F
033E: MOVF 24,W
033F: MOVWF 2E
0340: CALL 004
0341: MOVF 7A,W
0342: MOVWF 2D
0343: MOVF 79,W
0344: MOVWF 2C
0345: MOVF 78,W
0346: MOVWF 2B
0347: MOVF 77,W
0348: MOVWF 2A
0349: CLRF 31
034A: CLRF 30
034B: MOVLW 70
034C: MOVWF 2F
034D: MOVLW 83
034E: MOVWF 2E
034F: CALL 021
0350: MOVF 77,W
0351: MOVWF 2A
0352: MOVF 78,W
0353: MOVWF 2B
0354: MOVF 79,W
0355: MOVWF 2C
0356: MOVF 7A,W
0357: MOVWF 2D
0358: MOVWF 31
0359: MOVF 79,W
035A: MOVWF 30
035B: MOVF 78,W
035C: MOVWF 2F
035D: MOVF 77,W
035E: MOVWF 2E
035F: CLRF 35
0360: CLRF 34
0361: MOVLW 7F
0362: MOVWF 33
0363: MOVLW 86
0364: MOVWF 32
0365: CALL 096
0366: MOVF 7A,W
0367: MOVWF 2D
0368: MOVF 79,W
0369: MOVWF 2C
036A: MOVF 78,W
036B: MOVWF 2B
036C: MOVF 77,W
036D: MOVWF 2A
036E: CALL 160
036F: MOVF 78,W
0370: MOVWF 25
.................... digito1=valor1/10; //15/10=1 obtenemos el primer digito
0371: MOVF 25,W
0372: MOVWF 2A
0373: MOVLW 0A
0374: MOVWF 2B
0375: GOTO 17F
0376: MOVF 78,W
0377: MOVWF 26
.................... digito2=valor1 - digito1*10; //15-1*10=5 obtenemos el segundo digito
0378: MOVF 26,W
0379: MOVWF 2E
037A: MOVLW 0A
037B: MOVWF 2F
037C: CALL 196
037D: MOVF 78,W
037E: SUBWF 25,W
037F: MOVWF 27
.................... valor11=valor*30.0/255.0; // (15.30)*10=153.0
0380: CLRF 2F
0381: MOVF 24,W
0382: MOVWF 2E
0383: CALL 004
0384: MOVF 7A,W
0385: MOVWF 2D
0386: MOVF 79,W
0387: MOVWF 2C
0388: MOVF 78,W
0389: MOVWF 2B
038A: MOVF 77,W
038B: MOVWF 2A
038C: CLRF 31
038D: CLRF 30
038E: MOVLW 70
038F: MOVWF 2F
0390: MOVLW 83
0391: MOVWF 2E
0392: CALL 021
0393: MOVF 77,W
0394: MOVWF 2A
0395: MOVF 78,W
0396: MOVWF 2B
0397: MOVF 79,W
0398: MOVWF 2C
0399: MOVF 7A,W
039A: MOVWF 2D
039B: MOVWF 31
039C: MOVF 79,W
039D: MOVWF 30
039E: MOVF 78,W
039F: MOVWF 2F
03A0: MOVF 77,W
03A1: MOVWF 2E
03A2: CLRF 35
03A3: CLRF 34
03A4: MOVLW 7F
03A5: MOVWF 33
03A6: MOVLW 86
03A7: MOVWF 32
03A8: CALL 096
03A9: MOVF 7A,W
03AA: MOVWF 23
03AB: MOVF 79,W
03AC: MOVWF 22
03AD: MOVF 78,W
03AE: MOVWF 21
03AF: MOVF 77,W
03B0: MOVWF 20
.................... digito3=valor11*10 - valor1*10; //153.0 - 15*10=3.0
03B1: MOVF 23,W
03B2: MOVWF 2D
03B3: MOVF 22,W
03B4: MOVWF 2C
03B5: MOVF 21,W
03B6: MOVWF 2B
03B7: MOVF 20,W
03B8: MOVWF 2A
03B9: CLRF 31
03BA: CLRF 30
03BB: MOVLW 20
03BC: MOVWF 2F
03BD: MOVLW 82
03BE: MOVWF 2E
03BF: CALL 021
03C0: MOVF 77,W
03C1: MOVWF 2A
03C2: MOVF 78,W
03C3: MOVWF 2B
03C4: MOVF 79,W
03C5: MOVWF 2C
03C6: MOVF 7A,W
03C7: MOVWF 2D
03C8: MOVF 25,W
03C9: MOVWF 2E
03CA: MOVLW 0A
03CB: MOVWF 2F
03CC: CALL 196
03CD: MOVF 78,W
03CE: CLRF 2F
03CF: MOVWF 2E
03D0: CALL 004
03D1: BSF 03.1
03D2: MOVF 2D,W
03D3: MOVWF 31
03D4: MOVF 2C,W
03D5: MOVWF 30
03D6: MOVF 2B,W
03D7: MOVWF 2F
03D8: MOVF 2A,W
03D9: MOVWF 2E
03DA: MOVF 7A,W
03DB: MOVWF 35
03DC: MOVF 79,W
03DD: MOVWF 34
03DE: MOVF 78,W
03DF: MOVWF 33
03E0: MOVF 77,W
03E1: MOVWF 32
03E2: CALL 1BB
03E3: MOVF 7A,W
03E4: MOVWF 2D
03E5: MOVF 79,W
03E6: MOVWF 2C
03E7: MOVF 78,W
03E8: MOVWF 2B
03E9: MOVF 77,W
03EA: MOVWF 2A
03EB: CALL 160
03EC: MOVF 78,W
03ED: MOVWF 28
.................... digito4=valor11*100 - valor1*100 - digito3*10;
03EE: MOVF 23,W
03EF: MOVWF 2D
03F0: MOVF 22,W
03F1: MOVWF 2C
03F2: MOVF 21,W
03F3: MOVWF 2B
03F4: MOVF 20,W
03F5: MOVWF 2A
03F6: CLRF 31
03F7: CLRF 30
03F8: MOVLW 48
03F9: MOVWF 2F
03FA: MOVLW 85
03FB: MOVWF 2E
03FC: CALL 021
03FD: MOVF 77,W
03FE: MOVWF 2A
03FF: MOVF 78,W
0400: MOVWF 2B
0401: MOVF 79,W
0402: MOVWF 2C
0403: MOVF 7A,W
0404: MOVWF 2D
0405: MOVF 25,W
0406: MOVWF 2E
0407: MOVLW 64
0408: MOVWF 2F
0409: CALL 196
040A: MOVF 78,W
040B: CLRF 2F
040C: MOVWF 2E
040D: CALL 004
040E: BSF 03.1
040F: MOVF 2D,W
0410: MOVWF 31
0411: MOVF 2C,W
0412: MOVWF 30
0413: MOVF 2B,W
0414: MOVWF 2F
0415: MOVF 2A,W
0416: MOVWF 2E
0417: MOVF 7A,W
0418: MOVWF 35
0419: MOVF 79,W
041A: MOVWF 34
041B: MOVF 78,W
041C: MOVWF 33
041D: MOVF 77,W
041E: MOVWF 32
041F: CALL 1BB
0420: MOVF 77,W
0421: MOVWF 2A
0422: MOVF 78,W
0423: MOVWF 2B
0424: MOVF 79,W
0425: MOVWF 2C
0426: MOVF 7A,W
0427: MOVWF 2D
0428: MOVF 28,W
0429: MOVWF 2E
042A: MOVLW 0A
042B: MOVWF 2F
042C: CALL 196
042D: MOVF 78,W
042E: CLRF 2F
042F: MOVWF 2E
0430: CALL 004
0431: BSF 03.1
0432: MOVF 2D,W
0433: MOVWF 31
0434: MOVF 2C,W
0435: MOVWF 30
0436: MOVF 2B,W
0437: MOVWF 2F
0438: MOVF 2A,W
0439: MOVWF 2E
043A: MOVF 7A,W
043B: MOVWF 35
043C: MOVF 79,W
043D: MOVWF 34
043E: MOVF 78,W
043F: MOVWF 33
0440: MOVF 77,W
0441: MOVWF 32
0442: CALL 1BB
0443: MOVF 7A,W
0444: MOVWF 2D
0445: MOVF 79,W
0446: MOVWF 2C
0447: MOVF 78,W
0448: MOVWF 2B
0449: MOVF 77,W
044A: MOVWF 2A
044B: CALL 160
044C: MOVF 78,W
044D: MOVWF 29
.................... // multiplexaccion del puerto B
.................... PORTB=0b00010000 + digito1;
044E: MOVLW 10
044F: ADDWF 26,W
0450: MOVWF 06
.................... delay_ms(5);
0451: MOVLW 05
0452: MOVWF 2A
0453: CALL 2FC
.................... PORTB=0b00100000 + digito2;
0454: MOVLW 20
0455: ADDWF 27,W
0456: MOVWF 06
.................... delay_ms(5);
0457: MOVLW 05
0458: MOVWF 2A
0459: CALL 2FC
.................... PORTB=0b01000000 + digito3;
045A: MOVLW 40
045B: ADDWF 28,W
045C: MOVWF 06
.................... delay_ms(5);
045D: MOVLW 05
045E: MOVWF 2A
045F: CALL 2FC
.................... PORTB=0b10000000 + digito4;
0460: MOVLW 80
0461: ADDWF 29,W
0462: MOVWF 06
.................... delay_ms(5);
0463: MOVLW 05
0464: MOVWF 2A
0465: CALL 2FC
....................
.................... }
0466: BSF 03.5
0467: GOTO 32D
.................... }
....................
0468: SLEEP
no se si alguien me pueda decir que tengo q modificar para q quede y lo pueda tener en .hex para cargarlo a mi pic