solucion de guia 2 microcontroladores

12
Comunicación RS 232 utilizando la tecnología de punta xbee y bluetooth LECTURA _TECLADO_LCD_VIRTUAL_TERMINAL #include<16f877.h> //fuses #use delay(clock=4000000) #use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7) #use standard_io(a) #define use_portb_lcd true #define use_portb_kbd true #include<lcd.c> #include<kbd.c> void teclado(void); void prender(void); void apagar(void); void main(void) //despues de void main son interrupciones locales { char k,i,x; //caracter lcd_init(); //iniciamos la lcd kbd_init(); //iniciamos el teclado port_b_pullups(true); //habilitamos resistencias internas del microcontrolador puts("oprima tecla:"); //transmitiendo ordenamos a q escriba para la pc printf("la tecla de ingreso:% c\r"); lcd_putc("teclado:\n"); while(true) { k=kbd_getc(); { x=k-48; //codigo ascii(lo encontramos en word,simbolos) //interpreteme que tecla yo oprimo o queremos oprimir switch(x) //switch de varias pocisiones { case 1: printf(lcd_putc,"1"); //para oprimir 1 en lcd puts("1"); //para oprimir 1 en el hiperterminal break; case 2: printf(lcd_putc,"2"); puts("2");

Upload: harold-beltran

Post on 15-Mar-2016

230 views

Category:

Documents


2 download

DESCRIPTION

Mostramos el programa en ccs compiler y hacemos la respectiva simulacion en proteus(isis)

TRANSCRIPT

Page 1: SOLUCION DE GUIA 2 MICROCONTROLADORES

Comunicación RS 232 utilizando la tecnología de punta xbee y

bluetooth

LECTURA _TECLADO_LCD_VIRTUAL_TERMINAL #include<16f877.h>

//fuses #use delay(clock=4000000)

#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)

#use standard_io(a)

#define use_portb_lcd true #define use_portb_kbd true

#include<lcd.c>

#include<kbd.c>

void teclado(void);

void prender(void); void apagar(void);

void main(void) //despues de void main son interrupciones locales

{

char k,i,x; //caracter

lcd_init(); //iniciamos la lcd kbd_init(); //iniciamos el teclado

port_b_pullups(true); //habilitamos resistencias internas del microcontrolador

puts("oprima tecla:"); //transmitiendo ordenamos a q escriba para la pc

printf("la tecla de ingreso:% c\r");

lcd_putc("teclado:\n"); while(true)

{

k=kbd_getc();

{

x=k-48; //codigo ascii(lo encontramos en word,simbolos) //interpreteme que tecla yo oprimo o queremos oprimir

switch(x) //switch de varias pocisiones

{

case 1:

printf(lcd_putc,"1"); //para oprimir 1 en lcd puts("1"); //para oprimir 1 en el hiperterminal

break;

case 2:

printf(lcd_putc,"2");

puts("2");

Page 2: SOLUCION DE GUIA 2 MICROCONTROLADORES

break;

case 3:

printf(lcd_putc,"3"); puts("3");

break;

case 4:

printf(lcd_putc,"4");

puts("4"); break;

case 5:

printf(lcd_putc,"5");

puts("5");

break; case 6:

printf(lcd_putc,"6");

puts("6");

break;

case 7: printf(lcd_putc,"7");

puts("7");

break;

case 8:

printf(lcd_putc,"8"); puts("8");

break;

case 9:

printf(lcd_putc,"9");

puts("9"); break;

case 0:

printf(lcd_putc,"0");

puts("0");

break; }

}

Page 3: SOLUCION DE GUIA 2 MICROCONTROLADORES

MOTOR MANEJADO CON VIRTUAL TERMINAL

#include<16f877.h> #use delay(clock=4000000) #use RS232(baud=9600,xmit=pin_c6,rcv=pin_c7)

#use fast_io(c) #bit rb1=0x06.1 #bit rb2=0x06.2 void instrucciones(void); void derecha(void); void izquierda(void);

void parar(void); void mensaje(void); int marcha=0; char sentido; void main (void) { char m;

set_tris_b(0b11111001); rb1=0; rb2=0;

Page 4: SOLUCION DE GUIA 2 MICROCONTROLADORES

instrucciones(); while (true)

{ m=getc(); switch(m) { case'i': izquierda();

sentido='i'; break; case 'd': derecha(); sentido='d'; break; case'p':

parar(); break; default: mensaje(); break; } }

} void instrucciones() { puts("control de motor dc"); puts("pulsa 'i' para giro izquierda dc"); puts("pulsa 'd' para giro derecha");

puts("pulsa 'p' para parar motor"); } void derecha() { if((marcha==1)&&(sentido=='d')) { parar();

delay_ms(3000); rb1=0; rb2=0; marcha=1; } else {

rb1=0; rb2=1; marcha=1; } } void izquierda()

{ if((marcha==1)&&(sentido=='i'))

Page 5: SOLUCION DE GUIA 2 MICROCONTROLADORES

{ parar(); delay_ms(3000);

rb1=1; rb2=0; marcha=1; } else { rb1=1;

rb2=0; marcha=1; } } void parar() {

rb1=0; rb2=0; marcha=0; } void mensaje() { puts("oprima la tecla correcta");

}

Page 6: SOLUCION DE GUIA 2 MICROCONTROLADORES

TIMER CERO (0)

#include <16f877.h>

#use delay(clock=4000000)

#use fast_io(B) #INT_RTCC

RTCC_isrc()

{

output_toggle(Pin_B7);

set_timer0(198);

}

void main (void)

{

set_tris_B(0x00);

output_low(Pin_B7);

setup_timer_0(RTCC_DIV_8);

set_timer0(194);

enable_interrupts(INT_RTCC);

enable_interrupts(GLOBAL);

while(true);

VARIADOR PWM

#include<16f876.h>

#use delay (clock=4000000) #use standard_Io(A)

Page 7: SOLUCION DE GUIA 2 MICROCONTROLADORES

#define use_portb_lcd true

#define use_portb_kbd true

#include <lcd.c> #include <kbd.c>

#byte portb=0x06 void main (void)

{

char k, kant='0';

char PWMH=0, PWML=0;

int x;

kbd_init();

lcd_init();

port_B_pullups(TRUE);

x=0; lcd_putc(" \fIndique Velocidad ");

while (1)

{

k=kbd_getc();

x=k-48;

if (k=='\0')k= kant;

if (( k=='*')||(k=='#')) k=='0';

kant=k;

k=k-48;

PWMH=k*28;

PWML=255-PWMH;

for (PWMH;PWMH>1;PWMH--)

{

OUTPUT_HIGH(pin_A0);

}

for (PWML; PWML>0;PWML--)

{ OUTPUT_LOW(pin_A0);

switch(x)

{

case 0:

printf(lcd_putc," \fmotor parado\n ");

break;

case 1:

lcd_putc(" \f velocidad 1");

break;

Page 8: SOLUCION DE GUIA 2 MICROCONTROLADORES

case 2:

lcd_putc(" \f velocidad 2"); break;

case 3: lcd_putc(" \f velocidad 3");

break;

case 4:

lcd_putc(" \f velociad 4");

break;

case 5:

lcd_putc(" \f velociad 5");

break;

case 6: lcd_putc(" \f velociad 6");

break;

case 7:

lcd_putc(" \f velociad 7");

break;

case 8:

lcd_putc(" \f velociad 8");

break;

case 9:

lcd_putc(" \f velociad 9");

break;

case '*':

lcd_putc(" \fdisminuyendo");

}

break;

}

Page 9: SOLUCION DE GUIA 2 MICROCONTROLADORES

PROTOCOLO DE I2C #include<16f877.h>

#use delay(clock=4000000) #use RS232(baud=9600,xmit=pin_c6,rcv=pin_c7)

#include<lcd.c>

#use i2c(master,fast,sda=pin_c4,scl=pin_c3)

#define ds1307_scl pin_c3

#define ds1307_sda pin_c4 #use i2c(master,sda=ds1307_sda,scl=ds1307_scl)

void ds1307_init()

{

output_float(ds1307_scl); output_float(ds1307_sda);

}

void write_ds1307(byte address,byte data)

{

short int status;

i2c_start();

i2c_write(0xd0);

Page 10: SOLUCION DE GUIA 2 MICROCONTROLADORES

i2c_write(address);

i2c_write(data);

i2c_stop(); i2c_start();

status=i2c_write(0xd0);

while(status==1);

{

i2c_start(); status=i2c_write(0xd0);

}

}

byte read_ds1307(byte address)

{ byte data;

i2c_start();

i2c_write(0xd0);

i2c_write(address);

i2c_start(); i2c_write(0xd0);

data=i2c_read(0);

i2c_stop();

return(data);

} void main(void)

{

int8 sec,min,hora,fecha,dia,mes,anio;

lcd_init();

delay_ms(100); ds1307_init();

sec=read_ds1307(0);

write_ds1307(0,sec&0x7f);

write_ds1307(1,min=0x15); write_ds1307(2,hora=0x08);

write_ds1307(3,dia=06);

write_ds1307(4,fecha=0x17);

write_ds1307(5,mes=0x03);

write_ds1307(6,anio=0x12);

while(true)

{

sec=read_ds1307(0);

min=read_ds1307(1);

hora=read_ds1307(2);

dia=read_ds1307(3);

fecha=read_ds1307(4);

Page 11: SOLUCION DE GUIA 2 MICROCONTROLADORES

mes=read_ds1307(5);

anio=read_ds1307(6);

delay_ms(100);

lcd_gotoxy(1,1);

printf(lcd_putc,"hora:%2x:%2x:%2x",hora,min,sec);

lcd_gotoxy(1,1); printf(lcd_putc,"fecha es:%2x/%2x/20%2x",fecha,mes,aÑo);

Memoria interna EEPROM del microntrolador #include<16f877A.h>

#fuses xt , noprotect,nolvp,nowdt #use delay(clock=4000000)

#byte port_d=0x08 //identificador del puerto

#int_ext

void ext_isr(void)

{ if((read_eeprom(0)==0x99)||(read_eeprom(0)==0xff))

{

write_eeprom(0,0); //sobre escribi en la eeprom

port_d=read_eeprom(0);// leame la posicion 0 de la eeprom y ubicamelo en el puerto d

} else if((read_eeprom(0)&0x0f)<0x09)

{

write_eeprom((0,read_eeprom(0)),1); //escribame y leame la posicion 0 de la eeprom y sumale 1

port_d=read_eeprom(0); //leame el el puerto d la posicion 0

} else if ((read_eeprom(0)&0x0f)>=0x09)

Page 12: SOLUCION DE GUIA 2 MICROCONTROLADORES

{

write_eeprom(0,read_eeprom(0)+7); port_d=read_eeprom(0);

}

}

void main(void)

{ set_tris_b(0xff);

set_tris_d(0x00);

enable_interrupts(int_ext);

enable_interrupts(global);

port_d=0xff; while (true)

{

}

}