Autor Tema: hola alguien me podria ayudar a convertir un progrma de c a hex  (Leído 5501 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado alanmexb

  • PIC10
  • *
  • Mensajes: 1
hola alguien me podria ayudar a convertir un progrma de c a hex
« en: 04 de Agosto de 2013, 12:30:35 »
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

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: hola alguien me podria ayudar a convertir un progrma de c a hex
« Respuesta #1 en: 04 de Agosto de 2013, 14:36:44 »
Hola, el archivo .hex es el resultado de un proceso de compilación realizado por alguna plataforma de desarrollo ya sea Mplab, CCS, etc., básicamente lo que tienes que hacer es abrirlo en alguno de estos aplicativos, crear un proyecto, si así lo requiere la plataforma y luego compilar, si no hay errores el archivo .hex se genera automáticamente y los puedes pasar al PIC.

Saludos.

Desconectado jko

  • PIC10
  • *
  • Mensajes: 2
Re: hola alguien me podria ayudar a convertir un progrma de c a hex
« Respuesta #2 en: 22 de Agosto de 2013, 16:48:28 »
Hola, el archivo .hex es el resultado de un proceso de compilación realizado por alguna plataforma de desarrollo ya sea Mplab, CCS, etc., básicamente lo que tienes que hacer es abrirlo en alguno de estos aplicativos, crear un proyecto, si así lo requiere la plataforma y luego compilar, si no hay errores el archivo .hex se genera automáticamente y los puedes pasar al PIC.

Saludos.

diego tengo  una duda  pues ya  compile  el programa pero no me genera el archivo  .hex que  puedo hacer pues  no lo encuentro por  ningun lado   te agradeceria  tu ayuda

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: hola alguien me podria ayudar a convertir un progrma de c a hex
« Respuesta #3 en: 01 de Septiembre de 2013, 10:26:55 »
Por lo que veo, si no te genera el .hex, deberia tener un problema o error el programa.
Yo no te podria ayudar, ya que uso asm y compilo con el MPLAB, y este mismo si tiene un error, lo marca y no crea el .hex hasta que sea corregido.
Espero lo hallas podido solucionar ... Saludos !!!
Vangeluz

Desconectado BBMNet

  • PIC12
  • **
  • Mensajes: 91
Re: hola alguien me podria ayudar a convertir un progrma de c a hex
« Respuesta #4 en: 11 de Septiembre de 2013, 04:35:02 »
Creo que sería conveniente que postearas tu circuito ya que aunque describes el multiplex de los dígitos en el programa no encuentro las salidas correspondientes a los elementos del multiplex. Como aparenta en el programa y tal como lo alcanzo a entiender todos los digitos despliegan la misma información al mismo tiempo. Si tu lectura fuera por ejemplo 1234 lo que se vería en el display seria 1111, 2222, 3333, 4444 y se estaría repitiéndo ese proceso. Si la velocidad de barrido es alta el display sería ilegible.

A manera de ejemplo te dejo el link a uno de los modelos de display que uso en mis equipos comerciales. Para tu aplicación no son necesarios los chips auxiliares que se ven pero sí los transistores que se observan.

http://www.imageshack.com/i/f5e5kpj

Los transistores son activados uno por uno en correspondencia con el dígito que se despliegue. Así entonces si el dato a desplegar es el mismo 1234 el display mostrará 1234. A mayor velocidad de barrido menor será la intensidad de los dígitos ó si es muy baja la velocidad de barrido se verán intensos pero titilando (parpadeando).

Para realizar el multiplex podrías utilizar bits del puerto C para activar los transistores.

Con respecto a la lectura del puerto AN0 déjame releer un programa que hice hace tiempo para el PIC12F675 para ver si se puede adaptar al 877.

Un saludo.


 

anything