TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: micro_pepe en 27 de Julio de 2006, 10:52:11

Título: Configuracion puerto C y I2C
Publicado por: micro_pepe en 27 de Julio de 2006, 10:52:11
Hola, me pregunto si la directiva del CCS para usar el puerto I2C en un pic16f876 configura el puerto C como entrada por defecto, pues revisando un viejo programa que hice, el RC2 lo tenia configurado como salida, sin embargo lo estoy usando como entrada, un pulsador exactamente, y el programa funcionaba perfectamente.

La cabecera del main es esta:

Código: [Seleccionar]
void main(){
setup_ccp1(CCP_OFF);
restart_wdt();
Set_TRIS_A(0b11011111);
Set_TRIS_C(0b11111011);
TRISB3=0;//PB3 como salida
RELE=RELE_ON;

setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
Setup_ADC_Ports(RA0_RA1_ANALOG_RA3_REF);
Setup_ADC(ADC_CLOCK_DIV_32);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
Set_ADC_Channel(0);
delay_ms(1);

set_timer1(Periodo);
init_ext_eeprom();
LeeValoresMaximos();
lcd_init();

la directiva del I2C es esta:

Código: [Seleccionar]
# use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3,SLOW,FORCE_SW,RESTART_WDT)
Y lo uso solamente para una EEPROM externa.

Saludos y gracias.
Título: Re: Configuracion puerto C y I2C
Publicado por: RedPic en 27 de Julio de 2006, 12:04:44
CCS C siempre coloca antes de una instrucción que use un PIN como entrada el correspondiente tris(xxx1xxx) e igualmente pone el tris(xxx0xxx) si la instrucción a ejecutar usa un PIN como salida. Si tu colocas los tris erróneamente él los pondrá bien.

Esto hace que los tris(xxxxx) que tu coloques al inicio no van a servir de mucho ....

Salvo que declares #use FAST_IO porque entonces él deja de colocar tris delante de las intrucciones de entrada o salida, y tu personalmente debes encargarte de ello. Si te falta algún tris o está mal configurado tu programa no funcionará.

Ese es el perfecto ejemplo de equilibrio entre libertad y responsabilidad.  :mrgreen:

P.D: Compila con y sin el #use FAST_IO y compara los respectivos .lst (que es el código ASM<->C que genera CCS) para ver las diferencias entre ambos modos de compilación.