MAX3110Ehd.h
Transcrição
MAX3110Ehd.h
/* Filippo Pardini - [email protected] Protótipo para utilização do MAX3110E em Half Duplex */ #ifndef _MAX3110Ehd_INCLUDED_ #define _MAX3110Ehd_INCLUDED_ #pragma used+ #ifndef _DELAY_INCLUDED_ #include <delay.h> #endif //_______________________________________________________________________________________________ char char char char char MSBconfigMAX[3]; LSBconfigMAX[3]; PortMAX[3]; PinMAX[3]; BaudMAX[3]; // // // // // Byte MSB da configuração dos MAX Byte LSB da configuração dos MAX Portas para os MAX Pinos para os MAX Indice de velocidade RS232 para os MAX (Tabela 6 do datasheet) //_______________________________________________________________________________________________ void char void void void void void char InitMAX(char Max, char porta, char pin, char baud); // Configura o MAX e associa o pino CS PutGetCharMAX(char Max, char n, char cout); // Envia e recebe um byte ao MAX/RS232 TurnOn(char Max); // Seta o pino alto TurnOff(char Max); // Seta o pino baixo ReadConfigMAX(char Max, char *msb, char *lsb); // Lê os dois bytes da configuração do MAX WriteDataMAX(char Max, char *data, char len); // Envia um string de bytes ao MAX/RS232 ReadDataMAX(char Max, char *data, char len); // Lê um string de bytes do MAX/RS232 SPI(char data); // Envia um byte e recebe um byte via SPI //_______________________________________________________________________________________________ char PutGetCharMAX(char Max, char n, char cout) // Max - Número do MAX // n = 1 indica primeiro byte (MSB) // n = 2 indica segundo byte (LSB) // cout - byte a enviar // return - byte recebido { Page 1 of 5 char c; if (n == 1) { TurnOff(Max); return SPI(cout); } if (n == 2) { c = SPI(cout); TurnOn(Max); return c; } } //_______________________________________________________________________________________________ void ReadConfigMAX(char Max, char *msb, char *lsb) // Max - número do max { *msb = PutGetCharMAX(Max,1,0x40); *lsb = PutGetCharMAX(Max,2,0x00); } //_______________________________________________________________________________________________ void WriteDataMAX(char Max, char *data, char len) // Max - número do max // *data - pointer para o string a ser enviado // len - comprimento do string { char i; for (i=0;i<len;i++) { PutGetCharMAX(Max,1,0x80); PutGetCharMAX(Max,2,*data); ++data; delay_us(500); // valido para SPI 115.2k e RS232 19.2k } } Page 2 of 5 //_______________________________________________________________________________________________ void ReadDataMAX(char Max, char *data, char len) // Max - Número do MAX // *data - pointer para o string que vai rceber os dados // len - comprimento a ser lido { char c1,c2,i; for (i=0;i<len;i++) { do { c1 = PutGetCharMAX(Max,1,0x00) & 0x80; c2 = PutGetCharMAX(Max,2,0x00); }while (c1 != 0x80); *data = c2; ++data; } } //_______________________________________________________________________________________________ char SPI(char data) // data - byte a ser enviado // return - byte recebido { char c; SPDR=data; while ((SPSR & (1<<7))==0); c = SPDR; return c; } //_______________________________________________________________________________________________ void InitMAX(char Max, char porta, char pin, char baud) // Max - número de ordem do MAX // porta - letra maiúscula indicando a porta a ser usada // pin - 0 a 7 indicando o pino a ser usado // baud - indice de velocidade RS232. Tabela 6 do datasheet { Page 3 of 5 delay_ms(50); PortMAX[Max] = porta; PinMAX[Max] = pin; BaudMAX[Max] = baud; MSBconfigMAX[Max] = 0xC4; LSBconfigMAX[Max] = baud; PutGetCharMAX(Max,1,MSBconfigMAX[Max]); PutGetCharMAX(Max,2,LSBconfigMAX[Max]); } //_______________________________________________________________________________________________ void TurnOn(char Max) // Max - Número do MAX { switch(PortMAX[Max]) { case 'A': PORTA = break; case 'B': PORTB = break; case 'C': PORTC = break; case 'D': PORTD = break; case 'E': PORTE = break; } } PORTA | (1 << PinMAX[Max]); PORTB | (1 << PinMAX[Max]); PORTC | (1 << PinMAX[Max]); PORTD | (1 << PinMAX[Max]); PORTE | (1 << PinMAX[Max]); //_______________________________________________________________________________________________ void TurnOff(char Max) // Max - Número do MAX { switch(PortMAX[Max]) { Page 4 of 5 case 'A': PORTA = break; case 'B': PORTB = break; case 'C': PORTC = break; case 'D': PORTD = break; case 'E': PORTE = break; PORTA & ~(1 << PinMAX[Max]); PORTB & ~(1 << PinMAX[Max]); PORTC & ~(1 << PinMAX[Max]); PORTD & ~(1 << PinMAX[Max]); PORTE & ~(1 << PinMAX[Max]); } } //_______________________________________________________________________________________________ #pragma used#endif Page 5 of 5