por lucasi » 06 Abr 2010 23:23
Patrick...
Fiz um código talvez deva te ajudar...
Fiz ele para expandir as saidas de um 16F877 usando dois 74HC595
Abs
lucasi
#include <16F877A.h> // seleciona o PIC16F877A
#define EXP_OUT_ENABLE PIN_B0 //RCK - Pino 12 do 74HC595(1) & Pino 12 do 74HC595(2)
#define EXP_OUT_CLOCK PIN_B1 //SCK - Pino 11 do 74HC595(1) & Pino 11 do 74HC595(2)
#define EXP_OUT_DO PIN_B2 //SER - Pino 14 do 74HC595(1)
///////////////////////////////////////////////////////////////////////////
//// O DS do 74HC595(2) é alimentado pelo Q7' do 74HC595(1) ////
//// ////
#fuses HS,NOWDT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay (clock=4000000)
#ZERO_RAM
Byte data1 = 0b00000011;
Byte data2 = 0b10101011;
//------ 74HC595 serial chip --------------
void outSerial(int8 chip1,int8 chip2)
{
int8 i;
int16 data;
data = chip2;
data = data<<8;
data = data | chip1;
// Output to serial line
for(i=0; i<16; i++)
{
if(data & 0x8000)
{output_high(EXP_OUT_DO);}
else
{output_low(EXP_OUT_DO);}
data = data<<1;
output_low(EXP_OUT_CLOCK); //Shift data
output_high(EXP_OUT_CLOCK);
}
output_low(EXP_OUT_ENABLE); //Output on pins
output_high(EXP_OUT_ENABLE);
}
void main()
{
setup_adc_ports(NO_ANALOGS); // nao usaremos nenhum porta analogica
setup_adc(ADC_OFF); // desligamos o conversor AD
setup_psp(PSP_DISABLED); // nao utiizamos a porta PSP
setup_spi(FALSE); // nao utilizamos a porta SPI
setup_counters(RTCC_INTERNAL,RTCC_DIV_2); //configuracao TMR0 DEFAULT
setup_timer_1(T1_DISABLED); // desabilitarmos o TMR1
setup_timer_2(T2_DISABLED,0,1); // desabilitamos o TMR2
setup_comparator(NC_NC_NC_NC); // desabilitamos os comparadores
setup_vref(FALSE); // desabilitamos a tens?o de referencia
outSerial(data1,data2);
}