Programas hechos en MPLAB

exelente men
nadamas estas declarando la variable dato con : int8 dato;
pero para declarar una variable de tipo byte?

El int8 es lo mismo que byte, por defecto toma valores de 0 a 255. El resto ya depende del programa si se desea usa signed o unsigned delante de byte o int8. En el tiempo que he usado el CCS me he dado cuenta que no es un compilador muy estricto.

Tambien hay int1, int8 , int16 que es lo mismo para byte, word, int, etc... todo esta en el archivo de ayuda.

Un saludo
 
Saludos,

Estoy tratando de mostrar la lectura del adc (AN0) del pic16f877A en una pantalla gráfica en proteus, francamente no sé cómo proceder pues no he acertado con la solución, estaré muy agradecido si me orientan o, si tienen, un ejemplo básico para mostrar un float o entero en estas glcd.
 
Bueno, ya lo resolví con un ejemplo de la ayuda del pcw, aunque tengo algunas dudas al respecto y, formulo nuevamente, si alguien puede orientarme, muchas gracias de antemano. Mi dudas son respecto a lo que hacen algunas lineas del ejemplo como estas:

adc=(adc>249)?249:adc;

if (adc>200 && !warn)
 
Bueno, ya lo resolví con un ejemplo de la ayuda del pcw, aunque tengo algunas dudas al respecto y, formulo nuevamente, si alguien puede orientarme, muchas gracias de antemano. Mi dudas son respecto a lo que hacen algunas lineas del ejemplo como estas:

adc=(adc>249)?249:adc;

if (adc>200 && !warn)

Hola:
En adc=(adc>249)?249:adc;
es como un resumen de los comandos IF-ELSE que seria así:

Código:
if(adc>249){
   adc = 249;
}else{
      adc = adc;
}
y en if (adc>200 && !warn)
hace una doble comparación y ambas tienen que ser verdaderas.

Si(If) ¿adc>200 y(&&) warm=0? entonces.... {}

Un saludo
 
Ah.... ya veo, mi sincero agradecimiento por tu respuesta, seguiré practicando ahora que me es un poco más claro esto a ver a donde llego y quizás mas adelante enbarcarme en un buen proyecto.

De nuevo gracias y mucha Suerte!
 
Saludos nuevamente,

Estaba interesado en hacer un velocímetro en ccs pero veo que resulta complejo pues tiene que implementarse con timer y, segun he leido, resulta dificil alcanzar la precisión necesaria para tal fin pues habría que hacer lectura cada segundo, me gustaría tener la opinión del algun forero que sepa, pues entonces no me complico y lo dejo en basic (proton) pues tiene la orden Count para tal fin.
 
buenas tardes amigos.. estoy impresionado por las cosas que se pueden hacer con los microcontroladores, los felicito por tan excelente página. estoy iniciandome pocoa poco en el mundo de la programación y hace poco realice un llamado propeller displays con un 16F877A en el cual tengo conectado el puerto B a los leds (desde RB1 a RB7) para asi formar las palabras en una matriz de 7x5 (los 5 me los da el desplazamiento de la barra de leds), ademas de esto le tengo 2 leds conectados 1 a RA0 y el otro a RA1 los cuales los tengo en los extremos de la barra para asi tener un marco en la imagen, en inconveniente que tengo es la sincronización que debe tener el sistema para que al pasar por los 360° de la circunferencia se haga una interrupción y me comience de nuevo el mensaje(cosa que no sucede y cuando termina de escribir el mensaje se repite de inmediato), lo que se me ha ocurrido es un sensor óptico de barrera conectado al RC0 que con el registro de control del timer 1 se pueda obtener esta señal y enviarlo de nuevo al inicio de la escritura en el display, lo que no se es como leer este registro para así cada vez que se termine de leer la palabra el micro tenga que esperar a que se culminen los 360° para volver a empezar.

De antemano les agradezco su colaboración
 
hola a todos
tengo un problema y no se como resolverlo, es referente al pic12f508 donde tengo las instrucciones para encender dos led.
en la primera intruccion se enciendn las salidas 3 y 4 (uno y despues el otro) en la segunda intruccion es parecida solo que quiero que se repita por lo menos 5 veces antes de que regrese a la primera instruccion.
despues quiero que al mismo tiempo se encienda los 2 led pero no me lo respeta solo enciende uno a la vez (este codigo no lo inclui debido a que no me encienden asi).
ojala alguien pueda hecharme la mano

incluyo el programa

Código:
LIST P=12F508, r=hex   ;originalmente es PIC12C508 yo lo cambie porque uso el 12F508
   INCLUDE "P12F508.INC"   ;Incluimos la libreria que originalmente era PIC12C508

   __CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC ;Aquí se configuran los fusibles

; Variables
W   EQU 0
F   EQU 1

OUT1   EQU   0   ;GP0
OUT2   EQU   1   ;GP1
OUT3   EQU   2   ;GP2   ; no se usa GP3 por ser exclusivamente entrada
OUT4   EQU   4   ;GP4
OUT5   EQU   5   ;GP5
AUX1   EQU   0x0C   ;variable auxiliar
AUX2   EQU   0x0D   ;variable auxiliar
N    EQU 0x00

   ORG 0x000

   clrwdt


   movlw b'11000000'
   option

   movlw b'00001000'   ; Configura GP0-GP2 y GP4-GP5 como salida. GP3 solo es entrada
   tris GPIO

   bcf GPIO,OUT1   ;Borra todas las salidas
   bcf GPIO,OUT2
   bcf GPIO,OUT3
   bcf GPIO,OUT4
   bcf GPIO,OUT5


flasher 
bsf  GPIO,OUT3   ;Enciende el tercer LED
   call retardo   ;Espera un tiempo
   bcf  GPIO,OUT3   ;Apaga el tercer LED
   call retardo   ;Espera un tiempo 

 bsf  GPIO,OUT4   ;Enciende el cuarto LED
   call retardo   ;Espera un tiempo
   bcf  GPIO,OUT4   ;Apaga el cuarto LED
   call retardo   ;Espera un tiempo
goto repetir


repetir
incf N,F
bsf  GPIO,OUT2   ;Enciende el tercer LED
   call retardo   ;Espera un tiempo
   bcf  GPIO,OUT2   ;Apaga el tercer LED
   call retardo   ;Espera un tiempo 
 bsf  GPIO,OUT5   ;Enciende el cuarto LED
   call retardo  ;Espera un tiempo
   bcf  GPIO,OUT5   ;Apaga el cuarto LED
   call retardo   ;Espera un tiempo

goto flasher


retardo
   movlw   0x80      
   movwf   AUX1
   movwf   AUX2
Dec_1
   decfsz   AUX1, F
   goto   Dec_1
   decfsz   AUX2, F
   goto   Dec_1
   retlw   0
 
Última edición por un moderador:
Hola como están gente !

tengo una duda con respecto a los fuses de este pic
tengo varios microcontroladores como este que me encontré
y quiero programarlos, pero ala hora de empesar con el programa
me copie los fuses de un pic16f84a y los pege en el programa de pic16f767 pero me da
me da error el programa MPLAB

alguien se sabe los fuses para este pic
o como buscarlos si por medio de datasheet o otra parte
otra cosa estoy programando en assambler


gracias!!
 
lo mas facil es buscar el archivo "P16F767" y ver al final del documento los bits de configuracion. En windows por ejemplo esta dentro del directorio "..microchip\\mplabx\mpasmx" en caso de que estes usando MPLABX.
 

Adjuntos

  • P16F767.txt
    19.6 KB · Visitas: 34
hola a todos
tengo un problema y no se como resolverlo, es referente al pic12f508 donde tengo las instrucciones para encender dos led.
en la primera intruccion se enciendn las salidas 3 y 4 (uno y despues el otro) en la segunda intruccion es parecida solo que quiero que se repita por lo menos 5 veces antes de que regrese a la primera instruccion.
despues quiero que al mismo tiempo se encienda los 2 led pero no me lo respeta solo enciende uno a la vez (este codigo no lo inclui debido a que no me encienden asi).
ojala alguien pueda hecharme la mano
Saludos.
Haz algo como esto.
Código:
    clrf GPIO   ; Puerto en 0

flasher
;   Código...
;...............
;...............
    movlw 0x05        ; ¿Cuantas veces repetir?
    movwf contador  ; Cargar el contador en este caso con 5
    
repetir
;   Código...
;...............
;...............
; Aquí empiezas el bucle (loop)
    decfsz    contador,F    ; Decrementar contador
    goto    repetir    ; contador no llego a 0
;   Código...          ; contador llego a 0
;...............
;...............
    goto flasher
;***********************************************
; Y para encender dos o más LED puedes hacer esto.
    movlw    0x30
    movwf    GPIO    ; Pongo en 1 GPIO,5 y GPIO,4
    call    retardo
    clrf    GPIO    ; Los apago
    call    retardo
Suerte.
 
Última edición:
hola amigos mi problema este programa alguien me ayuda por favor:

list p=16f877, f=inhx32
#include<p16f877.inc>
CBLOCK 0x20
ENDC
ORG 0x00
GOTO COMIENZO
ORG 0x05
COMIENZO BSF STATUS,RP0
CLRF TRISB
BCF STATUS,RP0
CLRF PORTB
SEGUIR BSF PORTB,0
CALL SEGUNDO
BCF PORTB,0
CALL SEGUNDO
GOTO SEGUIR
INCLUDE<RETAR_1s.INC>
END

LOS ERRORES DE ESTE PROGRAMA:
3 found directive in column 1. (CBLOCK)
4 " " " " " (ENDC)
11 register in operand not in bank 0. ensure that bank bits are correct.
16 symbol not previously defined (SEGUNDO)
18 " " " " "
20 Cannot open file (include file <RETAR_1S.INC> not found)

por favor necesito ayuda ayudenme GRACIAS.
 
Vayamos por partes:

register in operand not in bank 0. ensure that bank bits are correct

Cada que utilices algún registro más allá del banco 0 debes de especificar sobre que rango de memoria está, por ejemplo:

movwf TRISA^0x80

El registro TRISA se encuentra en el banco 1, por eso se debe especificar que está más allá del banco 0 por medio de la sintáxis "^0x80"

symbol not previously defined (SEGUNDO)

Debes de declarar las variables a utilizar antes de usarlas.
Esto se logra por medio de:

Segundo EQU 0x20, donde en lugar de 0x20 puedes definir la posición de memoria que desees

Cannot open file (include file <RETAR_1S.INC> not found)

La librería Retar_1s.INC debe de estar en la carpeta de librerías del ensamblador

Saludos
 
Tienes que conseguirla. Si no, los retardos los puedes generar tu mismo con subrutinas de retardo.
Si apenas empiezas con esto te recomiendo este libro para que vayas aclarando dudas
 
Mis saludos cordiales.

La programación trata de una matriz de leds 8x8 utilizando el pic16f88

Tengo problemas que aún no las puedo resolver, quisiera pedir su ayuda, o alguna señal de cual podria ser la solucion..

A continuación pego el codigo que es en C. e indico los 5 errores que me aparecen al compilar en software MPLAB IDE v8.86


Código:
#include <16f88.h>      // Tipo de microcontrolador
#fuses INTRC_IO,MCLR    // Oscilador interno, MCLR activo
#fuses NOPUT,NOBROWNOUT // Sin Brownout reset ni Power up timer 
#use fast_io(B)       // La configuración de los puertos solo se hace al principio.
#use delay(clock=8M)    // Velocidad del oscilador interno 8 MHz

#define Load PIN_B0   // Load (STCP ambos integrados) B0
#define Clk PIN_B1   // Clock (SHCP ambos integrados) B1
#define dClm PIN_B2   // Data para las columnas (DS integrado 1) BC2
#define dLin PIN_B3   // Data para las lineas (DS integrado 2) B3


char  Memoria[96];      // 96 Bytes para la memoria (0 - 95)
char  Visor[8];         // 8 para el visor (8 columnas)

int1  flag;             // Flags de control
int1 flag2;
int   indx;             // Indice donde almacenará las nuevas columnas.
int   line;             // Linea que a mostrar.
int   time;             // Variables para el control de
int   ptime;            // la velocidad de desplazamiento.
int   t;                // Variable auxiliar.

void CargaMem(char Ascii);
void GuardaClm(char c);

#int_rtcc
void isr(){
   int Mul=128;         // Cada vez que ocurre la interrupcion
   if(++line>7)Line=0;  // selecciona la siguiente linea, si se pasa de 7 vuelve a 0.
   
   if(++ptime>5){      // Suma 1 a ptime. Si se pasa de 20
      ptime=0;          // lo pone en 0 y suma 1 a time.
      if(++time>200){   // Si se pasa de 200
         time=0;        // lo pone en 0
         Flag=true;     // y activa el flag.
      }
   }
   
   
   for(t=0;t<8;t++){    // Bucle 0 - 7 (Lineas)
      
    Aqui-> output_bit(dLin,!!(Visor[Line]&Mul)); //el error: Undefined identifier   PIN_B3

                                              
      if (Line==t)output_high(dClm);         // Si Line es igual a t
                                             // activa el bit correspondiente
      else  output_low(dClm);                // a la columna, sino lo desactiva.
      
    Aquí ->  output_low(Clk);  // el error: Undefined identifier   PIN_B1

    Aquí ->  output_high(Clk); // el error: Undefined identifier   PIN_B1
      
      Mul>>=1;          // Divide la mascara que compara con Visor[] (128,64,32...)
   }
   Aquí ->   output_low(Load);  //el error: Undefined identifier   PIN_B0
   Aquí ->   output_high(Load); // El error: Undefined identifier   PIN_B0

   
}
void main(){
   int k;   
   set_tris_a(0x00);
   set_tris_b(0x00);
   for (k=0;k<8;k++){
      Visor[k]=0;
   }
   for (k=0;k<96;k++){
      Memoria[k]=0;
   }                    // Limpia la memoria y el visor
   
   flag=true;           // Activo el flag para que cargue la memoria
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);  // Configuración del Timer0
   enable_interrupts(int_rtcc);              // Interrupcion por Timer0
   enable_interrupts(global);                // Interrupciones globales
   
   do{
      if (Flag){                 // Si el flag está activado
         flag2=true;             // Activa el flag2
         
         for (k=0;k<8;k++){      // Pasa el contenido de las primeras 8
            visor[k]=Memoria[k]; // columnas en memoria al visor
         }
         
         for (k=0;k<95;k++){        // Rota el contenido de toda la memoria
            Memoria[k]=Memoria[k+1];// a la izquierda 1=1+1, 2=2+1, n=n+1...
            
            if (Memoria[k]!=0){Flag2=false;} // Si hay alguna columna que no
                                             // esté vacía desactiva el flag2
         }         
         Memoria[95]=0;             // Limpia la ultima columna de la memoria
        
        if (Flag2){                 // Si flag2 está activo            
            indx=7;                 // a partir de la columna 7 
            CargaMem("PICROBOT");   // escribe PICROBOT            
         }
         Flag=false;                // Desactiva el flag
         
      }
   }while (true);    // Bucle infinito


}

void GuardaClm(char c){
   if (indx<94){
      Memoria[indx]=c;     // Guarda la columna en la ubicación actual de memoria
      indx++;              // y aumenta el indice
   }
}


void CargaMem(char ascii){    // Carga la memoria con el caracter deseado
   switch (ascii){    
      
      case('B'):
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b01001001);
      GuardaClm(0b01001001);
      GuardaClm(0b01111111);
      GuardaClm(0b00110110);      
      break;
      
      case('C'):
      GuardaClm(0b00111110);
      GuardaClm(0b01111111);
      GuardaClm(0b01000001);
      GuardaClm(0b01000001);
      GuardaClm(0b01100011);
      GuardaClm(0b00100010);     
      break;

      case('I'):
      GuardaClm(0b01000001);
      GuardaClm(0b01000001);
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b01000001);
      GuardaClm(0b01000001);      
      break;  

      case('O'):
      GuardaClm(0b00111110);
      GuardaClm(0b01111111);
      GuardaClm(0b01000001);
      GuardaClm(0b01000001);
      GuardaClm(0b01111111);
      GuardaClm(0b00111110);      
      break;      
      
      case('P'):      
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b00001001);
      GuardaClm(0b00001001);
      GuardaClm(0b00001111);
      GuardaClm(0b00000110);      
      break;
      
      case('R'):
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b00001001);
      GuardaClm(0b00011001);
      GuardaClm(0b01111111);
      GuardaClm(0b01100110);
      break;
      
      case('T'):
      GuardaClm(0b00000011);
      GuardaClm(0b00000001);
      GuardaClm(0b01111111);
      GuardaClm(0b01111111);
      GuardaClm(0b00000001);
      GuardaClm(0b00000011);
      break;      
   }
      GuardaClm(0b00000000);
}

//Gracias
 
Última edición por un moderador:
Mis saludos cordiales.

La programación trata de una matriz de leds 8x8 utilizando el pic16f88

Tengo problemas que aún no las puedo resolver, quisiera pedir su ayuda, o alguna señal de cual podria ser la solucion..
//Gracias
Saludos Luno.
Cargue tu código en MPLAB v8.83 y usando como compilador PCWHD Compiler v4.114
Y no se presento ningún tipo de error al compilar el código.

Memory usage: ROM=17% RAM=35% - 36%
0 Errors, 0 Warnings.


El problema puede estar con el compilador que estas utilizando,
que no reconoce esas instrucciones y por eso te produce errores.

Aquí adjunto el proyecto generado por MPLAB.

PD. Movi tu tema a este otro por tratarse de un programa hecho en MPLAB

Suerte.
 

Adjuntos

  • 8x8.rar
    20.5 KB · Visitas: 46
Última edición:
Atrás
Arriba