Autor Tema: ayuda con programa CCS en asembler  (Leído 2629 veces)

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

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
ayuda con programa CCS en asembler
« en: 27 de Agosto de 2015, 17:55:41 »
hola en este programa no me reconoce ningun registro del  microcontrolador necesito ayuda no se porque pasa esto, EL lenguaje que estoy usando es C:\Program files\Picc\CCSC.exe, CCS C COMPILER FOR PIC/10/DSPIC30,

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #1 en: 27 de Agosto de 2015, 17:57:39 »
Código: [Seleccionar]
#include <16f73.h>

#define LED     PIN_A0
#define VAR PIN_A4
#define LED_6 PIN_B0
#define LED_7 PIN_B1
#define LED_8 PIN_B2
#define LED_9 PIN_B3
#use delay (clock =4000000)
#use rs232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8)
#use standard_io(A)
#use standard_io(B)
#use standard_io(C)

#include <stdio.h>


#define PIN_LED1  PIN_B0
#define PIN_LED2  PIN_B1
#define PIN_LED3  PIN_B2
#define envio   PIN_C3
#define PIN_LED4  PIN_B3


#define LED1_HIGH output_high(PIN_LED1)
#define LED1_LOW  output_low(PIN_LED1)
#define LED2_HIGH output_high(PIN_LED2)
#define LED2_LOW  output_low(PIN_LED2)
#define LED3_HIGH output_high(PIN_LED3)
#define LED3_LOW  output_low(PIN_LED3)
#define LED4_HIGH output_high(PIN_LED4)
#define LED4_LOW  output_low(PIN_LED4)
unsigned char datos [16];
int j; 
unsigned char x;

void diagnostico (void)
{
datos [0]=1;
datos [1]=1;
datos [2]=0;
datos [3]=1;
datos [4]=0;
datos [5]=1;
datos [6]=1;
datos [7]=0;
datos [8]=1;
datos [9]=0;
datos [10]=1;
datos [11]=0;
datos [12]=0;
datos [13]=1;
datos [14]=1;
datos [15]=0;
for (j=0;j<15;j++ )
{
x=datos[j];
  envio=x;
SSPCON,1=0
SSPCON,2=0
SSPCON,3=0
SSPCON,4=1
;}
}



void main(){

set_tris_b(0x00);
set_tris_a(0x00);
set_tris_c(0x00);


 

if(input(VAR)==0){
LED1_HIGH;
LED2_HIGH;
LED3_HIGH;
LED4_HIGH;
}

else(input(VAR)==1);{
LED1_LOW;
LED2_LOW;
LED3_LOW;
LED4_LOW;
}

output_high(PIN_A0);

diagnostico();
}

ESE es el codigo me sale error cada vez que invoco algun registro del micro

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: ayuda con programa CCS en asembler
« Respuesta #2 en: 27 de Agosto de 2015, 18:40:21 »
¿puedes subir aquí, los errores que te tira?
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ayuda con programa CCS en asembler
« Respuesta #3 en: 27 de Agosto de 2015, 18:44:23 »
Primero que nada eso no es ASM. Es C.
Si quisieras hacer un modulo en ASM tendrias que pedir o buscar como es que se pasa los parametros C en ese compilador, ya que cada compilador es unico. Y estoy mas que seguro que si tenes problemas con C, intentando mezclar C y ASM vas a terminar con millones mas. Si no te reconoce ningun PIN es por que o estas poniendolos mal o tu include:

#include <16f73.h>

Ya que ese include no tiene definido los pines. No tiene sentido usar:

   set_tris_b(0x00);
   set_tris_a(0x00);
   set_tris_c(0x00);

Si tenes

#use standard_io(A)
#use standard_io(B)
#use standard_io(C)

El standard IO lo que hace es cada ves que se desa cambiar el puerto pasarlo a salida o entrada ( si vos lees el PIN_A0 lo pone como entrada en el tris y lee, si escribis el PIN lo pone como salida en el tris y escribe). mientras que si usas fast_io ya ahi hace caso a tus tris

Ya con respecto al programa no voy a opinar demasiado, a no ser que desees que lo haga, C es otra forma de "programar", tenes que tener en cuenta como funciona en ASM pero no es lo mismo.

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #4 en: 28 de Agosto de 2015, 11:04:48 »
Clean: Deleting intermediary and output files.
Clean: Deleted file "programa7.ESYM".
Clean Warning: File "C:\Users\ciel\Desktop\archivos mplab\programa7.o" doesn't exist.
Clean: Deleted file "programa7.HEX".
Clean: Deleted file "programa7.LST".
Clean: Deleted file "programa7.ERR".
Clean: Deleted file "programa7.COF".
Clean: Done.
Executing: "C:\Program files\Picc\CCSC.exe" +FM "programa7.c" +DF +LN +T +A +M +Z +Y=9 +EA
>>> Warning 207 "programa7.c" Line 58(1,1): Code has no effect
*** Error 12 "programa7.c" Line 59(3,9): Undefined identifier   SSPCON
*** Error 12 "programa7.c" Line 60(3,9): Undefined identifier   SSPCON
      2 Errors,  1 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Fri Aug 28 09:01:52 2015

esos son los errores porque no reconoce los registros del micro y tampoco se como enviar la trama de la variable datos que asigno a x no se como mandar eso al puerto c3 del micro me podrian ayudar con eso
Código: [Seleccionar]
#include <16f73.h>

#define LED     PIN_A0
#define VAR PIN_A4
#define LED_6 PIN_B0
#define LED_7 PIN_B1
#define LED_8 PIN_B2
#define LED_9 PIN_B3
#use delay (clock =4000000)
#use rs232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8)
#use standard_io(A)
#use standard_io(B)
#use standard_io(C)

#include <stdio.h>


#define PIN_LED1  PIN_B0
#define PIN_LED2  PIN_B1
#define PIN_LED3  PIN_B2
#define envio   PIN_C3
#define PIN_LED4  PIN_B3


#define LED1_HIGH output_high(PIN_LED1)
#define LED1_LOW  output_low(PIN_LED1)
#define LED2_HIGH output_high(PIN_LED2)
#define LED2_LOW  output_low(PIN_LED2)
#define LED3_HIGH output_high(PIN_LED3)
#define LED3_LOW  output_low(PIN_LED3)
#define LED4_HIGH output_high(PIN_LED4)
#define LED4_LOW  output_low(PIN_LED4)
unsigned char datos [16];
int j; 
unsigned char x;

void diagnostico (void)
{
datos [0]=1;
datos [1]=1;
datos [2]=0;
datos [3]=1;
datos [4]=0;
datos [5]=1;
datos [6]=1;
datos [7]=0;
datos [8]=1;
datos [9]=0;
datos [10]=1;
datos [11]=0;
datos [12]=0;
datos [13]=1;
datos [14]=1;
datos [15]=0;
for (j=0;j<15;j++ )
{
x=datos[j];
  envio==x;
  SSPCON,1=0;
  SSPCON,3=0;
;}
}



void main(){

set_tris_b(0x00);
set_tris_a(0x00);
set_tris_c(0x00);


 

if(input(VAR)==0){
LED1_HIGH;
LED2_HIGH;
LED3_HIGH;
LED4_HIGH;
}

else(input(VAR)==1);{
LED1_LOW;
LED2_LOW;
LED3_LOW;
LED4_LOW;
}

output_high(PIN_A0);

diagnostico();
}

killerjc me puedes ayudar a optimizar mas el codigo

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ayuda con programa CCS en asembler
« Respuesta #5 en: 28 de Agosto de 2015, 11:10:36 »
es que CSS si venis del ASM te vas a querer matar.

Código: [Seleccionar]
  SSPCON,1=0;
Eso no funciona igual que en ASM. Ademas creo que CSS tiene funciones ya para configurar esos registros sin que los toques. Por ejemplo:

#use rs232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8)

Esa linea ya te configura todo lo de la UART ( todos los registros ) para utilizarlo.
Aunque yo no se mucho de CCS, asi que otro te va a tener que ayudar con eso.

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #6 en: 28 de Agosto de 2015, 11:21:39 »
Código: [Seleccionar]
#include <16f73.h>

#define LED     PIN_A0
#define VAR PIN_A4
#define LED_6 PIN_B0
#define LED_7 PIN_B1
#define LED_8 PIN_B2
#define LED_9 PIN_B3
#use delay (clock =4000000)
#use rs232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)

#include <stdio.h>


#define PIN_LED1  PIN_B0
#define PIN_LED2  PIN_B1
#define PIN_LED3  PIN_B2
#define envio   PIN_C3
#define PIN_LED4  PIN_B3


#define LED1_HIGH output_high(PIN_LED1)
#define LED1_LOW  output_low(PIN_LED1)
#define LED2_HIGH output_high(PIN_LED2)
#define LED2_LOW  output_low(PIN_LED2)
#define LED3_HIGH output_high(PIN_LED3)
#define LED3_LOW  output_low(PIN_LED3)
#define LED4_HIGH output_high(PIN_LED4)
#define LED4_LOW  output_low(PIN_LED4)
unsigned char datos [16];
int j; 
unsigned char x;

void diagnostico (void)
{
datos [0]=1;
datos [1]=1;
datos [2]=0;
datos [3]=1;
datos [4]=0;
datos [5]=1;
datos [6]=1;
datos [7]=0;
datos [8]=1;
datos [9]=0;
datos [10]=1;
datos [11]=0;
datos [12]=0;
datos [13]=1;
datos [14]=1;
datos [15]=0;
for (j=0;j<15;j++ )
{
x=datos[j];
  output_high(PIN_C3);
 
;}
}



void main(){

set_tris_b(0x00);
set_tris_a(0x00);
set_tris_c(0x00);


 

if(input(VAR)==0){
LED1_HIGH;
LED2_HIGH;
LED3_HIGH;
LED4_HIGH;
}

else(input(VAR)==1);{
LED1_LOW;
LED2_LOW;
LED3_LOW;
LED4_LOW;
}

output_high(PIN_A0);

diagnostico();
}

este es el ultimo codigo no esta prendiendo los leds que deberia que dependen del pin a4 y tampoco me prende un led en el pin a0 y al medir el pin c3 deberia estar en alto pero no me sale ni en alto ni en bajo con el multimetro

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #7 en: 28 de Agosto de 2015, 12:03:06 »
no se porque cada vez que compilo el programa me cambie los bits de configuracion, y si con esta linea
#use rs232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8) queda definido todo lo de la uart entonces quiero saber como hago para enviar la variable x por alguno de los pines de la uart

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #8 en: 28 de Agosto de 2015, 13:03:26 »
hola ya casi funciona pero ya se en donde esta el fallo
aqui
if(input(PIN_A4)==0){
   output_high(PIN_B0);
   output_high(PIN_B1);
   output_high(PIN_B2);
   output_high(PIN_B3);
   }

else(input(PIN_A4)==1);{
   output_low(PIN_B0);
   output_low(PIN_B1);
   output_low(PIN_B2);
   output_low(PIN_B3);
me pueden decir que estoy haciendo mal aqui porque en el circuito sin importar que el pin a4 este en alto o en bajo los pines del puerto b que pongo ahi siguen en bajo en ambas condiciones y no prende unos leds que tengo ahi me pueden ayudar

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #9 en: 28 de Agosto de 2015, 13:28:39 »
ya funciona casi todo ahora me hace falta saber como mandar los datos que defino en x por algun puerto del micro

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #10 en: 28 de Agosto de 2015, 13:29:41 »
Código: [Seleccionar]
#include <16f73.h>




#use delay (clock =4000000)
#use rs232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8)
#fuses XT,NOWDT
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)

#include <stdio.h>








unsigned char datos [16];
int j; 
unsigned char x;

void diagnostico (void)
{
datos [0]=1;
datos [1]=1;
datos [2]=0;
datos [3]=1;
datos [4]=0;
datos [5]=1;
datos [6]=1;
datos [7]=0;
datos [8]=1;
datos [9]=0;
datos [10]=1;
datos [11]=0;
datos [12]=0;
datos [13]=1;
datos [14]=1;
datos [15]=0;
for (j=0;j<15;j++ )
{
x=datos[j];
  output_high(PIN_C3);
 
;}
}



void main(){

set_tris_b(0x00);
set_tris_a(0x00);
set_tris_c(0x00);


 
while(true){
if(input(PIN_A4)){
output_high(PIN_B0);
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
}

else;{
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
}
}
output_high(PIN_A0);

diagnostico();
}

aqui como hago para enviar x por algun puerto del micro

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ayuda con programa CCS en asembler
« Respuesta #11 en: 28 de Agosto de 2015, 14:01:52 »
Bueno hasta ahora tenes muchos problemas, y en especial por el hecho de que no conoces C, es decir estas poniendo cualquier cosa.

Te sugiero que busques un tutorial de C por internet y arranques desde alli. Por que tenes muchos errores en eso, en la programacion, y si no la aprendes vas a tener todos estos problemas.


Código: C
  1. char datos[16]={'1','1','0','1','0','1','1','0','1','0','1','0','0','1','1','0'};        
  2. int j;         
  3.  
  4. void main(){
  5.        
  6.         set_tris_b(0x00);
  7.         set_tris_a(0x00);
  8.         set_tris_c(0x00);
  9.  
  10.         output_high(PIN_A0);
  11.  
  12.         while(1)
  13.         {
  14.                 if(input(PIN_A4)==0)
  15.                 {
  16.                         output_high(PIN_B0);
  17.                         output_high(PIN_B1);
  18.                         output_high(PIN_B2);
  19.                         output_high(PIN_B3);
  20.                 }
  21.                 else
  22.                 {
  23.                         output_low(PIN_B0);
  24.                         output_low(PIN_B1);
  25.                         output_low(PIN_B2);
  26.                         output_low(PIN_B3);
  27.                 }
  28.                 for (j=0;j<15;j++ )
  29.                 {
  30.                         putc(datos[j]);
  31.                 }
  32.  
  33.         }
  34. }


Tus "problemas"

- Asignando valores constantes:

Citar
datos
  • =1;

datos [1]=1;
datos [2]=0;
datos [3]=1;
datos [4]=0;
.....

Asignando valores a una variable que no usas como x, tranquilamente podrias tener ese valor desde datos[j],
Pusiste en un for que ponga en 1 el pin RC3 15 VECES, con 1 sola basta.
Tenes punto y coma ( ; ) de mas.

Citar
for (j=0;j<15;j++ )
{
x=datos[j];
output_high(PIN_C3);
;}

Veo que corregiste el tema de no tener un loop inifinito, ahora lo tenes. pero:
Nuevamente, hay un punto y coma de mas
Citar
else;{

Y tenes
Citar
output_high(PIN_A0);
ejecutandose siempre pero jamas se pone a 0, por que ponerlo a 1 infinitas veces cuando basta solo 1 ves ?

Con respecto a las funciones las podes encontrar en el manual de CCS
https://www.ccsinfo.com/downloads/ccs_c_manual.pdf
Y ejemplos de internet.

Pero esas funciones no te van a servir de nada si es que no estas programando bien. Empeza por la programacion desde 0, busca tutoriales como te dije. Sino te vas a complicar demasiado.
Aca ya pasa por vos, yo no creo que estes para empezar a usar RS232 con tus conocimientos de programacion. Y va a depender de vos el probar, ver en que te equivocaste y leer bastante

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #12 en: 28 de Agosto de 2015, 14:51:09 »
no me reconoce el putc y cuando funcione ahi porque pin saldria la señal datos

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: ayuda con programa CCS en asembler
« Respuesta #13 en: 28 de Agosto de 2015, 15:32:40 »
Segun veo tienes algunas cosas malas.

Citar
if(input(PIN_A4)){
   output_high(PIN_B0);
   output_high(PIN_B1);
   output_high(PIN_B2);
   output_high(PIN_B3);
   }

else;{
   output_low(PIN_B0);
   output_low(PIN_B1);
   output_low(PIN_B2);
   output_low(PIN_B3);
}

Primero que nada esta preguntando por el estado del pin_A4, if(input(PIN_A4)), y lo tienes configurado como salida, cuando deberia ser de entrada.
Otra cosa los pines del puerto A estan configurados como analogicos por lo que tienes que primeramente definirlos como digitales por medio de adc_setup_ports( ); de acuerdo al pic que estas utilizando.

Luego debes eliminar la coma despues del else.

Para imprimir el string que creaste lo puesdes hacer asi:

      for (j=0;j<15;j++ )
      {
         printf("%c",datos[j]);  //imprime los datos
       }

Saludos

Desconectado yair_xiox

  • PIC16
  • ***
  • Mensajes: 210
Re: ayuda con programa CCS en asembler
« Respuesta #14 en: 28 de Agosto de 2015, 16:54:31 »
Código: [Seleccionar]
#include <16f73.h>




#use delay (clock =4000000)

#fuses XT,NOWDT,PUT, NOPROTECT
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use rs232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8)

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>





char datos[16]={'1','1','0','1','0','1','1','0','1','0','1','0','0','1','1','0'};
int j; 





void main(){
setup_adc_ports(PIN_A0,PIN_A1,PIN_A2,PIN_A3,PIN_A4,PIN_A5);
set_tris_b(0x00);
set_tris_a(0x08);
set_tris_c(0x00);



 
output_high(PIN_A0);
 
while(true)
{
if(input(PIN_A4)==0)
{
output_high(PIN_B0);
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
}
else
{
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
}
for (j=0;j<15;j++ )
{
putc(datos[j]);
}
 
}
}

me sale el siguiente error
Clean: Deleting intermediary and output files.
Clean: Deleted file "programa7.ESYM".
Clean Warning: File "C:\Users\ciel\Desktop\archivos mplab\programa7.o" doesn't exist.
Clean: Deleted file "programa7.ERR".
Clean: Done.
Executing: "C:\Program files\Picc\CCSC.exe" +FM "programa7.c" +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 58 "programa7.c" Line 30(30,31): Expecting a close paren
      1 Errors,  0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Fri Aug 28 14:52:47 2015

es una linea arriba de setup_adc_ports(PIN_A0,PIN_A1,PIN_A2,PIN_A3,PIN_A4,PIN_A5); no importa donde lo ponga una linea arriba de esta me sale ese error alguien sabe como corregirlo


 

anything