Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Buenas a todos.
Otra vez tengo un poquito de tiempo (de 6 mese en 6 meses saco un par de dias) y he vuelto a retomar un anteanteproyecto de placa que quiero hacer (la misma de todas las dudas que he ido posteando tiempo atras) tengo problemas con un programa en CCS version 3.222 para un 16F877 y es una tonteria pero no veo el fallo, resulta que lo que quiero es cambiar el estado de dos pines del puerto D de dicho pic, y resulta que he usado varias intrucciones para probar y me pasa algo muy raro y es que en lineas de programa consecutivas cambio el estado del pin 5 del puerdo D (Lo ativo por alta, lo pongo a uno) y en la siguiente linea repito la operacion para el pin 7 del mismo puerto, pero al llegar a esta linea el pin 7 se activa y se desactiva el 5, he probado varias intrucciones y la unica solucion que he encontrado para acceder a nivel de bit a sido haciendolo con una variable intermedia, por ejemplo ponia lo siguiente
bit_set(PORTD,5);
bit_set(PORTD,7);
y al llegar a la segunda linea el pin 5 cambia a valer 0 y el 7 a valer 1, cuando lo que deberia de hacer es mantenerse a 1 los dos bit, todo esto lo he ido programando en CCS y lo he corrido paso a paso bajo simulacion en el Proteus, asi que no se si realmente hago algo mal, es el CCS lo que falla o es el Proteus, no lo he podido probar en Hardware porque no dispongo del Micro en este momento, aqui dejo el codigo donde aparece lo que me ha funcinado (pero no me gusta porque no creo que sea la mejor forma de hacerlo, me ha recordado a horrores al asm cojo una variable a modo acumulador, la modifico y luego la saco por el Puerto) como se puede ver he dejado tambien enmascarados como si fueran comentarios:
// bit_set(PORTD,5);
// bit_set(PORTD,7);
algunos de los otros modos y en todos he obtenido resultados identicos, a ver si algun alma caritativa me puede iluminar un poquito sobre estos misterios que siempre se me escapan.
GRACIAS #include <16F877A>
#fuses XT,NOWDT
#use delay (clock=1000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte PORTA=0x05
#byte PORTB=0x06
#byte PORTC=0x07
#byte PORTD=0x08
#byte PORTE=0x09
#BIT D5=0X08.5
#BIT D7=0X08.7
int arranque=0;
int numero_piso=0;
int subida=0;
int bajada=0;
int piso_pulsado=0;
int variable=0;
int lectura_A=1;
int puertod=0;
#int_rb
VOID interrupcion()
{ lectura_A=PORTB;
if(INPUT(PIN_B4))
{
bit_clear(PORTD,5);
bit_clear(PORTD,7);
bit_set(PORTE,2);
// delay_ms(1500);
bit_clear(PORTE,2);
lectura_A=0;
}
if (INPUT(PIN_B5))
{
bit_clear(PORTA,1);
bit_clear(PORTA,2);
}
}
void main(void)
{
disable_interrupts(GLOBAL);
set_tris_a(0b111111);
set_tris_b(0b11111111);
set_tris_c(0b11111111);
set_tris_d(0b00011111);
set_tris_e(0b000);
PORTD=0;
PORTE=0;
enable_interrupts(int_rb);
enable_interrupts(int_ext);
enable_interrupts(GLOBAL);
do
{
if (arranque==0)
{
//bit_set(PORTD,7);
//bit_set(PORTD,5);
//Output_high(PIN_D5);
//Output_high(PIN_D7);
//D5=1;
//D7=1;
bit_set(puertod,7);
bit_set(puertod,5);
PORTD=puertod;
while (lectura_A|=0)
{}
arranque=1;
}
// Delay_ms(5000);
bit_set(PORTE,0);
if (input(pin_c0))
{
variable=porta;
rotate_right(&variable,1);
rotate_right(&variable,1);
rotate_right(&variable,1);
bit_clear(variable,3);
bit_clear(variable,4);
bit_clear(variable,5);
portb=variable;
delay_ms(1000);
}
}WHILE(TRUE);
} // Fin
cómo creas el proyecto? Con la opción wizard?
No entiendo muy bien la pregunta, para compilar y programar uso el ccs y a la hora de escribir el programa para que sea un entorno mas comodo uso el editor PCW C COMPILER IDE, y en el simulador me lo hice todo a mano sin ningun wizard, luego monté el cof y el .c y lo depuro alli. si hasta ahora no habia tenido problemas con ningun otro programa salvo al tratar de usar directamente la variable del Puerto
No tengo ni idea del PIC q usas, pero asegurate de que tienes las entradas y salidas bien configuradas, especialmente si esos PINs coinciden con un comparador interno del PIC.
Suerte!
La opción wizard se encuentra en:
ProjectNewPic Wizard
Cuando la ejecutas aparece un asistente que te permite crear el proyecto de una forma cómoda. Sólo tienes que asegurarte de revisar todas las pestañas y seleccionar lo que quieras en cada una.
Lo bueno de este método es que es más difícil que cometas algún error de configuración que te despiste.
Por cierto, esta opción lo que hace es establecer el .h y el principio del .C por ti...