Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1.
#include <16F877.h>
2.
#use delay(clock=1000000)
3.
#fuses
NOWDT,NOPROTECT,NOLVP,NODEBUG,PUT
4.
int retardo;
5.
void main()
6.
{ retardo=300; //CON ESTE VALOR SE
CAMBIA LA VELOCIDAD DE GIRO DEL MOTOR
7.
WHILE(input(PIN_C0)) // INICIALIZO
LOS PINES EN VALOR BAJO, PARA QUE EL MOTOR
NO SE MUEVA
8.
9.
OUTPUT_LOW(PIN_B0);
10.
OUTPUT_LOW(PIN_B1);
11.
OUTPUT_LOW(PIN_B2);
12.
OUTPUT_LOW(PIN_B3);
13.
14.
15.
do{
16.
if(!input(pin_C0)&&(input(pin_c1)))
// GIRO EN UN SENTIDO (GIRO 1)
17.
18.
OUTPUT_LOW(PIN_B0);
19.
OUTPUT_HIGH(PIN_B1);
20.
OUTPUT_LOW(PIN_B2);
21.
OUTPUT_LOW(PIN_B3);
22.
delay_ms(retardo); }if(!
input(pin_C0)&&(input(pin_c1)))
EN UN SENTIDO (GIRO 1)
23.
24.
OUTPUT_LOW(PIN_B0);
25.
OUTPUT_LOW(PIN_B1);
26.
OUTPUT_HIGH(PIN_B2);
27.
OUTPUT_LOW(PIN_B3);
28.
delay_ms(retardo); }if(!
input(pin_C0)&&(input(pin_c1)))
EN UN SENTIDO (GIRO 1)
29.
// GIRO
30.
OUTPUT_LOW(PIN_B0);
31.
OUTPUT_LOW(PIN_B1);
32.
OUTPUT_LOW(PIN_B2);
33.
OUTPUT_HIGH(PIN_B3);
// GIRO
34.
delay_ms(retardo); }if(!
input(pin_C0)&&(input(pin_c1))) // GIRO EN
UN SENTIDO (GIRO 1)
35.
36.
OUTPUT_HIGH(PIN_B0);
37.
OUTPUT_LOW(PIN_B1);
38.
OUTPUT_LOW(PIN_B2);
39.
OUTPUT_LOW(PIN_B3);
40.
delay_ms(retardo); }
if(input(pin_C0)&&(!input(pin_c1)))// GIRO
EN UN SENTIDO (GIRO 2)
41.
42.
OUTPUT_HIGH(PIN_B0);
43.
OUTPUT_LOW(PIN_B1);
44.
OUTPUT_LOW(PIN_B2);
45.
OUTPUT_LOW(PIN_B3);
46.
delay_ms(retardo); }
if(input(pin_C0)&&(!input(pin_c1)))
GIRO EN UN SENTIDO (GIRO 2)
47.
48.
OUTPUT_LOW(PIN_B0);
49.
OUTPUT_LOW(PIN_B1);
50.
OUTPUT_LOW(PIN_B2);
//
51.
OUTPUT_HIGH(PIN_B3);
52.
delay_ms(retardo); }
if(input(pin_C0)&&(!input(pin_c1)))
GIRO EN UN SENTIDO (GIRO 2)
53.
//
54.
OUTPUT_LOW(PIN_B0);
55.
OUTPUT_LOW(PIN_B1);
56.
OUTPUT_HIGH(PIN_B2);
57.
OUTPUT_LOW(PIN_B3);
58.
delay_ms(retardo); }
if(input(pin_C0)&&(!input(pin_c1))) //
GIRO EN UN SENTIDO (GIRO 2)
59.
60.
OUTPUT_LOW(PIN_B0);
61.
OUTPUT_HIGH(PIN_B1);
62.
OUTPUT_LOW(PIN_B2);
63.
OUTPUT_LOW(PIN_B3);
64.
delay_ms(retardo); }}while(true);
65.
66.
PIC 16f877a
#include <16F877A.h>
#device adc=8
#FUSES NOWDT, RC, PUT, NOPROTECT,NODEBUG,
NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#org 0x1f00,0x1fff{}
#build (reset=0x04)
#use
rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bit
s=8)
#define t1 delay_ms(200);
#include <lcd.c>
//#device ICD=TRUE
//#fuses HS,NOWDT,NOPROTECT,NOLVP
//#use delay(clock=20000000)
//#use
rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bit
s=8)
#use FAST_IO(B)
#use FAST_IO(C)
#byte FASES= 0x06
int velocidad=300;
void GiroDerecha(){
output_b (0x30); //paso 1
delay_ms(velocidad);
output_b (0x60); //paso 2
delay_ms(velocidad);
output_b (0xc0); //paso 3
delay_ms(velocidad);
output_b (0x90); // paso 4
delay_ms(velocidad);
}
void GiroIzquierda(){
FASES=0b001100; //paso 1
delay_ms(velocidad);
FASES=0b001001; //paso 2
delay_ms(velocidad);
FASES=0b000011; //paso 3
delay_ms(velocidad);
FASES=0b001100; // paso 4
delay_ms(velocidad);
}
void main(void)
{
char valor=0;
SET_TRIS_B(0x00);
while(TRUE){
if(kbhit())
valor=getc();
switch (valor){
case 'a'://motor parado
FASES=0b000000;
break;
case 'b': //Marcha Manual Lenta Izquierda
velocidad=10;
GiroIzquierda();
break;
case 'c': //Motor parado
FASES=0b000000;
break;
velocidad=10;
GiroDerecha();
break;
case 'F': //Marcha automtica lenta derecha
velocidad=10;
GiroDerecha();
break;
case 'G': //Marcha automtica rpida derecha
velocidad=3;
GiroDerecha();
break;
case 'H': //Marcha automtica rpida derecha
velocidad=3;
GiroDerecha();
break;
case 'n':
break;
default:
velocidad=15;
break;
}
}
}
#include <stdio.h>
// Libreria standar
#include <avr/io.h>
// Libreria para usar puertos de entrada y salidas
#include <util/delay.h> // Libreria para retardos
int main (void)
{
DDRD= 0b11110100;
PORTD=0b00000011;
DDRB= 0b00111001;
char A,B;
char i;
while(1)
{
A=PIND & 0b00000001; // bit 1 activa pulsador 1 pind es nombrar el puerto
B=PIND & 0b00000010; // bit 2 activa pulsador 2
for(i=0;i<=11;i++)// codigo a repetir 0 a 11veces
if (A==0) //sentecia if para giro hacia sentido del reloj (derecha)
{
PORTD=0b10000011; // paso 1
_delay_ms(200);
PORTB=0b00000001;
_delay_ms(200);
PORTD=0b11000011; // paso 2
_delay_ms(200);
PORTB=0b00001000;
_delay_ms(200);
PORTD=0b01000011; // paso 3
_delay_ms(200);
PORTB=0b00001001;
_delay_ms(200);
PORTD=0b01100011; // paso 4
_delay_ms(200);
PORTB=0b00010000;
_delay_ms(200);
PORTD=0b00100011; // paso 5
_delay_ms(200);
PORTB=0b00010001;
_delay_ms(200);
PORTD=0b00110011; // paso 6
_delay_ms(200);
PORTB=0b00011000;
_delay_ms(200);
PORTD=0b00010011;
_delay_ms(200);
// paso 7
PORTB=0b00011001;
_delay_ms(200);
PORTD=0b10010011;
_delay_ms(200);
// paso 8
PORTB=0b00100000;
_delay_ms(200);
}
for(i=0;i<=11;i++) //le decimos que repita el ciclo 12 veces
if (B==0) //sentecia if para giro hacia sentido antihorario del reloj (izquierda)
{
PORTD=0b10010011;
_delay_ms(200);
// paso 8
PORTB=0b00100000;
_delay_ms(200);
PORTD=0b00010011;
_delay_ms(200);
// paso 7
PORTB=0b00011001;
_delay_ms(200);
PORTD=0b00110011; // paso 6
_delay_ms(200);
PORTB=0b00011000;
_delay_ms(200);
PORTD=0b00100011; // paso 5
_delay_ms(200);
PORTB=0b00010001;
_delay_ms(200);
PORTD=0b01100011; // paso 4
_delay_ms(200);
PORTB=0b00010000;
_delay_ms(200);
PORTD=0b01000011; // paso 3
_delay_ms(200);
PORTB=0b00001001;
_delay_ms(200);
PORTD=0b11000011; // paso 2
_delay_ms(200);
PORTB=0b00001000;
_delay_ms(200);
PORTD=0b10000011; // paso 1
_delay_ms(200);
PORTB=0b00000001;
_delay_ms(200);
}
// fin if de el motor
else
{
PORTD=0b00000011; // apagar todo si no cumple la condicion
}
//
}
// fin main
}