TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
26 de Julio de 2014, 14:11:16

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
346217 Mensajes en 38845 Temas por 40407 Usuarios
Último usuario: makukula
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Lenguaje C para microcontroladores PIC (Moderadores: Modulay, pikman, pocher, vszener, Suky)
| | |-+  EJEMPLOS PARA PIC16F877 CON CCS
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Marcar como favorito Imprimir
Autor Tema: EJEMPLOS PARA PIC16F877 CON CCS  (Leído 14327 veces)
faypert
PIC10
*
Desconectado Desconectado

Mensajes: 6


« : 31 de Marzo de 2006, 11:01:00 »

EN ESTE LUGAR PUEDEN PUPLICAR SUS PROYECTOS DEL MICROCONTROLADOR
PIC16F877 QUE ES UNO DE LOS MEJORES MICROS Y DISPOMIBLE EN EL MERCADO
Y DE APLIO USO.
En línea
faypert
PIC10
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #1 : 31 de Marzo de 2006, 11:23:00 »

PARA EMPESA AQUI TENEMOS UN ELEMPLO SIMPLE  PARA COMUNICAR  PC-PIC Y PIC-PC
PRONTO SE ADJUNTARA EL CIRCUITO Y YL FUNCIONAMIENTO


#include <16F877.H>
#device *=16
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)


void ABM(int16 msg_format[2][3]);


char array[10] = {0x55,1,2,3,4,5,6,7,8,9};
#locate array = 0x190


void main()
{
int16 msg_ptr_array[2][3];


msg_ptr_array[1][2] = array;

ABM(msg_ptr_array);

while(1);
}

void ABM(int16 msg_format[2][3])
{
char *ptr;
ptr = msg_format[1][2];


printf("ptr = %lx, *ptr = %x ", ptr, *ptr);
}
En línea
faypert
PIC10
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #2 : 31 de Marzo de 2006, 11:31:00 »

INTERRUPCION DE UN LED
//////////////////////////////////////////////
#include<16f877.h>
#use delay(CLOCK=10000000)

#int_timer1
intval() {
int, flag1;
set_timer1(0x8000);// 1sec
if(flag1 == 0) {
 output_high(PIN_B7); //LED off
flag1 = 1;
}
else {
 output_low(PIN_B7); //LED on
 flag1 = 0;
}
}

main() {
int flag;
set_tris_b(0); //all output
output_high(PIN_B7); //LED off

setup_timer_1(T1_EXTERNAL_SYNC | T1_CLK_OUT | T1_DIV_BY_1);
set_timer1(0x8000); //initial set
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);

while(1) {
if(flag == 0) {//key input
output_high(PIN_B6); /LED2 on
flag = 1;
 }
else {
output_low(PIN_B6); //LED2 off
flag = 0;
 }
 delay_ms(1000);
}
}
En línea
faypert
PIC10
*
Desconectado Desconectado

Mensajes: 6


« Respuesta #3 : 31 de Marzo de 2006, 11:56:00 »

ESTE ES UN EJEMPLO MUY COMPLEJO DE MEDIR LA DISTACIO POR REVOTE

umss universit.
//ejemplo:831
// Ultrasonico PIC coddigo
//04/Mar/2006
//medicion de distancia por ultrasonico 1200mm
//modificacion#7

#include <16f877.h>

#fusesXT, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOLVP
#use delay (clock=20000000)
#use RS232 (baud=9600, XMIT=PIN_C6, RCV=PIN_C7)

#define LEDL PIN_D7
#define LEDM PIN_D6
#define LEDR PIN_D5

#define TXRXSEL PIN_E0
#define USSTATE PIN_E1

#byte b_port=0x06

#define usl_driveH  0b00010000
#define usl_driveL  0b00000010
#define usm_driveH  0b00010000
#define usm_driveL  0b00000100
#define usr_driveH  0b00010000
#define usr_driveL  0b00001000
#define usall_short 0b00000000

struct INTCONmap
{
   boolean RBIF;
   boolean INTF;
   boolean T0IF;
   boolean RBIE;
   boolean INTE;
   boolean T0IE;
   boolean PEIE;
   boolean GIE;
} INTCON;
#byte INTCON=0x0b

byte pulseLeftTX()
{
  int i;
  byte rx_range,ct;

  set_tris_b(0b00000001);

 / output_low(PIN_B0);
  for (i=0; i<8; i++)
  {
    b_port=usl_driveH;
    output_high(PIN_B1);
    delay_us(12);
    b_port=usl_driveL;
    output_low(PIN_B1);
    delay_us(11);
  }
  b_port=usall_short;


  set_tris_b(0b10000001);

 
  set_rtcc(0);
  INTCON.INTF=0;
  INTCON.T0IF=0;
  rx_range=0xff;
  while (INTCON.T0IF==0)
  {
    if ((rx_range==0xff)&&(INTCON.INTF==1)) rx_range=get_rtcc();
  }

  for (ct=0;ct<3;ct++) //wait for any echoes to go away...
  {
    set_rtcc(0);
    INTCON.T0IF=0;
    while (INTCON.T0IF==0) { }
  }

  return rx_range;
}

byte pulseMidTX()
{
  int i;
  byte rx_range,ct;

  set_tris_b(0b00000001);


 output_low(PIN_B0);
  for (i=0; i<8; i++)
  {
    b_port=usm_driveH;
    output_high(PIN_B3);
    delay_us(12);
    b_port=usm_driveL;
    output_low(PIN_B3);
    delay_us(11);
  }
  b_port=usall_short;




  set_tris_b(0b00100001);

 
  set_rtcc(0);
  INTCON.INTF=0;
  INTCON.T0IF=0;
  rx_range=0xff;
  while (INTCON.T0IF==0)
  {
    if ((rx_range==0xff)&&(INTCON.INTF==1)) rx_range=get_rtcc();
  }

  for (ct=0;ct<3;ct++)
  {
    set_rtcc(0);
    INTCON.T0IF=0;
    while (INTCON.T0IF==0) { }
  }

  return rx_range;
}

byte pulseRightTX()
{
  int i;
  byte rx_range,ct;

  set_tris_b(0b00000001);

   change time
 output_low(PIN_B0);
  for (i=0; i<8; i++)
  {
    b_port=usr_driveH;
   output_high(PIN_B3);
    delay_us(12);
    b_port=usr_driveL;
   output_low(PIN_B3);
    delay_us(11);
  }
  b_port=usall_short;


  delay_us(400);

 
  set_tris_b(0b01000001);

 
  set_rtcc(0);
  INTCON.INTF=0;
  INTCON.T0IF=0;
  rx_range=0xff;
  while (INTCON.T0IF==0)
  {
    if ((rx_range==0xff)&&(INTCON.INTF==1)) rx_range=get_rtcc();
  }

  for (ct=0;ct<3;ct++) //wait for any echoes to go away...
  {
    set_rtcc(0);
    INTCON.T0IF=0;
    while (INTCON.T0IF==0) { }
  }

  return rx_range;
}

void serialCheck(byte rangeL, byte rangeM, byte rangeR)
{

  char c;

 if (kbhit())
  {
    c = getc();

    if (c == "*")
    {
      output_low(USSTATE);
     
      output_high(TXRXSEL);
      delay_ms(5);
      delay_us(10);
      putc(rangeL);
      delay_us(10);
      putc(rangeM);
      delay_us(10);
      putc(rangeR);
      delay_us(50);
      output_low(TXRXSEL);
    }
  }
}

void scanSerial()
{
  char c;

  c = getc();
}

void main(void)
{
  byte rangeL, rangeM, rangeR;

  #use fast_io(B)
  #use fast_io(E)
  #use fast_io(D)
  #use fast_io(C)
  SET_TRIS_B(0x00);   
  SET_TRIS_D(0x00);    
  SET_TRIS_E(0x00);   
  SET_TRIS_C(0b10000000);   

  output_low(TXRXSEL);  
  output_high(USSTATE);  

  output_high(LEDL);
  output_high(LEDM);
  output_high(LEDR);

  setup_counters(RTCC_INTERNAL,RTCC_DIV_64);

  rangeL = 0xff;
  rangeM = 0xff;
  rangeR = 0xff;
 
  while(true)
  {
   output_high(USSTATE);  
   serialCheck(66,66,66);
    output_low(USSTATE);  
   serialCheck(66,66,66);
  }

  while(TRUE)
  {
    rangeL = pulseLeftTX();
    serialCheck(rangeL, rangeM, rangeR);
    rangeM = pulseMidTX();
    serialCheck(rangeL, rangeM, rangeR);
    rangeR = pulseRightTX();
    serialCheck(rangeL, rangeM, rangeR);
   
    if (rangeL < 38)
      output_high(LEDL);
    else
      output_low(LEDL);

    if (rangeM < 38)
      output_high(LEDM);
    else
      output_low(LEDM);

    if (rangeR < 38)
      output_high(LEDR);
    else
      output_low(LEDR);

  }

}

En línea
vszener
Moderador Local
PIC24H
*****
Desconectado Desconectado

Sexo: Masculino
España España

Mensajes: 2383


VsZeNeR


« Respuesta #4 : 31 de Marzo de 2006, 12:43:00 »

Buenas!!!me parece magnifico tu aporte mediante ejemplos pero ummmm por ejemplo, en este ultimo programa, el de ultrasonico, porque no realizas una breve explicacion del proyecto e indicas los componentes a usar...es una sugerencia para todos tus programas que postees, lo digo porque sino, me parece, que quien entre y vea tu codigo sin explicacion de su hardware pues va a ver simplemente codigo.....es una sugerencia y a seguir aportando mas al foro!


Suerte!!!Giño
En línea

Nos vemos en los bares!!!!!
RedPic
Administrador
DsPIC33
*******
Conectado Conectado

Sexo: Masculino
Tibet Tibet

Mensajes: 5179



WWW
« Respuesta #5 : 31 de Marzo de 2006, 14:03:00 »

Me uno al consejo dado por el maestro vszener. Dale un poco de forma y quedarán
tus ejemplos mucho mas entendibles por nuestros amigos y visitantes.

Con [ c o d e ] (sin espacios) delante del código y [ / c o d e ] (sin espacios) tras él
podras tambien ajustarle la identación y será legible al 100%. Además una buena
práctica es comentar las funciones e incluso las lineas del código, así nuestros amigos
menos puestos en programación saben qué hace cada una de ellas y tienen mucho
mas claro qué es lo que se pretende y cómo se dice eso en C.

Puedes, si quieres, darte una vuelta por nuestros propios post para ver cómo lo
hacemos nosotros mismos.

Ejemplitos en C para 16F648A de vszener
Microcursillo en C de Nocturno ó
Ejemplitos 16F87A de un servidor de ustedes.

Bienvenido al foro y muchas gracias por tus aportes a los amigos Picmaníacos.

En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
ALE1973
Colaborador
PIC16
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 228


« Respuesta #6 : 09 de Abril de 2006, 11:48:39 »

Bueno, no sabia bien donde hacer esta pregunta, pero ya que estan con ejemplos, tengo una duda del ejemplo que ha dado RedPic, del rs232 buffered, estoy intentando hacerlo pero con rs485, y encuentro el problema que la directiva

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ENABLE=PIN_C5)

No habilita el pin_c5 para la transmision del dato por 485, ya probe habilitando manualmente (forzado a 5v), y el programa anda bien, pero al intentar que el pic lo habilite por el pin_c5, este no funciona.

Uso CCS PCM C Compiler, Version 3.249, 28193 

Desde ya gracias...

Saludos.
En línea
totuer
PIC10
*
Desconectado Desconectado

Argentina Argentina

Mensajes: 31


« Respuesta #7 : 07 de Enero de 2009, 15:05:08 »

Hola soy nuevo en el foro, me interesa el ejemplo de Rs485, podrias comentarlo mas y explicar el HW que usas.
Muchas gracias por el apote.
Pablo Mr. Green
En línea
RedPic
Administrador
DsPIC33
*******
Conectado Conectado

Sexo: Masculino
Tibet Tibet

Mensajes: 5179



WWW
« Respuesta #8 : 07 de Enero de 2009, 18:17:48 »

Lo fundamental de lo que he hecho de RS485 lo puedes encontrar en El RS485, un Relé en la lejanía: Hardware y Software y un extracto con lo básico lo tienes en este post del hilo sobe la RRBOARD2 Tambien te recomiendo el hilo Control para un Malacate - RS485 del amigo MLO


En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
totuer
PIC10
*
Desconectado Desconectado

Argentina Argentina

Mensajes: 31


« Respuesta #9 : 12 de Enero de 2009, 09:13:57 »

Hola gran moderador es un honor me respondas, les cuento que ya logré mi red rs485 monitoreada con rs232 en una pc no será gran cosa pero por lo menos se hablan y contestan con algunas colisiones por el momento, cuando pula todo intentaré subir el codigo.GRACIAS.
PD RELE A LA LEJANIA ES UNA MAZA Y SE ENTIENDE BIE!! ANIMENSE CON EL 485.
En línea
TODOPIC
   

 En línea
Páginas: [1] Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.152 segundos con 24 consultas.