Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Rutinas incorporadas
El compilador mikroC PRO for PIC proporciona un conjunto de funciones útiles de
utilidad incorporadas.
El Lo, Hi, Higher, Highestrutinas se implementan como macros. Si desea usar estas
funciones, debe incluir el built_in.harchivo de encabezado (ubicado en
la includecarpeta del compilador) en su proyecto.
Las rutinas Delay_usy Delay_msse implementan como "en línea"; es decir, el código
se genera en lugar de una llamada, por lo que la llamada no cuenta para el límite
de llamadas anidadas .
El Vdelay_ms, Vdelay_advanced_ms, Delay_Cyc, Get_Fosc_kHzy Get_Fosc_Per_Cycso
n reales rutinas C. Sus fuentes se pueden encontrar en el Delays.carchivo ubicado
en la usescarpeta del compilador.
Lo
Hola
Mayor
Más alto
LoWord
HiWord
Retraso_us
Delay_ms
Vdelay_ms
Vdelay_Advanced_ms
Delay_Cyc
Clock_kHz
Reloj_MHz
Get_Fosc_kHz
Intercambiar
Rutinas incorporadas
El compilador mikroC PRO for PIC proporciona un conjunto de funciones útiles de
utilidad incorporadas.
El Lo, Hi, Higher, Highestrutinas se implementan como macros. Si desea usar estas
funciones, debe incluir el built_in.harchivo de encabezado (ubicado en
la includecarpeta del compilador) en su proyecto.
Las rutinas Delay_usy Delay_msse implementan como "en línea"; es decir, el código
se genera en lugar de una llamada, por lo que la llamada no cuenta para el límite
de llamadas anidadas .
El Vdelay_ms, Vdelay_advanced_ms, Delay_Cyc, Get_Fosc_kHzy Get_Fosc_Per_Cycso
n reales rutinas C. Sus fuentes se pueden encontrar en el Delays.carchivo ubicado
en la usescarpeta del compilador.
Lo
Hola
Mayor
Más alto
LoWord
HiWord
Retraso_us
Delay_ms
Vdelay_ms
Vdelay_Advanced_ms
Delay_Cyc
Clock_kHz
Reloj_MHz
Get_Fosc_kHz
Intercambiar
Lo
Prototipo #define Lo (param) ((char *) & param) [0]
Requiere Ninguna.
Ejemplo d = 0x12345678;
tmp = Lo (d); // es igual a 0x78
Hola
Prototipo #define Hi (param) ((char *) & param) [1]
Requiere Ninguna.
Ejemplo d = 0x12345678;
tmp = Hola (d); // es igual a 0x56
Mayor
Prototipo #define Higher (param) ((char *) & param) [2]
Devoluciones Regresa al lado del byte más alto de los parambits 16..23.
Descripción La función regresa al lado del byte más alto de param. La
función no interpreta patrones de bits de param,
simplemente devuelve 8 bits como se encuentran en el
registro.
Esta es una rutina "en línea"; El código se genera en el
lugar de la llamada, por lo que la llamada no cuenta para
el límite de llamadas anidadas .
Requiere Ninguna.
Ejemplo d = 0x12345678;
tmp = Superior (d); // es igual a 0x34
Más alto
Prototipo #define Highest (param) ((char *) & param) [3]
Requiere Ninguna.
Ejemplo d = 0x12345678;
tmp = Más alto (d); // es igual a 0x12
LoWord
Prototipo unsigned int LoWord ( unsigned long number);
Requiere Nada.
Ejemplo d = 0x12345678;
tmp = LoWord (d); // es igual a 0x5678
Notas Ninguna.
HiWord
Prototipo unsigned int HiWord ( unsigned long number);
Requiere Nada.
Ejemplo d = 0x12345678;
tmp = HiWord (d); // es igual a 0x1234
Notas Ninguna.
Retraso_us
Prototipo void Delay_us ( const unsigned long time_in_us);
Devoluciones Nada.
Requiere Nada.
Delay_ms
Prototipo void Delay_ms ( const unsigned long time_in_ms);
Devoluciones Nada.
Requiere Nada.
Vdelay_ms
Prototipo void Vdelay_ms ( unsigned time_in_ms);
Devoluciones Nada.
Requiere Nada.
VDelay_Advanced_ms
Prototipo void VDelay_Advanced_ms (tiempo sin firmar_in_ms,
Current_Fosc_kHz sin firmar );
Devoluciones Nada.
Delay_Cyc
Prototipo void Delay_Cyc ( char Cycles_div_by_10);
Devoluciones Nada.
Requiere Nada.
Clock_kHz
Prototipo Clock_kHz sin firmar ( nulo );
Requiere Nada.
Reloj_MHz
Prototipo corto sin firmar Clock_MHz ( void );
Requiere Nada.
Get_Fosc_kHz
Prototipo Get_Fosc_kHz largo sin firmar ( void );
Requiere Nada.
Intercambiar
Prototipo permuta de char ( entrada de char );
Requiere Nada.
entrada = 0xAF;
swapped_input = swap (entrada); // la rutina
devolverá 0xFA, es decir, intercambiar nibbles del
parámetro de entrada
Biblioteca ADC
El módulo ADC (Convertidor analógico a digital) está disponible con varios módulos
PIC MCU. ADC es un circuito electrónico que convierte señales continuas en
números digitales discretos. ADC Library le proporciona un trabajo cómodo con el
módulo.
Rutinas de la biblioteca
ADC_Init
ADC_Get_Sample
ADC_Leer
ADC_Init
Prototipo void ADC_Init ();
Devoluciones Nada.
ADC_Get_Sample
Prototipo unsigned ADC_Get_Sample ( canal corto sin
firmar );
ADC_Leer
Prototipo ADC_Read sin firmar ( canal corto sin firmar );
Ejemplo de biblioteca
Este código de ejemplo lee el valor analógico del canal 2 y lo muestra en PORTB y
PORTC.
Copiar código al portapapeles
void main () {
ANSEL = 0x04; // Configurar el pin AN2 como analógico
ANSELH = 0; // Configurar otros pines AN como E / S
digital
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
hacer {
temp_res = ADC_Read (2); // Obtener resultados de 10 bits de la
conversión AD AD
PORTB = temp_res; // Enviar 8 bits más bajos a PORTB
PORTC = temp_res >> 8; // Enviar 2 bits más significativos a RC1,
RC0
} while (1);
}
Conexión HW
Conexión ADC HW
Biblioteca CAN
El mikroC PRO para PIC proporciona una biblioteca (controlador) para trabajar con
el módulo CAN .
El CAN es un protocolo muy robusto que tiene detección y señalización de errores,
autocomprobación y confinamiento de fallas. Los datos CAN y los marcos
remotos defectuosos se retransmiten automáticamente, de forma similar a
Ethernet.
Las tasas de transferencia de datos dependen de la distancia. Por ejemplo, 1 Mbit /
s se puede lograr en longitudes de red inferiores a 40 m, mientras que 250 Kbit / s
se puede lograr en longitudes de red inferiores a 250 m. A mayor distancia, mayor
tasa de bits máxima que se puede alcanzar. La tasa de bits más baja definida por el
estándar es de 200 Kbit / s. Los cables utilizados son pares trenzados blindados.
CAN soporta dos formatos de mensaje:
Formato estándar, con 11 bits identificadores, y
Formato extendido, con 29 bits identificadores.
Importante:
CANGetOperationMode
Prototipo CANGetOperationMode () corto sin firmar ;
CANInicializar
Prototip anular CANInitialize
o ( Char SJW, Char BRP, Char PHSEG1, CharPHSEG2, Char PR
OPSEG, Char CAN_CONFIG_FLAGS);
Devoluci Nada.
ones
CANSetBaudRate
Prototip void CANSetBaudRate
o ( char SJW, char BRP, char PHSEG1, char PHSEG2, char P
ROPSEG, char CAN_CONFIG_FLAGS);
Devoluc Nada.
iones
CANSetMask
Prototipo void CANSetMask
( char CAN_MASK, valor largo , char CAN_CONFIG_FLA
GS);
Devolucione Nada.
s
CANSetFilter
Prototipo void CANSetFilter
( char CAN_FILTER, valor largo , charCAN_CONFIG_FLA
GS);
Devolucione Nada.
s
Puedo leer
Prototipo char CANRead ( long * id, char * data, char *
datalen, char * CAN_RX_MSG_FLAGS);
// ...
rx = 0;
// ...
rcv = CANRead (id, data, len, rx);
Puede escribir
Prototipo unsigned short CanWrite
( largo Identificación, carbón de leña de datos
*, carbón de leña datalen, carbón de
leña CAN_TX_MSG_FLAGS);
// ...
tx = _CAN_TX_PRIORITY_0 &
_CAN_TX_XTD_FRAME;
// ...
CANWrite (id, data, 2, tx);
CANSetTxIdleLevel
Prototipo void CANSetTxIdleLevel ( char driveHighState);
Devoluciones Nada.
El pin CANTX
será de tres
estados _CAN_DRIVE_HIGH_STATE_DISABLE
cuando sea
recesivo.
Constantes CAN
Hay una serie de constantes predefinidas en la biblioteca CAN . Para poder utilizar
la biblioteca de manera efectiva, debe estar familiarizado con estos. Es posible que
desee comprobar el ejemplo al final del capítulo.
CAN_OP_MODE
CAN_OP_MODElas constantes definen el modo de operación CAN . La
función CANSetOperationModeespera uno de estos como su argumento:
const char
_CAN_MODE_BITS = 0xE0, // Use esto para acceder a los bits de modo
operativo
_CAN_MODE_NORMAL = 0x00,
_CAN_MODE_SLEEP = 0x20,
_CAN_MODE_LOOP = 0x40,
_CAN_MODE_LISTEN = 0x60,
_CAN_MODE_CONFIG = 0x80;
CAN_CONFIG_FLAGS
CAN_CONFIG_FLAGSlas constantes definen banderas relacionadas con la configuración
del módulo CAN . Funciona CANInitializey CANSetBaudRateespera uno de estos (o
una combinación bit a bit) como su argumento:
const char
_CAN_CONFIG_DEFAULT = 0xFF, // 11111111
_CAN_CONFIG_PHSEG2_PRG_BIT = 0x01,
_CAN_CONFIG_PHSEG2_PRG_ON = 0xFF, // XXXXXXX1
_CAN_CONFIG_PHSEG2_PRG_OFF = 0xFE, // XXXXXXX0
_CAN_CONFIG_LINE_FILTER_BIT = 0x02,
_CAN_CONFIG_LINE_FILTER_ON = 0xFF, // XXXXXX1X
_CAN_CONFIG_LINE_FILTER_OFF = 0xFD, // XXXXXX0X
_CAN_CONFIG_SAMPLE_BIT = 0x04,
_CAN_CONFIG_SAMPLE_ONCE = 0xFF, // XXXXX1XX
_CAN_CONFIG_SAMPLE_THRICE = 0xFB, // XXXXX0XX
_CAN_CONFIG_MSG_TYPE_BIT = 0x08,
_CAN_CONFIG_STD_MSG = 0xFF, // XXXX1XXX
_CAN_CONFIG_XTD_MSG = 0xF7, // XXXX0XXX
_CAN_CONFIG_DBL_BUFFER_BIT = 0x10,
_CAN_CONFIG_DBL_BUFFER_ON = 0xFF, // XXX1XXXX
_CAN_CONFIG_DBL_BUFFER_OFF = 0xEF, // XXX0XXXX
_CAN_CONFIG_MSG_BITS = 0x60,
_CAN_CONFIG_ALL_MSG = 0xFF, // X11XXXXX
_CAN_CONFIG_VALID_XTD_MSG = 0xDF, // X10XXXXX
_CAN_CONFIG_VALID_STD_MSG = 0xBF, // X01XXXXX
_CAN_CONFIG_ALL_VALID_MSG = 0x9F; // X00XXXXX
Puede usar AND ( &) a nivel de bit para formar un byte de configuración de estos
valores. Por ejemplo:
Copiar código al portapapeles
CAN_TX_MSG_FLAGS
CAN_TX_MSG_FLAGSLas banderas están relacionadas con la transmisión de
un mensaje CAN :
const char
_CAN_TX_PRIORITY_BITS = 0x03,
_CAN_TX_PRIORITY_0 = 0xFC, // XXXXXX00
_CAN_TX_PRIORITY_1 = 0xFD, // XXXXXX01
_CAN_TX_PRIORITY_2 = 0xFE, // XXXXXX10
_CAN_TX_PRIORITY_3 = 0xFF, // XXXXXX11
_CAN_TX_FRAME_BIT = 0x08,
_CAN_TX_STD_FRAME = 0xFF, // XXXXX1XX
_CAN_TX_XTD_FRAME = 0xF7, // XXXXX0XX
_CAN_TX_RTR_BIT = 0x40,
_CAN_TX_NO_RTR_FRAME = 0xFF, // X1XXXXXX
_CAN_TX_RTR_FRAME = 0xBF; // X0XXXXXX
Puede usar AND ( &) a nivel de bits para ajustar los indicadores apropiados. Por
ejemplo:
Copiar código al portapapeles
CAN_RX_MSG_FLAGS
CAN_RX_MSG_FLAGSSon banderas relacionadas con la recepción del mensaje CAN . Si
se establece un bit particular; el significado correspondiente es VERDADERO o de lo
contrario será FALSO.
const char
_CAN_RX_FILTER_BITS = 0x07, // Use esto para acceder a los bits de
filtro
_CAN_RX_FILTER_1 = 0x00,
_CAN_RX_FILTER_2 = 0x01,
_CAN_RX_FILTER_3 = 0x02,
_CAN_RX_FILTER_4 = 0x03,
_CAN_RX_FILTER_5 = 0x04,
_CAN_RX_FILTER_6 = 0x05,
_CAN_RX_OVERFLOW = 0x08, // Establecer si no, se borra Desbordado
_CAN_RX_INVALID_MSG = 0x10, // Establecer si no, se borra inválida
_CAN_RX_XTD_FRAME = 0x20, // Establecer si el mensaje XTD no, se
borra
_CAN_RX_RTR_FRAME = 0x40, // Establecer si el mensaje RTR no, se
borra
_CAN_RX_DBL_BUFFERED = 0x80; // Establecer si este mensaje era
hardware de doble búfer
Puede usar AND ( &) a nivel de bits para ajustar los indicadores apropiados. Por
ejemplo:
Copiar código al portapapeles
CAN_MASK
CAN_MASKLas constantes definen códigos de máscara. La función CANSetMaskespera
uno de estos como su argumento:
# const char
_CAN_MASK_B1 = 0,
_CAN_MASK_B2 = 1;
CAN_FILTER
CAN_FILTERLas constantes definen códigos de filtro. La función CANSetFilterespera
uno de estos como su argumento:
const char
_CAN_FILTER_B1_F1 = 0,
_CAN_FILTER_B1_F2 = 1,
_CAN_FILTER_B2_F1 = 2,
_CAN_FILTER_B2_F2 = 3,
_CAN_FILTER_B2_F3 = 4,
_CAN_FILTER_B2_F4 = 5;
Ejemplo de biblioteca
Esta es una demostración simple del uso de rutinas de la Biblioteca CAN . El primer
nodo inicia la comunicación con el segundo nodo enviando algunos datos a su
dirección. El segundo nodo responde devolviendo los datos incrementados en 1. El
primer nodo luego hace lo mismo y envía los datos incrementados de vuelta al
segundo nodo, etc.
Código para el primer nodo CAN:
Copiar código al portapapeles
void main () {
PORTC = 0; // borrar
PORTC
TRISC = 0; // establece
PORTC como salida
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // borrar las
banderas
Can_Rcv_Flags = 0; //
while (1) {
// interminable bucle
Msg_Rcvd = CANRead (& Rx_ID, RxTx_Data, & Rx_Data_Len, &
Can_Rcv_Flags); // recibir mensaje
si ((Rx_ID == ID_2nd) && Msg_Rcvd) {
// si el mensaje recibió la identificación de verificación
PORTC = RxTx_Data [0];
// identificación correcta, datos de salida en PORTC
RxTx_Data [0] ++;
// incrementar datos recibidos
Delay_ms (10);
CANWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags);
// devolver datos incrementados
}
}
}
void main () {
PORTC = 0; // borrar
PORTC
TRISC = 0; // establece
PORTC como salida
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // borrar las
banderas
Can_Rcv_Flags = 0; //
while (1) {
// interminable bucle
Msg_Rcvd = CANRead (& Rx_ID, RxTx_Data, & Rx_Data_Len, &
Can_Rcv_Flags); // recibir mensaje
si ((Rx_ID == ID_1st) && Msg_Rcvd) {
// si el mensaje recibió la identificación de verificación
PORTC = RxTx_Data [0];
// identificación correcta, datos de salida en PORTC
RxTx_Data [0] ++;
// incrementar los datos recibidos
CANWrite (ID_2nd, RxTx_Data, 1, Can_Send_Flags);
// devolver datos incrementados
}
}
}
Conexión HW
Importante:
Consulte la norma CAN sobre la resistencia de terminación del
bus CAN .
Una velocidad de comunicación CANSPI efectiva depende de SPI y
ciertamente es más lenta que la CAN "real" .
La biblioteca utiliza el módulo SPI para la comunicación. El usuario debe
inicializar el módulo SPI apropiado antes de usar la biblioteca CANSPI .
Para MCU con dos módulos SPI es posible inicializar ambos y luego
cambiar usando la rutina SPI_Set_Active .
El módulo CANSPI se refiere a la placa complementaria CANSPI de
mikroElektronika conectada al módulo SPI de MCU .
Árbol de la dependencia de la biblioteca
Chip de
extern sfr
sbitCanSpi_CS; selección de sbit CanSpi_CS atRC0_bit;
línea.
extern sfr Restablecer sbit CanSpi_Rst atRC2_bit;
sbitCanSpi_Rst; línea.
extern sfr Dirección
sbitCanSpi_CS_Direction at TRISC0_
sbitCanSpi_CS_Directio del pin Chip bit;
n; Select.
Devoluciones Nada.
Requiere Las rutinas CANSPI solo son compatibles con las MCU con
el módulo SPI .
La MCU debe estar correctamente conectada a la placa
CANSPI Extra de mikroElektronika o hardware similar. Vea
el ejemplo de conexión en la parte inferior de esta página.
CANSPIGetOperationMode
Prototipo char CANSPIGetOperationMode ();
Requiere Las rutinas CANSPI solo son compatibles con las MCU con
el módulo SPI .
La MCU debe estar correctamente conectada a la placa
CANSPI Extra de mikroElektronika o hardware similar. Vea
el ejemplo de conexión en la parte inferior de esta página.
CANSPIInicializar
Prototip void CANSPIInitialize
o ( char SJW, char BRP, char PHSEG1, char PHSEG2, char P
ROPSEG, char CANSPI_CONFIG_FLAGS);
Devoluc Nada.
iones
Las rutinas CANSPI solo son compatibles con las MCU con
el módulo SPI .
El módulo SPI necesita ser inicializado. Ver
las rutinas SPIx_Init y SPIx_Init_Advanced .
La MCU debe estar correctamente conectada a la placa
CANSPI Extra de mikroElektronika o hardware similar. Vea el
ejemplo de conexión en la parte inferior de esta página.
CANSPISetBaudRate
Prototip void CANSPISetBaudRate
o ( char SJW, char BRP, char PHSEG1, char PHSEG2, char P
ROPSEG, char CANSPI_CONFIG_FLAGS);
Devoluc Nada.
iones
CANSPISetMask
Prototipo void CANSPISetMask
( char CANSPI_MASK, long val, char CANSPI_CONFIG_FL
AGS);
Devolucion Nada.
es
CANSPISetFilter
Prototipo void CANSPISetFilter
( char CANSPI_FILTER, long val, char CANSPI_CONFIG_
FLAGS);
Devolucion Nada.
es
CANSPIRead
Prototipo char CANSPIRead ( long * id, char *
rd_data, char * data_len, char *
CANSPI_RX_MSG_FLAGS);
CANSPIWrite
Prototipo char CANSPIWrite ( id largo , char *
wr_data, char data_len, char CANSPI_TX_MSG_FLAGS);
Constantes CANSPI
Hay una serie de constantes predefinidas en la biblioteca CANSPI . Debe estar
familiarizado con ellos para poder utilizar la biblioteca de manera efectiva. Verifique
el ejemplo al final del capítulo.
CANSPI_OP_MODE
Las CANSPI_OP_MODEconstantes definen el modo de operación CANSPI . La
función CANSPISetOperationMode espera uno de estos como argumento:
const char
_CANSPI_MODE_BITS = 0xE0, // Use esto para acceder a los bits de
modo operativo
_CANSPI_MODE_NORMAL = 0x00,
_CANSPI_MODE_SLEEP = 0x20,
_CANSPI_MODE_LOOP = 0x40,
_CANSPI_MODE_LISTEN = 0x60,
_CANSPI_MODE_CONFIG = 0x80;
CANSPI_CONFIG_FLAGS
Las CANSPI_CONFIG_FLAGSconstantes definen banderas relacionadas con
la configuración del módulo CANSPI . Las
funciones CANSPIInitialize , CANSPISetBaudRate , CANSPISetMask y CANSPISetFilt
eresperan uno de estos (o una combinación bit a bit) como su argumento:
const char
_CANSPI_CONFIG_DEFAULT = 0xFF, // 11111111
_CANSPI_CONFIG_PHSEG2_PRG_BIT = 0x01,
_CANSPI_CONFIG_PHSEG2_PRG_ON = 0xFF, // XXXXXXX1
_CANSPI_CONFIG_PHSEG2_PRG_OFF = 0xFE, // XXXXXXX0
_CANSPI_CONFIG_LINE_FILTER_BIT = 0x02,
_CANSPI_CONFIG_LINE_FILTER_ON = 0xFF, // XXXXXX1X
_CANSPI_CONFIG_LINE_FILTER_OFF = 0xFD, // XXXXXX0X
_CANSPI_CONFIG_SAMPLE_BIT = 0x04,
_CANSPI_CONFIG_SAMPLE_ONCE = 0xFF, // XXXXX1XX
_CANSPI_CONFIG_SAMPLE_THRICE = 0xFB, // XXXXX0XX
_CANSPI_CONFIG_MSG_TYPE_BIT = 0x08,
_CANSPI_CONFIG_STD_MSG = 0xFF, // XXXX1XXX
_CANSPI_CONFIG_XTD_MSG = 0xF7, // XXXX0XXX
_CANSPI_CONFIG_DBL_BUFFER_BIT = 0x10,
_CANSPI_CONFIG_DBL_BUFFER_ON = 0xFF, // XXX1XXXX
_CANSPI_CONFIG_DBL_BUFFER_OFF = 0xEF, // XXX0XXXX
_CANSPI_CONFIG_MSG_BITS = 0x60,
_CANSPI_CONFIG_ALL_MSG = 0xFF, // X11XXXXX
_CANSPI_CONFIG_VALID_XTD_MSG = 0xDF, // X10XXXXX
_CANSPI_CONFIG_VALID_STD_MSG = 0xBF, // X01XXXXX
_CANSPI_CONFIG_ALL_VALID_MSG = 0x9F; // X00XXXXX
Puede usar AND ( &) a nivel de bit para formar un byte de configuración de estos
valores. Por ejemplo:
Copiar código al portapapeles
CANSPI_TX_MSG_FLAGS
CANSPI_TX_MSG_FLAGSLas banderas están relacionadas con la transmisión de
un mensaje CAN :
const char
_CANSPI_TX_PRIORITY_BITS = 0x03,
_CANSPI_TX_PRIORITY_0 = 0xFC, // XXXXXX00
_CANSPI_TX_PRIORITY_1 = 0xFD, // XXXXXX01
_CANSPI_TX_PRIORITY_2 = 0xFE, // XXXX10
_CANSPI_TX_PRIORITY_3 = 0xFF, // XXXXXX
_CANSPI_TX_FRAME_BIT = 0x08,
_CANSPI_TX_STD_FRAME = 0xFF, // XXXXX1XX
_CANSPI_TX_XTD_FRAME = 0xF7, // XXXXX0XX
_CANSPI_TX_RTR_BIT = 0x40,
_CANSPI_TX_NO_RTR_FRAME = 0xFF, // X1XXXXXX
_CANSPI_TX_RTR_FRAME = 0xBF; // X0XXXXXX
Puede usar AND ( &) a nivel de bits para ajustar los indicadores apropiados. Por
ejemplo:
Copiar código al portapapeles
CANSPI_RX_MSG_FLAGS
CANSPI_RX_MSG_FLAGSSon banderas relacionadas con la recepción
del mensaje CAN . Si se establece un bit en particular, el significado
correspondiente es VERDADERO o, de lo contrario, será FALSO.
const char
_CANSPI_RX_FILTER_BITS = 0x07, // Use esto para acceder a los bits
de filtro
_CANSPI_RX_FILTER_1 = 0x00,
_CANSPI_RX_FILTER_2 = 0x01,
_CANSPI_RX_FILTER_3 = 0x02,
_CANSPI_RX_FILTER_4 = 0x03,
_CANSPI_RX_FILTER_5 = 0x04,
_CANSPI_RX_FILTER_6 = 0x05,
Puede usar AND ( &) a nivel de bits para ajustar los indicadores apropiados. Por
ejemplo:
Copiar código al portapapeles
CANSPI_MASK
Las CANSPI_MASKconstantes definen códigos de máscara. La
función CANSPISetMask espera uno de estos como argumento:
const char
_CANSPI_MASK_B1 = 0,
_CANSPI_MASK_B2 = 1;
CANSPI_FILTER
Las CANSPI_FILTERconstantes definen códigos de
filtro. Funciones CANSPISetFilter espera uno de estos como argumento:
const char
_CANSPI_FILTER_B1_F1 = 0,
_CANSPI_FILTER_B1_F2 = 1,
_CANSPI_FILTER_B2_F1 = 2,
_CANSPI_FILTER_B2_F2 = 3,
_CANSPI_FILTER_B2_F3 = 4,
_CANSPI_FILTER_B2_F4 = 5;
Ejemplo de biblioteca
Esta es una demostración simple del uso de las rutinas de la biblioteca CANSPI . El
primer nodo inicia la comunicación con el segundo nodo enviando algunos datos a
su dirección. El segundo nodo responde devolviendo los datos incrementados en 1.
El primer nodo luego hace lo mismo y envía los datos incrementados de vuelta al
segundo nodo, etc.
Código para el primer nodo CANSPI:
Copiar código al portapapeles
void main () {
ANSEL = 0; // Configurar
pines AN como E / S digital
ANSELH = 0;
PORTB = 0; // borrar
PORTB
TRISB = 0; // establece
PORTB como salida
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // borrar
las banderas
Can_Rcv_Flags = 0; //
SPI1_Init (); //
inicializar el módulo SPI1
RxTx_Data [0] = 9; //
configurar los datos iniciales para ser enviados
while (1) {
// interminable bucle
Msg_Rcvd = CANSPIRead (& Rx_ID, RxTx_Data, & Rx_Data_Len, &
Can_Rcv_Flags); // recibir mensaje
si ((Rx_ID == ID_2nd) && Msg_Rcvd) {
// si el mensaje recibió la identificación de verificación
PORTB = RxTx_Data [0];
// identificación correcta, datos de salida en PORTC
RxTx_Data [0] ++;
// incrementar datos recibidos
Delay_ms (10);
CANSPIWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags);
// devolver datos incrementados
}
}
}
void main () {
ANSEL = 0; // Configurar
pines AN como E / S digital
ANSELH = 0;
C1ON_bit = 0; //
Desactivar comparadores
C2ON_bit = 0;
PORTB = 0; // borrar
PORTB
TRISB = 0; // establece
PORTB como salida
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // borrar
las banderas
Can_Rcv_Flags = 0; //
SPI1_Init ();
// inicializar el módulo SPI1
CANSPIInitialize (1,3,3,3,1, Can_Init_Flags);
// inicializar el módulo
CANSPI externo CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF);
// establece el modo CONFIGURACIÓN
CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG);
// establece todos los bits de mask1 en unos
CANSPISetMask (_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG);
// establece todos los bits de mask2 a los
CANSPISetFilter (_CANSPI_FILTER_B2_F3, ID_1st, _CANSPI_CONFIG_XTD_MSG);
// establecer la id del filtro B2_F3 en el primer ID de nodo
while (1) {
// interminable bucle
Msg_Rcvd = CANSPIRead (& Rx_ID, RxTx_Data, & Rx_Data_Len, &
Can_Rcv_Flags); // recibir mensaje
si ((Rx_ID == ID_1st) && Msg_Rcvd) {
// si el mensaje recibió la identificación de cheque
PORTB = RxTx_Data [0];
// identificación correcta, datos de salida en PORTC
RxTx_Data [0] ++;
// incrementar los datos recibidos
CANSPIWrite (ID_2nd, RxTx_Data, 1, Can_Send_Flags);
// devolver datos incrementados
}
}
}
Conexión HW
Ejemplo de interfaz del transceptor CAN MCP2510 con MCU a través de la interfaz SPI
Biblioteca Compact Flash
La biblioteca Compact Flash proporciona rutinas para acceder a los datos en la
tarjeta Compact Flash (abbr. CF más adelante en el texto). Las tarjetas CF son
elementos de memoria ampliamente utilizados, comúnmente utilizados con
cámaras digitales. La gran capacidad y el excelente tiempo de acceso de solo unos
pocos microsegundos los hacen muy atractivos para las aplicaciones de
microcontroladores.
En la tarjeta CF, los datos se dividen en sectores. Un sector suele comprender 512
bytes. Las rutinas para el manejo de archivos, las Cf_Fatrutinas, no se realizan
directamente sino sucesivamente a través del búfer 512B.
Importante:
Las rutinas para el manejo de archivos solo pueden usarse con el
sistema de archivos FAT16.
Las funciones de la biblioteca crean y leen archivos solo desde el
directorio raíz.
Las funciones de biblioteca llenan las tablas FAT1 y FAT2 al escribir en
archivos, pero los datos del archivo se leen solo desde la tabla FAT1; es
decir, no hay recuperación si la tabla FAT1 se corrompe.
Si la tarjeta MMC / SD tiene un registro de inicio maestro (MBR), la
biblioteca funcionará con la primera partición primaria (lógica)
disponible que tiene un tamaño distinto de cero. Si la tarjeta MMC / SD
tiene Volume Record Record (es decir, solo hay una partición lógica y
no MBR), la biblioteca funciona con la tarjeta completa como una sola
partición. Para obtener más información sobre MBR, unidades físicas y
lógicas, particiones primarias / secundarias y tablas de particiones,
consulte otros recursos, por ejemplo, Wikipedia y similares.
Antes de la operación de escritura, asegúrese de no sobrescribir el
sector de arranque o FAT, ya que podría hacer que su tarjeta en una PC
o cámara digital sea ilegible. Las herramientas de mapeo de unidades,
como Winhex, pueden ser de gran ayuda.
Árbol de la dependencia de la biblioteca
Puerto de
extern sfr datos char CF_Data_Port at PORTD;
charCF_Data_Port; Compact
Flash.
extern sfr Línea de sbit CF_RDY atRB7_bit;
sbit CF_RDY; señal lista.
Escribir
extern sfr
sbit CF_WE; habilitar línea sbit CF_WE atLATB6_bit;
de señal.
Salida
extern sfr
sbit CF_OE; habilitar línea sbit CF_OE atLATB5_bit;
de señal.
Chip de
extern sfr detección de sbit CF_CD1 atRB4_bit;
sbit CF_CD1; línea de
señal.
Chip habilita
extern sfr
sbit CF_CE1; la línea de sbit CF_CE1 atLATB3_bit;
señal.
extern sfr Dirección pin sbit CF_A2 atLATB2_bit;
sbit CF_A2; 2.
extern sfr Dirección pin sbit CF_A1 atLATB1_bit;
sbit CF_A1; 1.
extern sfr Dirección pin sbit CF_A0 atLATB0_bit;
sbit CF_A0; 0.
extern sfr
sbitCF_RDY_direction Dirección del sbitCF_RDY_direction at TRISB7_bit
; pin Listo. ;
Dirección del
extern sfr
sbitCF_WE_direction; pin Habilitar sbitCF_WE_direction at TRISB6_bit;
escritura.
Dirección del
extern sfr pin de sbitCF_OE_direction at TRISB5_bit;
sbitCF_OE_direction; habilitación
de salida.
extern sfr Dirección del
sbitCF_CD1_direction at TRISB4_bit
sbitCF_CD1_direction pin Chip ;
; Detect.
extern sfr Dirección del
sbitCF_CE1_direction at TRISB3_bit
sbitCF_CE1_direction pin chip ;
; habilitado.
Dirección del
extern sfr
sbitCF_A2_direction; pin Dirección sbitCF_A2_direction at TRISB2_bit;
2.
Dirección del
extern sfr
sbitCF_A1_direction; pin Dirección sbitCF_A1_direction at TRISB1_bit;
1.
Dirección de
extern sfr
sbitCF_A0_direction; la dirección 0 sbitCF_A0_direction at TRISB0_bit;
pin.
Rutinas de la biblioteca
Cf_Init
Cf_Detect
Cf_Enable
Cf_Disable
Cf_Read_Init
Cf_Read_Byte
Cf_Write_Init
Cf_Write_Byte
Cf_Read_Sector
Cf_Write_Sector
Rutinas para el manejo de archivos:
Cf_Fat_Init
Cf_Fat_QuickFormat
Cf_Fat_Assign
Cf_Fat_Reset
Cf_Fat_Read
Cf_Fat_Rewrite
Cf_Fat_Append
Cf_Fat_Delete
Cf_Fat_Write
Cf_Fat_Set_File_Date
Cf_Fat_Get_File_Date
Cf_Fat_Get_File_Date_Modified
Cf_Fat_Get_File_Size
Cf_Fat_Get_Swap_File
La siguiente rutina es solo para uso interno por compilador:
Cf_Issue_ID_Command
Cf_Init
Prototipo void Cf_Init ();
Devoluciones Nada.
Descripción Inicializa los puertos adecuadamente para la comunicación
con la tarjeta CF.
Cf_Detect
Prototipo corto sin firma Cf_Detect ( void );
Cf_Enable
Prototipo void Cf_Enable ( void );
Devoluciones Nada.
Cf_Disable
Prototipo void Cf_Disable ( void );
Devoluciones Nada.
Cf_Read_Init
Prototipo void Cf_Read_Init ( dirección larga
sin signo , sector_cuero corto sin firmar );
Devoluciones Nada.
Cf_Read_Byte
Prototipo corto sin firmar Cf_Read_Byte ( void );
Cf_Write_Init
Prototipo void Cf_Write_Init ( dirección larga
sin signo , sección corta sinsigno);
Devoluciones Nada.
Cf_Write_Byte
Prototipo void Cf_Write_Byte (datos cortos sin firmar);
Devoluciones Nada.
Cf_Read_Sector
Prototipo void Cf_Read_Sector ( unsigned
long sector_number, unsigned short * buffer);
Devoluciones Nada.
Ejemplo // leer
datos cortos sin firmar del sector 22 [512];
...
Cf_Read_Sector (22, data);
Cf_Write_Sector
Prototipo void Cf_Write_Sector ( unsigned
long sector_number, unsigned short* buffer);
Devoluciones Nada.
Cf_Fat_Init
Prototipo corto sin firma Cf_Fat_Init ();
Requiere Nada.
Cf_Fat_QuickFormat
Prototipo unsigned char Cf_Fat_QuickFormat ( char *
cf_fat_label);
Devoluciones 0 - Si se detectó una tarjeta CF, se formateó
correctamente y se inicializó.
1 - si el formato FAT16 no tuvo éxito
255 - si la tarjeta no fue detectada
Nota :
Esta rutina se puede utilizar en su lugar o junto
con la rutina Cf_Fat_Init .
Si la tarjeta CF ya contiene un sector de inicio
válido, permanecerá sin cambios (excepto el
campo de etiqueta de volumen) y solo se
borrarán las tablas FAT y ROOT. Además, se
establecerá la nueva etiqueta de volumen.
Requiere Nada.
Cf_Fat_Assign
Prototipo corto sin signo Cf_Fat_Assign ( char *
filename, charfile_cre_attr);
1 0x02 Oculto
2 0x04 Sistema
4 0x10 Subdirectorio
5 0x20 Archivo
Cf_Fat_Reset
Prototipo void Cf_Fat_Reset ( unsigned long * size);
Devoluciones Nada.
Descripción Abre el archivo actualmente asignado para su lectura.
Parámetros:
size:búfer para almacenar el tamaño del
archivo a. Después de que el archivo se haya
abierto para leer, su tamaño se devuelve a
través de este parámetro.
Cf_Fat_Read
Prototipo void Cf_Fat_Read ( short * bdata sin signo);
Devoluciones Nada.
Cf_Fat_Rewrite
Prototipo void Cf_Fat_Rewrite ();
Devoluciones Nada.
Cf_Fat_Append
Prototipo void Cf_Fat_Append ();
Devoluciones Nada.
Cf_Fat_Delete
Prototipo void Cf_Fat_Delete ();
Devoluciones Nada.
Cf_Fat_Write
Prototipo void Cf_Fat_Write ( char *
fdata, unsigned data_len);
Devoluciones Nada.
Cf_Fat_Set_File_Date
Prototipo void Cf_Fat_Set_File_Date ( unsigned
int year, unsigned shortmonth, unsigned
short day, unsigned short hours, unsigned
shortminute, unsigned short seconds);
Devoluciones Nada.
Cf_Fat_Get_File_Date
Prototipo void Cf_Fat_Get_File_Date ( unsigned int *
year, unsigned short * month, unsigned short *
day, unsigned short * hours, unsigned short*
mins);
Devoluciones Nada.
Ejemplo año
sin firmar char mes, día, horas, minutos;
...
Cf_Fat_Get_File_Date (& year, & month, & day, &
hours, & mins);
Cf_Fat_Get_File_Date_Modified
Prototipo void Cf_Fat_Get_File_Date_Modified ( unsigned
int * year, unsigned short * month, unsigned
short * day, unsigned short * hours, unsigned
short * mins);
Devoluciones Nada.
Ejemplo año
sin firmar char mes, día, horas, minutos;
...
Cf_Fat_Get_File_Date_Modified (& year, & month, &
day, & hours, & mins);
Cf_Fat_Get_File_Size
Prototipo sin signo largo Cf_Fat_Get_File_Size ();
Cf_Fat_Get_Swap_File
Prototipo unsigned long Cf_Fat_Get_Swap_File ( unsigned
long sectores_cnt, char *
filename, char file_attr);
1 0x02 Oculto
2 0x04 Sistema
4 0x10 Subdirectorio
5 0x20 Archivo
7 0x80 No utilizado
Ejemplo de biblioteca
Este ejemplo consta de varios bloques que demuestran diversos aspectos del uso
de la biblioteca Cf_Fat16. Estos son:
Creación de nuevo archivo y escritura en él;
Abrir el archivo existente y volver a escribirlo (escribir desde el inicio
del archivo);
Abrir el archivo existente y agregarle datos (escritura desde el final del
archivo);
Abrir un archivo y leer datos desde él (enviarlo al terminal USART);
Creando y modificando varios archivos a la vez;
Lectura de contenidos de archivo;
Eliminar archivo (s);
Creación del archivo de intercambio (ver Ayuda para más detalles);
Copiar código al portapapeles
si (tamaño) {
LongToStr (( firmado largo ) tamaño, err_txt);
UART1_Write_Line (err_txt);
}
else {
UART1_Write_Line (err_txt); // Nota: Cf_Fat_Init intenta inicializar
una tarjeta más de una vez.
// Si la tarjeta no está presente, la
inicialización puede durar más (dependiendo de la velocidad del reloj)
}
Conexión HW
Diagrama de pin de la tarjeta de memoria CF
Biblioteca EEPROM
La memoria de datos EEPROM está disponible con una serie de MCU PIC. mikroC
PRO para PIC incluye una biblioteca para un trabajo cómodo con EEPROM .
Rutinas de la biblioteca
EEPROM_Leer
EEPROM_Write
EEPROM_Leer
Prototipo // para PIC16 EEPROM_Read
corto sin firmar ( dirección corta sin signo );
// para PIC18
sin firma EEPROM_Read ( dirección int sin
firmar );
EEPROM_Write
Prototipo // para PIC16
void EEPROM_Write ( dirección corta
sin firmar , datos cortos sin firmar );
// para PIC18
void EEPROM_Write ( dirección int
sin firmar , datos cortos sin firmar );
Devoluciones Nada.
Ejemplo de biblioteca
El ejemplo demuestra el uso de la biblioteca EEPROM .
Copiar código al portapapeles
void main () {
ANSEL = 0; // Configurar pines AN como E / S
digital
ANSELH = 0;
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
PORTB = 0;
PORTC = 0;
PORTD = 0;
TRISB = 0;
TRISC = 0;
TRISD = 0;
Delay_ms (1000);
Bus de
extern sfr
charS1D13700_DATA; datos del char S1D13700_DATA atPORTD;
sistema.
extern sfr Escribir sbit S1D13700_WR atLATC2_bit;
sbitS1D13700_WR; señal.
extern sfr Leer la sbit S1D13700_RD atLATC1_bit;
sbitS1D13700_RD; señal.
Dirección
extern sfr
sbitS1D13700_A0; del sistema sbit S1D13700_A0 atLATC0_bit;
pin.
extern sfr Restablece sbit S1D13700_RES atLATC4_bit;
sbitS1D13700_RES; r la señal.
extern sfr Selección sbit S1D13700_CS atLATC4_bit;
sbitS1D13700_CS; de chip.
Dirección
de los
extern sfr
sbitS1D13700_DATA_Direc pines del sbitS1D13700_DATA_Direction at TRI
tion; bus de SD;
datos del
sistema.
Dirección
extern sfr del pin de
sbitS1D13700_A0_Direction at TRISC
sbitS1D13700_A0_Directi dirección 2_bit;
on; del
sistema.
Devoluciones Nada.
S1D13700_Write_Command
Prototipo void S1D13700_Write_Command ( comando char );
Devoluciones Nada.
Configuración de texto y
S1D13700_SCROLL gráficos de las regiones de
dirección.
El cursor se mueve justo
S1D13700_CS_RIGHT después de escribir en la
memoria de visualización.
El cursor se mueve a la
S1D13700_CS_LEFT izquierda después de escribir en
la memoria de visualización.
Configurar cómo se
S1D13700_OVLAY superponen las capas.
Establecer velocidad de
S1D13700_HDOT_SCR desplazamiento horizontal.
Selecciona la profundidad de la
S1D13700_GRAYSCALE escala de grises, en bits por
píxel (bpp).
Leer de la memoria de la
S1D13700_MEMREAD pantalla.
S1D13700_Write_Parameter
Prototipo void S1D13700_Write_Parameter ( parámetro char );
Devoluciones Nada.
S1D13700_Read_Parameter
Prototipo char S1D13700_Read_Parameter ();
Devoluciones Nada.
S1D13700_Fill
Prototipo void S1D13700_Fill ( char d, unsigned
int start, unsigned int len);
Devoluciones Nada.
S1D13700_GrFill
Prototipo void S1D13700_GrFill ( char d);
Devoluciones Nada.
Descripción Rellene la capa gráfica con el valor apropiado (0 para
borrar).
Parámetros:
d: Valor para rellenar la capa gráfica con.
S1D13700_TxtFill
Prototipo void S1D13700_TxtFill ( char d);
Devoluciones Nada.
S1D13700_Display_GrLayer
Prototipo void S1D13700_Display_GrLayer ( modo char );
Devoluciones Nada.
Desactivar la capa
S1D13700_LAYER_OFF gráfica.
Encienda la capa
S1D13700_LAYER_ON gráfica.
Encienda la capa
gráfica y flashéela a
S1D13700_LAYER_FLASH_2Hz una velocidad de 2
Hz.
Encienda la capa
S1D13700_LAYER_FLASH_16Hz gráfica y flashéela a
una velocidad de 16
Hz.
S1D13700_Display_TxtLayer
Prototipo void S1D13700_Display_TxtLayer ( modo char );
Devoluciones Nada.
Desactivar la capa
S1D13700_LAYER_OFF gráfica.
Encienda la capa
S1D13700_LAYER_ON gráfica.
Encienda la capa
gráfica y flashéela a
S1D13700_LAYER_FLASH_2Hz una velocidad de 2
Hz.
Encienda la capa
gráfica y flashéela a
S1D13700_LAYER_FLASH_16Hz una velocidad de 16
Hz.
S1D13700_Set_Cursor
Prototipo anular S1D13700_Set_Cursor
( Char anchura, Char altura, Char modo);
Devoluciones Nada.
Establecer la forma
S1D13700_CURSOR_UNDERSCORE del cursor -
subrayado.
Establecer la forma
S1D13700_CURSOR_BLOCK del cursor - bloque.
S1D13700_Display_Cursor
Prototipo void S1D13700_Display_Cursor ( modo char );
Devoluciones Nada.
Desactivar la capa
S1D13700_CURSOR_OFF gráfica.
Encienda la capa
S1D13700_CURSOR_ON gráfica.
Encienda la capa
gráfica y flashéela
S1D13700_CURSOR_FLASH_2Hz a una velocidad de
2 Hz.
Encienda la capa
gráfica y flashéela
S1D13700_CURSOR_FLASH_16Hz a una velocidad de
16 Hz.
S1D13700_Write_Char
Prototipo void S1D13700_Write_Char ( carácter sin
signo c, sin signo int x, sin signo en
sí , modo sin signo );
Devoluciones Nada.
S1D13700_Write_Text
Prototipo void S1D13700_Write_Text ( unsigned char *
str, unsigned char x, unsigned char y, char mode);
Devoluciones Nada.
S1D13700_Dot
Prototipo void S1D13700_Dot ( int sin signo , int y sin
signo , color corto sin firmar );
Devoluciones Nada.
Devoluciones Nada.
S1D13700_H_Line
Prototipo void S1D13700_H_Line ( unsigned
int x_start, unsigned int x_end, unsigned
int y_pos, unsigned short color);
Devoluciones Nada.
S1D13700_V_Line
Prototipo void S1D13700_V_Line ( unsigned
int y_start, unsigned int y_end, unsigned
int x_pos, unsigned short color);
Devoluciones Nada.
S1D13700_Rectangle
Prototipo void S1D13700_Rectangle ( unsigned
int x0, unsigned int y0, unsigned int x1, unsigned
int y1, unsigned char pcolor);
Devoluciones Nada.
S1D13700_Box
Prototipo void S1D13700_Box ( unsigned int x0, unsigned
int y0, unsigned intx1, unsigned int y1, unsigned
char pcolor);
Devoluciones Nada.
S1D13700_Rectangle_Round_Edges
Prototipo void S1D13700_Rectangle_Round_Edges ( sin signo
int x_upper_left, sin signo int y_upper_left, sin
signo int x_bottom_right, sin signo
int y_bottom_right, sin signo
corto round_radius, sin signo cortocolor);
Devoluciones Nada.
S1D13700_Rectangle_Round_Edges_Fill
Prototipo void S1D13700_Rectangle_Round_Edges_Fill ( int sin
signo x0, int y0 sin signo , int x1 sin
signo , int y1 sin signo, redondeo corto sin signo
sin signo, color corto sin signo );
Devoluciones Nada.
S1D13700_Circulo
Prototipo void S1D13700_Circle ( unsigned
int x_center, unsigned inty_center, unsigned
int radio, unsigned short color);
Devoluciones Nada.
S1D13700_Circle_Fill
Prototipo void S1D13700_Circle_Fill ( unsigned
int x_center, unsigned inty_center, unsigned
int radio, unsigned short color);
Devoluciones Nada.
Descripción Dibuja un círculo relleno en Glcd.
Parámetros:
x_center: Coordenada x del centro del círculo.
y_center: Y coordenada del centro del círculo.
radius: tamaño del radio.
color:parámetro de color Valores válidos:
Valor Descripción
S1D13700_Imagen
Prototipo void S1D13700_Image ( const code char * pic);
Devoluciones Nada.
S1D13700_Imagen parcial
Prototipo void S1D13700_PartialImage ( sin signo
int x_left, sin signo int y_top, sin signo
int ancho, sin signo int alto, sin signo
int picture_width, sin signo
int picture_height, código const sin signo corto *
imagen);
Devoluciones Nada.
Importante:
La variable de biblioteca global Ethernet_userTimerSecse utiliza para
realizar un seguimiento del tiempo para todas las implementaciones de
clientes ( ARP , DNS , UDP y DHCP ). Es responsabilidad del usuario
incrementar esta variable cada segundo en su código si se utiliza alguno
de los clientes.
Para usuarios avanzados, hay archivos de encabezado
( "eth_j60LibDef.h"y "eth_j60LibPrivate.h") en la carpeta Uses \
P18 del compilador con una descripción de todas las rutinas y variables
globales, relevantes para el usuario, implementadas en la biblioteca
Ethernet PIC18FxxJ60.
Rutinas de la biblioteca
Ethernet_Init
Ethernet_Enable
Ethernet_Disable
Ethernet_doPacket
Ethernet_putByte
Ethernet_putBytes
Ethernet_putString
Ethernet_putConstString
Ethernet_putConstBytes
Ethernet_getByte
Ethernet_getBytes
Ethernet_UserTCP
Ethernet_UserUDP
Ethernet_getIpAddress
Ethernet_getGwIpAddress
Ethernet_getDnsIpAddress
Ethernet_getIpMask
Ethernet_confNetwork
Ethernet_arpResolve
Ethernet_sendUDP
Ethernet_dnsResolve
Ethernet_initDHCP
Ethernet_doDHCPLeaseTime
Ethernet_renewDHCP
Ethernet_Init
Prototipo void Ethernet_Init ( unsigned char * mac, unsigned
char * ip, unsigned char fullDuplex);
Devolucione Nada.
s
Nota: Si se va a
utilizar un servidor DHCP , la dirección IP debe
configurarse en 0.0.0.0.
Requiere Nada.
Ethernet_Enable
Prototipo void Ethernet_Enable ( unsigned char enFlt);
Devolucio Nada.
nes
Tráfico de
difusión MAC /
indicador de
filtro de
recepción.Cuand _Ethernet_BROA
0 0x01 o se DCAST
establece, el tráfi
co de
transmisión MA
C se habilitará.
Tráfico de
multidifusión M
AC / indicador
de filtro de
recepción. Cuand _Ethernet_MULT
1 0x02 ICAST
o se establece, se
habilitará el
tráfico de
multidifusión M
AC .
CRC marca
de verificación.
Cuando se
5 0x20 establece, los _Ethernet_CRC
paquetes con
el campo CRC n
o válido se
descartarán.
Nota :
El filtrado avanzado está disponible en
el módulo Ethernet interno de la MCU ,
por ejemplo Pattern Match, Magic
Packety Hash Tableno se puede
habilitar con esta rutina.
Además, todos los filtros,
excepto CRC , habilitados con esta
rutina funcionarán en modo OR, lo que
significa que el paquete se recibirá si
alguno de los filtros habilitados lo
acepta.
Esta rutina cambiará la configuración
del filtro de recepción sobre la
marcha. De ninguna manera, no
interferirá con la activación /
desactivación de la lógica de recepción
/ transmisión o cualquier otra parte
del módulo Ethernet interno de
la MCU .
El módulo Ethernet interno de
la MCU debe estar correctamente
configurado por medio de
la rutina Ethernet_Init .
Ethernet_Disable
Prototipo void Ethernet_Disable ( unsigned char disFlt);
Devolucio Nada.
nes
Tráfico de
difusión MAC /
indicador de
filtro de
recepción. Cuand
o se _Ethernet_BROA
0 0x01 DCAST
establece, el tráfi
co de
transmisión MA
C se
deshabilitará.
Tráfico de
multidifusión M
AC / indicador
de filtro de
recepción. Cuand
_Ethernet_MULT
1 0x02 o se
ICAST
establece, el tráfi
co de
multidifusión M
AC se
deshabilitará.
CRC marca
de verificación.
Cuando se
establece,
5 0x20 _Ethernet_CRC
la verificación C
RCse
deshabilitará y se
aceptarán los
paquetes con
el campo CRC n
o válido .
Tráfico de
unidifusión MA
C / indicador de
filtro de
recepción. Cuand
_Ethernet_UNIC
7 0x80 o se
AST
establece, el tráfi
co de
unidifusión MA
C se
deshabilitará.
Nota :
El filtrado avanzado está disponible en
el módulo Ethernet interno de la MCU ,
por ejemplo Pattern Match, Magic
Packety Hash Tableno se puede
desactivar con esta rutina.
Esta rutina cambiará la configuración
del filtro de recepción sobre la
marcha. De ninguna manera, no
interferirá con la activación /
desactivación de la lógica de recepción
/ transmisión o cualquier otra parte
del módulo Ethernet interno de
la MCU .
El módulo Ethernet interno de
la MCU debe estar correctamente
configurado por medio de
la rutina Ethernet_Init .
Ethernet_doPacket
Prototipo unsigned char Ethernet_doPacket ();
Ethernet_putByte
Prototipo void Ethernet_putByte ( unsigned char v);
Devoluciones Nada.
Ethernet_putBytes
Prototipo void Ethernet_putBytes ( unsigned char *
ptr, unsigned int n);
Devoluciones Nada.
Ethernet_putConstBytes
Prototipo void Ethernet_putConstBytes ( const unsigned
char * ptr, unsigned int n);
Devoluciones Nada.
Ethernet_putString
Prototipo unsigned int Ethernet_putString ( unsigned char *
ptr);
Devoluciones Número de bytes escritos en la memoria RAM del
controlador Ethernet .
Ethernet_putConstString
Prototipo unsigned int Ethernet_putConstString ( const
unsigned char * ptr);
Ethernet_getByte
Prototipo unsigned char Ethernet_getByte ();
Ethernet_getBytes
Prototipo void Ethernet_getBytes ( unsigned char *
ptr, unsigned int addr, unsigned int n);
Devoluciones Nada.
Ethernet_UserTCP
Prototipo unsigned int Ethernet_UserTCP ( unsigned char *
remoteHost, unsigned int remotePort, unsigned
int localPort, unsigned
int reqLength, TEthPktFlags * flags);
typedef struct {
unsigned canCloseTCP: 1; // indicador
que cierra el socket
sin firmar isBroadcast: 1; // indicador
que indica que el paquete IP se ha
recibido a través de la dirección de
difusión de subred (no se utiliza para la
familia PIC16)
} TEthPktFlags;
Ethernet_UserUDP
Prototipo unsigned int Ethernet_UserUDP ( unsigned char *
remoteHost, unsigned int remotePort, unsigned
int destPort, unsigned
int reqLength, TEthPktFlags * flags);
typedef struct {
unsigned canCloseTCP: 1; // el
indicador que cierra el socket TCP (no
relevante para UDP)
sin firma isBroadcast: 1; // indicador
que indica que el paquete IP se ha
recibido a través de la dirección de
difusión de subred (no se utiliza para la
familia PIC16)
} TEthPktFlags;
Ethernet_getIpAddress
Prototipo unsigned char * Ethernet_getIpAddress ();
Ethernet_getGwIpAddress
Prototipo unsigned char * Ethernet_getGwIpAddress ();
Ethernet_getDnsIpAddress ();
Prototipo unsigned char * Ethernet_getDnsIpAddress
Ethernet_getIpMask
Prototipo unsigned char * Ethernet_getIpMask ()
Ethernet_confNetwork
Prototipo void Ethernet_confNetwork ( char * ipMask, char *
gwIpAddr, char * dnsIpAddr);
Devoluciones Nada.
Ethernet_arpResolve
Prototipo unsigned char * Ethernet_arpResolve ( unsigned
char * ip, unsigned char tmax);
Ethernet_dnsResolve
Prototipo unsigned char * Ethernet_dnsResolve ( unsigned
char * host, unsigned char tmax);
Nota :
Los servicios de Ethernet no se detienen
mientras esta rutina espera la respuesta
del DNS . Los paquetes entrantes se
procesarán normalmente durante este tiempo.
El usuario siempre debe copiar
la dirección IP de la ubicación de RAM
que devuelve esta rutina en su propio búfer de
dirección IP del host resuelto . ¡Estas
ubicaciones no deben ser alteradas por el
usuario en ningún caso!
Ethernet_initDHCP
Prototipo unsigned char Ethernet_initDHCP ( unsigned
char tmax);
Nota :
Los servicios de Ethernet no se detienen
mientras esta rutina espera la respuesta
del DNS . Los paquetes entrantes se
procesarán normalmente durante este tiempo.
Cuando se usa el módulo DHCP , la variable
de biblioteca global Ethernet_userTimerSecse
usa para mantener un registro del tiempo. Es
responsabilidad del usuario incrementar esta
variable cada segundo en su código.
Ejemplo ...
Ethernet_initDHCP (5); // obtener la configuración
de red del servidor DHCP, espere 5 segundos para
obtener la respuesta
...
Ethernet_doDHCPLeaseTime
Prototipo unsigned char Ethernet_doDHCPLeaseTime ();
Ethernet_renewDHCP
Prototipo unsigned char Ethernet_renewDHCP ( unsigned
char tmax);
Ejemplo de biblioteca
Este código muestra cómo usar la biblioteca Ethernet PIC18FxxJ60:
La junta responderá a las solicitudes de eco de ARP e ICMP.
La junta responderá a las solicitudes UDP en cualquier puerto:
devuelve la solicitud en caracteres superiores con un
encabezado hecho de IP de host remoto y número de
puerto
la placa responderá a las solicitudes HTTP en el puerto 80, método GET
con rutas de acceso:
/ volverá a la página principal de HTML
/ s devolverá el estado del tablero como cadena de texto
/ t0 ... / t7 cambiará de RD0 a RD7 bit y devolverá la
página principal HTML
Todas las demás solicitudes devuelven también la página
principal HTML.
Copiar código al portapapeles
#include "__EthJ60.h"
#define Ethernet_HALFDUPLEX 0
#define Ethernet_FULLDUPLEX 1
/ ************************************************** ***********
* ROM cadenas constantes
* /
const unsigned char httpHeader [] = "HTTP / 1.1 200 OKnContent-type:"; //
encabezado HTTP
const unsigned char httpMimeTypeHTML [] = "text / htmlnn"; //
HTML MIME type
const unsigned char httpMimeTypeScript [] = "text / plainnn"; //
TEXT MIME type
unsigned char httpMethod [] = "GET /";
/ *
* página web, dividida en 2 partes:
* cuando se queda corto de ROM, los datos fragmentados se manejan de
manera más eficiente por el enlazador
*
* esta página HTML llama a los tableros para obtener su estado y se
construye con javascript
* /
const char * indexPage = // Cambiar la dirección IP
de la página para actualizar
"<meta http-equiv =" refresh "content =" 3; url = http: //192.168.20.60 ">
<HTML><HEAD></HEAD> <BODY>
<h1> Mini servidor web PIC18FxxJ60 </h1>
<a href=/> Recargar </a>
<script src = / s> </script>
<table> <tr> <td valign = top> <table border = 1 style = "font-size: 20px;
font-family: terminal;">
<tr> <th colspan = 2> ADC </th> </tr>
<tr><td>AN2</td><td><script>document.write(AN2)</script></td> </tr>
<tr><td>AN3</td><td><script>document.write(AN3)</script></td> </tr>
</table></td> <td> <table border = 1 style = "font-size: 20px; font-
family: terminal;">
<tr> <th colspan = 2> PORTB </th> </tr>
<script>
var str, i;
str = "";
para (i = 0; i <8; i ++)
{str + = "<tr> <td bgcolor = pink> BUTTON #" + i + "</td>";
if (PORTB & (1 << i)) {str + = "<td bgcolor = red> ON";}
else else {str + = "<td bgcolor = # cccccc> OFF";}
str + = "</td> </tr>";}
document.write (str);
</script>
";
/ ***********************************
* RAM variables
* /
unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f};
// mi dirección MAC
no firmada char myIpAddr [4] = {192, 168, 20, 60}; //
mi dirección IP
no firmada char gwIpAddr [4] = {192, 168, 20, 6}; //
dirección IP de la puerta de enlace (enrutador)
sin signo char ipMask [4] = {255, 255, 255, 0}; //
máscara de red (por ejemplo: 255.255.255.0)
unsigned char dnsIpAddr [4] = {192, 168, 20, 1}; //
dirección IP del servidor DNS
/ *******************************************
* funciones
* /
/ *
* ponga la cadena constante apuntada por s al búfer de transmisión del
controlador Ethernet.
* /
/ * unsigned int putConstString (const char * s)
{
unsigned int ctr = 0;
mientras (* s)
{
Ethernet_putByte (* s ++);
ctr ++;
}
retorno (ctr);
} * /
/ *
* será mucho más rápido usar la rutina Ethernet_putConstString de la
biblioteca
* En lugar de la rutina putConstString anterior. Sin embargo, el código
será un poco
* un poco más grande. El usuario debe elegir entre tamaño y velocidad y
elegir la implementación que
* le encomienda mejor. Si elige ir con la definición putConstString
anterior
* la línea #define a continuación debe ser comentada.
*
* /
#define putConstString Ethernet_putConstString
/ *
* ponga la cadena apuntada por s al búfer de transmisión del controlador
Ethernet
* /
/ * unsigned int putString (char * s)
{
unsigned int ctr = 0;
mientras (* s)
{
Ethernet_putByte (* s ++);
ctr ++;
}
retorno (ctr);
} * /
/ *
* será mucho más rápido usar la rutina Ethernet_putString de la
biblioteca
* En lugar de la rutina putString anterior. Sin embargo, el código será
un poco
* un poco más grande. El usuario debe elegir entre tamaño y velocidad y
elegir la implementación que
* le encomienda mejor. Si elige ir con la definición de putString
anterior
* la línea #define a continuación debe ser comentada.
*
* /
#define putString Ethernet_putString
/ *
* Esta función es llamada por la biblioteca.
* el usuario accede a la solicitud HTTP mediante llamadas sucesivas a
Ethernet_getByte ()
* el usuario coloca datos en el búfer de transmisión mediante llamadas
sucesivas a Ethernet_putByte ()
* la función debe devolver la longitud en bytes de la respuesta HTTP, o 0
si no hay nada que transmitir
*
* Si no necesita responder a las solicitudes HTTP,
* simplemente defina esta función con un retorno (0) como una sola
declaración
*
* /
unsigned int Ethernet_UserTCP ( unsigned char * remoteHost, unsigned
int remotePort, unsigned int localPort, unsigned int reqLength,
TEthPktFlags * flags)
{
unsigned int len = 0; // mi respuesta
longitud
unsigned char i; // char de propósito
general
if (len == 0) // que
hacer por defecto
{
len = putConstString (httpHeader); //
encabezado HTTP
len + = putConstString (httpMimeTypeHTML); // con
HTML MIME type
len + = putConstString (indexPage); // página
HTML primera parte
len + = putConstString (indexPage2); //
segunda parte de la página HTML
}
/ *
* Esta función es llamada por la biblioteca.
* el usuario accede a la solicitud UDP mediante llamadas sucesivas a
Ethernet_getByte ()
* el usuario coloca datos en el búfer de transmisión mediante llamadas
sucesivas a Ethernet_putByte ()
* la función debe devolver la longitud en bytes de la respuesta UDP, o 0
si no hay nada que transmitir
*
* Si no necesita responder a las solicitudes UDP,
* simplemente defina esta función con un retorno (0) como una sola
declaración
*
* /
unsigned int Ethernet_UserUDP ( unsigned char * remoteHost, unsigned
int remotePort, unsigned int destPort, unsigned int reqLength,
TEthPktFlags * flags)
{
unsigned int len; // la duración de
mi respuesta
/ *
* Entrada principal
* /
void main ()
{
ADCON1 = 0x0B; // los convertidores ADC se utilizarán con
AN2 y AN3
CMCON = 0x07; // apagar los comparadores
PORTA = 0;
TRISA = 0xfc; // establezca PORTA como entrada para ADC
// excepto RA0 y RA1 que se utilizarán
como
// LEDA y LEDB de Ethernet
PORTB = 0;
TRISB = 0xff; // establece PORTB como entrada para los
botones
PORTD = 0;
TRISD = 0; // establece PORTD como salida
/ *
* Inicializar el controlador de Ethernet
* /
Ethernet_Init (myMacAddr, myIpAddr, Ethernet_FULLDUPLEX);
/ *
* agrega tus cosas aquí si es necesario
* Ethernet_doPacket () debe llamarse tan a menudo como
sea posible
* de lo contrario los paquetes podrían perderse
* /
}
}
Requiere Nada.
FLASH_Read_N_Bytes
Prototipo void FLASH_Read_N_Bytes ( dirección larga , char
* data_, unsigned int N);
Devoluciones Nada.
Requiere Nada.
FLASH_Write
Prototipo // para PIC16
vacío FLASH_Write ( sin signo
de dirección, unsigned int datos *);
// para PIC18
void FLASH_Write_8 ( dirección larga , datos * );
void FLASH_Write_16 ( dirección larga , datos * );
void FLASH_Write_32 ( dirección larga , datos * );
void FLASH_Write_64 ( dirección larga , datos * );
Devoluciones Nada.
FLASH_Erase
Prototipo // para PIC16
void FLASH_Erase ( dirección sin firmar );
// para PIC18
void FLASH_Erase_64 ( dirección larga );
void FLASH_Erase_1024 ( dirección larga );
Devoluciones Nada.
Requiere Nada.
FLASH_Erase_Write
Prototipo // para PIC18
void FLASH_Erase_Write_64 ( dirección larga ,
datos *);
void FLASH_Erase_Write_1024 ( dirección larga ,
char * datos);
Devoluciones Ninguna.
Requiere Nada.
Ejemplo de biblioteca
El ejemplo muestra la escritura simple en la memoria flash para PIC16F887, luego
lee los datos y los muestra en PORTB y PORTC.
Copiar código al portapapeles
char i = 0;
unsigned int addr, data_, dataAR [4] [4] = {{0x3FAA + 0, 0x3FAA + 1,
0x3FAA + 2, 0x3FAA + 3},
{0x3FAA + 4, 0x3FAA + 5, 0x3FAA
+ 6, 0x3FAA + 7},
{0x3FAA + 8, 0x3FAA + 9, 0x3FAA
+ 10, 0x3FAA + 11},
{0x3FAA + 12, 0x3FAA + 13,
0x3FAA + 14, 0x3FAA + 15}};
void main () {
ANSEL = 0; // Configurar AN pins como digitales
ANSELH = 0;
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
PORTB = 0; // Valor PORTB inicial TRISB
= 0; // Establecer PORTB como salida
PORTC = 0; // Valor PORTC inicial
TRISC = 0; // Establecer PORTC como salida
Delay_ms (500);
addr = 0x0430;
para (i = 0; i <16; i ++) {
data_ = FLASH_Read (addr ++); // El FLASH de P16 es de 14 bits
de ancho, por lo que
Delay_us (10); // dos MSB siempre serán '00'
PORTB = data_; // Mostrar datos en PORTB (LS Byte)
PORTC = data_ >> 8; // y PORTC (MS Byte)
Delay_ms (500);
}
}
Biblioteca Lcd Gráfica
El mikroC PRO para PIC proporciona una biblioteca para operar Graphic Lcd 128x64
(con el controlador Samsung KS108 / KS107 comúnmente usado).
Para crear un conjunto personalizado de imágenes Glcd use la herramienta Editor
de mapa de bits de Glcd .
Puerto de
extern sfr
charGLCD_DataPort; datos de char GLCD_DataPort at PORTD;
Glcd.
Chip de
extern sfr
sbit GLCD_CS1; selección de sbit GLCD_CS1 atRB0_bit;
1 línea.
Chip de
extern sfr
sbit GLCD_CS2; selección de sbit GLCD_CS2 atRB1_bit;
2 líneas.
Registrar
extern sfr
sbit GLCD_RS; línea de sbit GLCD_RS atRB2_bit;
selección.
Línea de
extern sfr
sbit GLCD_RW; lectura / sbit GLCD_RW atRB3_bit;
escritura.
extern sfr Habilitar sbit GLCD_EN atRB4_bit;
sbit GLCD_EN; línea.
extern sfr Restablecer sbit GLCD_RST atRB5_bit;
sbit GLCD_RST; línea.
extern sfr Dirección del
sbitGLCD_CS1_Direction at TRISB0_b
sbitGLCD_CS1_Directio Chip Select it;
n; 1 pin.
Dirección del
extern sfr
sbitGLCD_RS_Direction registro sbitGLCD_RS_Direction at TRISB2_bi
; seleccionar t;
pin.
extern sfr
sbitGLCD_RW_Direction Dirección del sbitGLCD_RW_Direction at TRISB3_bi
; pin de t;
lectura /
escritura.
extern sfr
sbitGLCD_EN_Direction Dirección del sbitGLCD_EN_Direction at TRISB4_bi
; pin Habilitar. t;
Devoluciones Nada.
Glcd_Set_Side
Prototipo void Glcd_Set_Side ( sin signo corto x_pos);
Devoluciones Nada.
Glcd_Set_X
Prototipo void Glcd_Set_X ( sin signo x_pos cortos );
Devoluciones Nada.
Glcd_Set_Page
Prototipo void Glcd_Set_Page ( página corta sin firmar );
Devoluciones Nada.
Glcd_Read_Data
Prototipo Glcd_Read_Data () corto sin firmar ;
Glcd_Write_Data
Prototipo void Glcd_Write_Data ( ddata corto sin firmar);
Devoluciones Nada.
Glcd_Set_Ext_Buffer
Prototipo void Glcd_Set_Ext_Buffer (char * (* getExtDataPtr)
( desplazamiento largo sin signo , cuenta int
sin signo , int * num sin signo ));
Devoluciones Nada.
if (start_sector == currentSector + 1) {
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
} else
if (start_sector! = currentSector) {
Mmc_Multi_Read_Stop ();
Mmc_Multi_Read_Start (start_sector);
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
}
si (cuenta> 512-pos) {
* num = 512-pos;
}
más
* num = cuenta;
Glcd_Set_Ext_Buffer (ReadExternalBuffer);
Glcd_Fill
Prototipo void Glcd_Fill ( patrón corto sin firmar );
Devoluciones Nada.
Glcd_Dot
Prototipo void Glcd_Dot ( sin signo corto x_pos, sin signo
corto y_pos, sin signo corto color);
Devoluciones Nada.
Glcd_Line
Prototipo void Glcd_Line
( int x_start, int y_start, int x_end, int y_end, co
lor corto sin signo );
Devolucion Nada.
es
Glcd_V_Line
Prototipo void Glcd_V_Line ( short y_start sin signo,
y_end short y sinsigno, x_pos cortos
sin firmar , color corto sin firmar );
Devoluciones Nada.
Glcd_H_Line
Prototipo void Glcd_H_Line ( corto sin signo x_start, corto
sin signo x_end, cortos sin signo y_pos, corto sin
signo de color);
Devoluciones Nada.
Glcd_Rectangle
Prototipo void Glcd_Rectangle ( sin signo x_upper_left, sin
signoy_upper_left, sin signo x_bottom_right, sin
signo y_bottom_right, sin color);
Devoluciones Nada.
Glcd_Rectangle_Round_Edges
Prototipo void Glcd_Rectangle_Round_Edges ( sin signo
corto x_upper_left, sin signo
corto y_upper_left, sin signo
cortox_bottom_right, sin signo
corto y_bottom_right, sin
signo round_radius corto , sin
signo color corto );
Devoluciones Nada.
Glcd_Rectangle_Round_Edges_Fill
Prototipo void Glcd_Rectangle_Round_Edges_Fill ( sin signo
corto x_upper_left, sin signo
corto y_upper_left, sin signo
cortox_bottom_right, sin signo
corto y_bottom_right, sin signo redondo
corto_radio, sin signo de color corto );
Devoluciones Nada.
Glcd_Box
Prototipo void Glcd_Box ( sin signo x_upper_left corto , sin
signoy_upper_left, sin
signo x_bottom_right corto , sin
signoy_bottom_right corto , sin
firmar color corto );
Devoluciones Nada.
Glcd_Circle
Prototipo void Glcd_Circle
( int x_center, int y_center, int radio, unsigned
short color);
Devoluciones Nada.
Glcd_Circle_Fill
Prototipo void Glcd_Circle_Fill
( int x_center, int y_center, int radio, color cor
to sin signo );
Devolucione Nada.
s
Glcd_Set_Font
Prototipo void Glcd_Set_Font ( const char *
activeFont, unsigned short aFontWidth, unsigned
short aFontHeight, unsigned int aFontOffs);
Devoluciones Nada.
Glcd_Set_Font_Adv
Prototipo void Glcd_Set_Font_Adv ( const far char *
activeFont, unsigned
charfont_color, char font_orientation);
Devoluciones Nada.
Notas Ninguna.
Glcd_Set_Ext_Font_Adv
Prototipo void Glcd_Set_Ext_Font_Adv ( sin signo
long activeFont, unsigned
int font_color, char font_orientation);
Devolucione Nada.
s
Glcd_Write_Char
Prototipo anular Glcd_Write_Char ( unsigned
short chr, cortos sin signo x_pos, corto sin
signo page_num, corto sin signo de color);
Devoluciones Nada.
Glcd_Write_Char_Adv
Prototipo void Glcd_Write_Char_Adv ( carácter
sin signo , int sin signo , sin signo y);
Devoluciones Nada.
Glcd_Write_Text
Prototipo vacío Glcd_Write_Text ( Char * texto, cortos sin
signo x_pos, corto sin signopage_num, corto sin
signo de color);
Devoluciones Nada.
Glcd_Write_Text_Adv
Prototipo void Glcd_Write_Text_Adv ( unsigned char *
text, unsigned int x, unsigned int y);
Devoluciones Nada.
Glcd_Write_Const_Text_Adv
Prototipo void Glcd_Write_Const_Text_Adv ( const far char *
ctext, unsigned int x, unsigned int y);
Devoluciones Nada.
Descripción Escribe el texto ubicado en la memoria del programa en el
glcd en las coordenadas (x, y).
Parámetros:
text: Texto a escribir.
x: Posición del texto en el eje x.
y: Posición del texto en el eje y.
Glcd_Image
Prototipo void Glcd_Image ( code const unsigned short *
image);
Devoluciones Nada.
Glcd_Ext_Image
Prototipo void Glcd_Ext_Image ( imagen larga sin firmar );
Devoluciones Nada.
Glcd_PartialImage
Prototipo void Glcd_PartialImage ( sin signo int x_left, sin
signo int y_top, sin signo int ancho, sin signo
int alto, sin signo int picture_width, sin signo
int picture_height, código const sin signo corto *
imagen);
Devoluciones Nada.
Glcd_Ext_PartialImage
Prototipo void Glcd_Ext_PartialImage ( sin signo
int x_left, sin signo inty_top, sin signo
int ancho, sin signo int alto, sin signo
intpicture_width, sin signo
int picture_height, sin signo largaimagen);
Devoluciones Nada.
Ejemplo de biblioteca
El siguiente ejemplo muestra las rutinas de la biblioteca Glcd: inicialización, borrado
(relleno de patrón), visualización de imágenes, dibujo de líneas, círculos, cuadros y
rectángulos, visualización y manejo de texto.
Copiar código al portapapeles
void main () {
unsigned short ii;
char * someText;
#define COMPLETE_EXAMPLE // comente esta línea
para simplificar /
reducir el ejemplo ANSEL = 0; //
Configurar AN pins como digitales
ANSELH = 0;
C1ON_bit = 0; // Desactivar
comparadores
C2ON_bit = 0;
mientras (1) {
#ifdef COMPLETE_EXAMPLE
Glcd_Image (truck_bmp); // dibujar imagen
delay2S (); delay2S ();
#terminara si
delay2S ();
#ifdef COMPLETE_EXAMPLE
Glcd_Fill (0xFF); // Rellena
GLCD
Conexión HW
Conexión Glcd HW
Biblioteca I²C
El módulo MSSP maestro completo I²C está disponible con varios modelos PIC
MCU. mikroC PRO para PIC proporciona una biblioteca que admite
el modo maestro I²C .
Importante:
Algunas MCU tienen múltiples módulos I²C . Para utilizar la rutina de
biblioteca I²Cdeseada , simplemente cambie el número 1en el prototipo
con el número de módulo apropiado, es decirI2C2_Init(100000);
Rutinas de la biblioteca
I2C1_Init
I2C1_Start
I2C1_Repeated_Start
I2C1_Is_Idle
I2C1_Rd
I2C1_Wr
I2C1_Stop
I2C1_Init
Prototipo void I2C1_Init ( reloj largo sin
firma constante );
Devoluciones Nada.
I2C1_Start
Prototipo corto sin firmar I2C1_Start ( void );
I2C1_Repeated_Start
Prototipo void I2C1_Repeated_Start ( void );
Devoluciones Nada.
I2C1_Is_Idle
Prototipo I2C1_Is_Idle ( void ) corto sin firmar ;
I2C1_Rd
Prototipo I2C1_Rd corto sin firmar (acuse de recibo corto
sin firmar );
I2C1_Wr
Prototipo corto sin firmar I2C1_Wr (datos cortos
sin firmar_);
I2C1_Stop
Prototipo void I2C1_Stop ( void );
Devoluciones Nada.
Ejemplo de biblioteca
Este código demuestra el uso de la biblioteca I²C . PIC MCU está conectado (SCL,
pines SDA) a 24c02 EEPROM . El programa envía datos a EEPROM (los datos se
escriben en la dirección 2). Luego, leemos los datos a través de I²C desde EEPROM
y enviamos su valor a PORTB, para verificar si el ciclo fue exitoso (ver la siguiente
figura sobre cómo conectar la interfaz 24c02 con el PIC).
Copiar código al portapapeles
void main () {
ANSEL = 0; // Configurar pines AN como E / S digital
ANSELH = 0;
PORTB = 0;
TRISB = 0; // Configurar PORTB como salida
Delay_100ms ();
Conexión HW
Conexión de 24c02 a PIC a través de I²C
Biblioteca de teclado
El mikroC PRO para PIC proporciona una biblioteca para trabajar con el teclado
4x4. Las rutinas de la biblioteca también se pueden usar con el teclado 4x1, 4x2 o
4x3. Para la explicación de las conexiones, vea el esquema al final de esta página.
Dependencias externas de la biblioteca de teclado
La siguiente
variable debe
definirse en
todos los
Descripción: Ejemplo:
proyectos
usando la
biblioteca del
teclado:
extern sfr Puerto del char keypadPort atPORTD;
charkeypadPort; teclado.
Rutinas de la biblioteca
Keypad_Init
Keypad_Key_Press
Teclado_clave_Click
Keypad_Init
Prototipo void Keypad_Init ( void );
Devoluciones Nada.
Keypad_Key_Press
Prototipo char Keypad_Key_Press ( void );
Teclado_clave_Click
Prototipo char Keypad_Key_Click ( void );
Ejemplo de biblioteca
Este es un ejemplo simple del uso de la biblioteca de teclado. Admite teclados con
1..4 filas y 1..4 columnas. El código que devuelve la función Keypad_Key_Click ()
está en el rango de 1..16. En este ejemplo, el código devuelto se transforma en
códigos ASCII [0..9, A..F] y se muestra en Lcd. Además, se muestra un pequeño
contador de un solo byte en el segundo número de filas Lcd de pulsaciones de
teclas.
Copiar código al portapapeles
void main () {
cnt = 0; // Restablecer contador
Keypad_Init (); // Inicializar Teclado
ANSEL = 0; // Configurar pines AN como E /
S digital
ANSELH = 0;
Lcd_Init (); // Inicializar LCD
Lcd_Cmd (_LCD_CLEAR); // Borrar pantalla
Lcd_Cmd (_LCD_CURSOR_OFF); // Cursor apagado
Lcd_Out (1, 1, "1");
Lcd_Out (1, 1, "Key:"); // Escribir mensaje de texto en
LCD
Lcd_Out (2, 1, "Times:");
hacer {
kp = 0; // Restablecer la clave del
código variable
Conexión HW
Esquema de conexión del teclado 4x4
Biblioteca lcd
El mikroC PRO para PIC proporciona una biblioteca para la comunicación con Lcds
(con controladores compatibles con HD44780) a través de la interfaz de 4 bits. Un
ejemplo de conexiones de Lcd se da en el esquema al final de esta página.
Para crear un conjunto de caracteres Lcd personalizados, use la Herramienta
de caracteres personalizados Lcd .
Árbol de la dependencia de la biblioteca
Dependencias externas de la biblioteca lcd.
Las siguientes
variables deben
Descripción
definirse en todos Ejemplo:
:
los proyectos usando
la Biblioteca Lcd:
Registro
extern sfr
sbit LCD_RS: Seleccionar sbit LCD_RS atRB4_bit;
línea.
Registro
extern sfr
Seleccionar sbitLCD_RS_Direction at TRISB4_bit
sbitLCD_RS_Direction
; pin de ;
dirección.
extern sfr
Habilitar pin sbitLCD_EN_Direction at TRISB5_bit
sbitLCD_EN_Direction
; de dirección. ;
extern sfr
Dato 7 pin de sbitLCD_D7_Direction at TRISB3_bit
sbitLCD_D7_Direction
; dirección. ;
extern sfr
Data 6 pin de sbitLCD_D6_Direction at TRISB2_bit
sbitLCD_D6_Direction
; dirección. ;
extern sfr
Data 5 pin de sbitLCD_D5_Direction at TRISB1_bit
sbitLCD_D5_Direction
; dirección. ;
extern sfr
sbitLCD_D4_Direction
Data 4 pin de sbitLCD_D4_Direction at TRISB0_bit
; dirección. ;
Rutinas de la biblioteca
Lcd_Init
Lcd_Out
Lcd_Out_Cp
Lcd_Chr
Lcd_Chr_Cp
Lcd_Cmd
Lcd_Init
Prototipo void Lcd_Init ();
Devoluciones Nada.
// Pin direction
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
...
Lcd_Init ();
Lcd_Out
Prototipo vacío Lcd_Out ( Char fila, carbón columna, Char *
texto);
Devoluciones Nada.
Lcd_Out_Cp
Prototipo void Lcd_Out_Cp ( char * text);
Devoluciones Nada.
Lcd_Chr
Prototipo void Lcd_Chr
( Char fila, Char columna, Char out_char);
Devoluciones Nada.
Descripción Imprime el carácter en Lcd en la posición
especificada. Tanto las variables como los literales pueden
pasarse como un personaje.
Parámetros:
row: número de fila de posición de escritura
column: número de columna de posición de
escritura
out_char: personaje para ser escrito
Lcd_Chr_Cp
Prototipo void Lcd_Chr_Cp ( char out_char);
Devoluciones Nada.
Lcd_Cmd
Prototipo void Lcd_Cmd ( char out_char);
Devoluciones Nada.
Ejemplo de biblioteca
El siguiente código demuestra el uso de las rutinas de la Biblioteca Lcd:
Copiar código al portapapeles
void main () {
ANSEL = 0; // Configurar pines AN como E / S
digital
ANSELH = 0;
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
Delay_ms (2000);
// Mover texto
para (i = 0; i <4; i ++) { // Mover texto a la derecha 4
veces
Lcd_Cmd (_LCD_SHIFT_RIGHT);
Move_Delay ();
}
Conexión Lcd HW
Biblioteca de códigos de Manchester
El mikroC PRO para PIC proporciona una biblioteca para manejar señales
codificadas de Manchester. El código de Manchester es un código en el que los
datos y las señales de reloj se combinan para formar un único flujo de datos de
sincronización automática; cada bit codificado contiene una transición en el punto
medio de un período de bit, la dirección de transición determina si el bit es 0 o 1; la
segunda mitad es el valor de bit verdadero y la primera mitad es el complemento
del valor de bit verdadero (como se muestra en la siguiente figura).
Importante:
Las rutinas de recepción de Manchester están bloqueando llamadas
( Man_Receive_Inity Man_Synchro). Esto significa que MCU esperará
hasta que se haya realizado la tarea (por ejemplo, se recibe el byte, se
logra la sincronización, etc.).
La biblioteca de códigos de Manchester implementa actividades basadas
en el tiempo, por lo que las interrupciones deben desactivarse al
usarlas.
Dependencias externas de Manchester Code Library
Las siguientes
variables deben
definirse en todos los
Descripción
proyectos utilizando Ejemplo:
:
la Biblioteca de
códigos de
Manchester:
extern sfr
sbit MANRXPIN; Recibir línea. sbit MANRXPIN atRC0_bit;
Man_Reciba
Prototipo unsigned char Man_Receive ( unsigned char *
error);
Man_Send_Init
Prototipo void Man_Send_Init ();
Devoluciones Nada.
Man_Send
Prototipo void Man_Send ( unsigned char tr_data);
Devoluciones Nada.
Man_Synchro
Prototipo unsigned char Man_Synchro ();
Requiere Para usar esta función, primero debe preparar el MCU para
recibir. Ver Man_Receive_Init .
Man_Break
Prototipo void Man_Break ();
Devoluciones Nada.
Requiere Nada.
if (INTCON.T0IF) {
if (contador> = 20) {
Man_Break ();
contador = 0; // reiniciar
contador
}
else
counter ++; // contador de
incrementos
}
}
void main () {
...
Man_Receive_Init ();
...
...
}
Ejemplo de biblioteca
El siguiente código es el código para el receptor de Manchester, muestra cómo usar
la Biblioteca de Manchester para recibir datos:
Copiar código al portapapeles
void main () {
ErrorCount = 0;
ANSEL = 0; // Configurar pines AN
como E / S digital
ANSELH = 0;
C1ON_bit = 0; // Desactivar
comparadores
C2ON_bit = 0;
TRISC.F5 = 0;
Lcd_Init (); // Inicializar LCD
Lcd_Cmd (_LCD_CLEAR); // Pantalla LCD clara
hacer
{
temp = Man_Receive (& error); // Intentar byte
recibir
si (error) { // Si ocurrió un error
Lcd_Chr_CP ('?'); // Escriba el signo de
interrogación en LCD
ErrorCount ++; // Actualizar el
contador de errores
si (ErrorCount> 20) { // En caso de errores
múltiples
temp = Man_Synchro (); // Intente sincronizar
nuevamente
// Man_Receive_Init (); // Alternativa, intente inicializar
Receiver nuevamente
ErrorCount = 0; // Restablecer contador
de errores
}
}
else { // No se produjo ningún
error
si (temp! = 0x0E) // Si se recibió el
byte "Fin" (vea el ejemplo del transmisor)
Lcd_Chr_CP (temp); // no escribir byte
recibido en LCD
}
Delay_ms (25);
}
mientras (temp! = 0x0E); // Si se recibió el
byte "Fin" salga del bucle
}
}
void main () {
Ejemplo de conexión
Parámetros Ninguna.
Devoluciones Nada.
Requiere Nada.
Malloc
Prototipo void * Malloc ( tamaño largo sin firmar );
Requiere Nada.
void main () {
pi = ( int *) malloc ( sizeof ai); // pi apuntará
a un bloque de memoria donde se asigna la matriz
}
FreeMem
Prototipo void FreeMem ( char * P, tamaño largo sin
firmar );
Devoluciones Nada.
Requiere Nada.
void main () {
pi = ( int *) malloc ( sizeof ai); // pi apuntará
a un bloque de memoria en el Heap donde se asigna la
matriz
Free (pi, sizeof (pi)); // libera el
bloque de memoria del montón asignado por Malloc,
apuntado por el puntero pi
}
Notas Ninguna.
MM_LargestFreeMemBlock
Prototipo sin firmar largo MM_LargestFreeMemBlock ();
Parámetros Ninguna.
Requiere Nada.
void main () {
bloque = MM_LargestFreeMemBlock ();
}
Notas Ninguna.
MM_TotalFreeMemSize
Prototipo largo sin firmar MM_TotalFreeMemSize ();
Parámetros Ninguna.
Requiere Nada.
void main () {
bloque = MM_TotalFreeMemSize ();
}
Notas Ninguna.
Biblioteca de tarjetas multimedia
La tarjeta multimedia (MMC) es una tarjeta de memoria flash estándar. Las tarjetas
MMC están actualmente disponibles en tamaños de hasta 32 GB, e incluyen en
teléfonos celulares, reproductores de audio digital, cámaras digitales y PDA .
mikroC PRO for PIC proporciona una biblioteca para acceder a los datos de la
tarjeta multimedia a través de la comunicación SPI . Esta biblioteca también admite
tarjetas de memoria SD (Secure Digital) y SDHC (Secure Digital High Capacity) de
alta capacidad.
Tarjeta Secure Digital
Secure Digital (SD) es un estándar de tarjeta de memoria Flash, basado en el
formato anterior de Tarjeta Multi Media (MMC).
Las tarjetas SD actualmente están disponibles en tamaños de hasta 2 GB, e
incluyen cámaras digitales, videocámaras digitales, computadoras de mano,
reproductores de medios, teléfonos móviles, receptores GPS, videojuegos y PDA .
Tarjeta Secure Digital de alta capacidad
SDHC (Secure Digital High Capacity, SD 2.0) es una extensión del estándar SD que
aumenta la capacidad de almacenamiento de la tarjeta hasta 32 GB al usar el
direccionamiento de sector en lugar del direccionamiento de bytes en el estándar
SD anterior.
Las tarjetas SDHC comparten el mismo factor de forma física y eléctrica que las
tarjetas más antiguas (SD 1.x), lo que permite que los dispositivos SDHC admitan
las tarjetas SDHC más nuevas y las tarjetas SD más antiguas. El estándar actual
limita la capacidad máxima de una tarjeta SDHC a 32 GB.
Importante:
Las rutinas para el manejo de archivos solo pueden usarse con el
sistema de archivos FAT16.
Las funciones de la biblioteca crean y leen archivos solo desde el
directorio raíz.
Las funciones de biblioteca llenan las tablas FAT1 y FAT2 al escribir en
archivos, pero los datos del archivo se leen solo desde la tabla FAT1; es
decir, no hay recuperación si la tabla FAT1 se corrompe.
Si la tarjeta MMC / SD tiene un registro de inicio maestro (MBR), la
biblioteca funcionará con la primera partición primaria (lógica)
disponible que tiene un tamaño distinto de cero. Si la tarjeta MMC / SD
tiene Volume Record Record (es decir, solo hay una partición lógica y
no MBR), la biblioteca funciona con la tarjeta completa como una sola
partición. Para obtener más información sobre MBR, unidades físicas y
lógicas, particiones primarias / secundarias y tablas de particiones,
consulte otros recursos, por ejemplo, Wikipedia y similares.
Antes de la operación de escritura, asegúrese de no sobrescribir el
sector de arranque o FAT, ya que podría hacer que su tarjeta en una PC
o cámara digital sea ilegible. Las herramientas de mapeo de unidades,
como Winhex, pueden ser de gran ayuda.
La biblioteca utiliza el módulo SPI para la comunicación. El usuario debe
inicializar el módulo SPI apropiado antes de usar la biblioteca MMC .
Para MCU con múltiples módulos SPI es posible inicializarlos todos y
luego cambiarlos usando la SPI_Set_Active()función. Ver las funciones
de la biblioteca SPI .
La biblioteca MMC FAT 16 solo funciona con la familia PIC18.
El módulo SPI debe inicializarse mediante la SPIx_Init_Advancedrutina con los
siguientes parámetros:
SPI Master
Prescaler primario 64
Datos muestreados en medio del tiempo de salida de datos
Reloj inactivo bajo
Los datos de salida en serie cambian en forma de transición de borde
bajo a borde alto
Consejo: Una vez que se inicializa la tarjeta MMC / SD, el módulo SPI se
puede reinicializar a una velocidad mayor. Ver
las rutinas Mmc_Init y Mmc_Fat_Init .
Árbol de la dependencia de la biblioteca
Chip de
extern sfr
sbitMmc_Chip_Select; selección sbit Mmc_Chip_Select atRC0_bit;
de pin.
Dirección
extern sfr
sbitMmc_Chip_Select_Dir del pin de sbitMmc_Chip_Select_Direction at T
ection; selección RISC0_bit;
de chip.
Rutinas de la biblioteca
Mmc_Init
Mmc_Read_Sector
Mmc_Write_Sector
Mmc_Read_Cid
Mmc_Read_Csd
Mmc_Multi_Read_Start
Mmc_Multi_Read_Sector
Mmc_Multi_Read_Stop
Rutinas para el manejo de archivos:
Mmc_Fat_Init
Mmc_Fat_QuickFormat
Mmc_Fat_Assign
Mmc_Fat_Reset
Mmc_Fat_Read
Mmc_Fat_Rewrite
Mmc_Fat_Append
Mmc_Fat_Delete
Mmc_Fat_Write
Mmc_Fat_Set_File_Date
Mmc_Fat_Get_File_Date
Mmc_Fat_Get_File_Date_Modified
Mmc_Fat_Get_File_Size
Mmc_Get_File_Write_Sector
Mmc_Fat_Get_Swap_File
Mmc_Fat_Tell
Mmc_Fat_Seek
Mmc_Fat_Rename
Mmc_Fat_MakeDir
Mmc_Fat_RenameDir
Mmc_Fat_RemoveDir
Mmc_Fat_ChangeDir
Mmc_Fat_Exists
Mmc_Fat_Dir
Mmc_Fat_ReadDir
Mmc_Fat_Activate
Mmc_Fat_ReadN
Mmc_Fat_Open
Mmc_Fat_Close
Mmc_Fat_EOF
Mmc_Init
Prototipo unsigned char Mmc_Init ();
Mmc_Read_Sector
Prototipo unsigned char Mmc_Read_Sector ( unsigned
long sector, char * dbuff);
Mmc_Write_Sector
Prototipo unsigned char Mmc_Write_Sector ( unsigned
long sector, char * dbuff);
Mmc_Read_Cid
Prototipo unsigned char Mmc_Read_Cid ( char * data_cid);
Mmc_Read_Csd
Prototipo unsigned char Mmc_Read_Csd ( char * data_csd);
Mmc_Multi_Read_Start
Prototipo unsigned int Mmc_Multi_Read_Start ( sector largo
sin firmar );
Notas Ninguna.
Mmc_Multi_Read_Sector
Prototipo void Mmc_Multi_Read_Sector (char * dbuff);
Devoluciones Nada.
Notas Ninguna.
Mmc_Multi_Read_Stop
Prototipo unsigned int Mmc_Multi_Read_Stop ();
Parámetros Ninguna.
Ejemplo Mmc_Multi_Read_Stop;
Notas Ninguna.
Mmc_Fat_Init
Prototipo corto sin firmar Mmc_Fat_Init ();
Mmc_Fat_QuickFormat
Prototipo unsigned char Mmc_Fat_QuickFormat ( char *
mmc_fat_label);
Nota :
Esta rutina se puede utilizar en su lugar o junto
con la rutina Mmc_Fat_Init .
Si la tarjeta MMC / SD ya contiene un sector de
inicio válido, permanecerá sin cambios
(excepto el campo de etiqueta de volumen) y
solo se borrarán las tablas FAT y
ROOT. Además, se establecerá la nueva
etiqueta de volumen.
Mmc_Fat_Assign
Prototipo corto sin firmar Mmc_Fat_Assign ( char *
filename, charfile_cre_attr);
1 0x02 Oculto
2 0x04 Sistema
4 0x10 Subdirectorio
5 0x20 Archivo
Mmc_Fat_Reset
Prototipo void Mmc_Fat_Reset ( unsigned long * size);
Devoluciones Nada.
Mmc_Fat_Read
Prototipo void Mmc_Fat_Read ( short * bdata sin signo);
Devoluciones Nada.
Mmc_Fat_Rewrite
Prototipo void Mmc_Fat_Rewrite ();
Devoluciones Nada.
Mmc_Fat_Append
Prototipo void Mmc_Fat_Append ();
Devoluciones Nada.
Mmc_Fat_Delete
Prototipo char Mmc_Fat_Delete ();
Mmc_Fat_Write
Prototipo void Mmc_Fat_Write ( char *
fdata, unsigned data_len);
Devoluciones Nada.
Mmc_Fat_Set_File_Date
Prototipo void Mmc_Fat_Set_File_Date ( unsigned
int year, unsigned shortmonth, unsigned
short day, unsigned short hours, unsigned
shortminute, unsigned short seconds);
Devoluciones Nada.
Mmc_Fat_Get_File_Date
Prototipo void Mmc_Fat_Get_File_Date ( unsigned int *
year, unsigned short * month, unsigned short *
day, unsigned short * hours, unsigned short *
mins);
Devoluciones Nada.
Mmc_Fat_Get_File_Date_Modified
Prototipo void Mmc_Fat_Get_File_Date_Modified ( unsigned
int * year, unsigned short * month, unsigned
short * day, unsigned short * hours, unsigned
short * mins);
Devoluciones Nada.
Mmc_Fat_Get_File_Size
Prototipo sin signo largo Mmc_Fat_Get_File_Size ();
Devoluciones Esta función devuelve el tamaño del archivo activo (en
bytes).
Mmc_Get_File_Write_Sector
Prototipo sin firmar largo Mmc_Get_File_Write_Sector ();
Parámetros Ninguna.
Notas Ninguna.
Mmc_Fat_Get_Swap_File
Prototipo sin firmar largo Mmc_Fat_Get_Swap_File ( sin signo
largos sectores_cnt, char * nombre de
archivo, char archivo_attr);
2 0x04 Sistema
4 0x10 Subdirectorio
5 0x20 Archivo
7 0x80 No utilizado
Mmc_Fat_Tell
Prototipo sin firmar largo Mmc_Fat_Tell ();
Parámetros Ninguna.
Notas Ninguna.
Mmc_Fat_Seek
Prototipo largo sin firmar Mmc_Fat_Seek ( posición larga sin
signo );
Mmc_Fat_Rename
Prototipo char Mmc_Fat_Rename ( char * newname);
Notas Ninguna.
Mmc_Fat_MakeDir
Prototipo char Mmc_Fat_MakeDir ( char * name, char attrib);
Notas Ninguna.
Mmc_Fat_RenameDir
Prototipo char Mmc_Fat_RenameDir ( char * oldname, char *
newname);
Notas Ninguna.
Mmc_Fat_RemoveDir
Prototipo char Mmc_Fat_RemoveDir ( char * name);
Mmc_Fat_ChangeDir
Prototipo char Mmc_Fat_ChangeDir ( char * name);
// ir al directorio principal
si (0 == Mmc_Fat_ChangeDir ("..")) {
...
}
// ir al directorio raíz
si (0 == Mmc_Fat_ChangeDir ("\")) {
...
}
Mmc_Fat_Exists
Prototipo char Mmc_Fat_Exists ( char * name);
si no (0 == estado) {...} // o si no se
encontró el archivo ...
Notas Ninguna.
Mmc_Fat_Dir
Prototipo char Mmc_Fat_Dir ( void (* print) ( char ch))
...
Mmc_Fat_Dir (PrintChar);
Notas Ninguna.
Mmc_Fat_ReadDir
Prototipo estático corto Mmc_Fat_ReadDir (DIR * d);
typedef struct
{
nombre de personaje sin firmar [13]; //
nombre del directorio
unsigned char attrib; //
atributo del directorio
unsigned char ctime [6]; //
crea hora y fecha
unsigned char mtime [6]; //
modificación de hora y fecha
sin firmar de largo tamaño; //
directorio de tamaño
sin firmar int primero; //
directorio start cluster
unsigned long sect; //
entrada de directorio sector
unsigned int entrada; //
Número de entrada en el sector de entrada.
} DIR;
Notas Ninguna.
Mmc_Fat_Activate
Prototipo char Mmc_Fat_Activate ( short fileHandle);
if (Mmc_Fat_Activate (fhandle)) == 0) {
Mmc_Fat_ReadN
Prototipo unsigned int Mmc_Fat_ReadN ( char *
fdata, unsigned int n);
Notas Ninguna.
Mmc_Fat_Open
Prototipo short Mmc_Fat_Open ( unsigned char *
name, unsigned short mode, char attrib);
1 0x02 Oculto
2 0x04 Sistema
4 0x10 Subdirectorio
5 0x20 Archivo
Notas Ninguna.
Mmc_Fat_Close
Prototipo char Mmc_Fat_Close ();
Parámetros Ninguna.
Ejemplo if (Mmc_Fat_Close () == 0) {
Notas Ninguna.
Mmc_Fat_EOF
Prototipo corto Mmc_Fat_EOF ();
Parámetros Ninguna.
Ejemplo if (Mmc_Fat_EOF () == 0) {
}
Notas Ninguna.
Ejemplo de biblioteca
El siguiente ejemplo muestra la prueba de la biblioteca MMC. Al destellar, inserte
una tarjeta MMC / SD en el módulo, cuando debería recibir el mensaje "Iniciar-
Aceptar". Luego, puede experimentar con las funciones de lectura y escritura de
MMC y observar los resultados a través de la Terminal de Usart.
Copiar código al portapapeles
si (tamaño) {
LongToStr (( firmado largo ) tamaño, err_txt);
UART1_Write_Line (err_txt);
}
else {
UART1_Write_Line (err_txt); // Nota: Mmc_Fat_Init intenta inicializar
una tarjeta más de una vez.
// Si la tarjeta no está presente, la
inicialización puede durar más (dependiendo de la velocidad del reloj)
}
Conexión HW
Interfaz MMC
Biblioteca OneWire
La biblioteca OneWire proporciona rutinas para la comunicación a través del
protocolo Dallas OneWire, por ejemplo, con el termómetro digital
DS18x20. OneWire es un protocolo maestro / esclavo, y todo el cableado de
comunicación requerido es un solo cable. Los dispositivos habilitados para OneWire
deben tener controladores de colector abiertos (con resistencia de extracción única)
en la línea de datos compartida.
Los dispositivos esclavos en el bus OneWire pueden incluso obtener su fuente de
alimentación de la línea de datos. Para un esquema detallado vea la hoja de datos
del dispositivo.
Algunas características básicas de este protocolo son:
sistema maestro único,
bajo costo,
bajas tasas de transferencia (hasta 16 kbps),
distancias bastante largas (hasta 300 metros),
pequeños paquetes de transferencia de datos.
Cada dispositivo OneWire también tiene un número de registro único de 64 bits
(tipo de dispositivo de 8 bits, número de serie de 48 bits y CRC de 8 bits), por lo
que pueden coexistir múltiples esclavos en el mismo bus.
Importante:
Frecuencia del oscilador Fosc debe ser de al menos 4 MHz para poder
utilizar las rutinas con termómetros digitales de Dallas.
Esta biblioteca implementa actividades basadas en el tiempo, por lo que
las interrupciones deben deshabilitarse cuando se utiliza la biblioteca
OneWire.
Rutinas de la biblioteca
Ow_Reset
Ow_Read
Ow_Write
Ow_Reset
Prototipo Ow_Reset corto sin firmar ( puerto short * sin
firmar , pin corto sin firmar );
Ow_Read
Prototipo Ow_Read corto sin firmar ( puerto short * sin
firmar , pin corto sin firmar );
Ow_Write
Prototipo void Ow_Write ( puerto corto * sin signo ,
pin corto sin signo , par corto sin signo );
Devoluciones Nada.
Ejemplo de biblioteca
Este ejemplo lee la temperatura usando DS18x20 conectado al pin
PORTE.B2. Después del reinicio, la MCU obtiene la temperatura del sensor y la
imprime en el Lcd. Asegúrese de levantar la línea PORTE.B2 y de apagar los LEDs
PORTE.
Copiar código al portapapeles
// Extraer temp_whole
temp_whole = temp2write >> RES_SHIFT;
// Convertir temp_fraction en
texto de caracteres [4] = temp_fraction / 1000 + 48; // Extraer
texto de miles de dígitos [5] = (temp_fraction / 100)% 10 + 48;
// Extraer
texto de cientos de dígitos [6] = (temp_fraction / 10)% 10 + 48;
// Extrae el
texto de decenas de dígitos [7] = temp_fraction% 10 + 48; //
Extraer los dígitos
void main () {
ANSEL = 0; // Configurar pines AN
como E / S digital
ANSELH = 0;
C1ON_bit = 0; // Desactivar
comparadores
C2ON_bit = 0;
// ---
Circuito principal do {
// --- Realizar la lectura de temperatura Ow_Reset (& PORTE, 2);
// señal de reinicio de
Onewire Ow_Write (& PORTE, 2, 0xCC); // Ejecute el
comando SKIP_ROM
Ow_Write (& PORTE, 2, 0x44); // comando de comando
CONVERT_T
Delay_us (120);
Delay_ms (500);
} while (1);
}
Conexión HW
Ejemplo de conexión DS1820
Pin Select Peripheral Library
La biblioteca de selección de pin periférico permite la reasignación de periféricos en
los siguientes MCU: 18F2xJ11, 18F4xJ11, 18F2xJ50 y 18F4xJ50.
Una diferencia clave entre los periféricos de selección de pin y los que no lo son es
que los periféricos de selección de pin no están asociados con un pin de E / S
predeterminado.
El periférico siempre debe asignarse a un pin de E / S específico antes de poder
utilizarlo. En contraste, los periféricos no seleccionables por pin siempre están
disponibles en un pin predeterminado, asumiendo que el periférico está activo y no
está en conflicto con otro periférico.
Rutinas de la biblioteca
Desbloquear_IOLOCK
Lock_IOLOCK
PPS_Mapping
PPS_Mapping_NoLock
Desbloquear_IOLOCK
Prototipo void Unlock_IOLOCK ();
Devoluciones Nada.
Requiere Nada.
Lock_IOLOCK
Prototipo void Lock_IOLOCK ();
Devoluciones Nada.
Requiere Nada.
PPS_Mapping
Prototipo char PPS_Mapping
( char rp_num, char input_output, char funct_name)
;
Requiere Nada.
PPS_Mapping_NoLock
Prototipo char PPS_Mapping_NoLock
( char rp_num, char input_output, char funct_name)
;
Parámetros
Requiere Nada.
Ejemplo Desbloquear_IOLOCK ()
PPS_Mapping_NoLock (15, _INPUT, _RX2_DT2); //
Establece el pin 15 como entrada, y asigna la entrada
RX2 / DT2 a
PPS_Mapping_NoLock (5, _OUTPUT, _TX2_CK2); //
Establece el pin 5 como salida, y le asigna a EUSART2
Transmisión asíncrona / Salida de reloj síncrona
Lock_IOLOCK ()
Parámetros disponibles
Nombre de la función Descripción
(entrada)
_NULO La función NULL se asigna a todas las salidas RPn en el reinicio del
dispositivo y desactiva la función de salida RPn.
Nombre de la función Descripción
(entrada)
Importante:
La biblioteca utiliza el módulo SPI para la comunicación. El usuario debe
inicializar el módulo SPI apropiado antes de usar la biblioteca de Port
Expander.
La biblioteca no utiliza las interrupciones de Port Expander.
Árbol de la dependencia de la biblioteca
Chip de
extern sfr
sbitSPExpanderCS; selección sbit SPExpanderCS atRC1_bit;
de línea.
Dirección
extern sfr
sbitSPExpanderCS_Direct del pin sbitSPExpanderCS_Direction at TRIS
ion; Chip C1_bit;
Select.
Rutinas de la biblioteca
Expander_Init
Expander_Init_Advanced
Expander_Read_Byte
Expander_Write_Byte
Expander_Read_PortA
Expander_Read_PortB
Expander_Read_PortAB
Expander_Write_PortA
Expander_Write_PortB
Expander_Write_PortAB
Expander_Set_DirectionPortA
Expander_Set_DirectionPortB
Expander_Set_DirectionPortAB
Expander_Set_PullUpsPortA
Expander_Set_PullUpsPortB
Expander_Set_PullUpsPortAB
Expander_Init
Prototipo void Expander_Init ( char ModuleAddress);
Devoluciones Nada.
...
Expander_Init_Advanced
Prototipo void Expander_Init_Advanced ( char *
rstPort, char rstPin, char haen);
Devoluciones Nada.
...
Expander_Read_Byte
Prototipo char Expander_Read_Byte
( char ModuleAddress, char RegAddress);
Devoluciones Nada.
Expander_Read_PortA
Prototipo char Expander_Read_PortA ( char ModuleAddress);
Expander_Read_PortB
Prototipo char Expander_Read_PortB ( char ModuleAddress);
Expander_Read_PortAB
Prototip unsigned int Expander_Read_PortAB
o ( char ModuleAddress);
Expander_Write_PortA
Prototipo void Expander_Write_PortA
( char ModuleAddress, char Data_);
Devolucio Nada.
nes
Descripció La función escribe byte en el puerto A del expansor de
n puertos.
Parámetros:
ModuleAddress: Dirección de hardware de Port
Expander, vea el esquema al final de esta página
Data_: datos a escribir
...
Expander_Set_DirectionPortA (0,0x00); //
configura el porta del expansor para que salga
...
Expander_Write_PortA (0, 0xAA);
Expander_Write_PortB
Prototipo void Expander_Write_PortB
( char ModuleAddress, char Data_);
Devolucio Nada.
nes
...
Expander_Set_DirectionPortB (0,0x00); //
establece el portb del expansor como salida
...
Expander_Write_PortB (0, 0x55);
Expander_Write_PortAB
Prototip void Expander_Write_PortAB
o ( char ModuleAddress, unsigned int Data_);
Devoluc Nada.
iones
...
Expander_Set_DirectionPortAB (0,0x0000); //
configura el porta y el portb del expansor para que
salgan
...
Expander_Write_PortAB (0, 0xAA55);
Expander_Set_DirectionPortA
Prototipo void Expander_Set_DirectionPortA
( char ModuleAddress, charData_);
Devoluciones Nada.
Expander_Set_DirectionPortB
Prototipo void Expander_Set_DirectionPortB
( char ModuleAddress, charData_);
Devoluciones Nada.
Expander_Set_DirectionPortAB
Prototipo void Expander_Set_DirectionPortAB
( char ModuleAddress, unsigned intDirection);
Devoluciones Nada.
Devoluciones Nada.
Expander_Set_PullUpsPortB
Prototipo void Expander_Set_PullUpsPortB
( char ModuleAddress, char Data_);
Devoluciones Nada.
Expander_Set_PullUpsPortAB
Prototipo void Expander_Set_PullUpsPortAB
( char ModuleAddress, unsigned intPullUps);
Devoluciones Nada.
Ejemplo de biblioteca
El ejemplo muestra cómo comunicarse con Port Expander MCP23S17.
Tenga en cuenta que los pines A2 A1 A0 del expansor de puertos están conectados
a GND, por lo que la dirección del hardware del expansor de puertos es 0.
Copiar código al portapapeles
void main () {
ANSEL = 0; // Configurar pines AN como E / S
digital
ANSELH = 0;
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
Conexión HW
Biblioteca PS / 2
El mikroC PRO para PIC proporciona una biblioteca para la comunicación con el
teclado PS / 2 común.
Importante:
La biblioteca no utiliza interrupciones para la recuperación de datos, y
requiere que el reloj del oscilador sea al menos de 6MHz.
Los pines a los que está conectado un teclado PS / 2 deben estar
conectados a las resistencias de pull-up.
Aunque PS / 2 es un bus de comunicación de dos vías, esta biblioteca
no proporciona comunicación de MCU a teclado; Por ejemplo, al
presionar la Caps Lock tecla no se encenderá el LED de Bloqueo de
mayúsculas.
Dependencias externas de la biblioteca PS / 2
Las siguientes
variables deben
Descripció
definirse en todos los Ejemplo:
n:
proyectos usando la
Biblioteca PS / 2:
Línea de
extern sfr
sbit PS2_Data; datos PS / sbit PS2_Data atRC0_bit;
2.
Dirección
extern sfr
del pin de sbitPS2_Data_Direction at TRISC0_b
sbitPS2_Data_Direction
; datos PS / it;
2.
Rutinas de la biblioteca
Ps2_Config
Ps2_Key_Read
Ps2_Config
Prototipo void Ps2_Config ();
Devoluciones Nada.
Ps2_Key_Read
Prototipo Ps2_Key_Read corto sin firmar ( valor short * sin
firmar , short * sin firmar * special, short * sin
firmar pulsado);
F1 1
F2 2
F3 3
F4 4
F5 5
F6 6
F7 7
F8 8
F9 9
F10 10
F11 11
F12 12
Entrar 13
Página arriba 14
Página abajo 15
Retroceso dieciséis
Insertar 17
Borrar 18
Windows 19
Ctrl 20
Cambio 21
Alt 22
Imprimir pantalla 23
Llave Valor
devuelto
Pausa 24
Bloq Mayús 25
Fin 26
Casa 27
Bloqueo de desplazamiento 28
Num lock 29
Flecha izquierda 30
Flecha correcta 31
Flecha arriba 32
Escapar 34
Lengüeta 35
Ejemplo de biblioteca
Este sencillo ejemplo lee los valores de las teclas presionadas en el teclado PS / 2 y
las envía a través de UART .
Copiar código al portapapeles
void main () {
do {
if (Ps2_Key_Read (& keydata, & special, & down)) {
if (down && (keydata == 16)) { // Retroceso
UART1_Write (0x08);
}
else if (down && (keydata == 13)) { // Ingrese
UART1_Write ('r'); // enviar retorno de
carro a usart terminal
// Usart_Write ('n'); // elimine el comentario de esta línea si
usart terminal también espera un salto de línea
// para la nueva
transición de línea
}
else if (abajo &&! special && keydata) {
UART1_Write (keydata);
}
}
Delay_ms (1); // debounce
} while (1);
}
Conexión HW
Importante:
Algunas MCU tienen múltiples módulos CCP . Para utilizar la rutina de
biblioteca CCPdeseada , simplemente cambie el número 1en el prototipo
con el número de módulo apropiado, es decir PWM2_Start();.
Todos los módulos PWM utilizan Timer2 para su funcionamiento, por lo
que no puede configurar diferentes frecuencias para
diferentes módulos PWM .
Rutinas de la biblioteca
PWM1_Init
PWM1_Set_Duty
PWM1_Start
PWM1_Stop
PWM1_Init
Prototipo void PWM1_Init ( const long freq);
Devoluciones Nada.
PWM1_Set_Duty
Prototipo void PWM1_Set_Duty ( unsutyed short duty_ratio);
Devoluciones Nada.
PWM1_Start
Prototipo void PWM1_Start ( void );
Devoluciones Nada.
PWM1_Stop
Prototipo void PWM1_Stop ( void );
Devoluciones Nada.
Ejemplo de biblioteca
El ejemplo cambia la relación de trabajo PWM en los pines RC1 y RC2
continuamente. Si el LED está conectado a estos pines, puede observar el cambio
gradual de la luz emitida.
Copiar código al portapapeles
void InitMain () {
ANSEL = 0; // Configurar AN pins como digitales
ANSELH = 0;
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
PORTA = 255;
TRISA = 255; // configura los pines PORTA como
entrada
PORTB = 0; // establece PORTB en 0
TRISB = 0; // designar pines PORTB como salida
PORTC = 0; // establece PORTC en 0
TRISC = 0; // designar los pines PORTC como
salida
PWM1_Init (5000); // Inicializar el módulo PWM1 a
5KHz
PWM2_Init (5000); // Inicializar el módulo PWM2 a
5KHz
}
void main () {
InitMain ();
current_duty = 16; // valor inicial para current_duty
current_duty1 = 16; // valor inicial para current_duty1
Conexión HW
Demostración de PWM
Biblioteca RS-485
RS-485 es una comunicación multipunto que permite conectar múltiples
dispositivos a un solo bus. El mikroC PRO para PIC proporciona un conjunto de
rutinas de biblioteca para un trabajo cómodo con el sistema RS485 utilizando la
arquitectura Maestro / Esclavo. Los dispositivos maestro y esclavo intercambian
paquetes de información. Cada uno de estos paquetes contiene bytes de
sincronización, byte CRC, byte de dirección y los datos. Cada esclavo tiene una
dirección única y recibe solo los paquetes dirigidos a ella. El esclavo nunca puede
iniciar la comunicación.
Es responsabilidad del usuario asegurarse de que solo un dispositivo transmita a
través del bus 485 a la vez.
Las rutinas RS-485 requieren el módulo UART . Los pines de UART deben estar
conectados a un transceptor de interfaz RS-485, como LTC485 o similar (vea el
esquema en la parte inferior de esta página).
Constantes de la biblioteca:
START valor de byte = 150
DETENER el valor del byte = 169
Dirección 50es la dirección de transmisión para todos los esclavos (los
paquetes que contienen la dirección 50serán recibidos por todos los
esclavos, excepto los esclavos con direcciones 150y 169).
Importante:
La biblioteca utiliza el módulo UART para la comunicación. El usuario
debe inicializar el módulo UART apropiado antes de usar la biblioteca
RS-485.
Para MCU con múltiples módulos UART es posible inicializarlos y luego
cambiarlos usando la rutina UART_Set_Active .
Árbol de la dependencia de la biblioteca
Controle el
modo de
operación
extern sfr de sbit RS485_rxtx_pin atRC2_bit;
sbitRS485_rxtx_pin; transmisió
n/
recepción
RS-485
Dirección
del pin de
extern sfr
sbitRS485_rxtx_pin_dire transmisió sbitRS485_rxtx_pin_direction at TR
ction; n/ ISC2_bit;
recepción
RS-485
Rutinas de la biblioteca
RS485Master_Init
RS485Master_Receive
RS485Master_Send
RS485Slave_Init
RS485Slave_Receive
RS485Slave_Send
RS485Master_Init
Prototipo void RS485Master_Init ();
Devoluciones Nada.
// Pin direction
sbit RS485_rxtx_pin_direction en TRISC2_bit; //
RxTx pin dirección establecida como salida
...
UART1_Init (9600); //
inicializar el módulo
UART1 RS485Master_Init ();
// intialize MCU como maestro para la comunicación
RS-485
RS485Master_Receive
Prototipo void RS485Master_Receive ( char * data_buffer);
Devoluciones Nada.
RS485Master_Send
Prototipo void RS485Master_Send ( char *
data_buffer, char datalen, charSlave_address);
Devoluciones Nada.
RS485Slave_Init
Prototipo void RS485Slave_Init ( char Slave_address);
Devoluciones Nada.
// Pin direction
sbit RS485_rxtx_pin_direction en TRISC2_bit; //
RxTx pin dirección establecida como salida
...
UART1_Init (9600); // inicializar
el módulo
UART1 RS485Slave_Init (160); //
intialize MCU como esclavo para la comunicación RS-
485 con la dirección 160
RS485Slave_Receive
Prototipo void RS485Slave_Receive ( char * data_buffer);
Devoluciones Nada.
RS485Slave_Send
Prototipo void RS485Slave_Send ( char *
data_buffer, char datalen);
Devoluciones Nada.
// Interrumpir la rutina
void interrupt () {
RS485Master_Receive (dat);
}
void main () {
long cnt = 0;
PORTB = 0;
PORTD = 0;
TRISB = 0;
TRISD = 0;
while (1) {
// al recibir un mensaje válido
completado
// los datos [4] están configurados
en 255
cnt ++;
if (dat [5]) { // si se detecta un error,
señalícelo PORTD = 0xAA; // estableciendo portd
en 0xAA
}
if (dat [4]) { // si el mensaje se recibió
correctamente
cnt = 0;
dat [4] = 0; // Borrar mensaje recibido
j = dat [3];
para (i = 1; i <= dat [3]; i ++) { // mostrar datos en PORTB
PORTB = dat [i-1];
} // incremento recibido dat [0]
dat [0] = dat [0] +1; // enviar de vuelta al maestro
Delay_ms (1);
RS485Master_Send (dat, 1,160);
}
if (cnt> 100000) {
PORTD ++;
cnt = 0;
RS485Master_Send (dat, 1,160);
if (PORTD> 10) // si el envío falló 10 veces
RS485Master_Send (dat, 1,50); // enviar mensaje en la dirección
de transmisión
}
}
// Interrumpir la rutina
void interrupt () {
RS485Slave_Receive (dat);
}
void main () {
ANSEL = 0; // Configurar pines AN como E / S
digital
ANSELH = 0;
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
PORTB = 0;
PORTD = 0;
TRISB = 0;
TRISD = 0;
while (1) {
if (dat [5]) { // si se detecta un error,
señalícelo con PORTD = 0xAA; // estableciendo portd
en 0xAA
dat [5] = 0;
}
if (dat [4]) { // al completarse un mensaje
válido, recibir
dat [4] = 0; // data [4] se establece en 0xFF
j = dat [3];
para (i = 1; i <= dat [3]; i ++) {
PORTB = dat [i-1];
}
dat [0] = dat [0] +1; // incremento recibido dat [0]
Delay_ms (1);
RS485Slave_Send (dat, 1); // y enviarlo de vuelta al maestro
}
}
}
Conexión HW
Ejemplo de interfaz MCU PIC16F887 a MCU PIC16F887 a través del bus RS485 con el LTC485
como transceptor RS-485
Formato de mensaje y cálculos CRC
P: ¿Cómo se calcula la suma de comprobación CRC en el lado maestro RS485?
Copiar código al portapapeles
PAQUETE:
--------
START_BYTE 0x96
DIRECCIÓN
DATALEN
[DATA1] // si existe
[DATA2] // si existe
[DATA3] // si existe
CRC
STOP_BYTE 0xA9
DATALEN BITS
------------
bit7 = 1 MASTER SENDS
0 ESCLAVO ENVÍA
bit6 = 1 LA DIRECCIÓN FUE XOREDADA con 1, ES IGUAL A START_BYTE o
STOP_BYTE
0 DIRECCION SIN CAMBIO
bit5 = 0 FIJO
bit4 = 1 DATA3 (si existe) fue XORED con 1, fue igual a START_BYTE o
STOP_BYTE
0 DATA3 (si existe) NO CAMBIADO
bit3 = 1 DATA2 (si existe) fue XORED con 1, fue igual a START_BYTE o
STOP_BYTE
0 DATA2 (si existe) NO CAMBIADO
bit2 = 1 DATA1 (si existe) fue XORED con 1, fue igual a START_BYTE o
STOP_BYTE
0 DATOS1 (si existe) NO CAMBIADO
bit1bit0 = 0 a 3 NÚMERO DE DATOS BYTES ENVIADOS
Generación de CRC:
----------------
crc_send = datalen ^ address;
crc_send ^ = datos [0]; // si existe
crc_send ^ = data [1]; // si existe
crc_send ^ = data [2]; // si existe
crc_send = ~ crc_send;
if ((crc_send == START_BYTE) || (crc_send == STOP_BYTE))
crc_send ++;
Biblioteca UART
El módulo de hardware UART está disponible con una serie de MCU compatibles con
PIC. La biblioteca mikroC PRO for PIC UART proporciona un trabajo cómodo con el
modo asíncrono (dúplex completo).
Puede comunicarse fácilmente con otros dispositivos a través del protocolo RS-232
(por ejemplo, con una PC, consulte la figura al final del tema - Conexión RS-232
HW). Necesita un PIC MCU con UART integrado por hardware, por ejemplo
16F887. Luego, simplemente use las funciones enumeradas a continuación.
Importante:
Devoluciones Nada.
UARTx_Tx_Idle
Prototipo char UARTx_Tx_Idle ();
UARTx_Read
Prototipo char UARTx_Read ();
UARTx_Read_Text
Prototipo void UARTx_Read_Text ( char * Salida, char *
Delimitador, char Intentos);
Devoluciones Nada.
while (1) {
if (UART1_Data_Ready () == 1) {// si se reciben
datos
UART1_Read_Text (salida, "OK", 10); // lee el
texto hasta que se encuentra 'OK'
UART1_Write_Text (salida); // devuelve el texto
}
}
UARTx_Write
Prototipo void UARTx_Write ( char data_);
Devoluciones Nada.
UARTx_Write_Text
Prototipo void UARTx_Write_Text ( char * UART_text);
Devoluciones Nada.
while (1) {
if (UART1_Data_Ready () == 1) {// si se reciben
datos
UART1_Read_Text (salida, "OK", 10); // lee el
texto hasta que se encuentra 'OK'
UART1_Write_Text (salida); // devuelve el texto
}
}
UART_Set_Active
Prototipo void UART_Set_Active ( char (* read_ptr)
(), void (* write_ptr) ( unsigned
char data_), char (* ready_ptr) (), char (*
tx_idle_ptr) ())
Devoluciones Nada.
Descripción Establece el módulo UART activo que será utilizado por
las rutinas de la biblioteca UART .
Parámetros:
read_ptr: UARTx_Read handler
write_ptr: UARTx_Write manejador
ready_ptr: UARTx_Data_Ready handler
tx_idle_ptr: UARTx_Tx_Idle handler
UART_Data_Listo
Prototipo char UART_Data_Ready ();
Importante:
Línea de
extern
sbitSoft_I2C_Scl; reloj suave sbit Soft_I2C_Scl atRC3_bit;
I²C.
Línea de
extern
sbitSoft_I2C_Sda; datos de sbit Soft_I2C_Sda atRC4_bit;
I²C suave.
extern Dirección
sbitSoft_I2C_Scl_Direction at TRIS
sbitSoft_I2C_Scl_Direc del reloj C3_bit;
tion; Soft I²C.
Dirección
extern
sbitSoft_I2C_Sda_Direc
del pin de sbitSoft_I2C_Sda_Direction at TRIS
tion; datos Soft C4_bit;
I²C.
Rutinas de la biblioteca
Soft_I2C_Init
Soft_I2C_Start
Soft_I2C_Leer
Soft_I2C_Write
Soft_I2C_Stop
Soft_I2C_Break
Soft_I2C_Init
Prototipo void Soft_I2C_Init ();
Devoluciones Nada.
...
Soft_I2C_Init ();
Soft_I2C_Start
Prototipo void Soft_I2C_Start ( void );
Devoluciones Nada.
Soft_I2C_Leer
Prototipo breve sin firmar Soft_I2C_Read ( unsigned
int ack);
Requiere Soft I²C debe configurarse antes de usar esta función. Ver
la rutina Soft_I2C_Init .
Además, la señal de INICIO debe emitirse para poder
utilizar esta función. Ver la rutina Soft_I2C_Start .
Soft_I2C_Write
Prototipo Soft_I2C_Write corto sin firmar (datos cortos
sin firmar);
Requiere Soft I²C debe configurarse antes de usar esta función. Ver
la rutina Soft_I2C_Init .
Además, la señal de INICIO debe emitirse para poder
utilizar esta función. Ver la rutina Soft_I2C_Start .
Soft_I2C_Stop
Prototipo void Soft_I2C_Stop ( void );
Devoluciones Nada.
Requiere Soft I²C debe configurarse antes de usar esta función. Ver
la rutina Soft_I2C_Init .
Soft_I2C_Break
Prototipo void Soft_I2C_Break ( void );
Devoluciones Nada.
Requiere Nada.
Ejemplo
// Conexiones de software I2C
sbit Soft_I2C_Scl en RC0_bit;
sbit Soft_I2C_Sda en RC1_bit;
sbit Soft_I2C_Scl_Direction en TRISC0_bit;
sbit Soft_I2C_Sda_Direction at TRISC1_bit;
// Terminar las conexiones I2C del software
contador de char = 0;
if (INTCON.T0IF) {
if (contador> = 20) {
Soft_I2C_Break ();
contador = 0; // reiniciar
contador
}
else
counter ++; // contador de
incrementos
}
}
void main () {
...
...
}
Ejemplo de biblioteca
El ejemplo demuestra el uso de las rutinas de la biblioteca I²C del software . El
PIC MCU está conectado (pines SCL, SDA) al PCF8583 RTC (reloj en tiempo
real). La fecha y la hora del programa se leen desde el RTC y se imprimen en Lcd.
Copiar código al portapapeles
char segundos, minutos, horas, día, mes, año; // Variables de fecha / hora
globales
TRISB = 0;
PORTB = 0xFF;
TRISB = 0xff;
ANSEL = 0; // Configurar pines AN como E / S digital
ANSELH = 0;
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
Línea de
extern sfr
sbitSoftSpi_SDO; salida de sbit SoftSpi_SDO atRC5_bit;
datos.
extern sfr
sbitSoftSpi_SDI_Direction at TRISC
sbitSoftSpi_SDI_Direct Dirección
4_bit;
ion; de los
datos en el
pin.
Rutinas de la biblioteca
Soft_SPI_Init
Soft_SPI_Leer
Soft_SPI_Write
Soft_SPI_Init
Prototipo void Soft_SPI_Init ();
Devoluciones Nada.
Soft_SPI_Leer
Prototipo sin signo Soft_SPI_Read ( char sdata);
Soft_SPI_Write
Prototipo void Soft_SPI_Write ( char sdata);
Devoluciones Nada.
Descripción Esta rutina envía un byte a través del bus Software SPI .
Parámetros:
sdata: Datos a enviar.
Ejemplo de biblioteca
Este código demuestra el uso de rutinas de biblioteca para la comunicación
Soft_SPI. Además, este ejemplo demuestra cómo trabajar con el convertidor D / A
de 12 bits MCP4921 de Microchip.
Copiar código al portapapeles
void InitMain () {
TRISA0_bit = 1; // Establecer el pin RA0 como
entrada
TRISA1_bit = 1; // Establecer el pin RA1 como
entrada
Chip_Select = 1; // Deselecciona DAC
Chip_Select_Direction = 0; // Establecer el pin CS # como
salida
Soft_SPI_Init (); // Inicializar Soft_SPI
}
void main () {
Rutinas de la biblioteca
Soft_UART_Init
Soft_UART_Leer
Soft_UART_escribir
Soft_UART_Break
Soft_UART_Init
Prototipo char Soft_UART_Init ( char *
port, char rx_pin, char tx_pin, long
firmadabaud_rate, char invertida);
Requiere Nada.
Soft_UART_Leer
Prototipo char Soft_UART_Read ( char * error);
Soft_UART_escribir
Prototipo void Soft_UART_Write ( char udata);
Devoluciones Nada.
Descripción Esta rutina envía un byte a través del bus
de software UART .
Parámetros:
udata: Datos a enviar.
Soft_UART_Break
Prototipo void Soft_UART_Break ();
Devoluciones Nada.
Requiere Nada.
if (INTCON.T0IF) {
if (contador> = 20) {
Soft_UART_Break ();
contador = 0; // reiniciar
contador
}
else
counter ++; // contador de
incrementos
}
}
void main () {
OPTION_REG = 0x04; // preescalador TMR0
ajustado a 1:32
...
...
Ejemplo de biblioteca
Este ejemplo demuestra el intercambio de datos simple a través del
software UART . Si MCU está conectada a la PC, puede probar el ejemplo desde
la herramienta de terminal mikroC PRO for PIC USART .
Copiar código al portapapeles
void main () {
Biblioteca de sonidos
El mikroC PRO para PIC proporciona una biblioteca de sonidos para proporcionar a
los usuarios las rutinas necesarias para la señalización de sonido en sus
aplicaciones. La generación de sonido necesita hardware adicional, como un altavoz
piezoeléctrico (el ejemplo de la interfaz de un altavoz piezoeléctrico se encuentra
en el esquema al final de esta página).
Rutinas de la biblioteca
Sound_Init
Sonido_jugar
Sound_Init
Prototipo void Sound_Init ( char * snd_port, char snd_pin);
Devoluciones Nada.
Requiere Nada.
Sonido_jugar
Prototipo void Sound_Play
( unsigned freq_in_hz, unsigned duration_ms);
Devoluciones Nada.
Ejemplo de biblioteca
El ejemplo es una simple demostración de cómo usar la biblioteca de sonidos para
reproducir tonos en un altavoz piezoeléctrico.
Copiar código al portapapeles
void Tone1 () {
Juego de sonido (659, 250); // Frecuencia = 659Hz, duración = 250ms
}
void Tone2 () {
Juego de sonido (698, 250); // Frecuencia = 698Hz, duración = 250ms
}
void Tone3 () {
Sound_Play (784, 250); // Frecuencia = 784Hz, duración = 250ms
}
void ToneA () {
Juego de sonido (880, 50);
}
void ToneC () {
Juego de sonido (1046, 50);
}
tono vacío () {
Juego de sonido (1318, 50);
}
void Melody2 () {
sin signo i corto ;
para (i = 9; i> 0; i--) {
ToneA (); ToneC (); ToneE ();
}
}
void main () {
while (1) {
if (Button (& PORTB, 7,1,1)) // RB7 reproduce Tone1
Tone1 ();
while (RB7_bit); // Espera a que se suelte el botón
Conexión HW
Ejemplo de conexión a la biblioteca de sonidos
Biblioteca SPI
El mikroC PRO para PIC proporciona una biblioteca para que se sienta cómodo con
el trabajo SPI en modo Maestro. El PIC MCU puede comunicarse fácilmente con
otros dispositivos a través de SPI : convertidores A / D, convertidores D / A,
MAX7219, LTC1290, etc.
Importante:
Devoluciones Nada.
SPIx_Init_Advanced
Prototipo anular SPIx_Init_Advanced ( unsigned
short master_slav, corto sin
signo data_sample, corto sin
signo clock_idle, unsigned short transmit_edge);
Devolucio Nada.
nes
Descripció Configura e
n inicializa SPI . SPIx_Init o SPIx_Init_Advanced debe llamarse
antes de usar otras funciones de la biblioteca SPI .
Parámetros mode, data_sampley clock_idleconfigure el
módulo SPI, y puede tener los siguientes valores:
Descripción Biblioteca predefinida const
Master clock =
_SPI_MASTER_OSC_DIV4
Fosc/4
Master clock =
_SPI_MASTER_OSC_DIV16
Fosc/16
Master clock =
_SPI_MASTER_OSC_DIV64
Fosc/64
Master clock
_SPI_MASTER_TMR2
source TMR2
Slave select
_SPI_SLAVE_SS_ENABLE
enabled
Slave select
_SPI_SLAVE_SS_DIS
disabled
Data transmit on
_SPI_LOW_2_HIGH
low to high edge
Data transmit on
_SPI_HIGH_2_LOW
high to low edge
SPIx_Read
Prototipo SPIx_Read corto sin firmar ( buffer corto sin
firmar );
SPIx_Write
Prototipo void SPIx_Write (datos cortos sin firmar);
Devoluciones Nada.
SPI_Set_Active
Prototipo void SPI_Set_Active ( char (* read_ptr)
( char ), void (* write_ptr) ( char ))
Devoluciones Nada.
Requiere La rutina está disponible solo para MCU con dos módulos
SPI.
El módulo SPI usado debe inicializarse antes de usar esta
función. Ver el SPIx_Init , SPIx_Init_Advanced
SPI_Read
Prototipo SPI_Read corto sin firmar ( buffer corto sin
firmar );
SPI_Write
Prototipo void SPI_Write (datos cortos sin firmar);
Devoluciones Nada.
Ejemplo de biblioteca
El código muestra cómo usar las funciones de la biblioteca SPI para la comunicación
entre el módulo SPI de la MCU y el convertidor D / A de 12 bits MCP4921 de
Microchip
Copiar código al portapapeles
void InitMain () {
TRISA0_bit = 1; // Establecer el pin RA0 como
entrada
TRISA1_bit = 1; // Establecer el pin RA1 como
entrada
Chip_Select = 1; // Deselecciona DAC
Chip_Select_Direction = 0; // Establecer el pin CS # como
salida
SPI1_Init (); // Inicializar módulo SPI
}
void main () {
ANSEL = 0;
ANSELH = 0;
InitMain (); // Realizar la inicialización
principal
Conexión HW
Conexión SPI HW
Rutinas de la biblioteca
SPI_Remappable_Init
SPI_Remappable_Init_Advanced
SPI_Remappable_Read
SPI_Remappable_Write
SPI_Remappable_Init
Prototipo void SPI_Remappable_Init ();
Devolucion Nada.
es
Descripció Configura e inicializa el módulo SPI Remappable con la configuración
n predeterminada. SPI_Remappable_Init_Advancedo SPI_Remappable_I
nit_Initdebe llamarse antes de usar otras funciones de SPI Remappable
Library.
Los ajustes predeterminados son:
modo maestro
reloj fosc / 4
reloj en estado inactivo bajo
datos transmitidos en el borde bajo al alto
datos de entrada muestreados en el medio del intervalo
Requiere Necesitará PIC MCU con SPI de hardware integrado y función extraíble.
SPI_Remappable_Init_Advanced
Prototipo void SPI_Remappable_Init_Advanced (b> master_slav
unsigned short, corto sin signo data_sample, corto sin
signo clock_idle, corto sin signotransmit_edge);
Devolucio Nada.
nes
Master
clock = _SPI_REMAPPABLE_MASTER_OSC_DIV4
Fosc/4
Master
clock = _SPI_REMAPPABLE_MASTER_OSC_DIV16
Fosc/16
Master
clock = _SPI_REMAPPABLE_MASTER_OSC_DIV64
Fosc/64
Master
clock
_SPI_REMAPPABLE_MASTER_TMR2
source
TMR2
Slave
select _SPI_REMAPPABLE_SLAVE_SS_ENABLE
enabled
Slave
select _SPI_REMAPPABLE_SLAVE_SS_DIS
disabled
Input data
sampled in
_SPI_REMAPPABLE_DATA_SAMPLE_MIDDLE
middle of
interval
Input data
sampled at
_SPI_REMAPPABLE_DATA_SAMPLE_END
the end of
interval
Clock idle
_SPI_REMAPPABLE_CLK_IDLE_HIGH
HIGH
Clock idle
_SPI_REMAPPABLE_CLK_IDLE_LOW
LOW
Borde de transmisión:
Data _SPI_REMAPPABLE_LOW_2_HIGH
transmit
on low to
high edge
Data
transmit
_SPI_REMAPPABLE_HIGH_2_LOW
on high to
low edge
Requiere Necesita PIC MCU con SPI de hardware integrado y función extraíble.
SPI_Remappable_Read
Prototipo SPI_Remappable_Read corto sin firmar ( buffer corto
sin firmar );
Requiere Necesita PIC MCU con SPI de hardware integrado y función extraíble.
SPI debe ser inicializado y la comunicación establecida antes de usar esta
función. Consulte SPI_Remappable_Init_Advanced o SPI_Remappable_Init .
SPI_Remappable_Write
Prototipo void SPI_Remappable_Write (datos cortos sin firmar);
Devoluciones Nada.
Requiere Necesita PIC MCU con SPI de hardware integrado y función extraíble.
SPI debe ser inicializado y la comunicación establecida antes de usar esta
función. Consulte SPI_Remappable_Init_Advanced o SPI_Remappable_Init .
Ejemplo SPI_Remappable_Write (1);
Importante:
Pin de
selección
extern sfr
sbitSPI_Ethernet_CS; de chip sbit SPI_Ethernet_CS atRC1_bit;
ENC28J60
.
Perno de
extern sfr reinicio
sbit SPI_Ethernet_Rst atRC0_bit;
sbitSPI_Ethernet_RST; ENC28J60
.
Dirección
del pin de
extern sfr
selección sbitSPI_Ethernet_CS_Direction at T
sbitSPI_Ethernet_CS_Dir
ection; de chip RISC1_bit;
ENC28J60
.
Dirección
extern sfr del pin de
sbitSPI_Ethernet_Rst_Direction at
sbitSPI_Ethernet_RST_Di reinicio TRISC0_bit;
rection; ENC28J60
.
Consulte el
unsigned ejemplo de la
intSPI_Ethernet_UserTCP(unsigned biblioteca en la
Controlador
char *remoteHost, unsigned parte inferior
int remotePort, unsigned de solicitud
de esta página
intlocalPort, unsigned TCP.
para la
intreqLength, TEthPktFlags*flags);
implementación
del código.
Consulte el
unsigned ejemplo de la
intSPI_Ethernet_UserUDP(unsigned biblioteca en la
Controlador
char *remoteHost, unsigned parte inferior
int remotePort, unsigned de solicitudes
de esta página
intlocalPort, unsigned UDP.
para la
intreqLength, TEthPktFlags*flags);
implementación
del código.
Rutinas de la biblioteca
PIC16 y PIC18:
SPI_Ethernet_Init
SPI_Ethernet_Enable
SPI_Ethernet_Disable
SPI_Ethernet_doPacket
SPI_Ethernet_putByte
SPI_Ethernet_putBytes
SPI_Ethernet_putString
SPI_Ethernet_putConstString
SPI_Ethernet_putConstBytes
SPI_Ethernet_getByte
SPI_Ethernet_getBytes
SPI_Ethernet_UserTCP
SPI_Ethernet_UserUDP
Sólo PIC18:
SPI_Ethernet_getIpAddress
SPI_Ethernet_getGwIpAddress
SPI_Ethernet_getDnsIpAddress
SPI_Ethernet_getIpMask
SPI_Ethernet_confNetwork
SPI_Ethernet_arpResolve
SPI_Ethernet_sendUDP
SPI_Ethernet_dnsResolve
SPI_Ethernet_initDHCP
SPI_Ethernet_doDHCPLeaseTime
SPI_Ethernet_renewDHCP
SPI_Ethernet_Init
Prototipo void SPI_Ethernet_Init ( unsigned char *
mac, unsigned char * ip, unsigned charfullDuplex);
Devolucione Nada.
s
SPI1_Init ();
SPI_Ethernet_Init (myMacAddr, myIpAddr,
SPI_Ethernet_FULLDUPLEX);
SPI_Ethernet_Enable
Prototip void SPI_Ethernet_Enable ( unsigned char enFlt);
o
Devoluci Nada.
ones
Tráfico de
difusión MAC /
indicador de
filtro de
recepción. Cuan _SPI_Ethernet_BR
0 0x01
do se OADCAST
establece, el trá
fico de
transmisión MA
C se habilitará.
Tráfico de _SPI_Ethernet_MU
1 0x02
LTICAST
multidifusión M
AC / indicador
de filtro de
recepción.Cuan
do se
establece, se
habilitará el
tráfico de
multidifusión M
AC .
CRC marca
de verificación.
Cuando se
establece, los _SPI_Ethernet_CR
5 0x20
paquetes con C
elcampo CRC n
o válido se
descartarán.
Tráfico de
unidifusión MA
C / indicador de
filtro de
recepción. Cuan _SPI_Ethernet_UN
7 0x80
do se ICAST
establece, el trá
fico de
unidifusión MA
C se habilitará.
Nota :
SPI_Ethernet_Disable
Prototip void SPI_Ethernet_Disable ( unsigned char disFlt);
o
Devoluci Nada.
ones
Tráfico de _SPI_Ethernet_BR
0 0x01
OADCAST
difusión MAC /
indicador de
filtro de
recepción. Cuan
do se
establece,el tráf
ico de
transmisión MA
C se
deshabilitará.
Tráfico de
multidifusión M
AC / indicador
de filtro de
recepción. Cuan
_SPI_Ethernet_MU
1 0x02 do se
LTICAST
establece, el trá
fico de
multidifusión M
AC se
deshabilitará.
CRC marca
de verificación.
Cuando se
establece,
la verificación C
_SPI_Ethernet_CR
5 0x20 RC se C
deshabilitará y
se aceptarán los
paquetes con
el campo CRC n
o válido .
Nota :
SPI_Ethernet_doPacket
Prototipo unsigned char SPI_Ethernet_doPacket ();
SPI_Ethernet_putByte
Prototipo void SPI_Ethernet_putByte ( unsigned char v);
Devoluciones Nada.
SPI_Ethernet_putBytes
Prototipo void SPI_Ethernet_putBytes ( unsigned char *
ptr, unsigned int n);
Devoluciones Nada.
SPI_Ethernet_putConstBytes
Prototipo void SPI_Ethernet_putConstBytes ( const unsigned
char * ptr, unsigned int n);
Devoluciones Nada.
SPI_Ethernet_putString
Prototipo unsigned int SPI_Ethernet_putString ( unsigned
char * ptr);
SPI_Ethernet_putConstString
Prototipo unsigned int SPI_Ethernet_putConstString ( const
unsigned char * ptr);
SPI_Ethernet_getByte
Prototipo unsigned char SPI_Ethernet_getByte ();
SPI_Ethernet_getBytes
Prototipo void SPI_Ethernet_getBytes ( unsigned char *
ptr, unsigned int addr, unsigned int n);
Devoluciones Nada.
SPI_Ethernet_UserTCP
Prototipo unsigned int SPI_Ethernet_UserTCP ( unsigned
char * remoteHost, unsigned
int remotePort, unsigned int localPort, unsigned
int reqLength, TEthPktFlags * flags);
typedef struct {
unsigned canCloseTCP: 1; // indicador
que cierra el socket
sin firmar isBroadcast: 1; // indicador
que indica que el paquete IP se ha
recibido a través de la dirección de
difusión de subred (no se utiliza para la
familia PIC16)
} TEthPktFlags;
SPI_Ethernet_UserUDP
Prototipo unsigned int SPI_Ethernet_UserUDP ( unsigned
char * remoteHost, unsigned
int remotePort, unsigned int destPort, unsigned
int reqLength, TEthPktFlags * flags);
typedef struct {
unsigned canCloseTCP: 1; // el
indicador que cierra el socket TCP (no
relevante para UDP)
sin firma isBroadcast: 1; // indicador
que indica que el paquete IP se ha
recibido a través de la dirección de
difusión de subred (no se utiliza para la
familia PIC16)
} TEthPktFlags;
SPI_Ethernet_getIpAddress
Prototipo unsigned char * SPI_Ethernet_getIpAddress ();
SPI_Ethernet_getGwIpAddress
Prototipo unsigned char * SPI_Ethernet_getGwIpAddress ();
SPI_Ethernet_getDnsIpAddress
Prototipo unsigned char * SPI_Ethernet_getDnsIpAddress ()
SPI_Ethernet_getIpMask
Prototipo unsigned char * SPI_Ethernet_getIpMask ()
SPI_Ethernet_confNetwork
Prototipo void SPI_Ethernet_confNetwork ( char *
ipMask, char * gwIpAddr, char * dnsIpAddr);
Devoluciones Nada.
SPI_Ethernet_arpResolve
Prototipo unsigned char * SPI_Ethernet_arpResolve ( unsigned
char * ip, unsigned char tmax);
SPI_Ethernet_sendUDP
Prototipo unsigned char SPI_Ethernet_sendUDP ( unsigned
char * destIP, unsigned int sourcePort, unsigned
int destPort, unsigned char * pkt, unsigned
intpktLen);
SPI_Ethernet_dnsResolve
Prototipo unsigned char * SPI_Ethernet_dnsResolve ( unsigned
char * host, unsigned chartmax);
Nota :
Nota :
Ejemplo ...
SPI_Ethernet_initDHCP (5); // obtener la configuración
de red del servidor DHCP, espere 5 segundos para
obtener la respuesta
...
SPI_Ethernet_doDHCPLeaseTime
Prototipo unsigned char SPI_Ethernet_doDHCPLeaseTime ();
SPI_Ethernet_renewDHCP
Prototipo unsigned char SPI_Ethernet_renewDHCP ( unsigned
char tmax);
Ejemplo de biblioteca
Este código muestra cómo usar la mini biblioteca de Ethernet:
La junta responderá a las solicitudes de eco de ARP e ICMP.
La junta responderá a las solicitudes UDP en cualquier puerto:
devuelve la solicitud en caracteres superiores con un
encabezado hecho de IP de host remoto y número de
puerto
la placa responderá a las solicitudes HTTP en el puerto 80, método GET
con rutas de acceso:
/ volverá a la página principal de HTML
/ s devolverá el estado del tablero como cadena de texto
/ t0 ... / t7 cambiará de RD0 a RD7 bit y devolverá la
página principal HTML
Todas las demás solicitudes devuelven también la página
principal HTML.
Copiar código al portapapeles
#include "__EthEnc28j60.h"
/ ************************************************** ***********
* ROM cadenas constantes
* /
const unsigned char httpHeader [] = "HTTP / 1.1 200 OKnContent-type:"; //
encabezado HTTP
const unsigned char httpMimeTypeHTML [] = "text / htmlnn"; //
HTML MIME type
const unsigned char httpMimeTypeScript [] = "text / plainnn"; //
TEXT MIME type
unsigned char httpMethod [] = "GET /";
/ *
* página web, dividida en 2 partes:
* cuando se queda corto de ROM, los datos fragmentados se manejan de
manera más eficiente por el enlazador
*
* esta página HTML llama a los tableros para obtener su estado y se
construye con javascript
* /
const char * indexPage = // Cambiar la dirección IP
de la página para actualizar
"<meta http-equiv =" refresh "content =" 3; url = http: //192.168.20.60 ">
<HTML><HEAD></HEAD> <BODY>
<h1> Mini servidor web PIC + ENC28J60 </h1>
<a href=/> Recargar </a>
<script src = / s> </script>
<table> <tr> <td valign = top> <table border = 1 style = "font-size: 20px;
font-family: terminal;">
<tr> <th colspan = 2> ADC </th> </tr>
<tr><td>AN2</td><td><script>document.write(AN2)</script></td> </tr>
<tr><td>AN3</td><td><script>document.write(AN3)</script></td> </tr>
</table></td> <td> <table border = 1 style = "font-size: 20px; font-
family: terminal;">
<tr> <th colspan = 2> PORTB </th> </tr>
<script>
var str, i;
str = "";
para (i = 0; i <8; i ++)
{str + = "<tr> <td bgcolor = pink> BUTTON #" + i + "</td>";
if (PORTB & (1 << i)) {str + = "<td bgcolor = red> ON";}
else else {str + = "<td bgcolor = # cccccc> OFF";}
str + = "</td> </tr>";}
document.write (str);
</script>
";
/ ***********************************
* RAM variables
* /
unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f};
// mi dirección MAC
no firmada char myIpAddr [4] = {192, 168, 20, 60};
// mi dirección IP
unsigned char getRequest [15];
// HTTP request buffer
unsigned char dyna [30];
// buffer para respuesta dinámica
sin signo largo httpCounter = 0;
// contador de peticiones HTTP
/ *******************************************
* funciones
* /
/ *
* ponga la cadena constante apuntada por s al búfer de transmisión ENC.
* /
/ * unsigned int putConstString (const char * s)
{
unsigned int ctr = 0;
mientras (* s)
{
Spi_Ethernet_putByte (* s ++);
ctr ++;
}
retorno (ctr);
} * /
/ *
* será mucho más rápido usar la rutina Spi_Ethernet_putConstString de la
biblioteca
* En lugar de la rutina putConstString anterior. Sin embargo, el código
será un poco
* un poco más grande. El usuario debe elegir entre tamaño y velocidad y
elegir la implementación que
* le encomienda mejor. Si elige ir con la definición putConstString
anterior
* la línea #define a continuación debe ser comentada.
*
* /
#define putConstString SPI_Ethernet_putConstString
/ *
* poner la cadena apuntada por s al búfer de transmisión ENC
* /
/ * unsigned int putString (char * s)
{
unsigned int ctr = 0;
mientras (* s)
{
Spi_Ethernet_putByte (* s ++);
ctr ++;
}
retorno (ctr);
} * /
/ *
* será mucho más rápido usar la rutina Spi_Ethernet_putString de la
biblioteca
* En lugar de la rutina putString anterior. Sin embargo, el código será
un poco
* un poco más grande. El usuario debe elegir entre tamaño y velocidad y
elegir la implementación que
* le encomienda mejor. Si elige ir con la definición de putString
anterior
* la línea #define a continuación debe ser comentada.
*
* /
#define putString SPI_Ethernet_putString
/ *
* Esta función es llamada por la biblioteca.
* el usuario accede a la solicitud HTTP mediante llamadas sucesivas a
Spi_Ethernet_getByte ()
* el usuario pone datos en el búfer de transmisión mediante llamadas
sucesivas a Spi_Ethernet_putByte ()
* la función debe devolver la longitud en bytes de la respuesta HTTP, o 0
si no hay nada que transmitir
*
* Si no necesita responder a las solicitudes HTTP,
* simplemente defina esta función con un retorno (0) como una sola
declaración
*
* /
unsigned int SPI_Ethernet_UserTCP ( unsigned char * remoteHost, unsigned
int remotePort, unsigned int localPort, unsigned int reqLength,
TEthPktFlags * flags)
{
unsigned int len = 0; // mi longitud de
respuesta
unsigned int i; // entero de propósito
general
if (len == 0) // que
hacer por defecto
{
len = putConstString (httpHeader); //
encabezado HTTP
len + = putConstString (httpMimeTypeHTML); // con
HTML MIME type
len + = putConstString (indexPage); // página
HTML primera parte
len + = putConstString (indexPage2); //
segunda parte de la página HTML
}
/ *
* Esta función es llamada por la biblioteca.
* el usuario accede a la solicitud UDP mediante llamadas sucesivas a
Spi_Ethernet_getByte ()
* el usuario pone datos en el búfer de transmisión mediante llamadas
sucesivas a Spi_Ethernet_putByte ()
* la función debe devolver la longitud en bytes de la respuesta UDP, o 0
si no hay nada que transmitir
*
* Si no necesita responder a las solicitudes UDP,
* simplemente defina esta función con un retorno (0) como una sola
declaración
*
* /
unsigned int SPI_Ethernet_UserUDP ( unsigned char * remoteHost, unsigned
int remotePort, unsigned int destPort, unsigned int reqLength,
TEthPktFlags * flags)
{
unsigned int len; // la duración de
mi respuesta
/ *
* Entrada principal
* /
void main ()
{
ANSEL = 0x0C; // se utilizarán los convertidores AN2 y
AN3
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
PORTA = 0;
TRISA = 0xff; // establece PORTA como entrada para ADC
PORTD = 0;
TRISD = 0; // establece PORTD como salida
/ *
* inicia ENC28J60 con:
* bit de reinicio en RC0
* CS bit en RC1
* mi dirección MAC e IP
* duplex completo
* /
SPI1_Init ();
SPI_Ethernet_Init (myMacAddr, myIpAddr, Spi_Ethernet_FULLDUPLEX);
/ *
* agrega tus cosas aquí si es necesario
* Spi_Ethernet_doPacket () debe llamarse tan a menudo
como sea posible
* de lo contrario los paquetes podrían perderse
* /
}
}
Conexión HW
Biblioteca SPI Ethernet ENC24J600
El ENC24J600es un controlador Ethernet autónomo con un interfaz periférico serie
estándar de la industria (SPI). Está diseñado para servir como una interfaz de red
Ethernet para cualquier controlador equipado con SPI .
El ENC24J600cumple con todos los IEEE especificaciones aplicables a 802.3 10Base-
T y 100Base-TX Ethernet. Incorpora una serie de esquemas de filtrado de paquetes
para limitar los paquetes entrantes. También proporciona un módulo DMA de 16
bits de ancho interno para un rápido rendimiento de datos y cálculos de suma de
comprobación de IP asistidos por hardware . La comunicación con el controlador
host se implementa a través de dos pines de interrupción y el SPI , con
velocidades de datos de 10/100 Mb / s. Se utilizan dos pines dedicados para
el enlace de LED y la indicación de actividad de la red.
Esta biblioteca está diseñada para simplificar el manejo del hardware subyacente
( ENC24J600). Funciona con cualquier PIC con SPI integrado y más de 4 Kb de
memoria ROM. Se recomienda un reloj de 38 a 40 MHz para obtener
un reloj SPI de 8 a 10 Mhz , de lo contrario, el PIC debe ser cronometrado
por ENC24J600la salida del reloj debido a su error de silicio en el hardware SPI . Si
intenta bajar la velocidad del reloj PIC, es posible que se cuelgue la placa o se
pierdan algunas solicitudes.
La biblioteca SPI Ethernet ENC24J600 admite:
Módulos ENC424J600 y ENC624J600.
Protocolo IPv4.
Solicitudes de ARP .
Solicitudes de eco ICMP .
Peticiones UDP
Solicitudes de TCP (sin pila, sin reconstrucción de paquetes).
Cliente ARP con caché.
Cliente DNS
Cliente UDP
Cliente DHCP
La fragmentación de paquetes NO es compatible.
Importante:
Pin de
extern sfr selección
sbit SPI_Ethernet_24j600_CS atRC1_
sbitSPI_Ethernet_24j600_C de chip bit;
S; ENC24J6
00.
Dirección
extern sfr del pin sbitSPI_Ethernet_24j600_CS_Directi
sbitSPI_Ethernet_24j600_C
de on at TRISC1_bit;
S_Direction;
selección
de chip
ENC24J6
00.
Consulte el
unsigned ejemplo de la
intSPI_Ethernet_24j600_UserTCP(unsigned biblioteca en la
Controlador
char *remoteHost, unsigned parte inferior
intremotePort, unsigned de solicitud
de esta página
int localPort,unsigned TCP.
para la
int reqLength,TEthj600PktFlags *flags);
implementación
del código.
Consulte el
unsigned ejemplo de la
intSPI_Ethernet_24j600_UserUDP(unsigned biblioteca en la
Controlador
char *remoteHost, unsigned parte inferior
intremotePort, unsigned de solicitudes
de esta página
int localPort,unsigned UDP.
para la
int reqLength,TEthj600PktFlags *flags);
implementación
del código.
Rutinas de la biblioteca
PIC16 y PIC18:
SPI_Ethernet_24j600_Init
SPI_Ethernet_24j600_Enable
SPI_Ethernet_24j600_Disable
SPI_Ethernet_24j600_doPacket
SPI_Ethernet_24j600_putByte
SPI_Ethernet_24j600_putBytes
SPI_Ethernet_24j600_putString
SPI_Ethernet_24j600_putConstString
SPI_Ethernet_24j600_putConstBytes
SPI_Ethernet_24j600_getByte
SPI_Ethernet_24j600_getBytes
SPI_Ethernet_24j600_UserTCP
SPI_Ethernet_24j600_UserUDP
Sólo PIC18:
SPI_Ethernet_24j600_getIpAddress
SPI_Ethernet_24j600_getGwIpAddress
SPI_Ethernet_24j600_getDnsIpAddress
SPI_Ethernet_24j600_getIpMask
SPI_Ethernet_24j600_confNetwork
SPI_Ethernet_24j600_arpResolve
SPI_Ethernet_24j600_sendUDP
SPI_Ethernet_24j600_dnsResolve
SPI_Ethernet_24j600_initDHCP
SPI_Ethernet_24j600_doDHCPLeaseTime
SPI_Ethernet_24j600_renewDHCP
SPI_Ethernet_24j600_Init
Prototipo void SPI_Ethernet_24j600_Init ( unsigned char *
mac, unsigned char * ip, configuración de char sin
signo );
Devolucio Nada.
nes
Establecer
SPI_Ethernet_24j600_AUTO_NEGOTI
autonegociac
ATION
ión
Establecer
SPI_Ethernet_24j600_MANUAL_NEGO
negociación
TIATION
manual.
Establecer
modo medio SPI_Ethernet_24j600_HALFDUPLEX
dúplex
Establecer
modo dúplex SPI_Ethernet_24j600_FULLDUPLEX
completo
Fije la
velocidad de
SPI_Ethernet_24j600_SPD10
transmisión
de 10Mbps
Fije la
velocidad de
SPI_Ethernet_24j600_SPD100
transmisión
de 100Mbps
Nota :
SPI1_Init ();
SPI_Ethernet_24j600_Init (myMacAddr, myIpAddr,
SPI_Ethernet_24j600_MANUAL_NEGOTIATION &
SPI_Ethernet_24j600_FULLDUPLEX &
SPI_Ethernet_24j600_SPD100);
SPI_Ethernet_24j600_Enable
Prototip void SPI_Ethernet_24j600_Enable ( unsigned int enFlt);
o
Devoluc Nada.
iones
Descrip Esta es la rutina del módulo MAC . Esta rutina permite el tráfico
ción de red apropiado en el ENC24J600módulo por medio de sus filtros
de recepción (unicast, multicast, broadcast, crc). El tipo
específico de tráfico de red se habilitará si se establece un bit
correspondiente del parámetro de entrada de esta rutina. Por lo
tanto, se puede habilitar más de un tipo de tráfico de red al
mismo tiempo. Para este propósito, las constantes de biblioteca
predefinidas (consulte la tabla a continuación) se pueden ORed
para formar el valor de entrada apropiado.
Parámetros:
enFlt:tráfico de red / recibir banderas de filtro. Cada
bit corresponde al filtro de tráfico / recepción de red
apropiado:
Po Másc Biblioteca predefinida
Descripción
co ara const
Tráfico de
difusión MAC
/ indicador de _SPI_Ethernet_24j6
0 0x01
00_BROADCAST
filtro de
recepción. Cua
ndo se
establece, eltr
áfico de
transmisión M
AC se
habilitará.
Tráfico de
multidifusión
MAC /
indicador de
filtro de
recepción. Cua _SPI_Ethernet_24j6
1 0x02
ndo se 00_MULTICAST
establece,se
habilitará el
tráfico de
multidifusión
MAC .
CRC marca
de verificación
. Cuando se
establece, los _SPI_Ethernet_24j6
5 0x20
paquetes con 00_CRC
el campo CRC
no válido se
descartarán.
Tráfico de
unidifusión M
AC / indicador
de filtro de _SPI_Ethernet_24j6
7 0x80
00_UNICAST
recepción. Cua
ndo se
establece, eltr
áfico de
unidifusión M
AC se
habilitará.
Nota :
SPI_Ethernet_24j600_Disable
Prototip void SPI_Ethernet_24j600_Disable ( unsigned
o int disFlt);
Devoluc Nada.
iones
Tráfico de
difusión MAC
/ indicador de
filtro de
recepción. Cua
_SPI_Ethernet_24j6
0 0x01 ndo se
00_BROADCAST
establece, el t
ráfico de
transmisión M
AC se
deshabilitará.
Tráfico de
multidifusión
MAC /
indicador de
filtro de
recepción. Cua _SPI_Ethernet_24j6
1 0x02
ndo se 00_MULTICAST
establece, el t
ráfico de
multidifusión
MAC se
deshabilitará.
CRC marca
de verificación _SPI_Ethernet_24j6
5 0x20
. Cuando se 00_CRC
establece,
la verificación
CRC se
deshabilitará y
se aceptarán
los paquetes
con
el campo CRC
no válido .
Tráfico de
unidifusión M
AC / indicador
de filtro de
recepción. Cua
_SPI_Ethernet_24j6
7 0x80 ndo se
00_UNICAST
establece, el t
ráfico de
unidifusión M
AC se
deshabilitará.
Nota :
SPI_Ethernet_24j600_doPacket
Prototipo unsigned char SPI_Ethernet_24j600_doPacket ();
SPI_Ethernet_24j600_putByte
Prototipo void SPI_Ethernet_24j600_putByte ( unsigned
char v);
Devoluciones Nada.
SPI_Ethernet_24j600_putBytes
Prototipo void SPI_Ethernet_24j600_putBytes ( unsigned
char * ptr, unsigned int n);
Devoluciones Nada.
SPI_Ethernet_24j600_putConstBytes
Prototipo void SPI_Ethernet_24j600_putConstBytes ( const
unsigned char * ptr, unsigned int n);
Devoluciones Nada.
SPI_Ethernet_24j600_putString
Prototipo unsigned int SPI_Ethernet_24j600_putString
( unsigned char * ptr);
SPI_Ethernet_24j600_putConstString
Prototipo unsigned int SPI_Ethernet_24j600_putConstString
( const unsigned char * ptr);
SPI_Ethernet_24j600_getByte
Prototipo unsigned char SPI_Ethernet_24j600_getByte ();
SPI_Ethernet_24j600_getBytes
Prototipo void SPI_Ethernet_24j600_getBytes ( unsigned
char * ptr, unsigned int addr, unsigned int n);
Devoluciones Nada.
typedef struct {
unsigned canCloseTCP: 1; // indicador
que cierra el socket
sin firmar isBroadcast: 1; // indicador
que indica que el paquete IP se ha
recibido a través de la dirección de
difusión de subred (no se utiliza para la
familia PIC16)
} TEthj600PktFlags;
typedef struct {
unsigned canCloseTCP: 1; // el
indicador que cierra el socket TCP (no
relevante para UDP)
sin firma isBroadcast: 1; // indicador
que indica que el paquete IP se ha
recibido a través de la dirección de
difusión de subred (no se utiliza para la
familia PIC16)
} TEthj600PktFlags;
SPI_Ethernet_24j600_getIpAddress
Prototipo unsigned char * SPI_Ethernet_24j600_getIpAddress
();
SPI_Ethernet_24j600_getGwIpAddress
Prototipo unsigned char * SPI_Ethernet_24j600_getGwIpAddress
();
SPI_Ethernet_24j600_getDnsIpAddress
Prototipo unsigned char *
SPI_Ethernet_24j600_getDnsIpAddress ()
SPI_Ethernet_24j600_getIpMask
Prototipo unsigned char * SPI_Ethernet_24j600_getIpMask ()
SPI_Ethernet_24j600_confNetwork
Prototipo void SPI_Ethernet_24j600_confNetwork ( char *
ipMask, char * gwIpAddr, char * dnsIpAddr);
Devoluciones Nada.
SPI_Ethernet_24j600_arpResolve
Prototipo unsigned char * SPI_Ethernet_24j600_arpResolve
( unsigned char * ip, unsigned char tmax);
SPI_Ethernet_24j600_sendUDP
Prototipo unsigned char SPI_Ethernet_24j600_sendUDP
( unsigned char * destIP, unsigned
int sourcePort, unsigned int destPort, unsigned
char * pkt, unsigned intpktLen);
SPI_Ethernet_24j600_dnsResolve
Prototipo unsigned char * SPI_Ethernet_24j600_dnsResolve
( unsigned char * host, unsigned char tmax);
Nota :
SPI_Ethernet_24j600_initDHCP
Prototipo unsigned char SPI_Ethernet_24j600_initDHCP
( unsigned char tmax);
Nota :
Ejemplo ...
SPI_Ethernet_24j600_initDHCP (5); // obtener la
configuración de red del servidor DHCP, espere 5
segundos para obtener la respuesta
...
SPI_Ethernet_24j600_doDHCPLeaseTime
Prototipo unsigned char SPI_Ethernet_24j600_doDHCPLeaseTime
();
SPI_Ethernet_24j600_renewDHCP
Prototipo unsigned char SPI_Ethernet_24j600_renewDHCP
( unsigned char tmax);
Devoluciones 1 - En caso de éxito (el tiempo de
arrendamiento fue renovado).
0 - De lo contrario (solicitud de renovación
expirada).
Ejemplo de biblioteca
Este código muestra cómo usar la mini biblioteca de Ethernet:
La junta responderá a las solicitudes de eco de ARP e ICMP.
La junta responderá a las solicitudes UDP en cualquier puerto:
devuelve la solicitud en caracteres superiores con un
encabezado hecho de IP de host remoto y número de
puerto
la placa responderá a las solicitudes HTTP en el puerto 80, método GET
con rutas de acceso:
/ volverá a la página principal de HTML
/ s devolverá el estado del tablero como cadena de texto
/ t0 ... / t7 cambiará de RD0 a RD7 bit y devolverá la
página principal HTML
Todas las demás solicitudes devuelven también la página
principal HTML.
Copiar código al portapapeles
#include "__EthEnc24j600.h"
/ ************************************************** ***********
* ROM cadenas constantes
* /
const unsigned char httpHeader [] = "HTTP / 1.1 200 OKnContent-type:"; //
encabezado HTTP
const unsigned char httpMimeTypeHTML [] = "text / htmlnn"; //
HTML MIME type
const unsigned char httpMimeTypeScript [] = "text / plainnn"; //
TEXT MIME type
unsigned char httpMethod [] = "GET /";
/ *
* página web, dividida en 2 partes:
* cuando se queda corto de ROM, los datos fragmentados se manejan de
manera más eficiente por el enlazador
*
* esta página HTML llama a los tableros para obtener su estado y se
construye con javascript
* /
const char * indexPage = // Cambiar la dirección IP
de la página para actualizar
"<meta http-equiv =" refresh "content =" 3; url = http: //192.168.20.60 ">
<HTML><HEAD></HEAD> <BODY>
<h1> Mini servidor web PIC + ENC24J600 </h1>
<a href=/> Recargar </a>
<script src = / s> </script>
<table> <tr> <td valign = top> <table border = 1 style = "font-size: 20px;
font-family: terminal;">
<tr> <th colspan = 2> ADC </th> </tr>
<tr><td>AN2</td><td><script>document.write(AN2)</script></td> </tr>
<tr><td>AN3</td><td><script>document.write(AN3)</script></td> </tr>
</table></td> <td> <table border = 1 style = "font-size: 20px; font-
family: terminal;">
<tr> <th colspan = 2> PORTB </th> </tr>
<script>
var str, i;
str = "";
para (i = 0; i <8; i ++)
{str + = "<tr> <td bgcolor = pink> BUTTON #" + i + "</td>";
if (PORTB & (1 << i)) {str + = "<td bgcolor = red> ON";}
else else {str + = "<td bgcolor = # cccccc> OFF";}
str + = "</td> </tr>";}
document.write (str);
</script>
";
/ ***********************************
* RAM variables
* /
unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f};
// mi dirección MAC
no firmada char myIpAddr [4] = {192, 168, 20, 60};
// mi dirección IP
unsigned char getRequest [15];
// HTTP request buffer
unsigned char dyna [30];
// buffer para respuesta dinámica
sin signo largo httpCounter = 0;
// contador de peticiones HTTP
/ *******************************************
* funciones
* /
/ *
* ponga la cadena constante apuntada por s al búfer de transmisión ENC.
* /
/ * unsigned int putConstString (const char * s)
{
unsigned int ctr = 0;
mientras (* s)
{
SPI_Ethernet_24j600_putByte (* s ++);
ctr ++;
}
retorno (ctr);
} * /
/ *
* será mucho más rápido usar la rutina SPI_Ethernet_24j600_putConstString
de la biblioteca
* En lugar de la rutina putConstString anterior. Sin embargo, el código
será un poco
* un poco más grande. El usuario debe elegir entre tamaño y velocidad y
elegir la implementación que
* le encomienda mejor. Si elige ir con la definición putConstString
anterior
* la línea #define a continuación debe ser comentada.
*
* /
#define putConstString SPI_Ethernet_24j600_putConstString
/ *
* poner la cadena apuntada por s al búfer de transmisión ENC
* /
/ * unsigned int putString (char * s)
{
unsigned int ctr = 0;
mientras (* s)
{
SPI_Ethernet_24j600_putByte (* s ++);
ctr ++;
}
retorno (ctr);
} * /
/ *
* será mucho más rápido usar la rutina SPI_Ethernet_24j600_putString de
la biblioteca
* En lugar de la rutina putString anterior. Sin embargo, el código será
un poco
* un poco más grande. El usuario debe elegir entre tamaño y velocidad y
elegir la implementación que
* le encomienda mejor. Si elige ir con la definición de putString
anterior
* la línea #define a continuación debe ser comentada.
*
* /
#define putString SPI_Ethernet_24j600_putString
/ *
* Esta función es llamada por la biblioteca.
* el usuario accede a la solicitud HTTP mediante llamadas sucesivas a
SPI_Ethernet_24j600_getByte ()
* el usuario coloca datos en el búfer de transmisión mediante llamadas
sucesivas a SPI_Ethernet_24j600_putByte ()
* la función debe devolver la longitud en bytes de la respuesta HTTP, o 0
si no hay nada que transmitir
*
* Si no necesita responder a las solicitudes HTTP,
* simplemente defina esta función con un retorno (0) como una sola
declaración
*
* /
unsigned int SPI_Ethernet_24j600_UserTCP ( unsigned char * remoteHost,
unsigned int remotePort, unsigned int localPort, unsigned int reqLength,
TEthPktFlags * flags)
{
unsigned int len = 0; // mi longitud de
respuesta
unsigned int i; // entero de propósito
general
if (len == 0) // que
hacer por defecto
{
len = putConstString (httpHeader); //
encabezado HTTP
len + = putConstString (httpMimeTypeHTML); // con
HTML MIME type
len + = putConstString (indexPage); // página
HTML primera parte
len + = putConstString (indexPage2); //
segunda parte de la página HTML
}
/ *
* Esta función es llamada por la biblioteca.
* el usuario accede a la solicitud UDP mediante llamadas sucesivas a
SPI_Ethernet_24j600_getByte ()
* el usuario coloca datos en el búfer de transmisión mediante llamadas
sucesivas a SPI_Ethernet_24j600_putByte ()
* la función debe devolver la longitud en bytes de la respuesta UDP, o 0
si no hay nada que transmitir
*
* Si no necesita responder a las solicitudes UDP,
* simplemente defina esta función con un retorno (0) como una sola
declaración
*
* /
unsigned int SPI_Ethernet_24j600_UserUDP ( unsigned char * remoteHost,
unsigned int remotePort, unsigned int destPort, unsigned int reqLength,
TEthPktFlags * flags)
{
unsigned int len; // la duración de
mi respuesta
/ *
* Entrada principal
* /
void main ()
{
ANSEL = 0x0C; // se utilizarán los convertidores AN2 y
AN3
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
PORTA = 0;
TRISA = 0xff; // establece PORTA como entrada para ADC
PORTD = 0;
TRISD = 0; // establece PORTD como salida
/ *
* CS bit en RC1
* mi dirección MAC e IP
* duplex completo
* /
SPI1_Init ();
SPI_Ethernet_24j600_Init (myMacAddr, myIpAddr,
SPI_Ethernet_24j600_AUTO_NEGOTIATION);
/ *
* agrega tus cosas aquí si es necesario
* SPI_Ethernet_24j600_doPacket () debe llamarse tan a
menudo como sea posible
* de lo contrario los paquetes podrían perderse
* /
}
}
Devoluciones Nada.
...
SPI_Glcd_Set_Side
Prototipo void SPI_Glcd_Set_Side ( char x_pos);
Devoluciones Nada.
SPI_Glcd_Set_Page
Prototipo vacío SPI_Glcd_Set_Page ( Char página);
Devoluciones Nada.
SPI_Glcd_Set_X
Prototipo void SPI_Glcd_Set_X ( char x_pos);
Devoluciones Nada.
SPI_Glcd_Read_Data
Prototipo char SPI_Glcd_Read_Data ();
SPI_Glcd_Write_Data
Prototipo void SPI_Glcd_Write_Data ( char Ddata);
Devolucio Nada.
nes
SPI_Glcd_Set_Ext_Buffer
Prototipo anulará SPI_Glcd_Set_Ext_Buffer (char * (*
getExtDataPtr) ( unsigned long offset, largo sin
signo recuento, sin firmar larga * num));
Devolucio Nada.
nes
if (start_sector == currentSector + 1) {
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
} else
if (start_sector! = currentSector) {
Mmc_Multi_Read_Stop ();
Mmc_Multi_Read_Start (start_sector);
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
}
si (cuenta> 512-pos) {
* num = 512-pos;
}
más
* num = cuenta;
SPI_Glcd_Set_Ext_Buffer (ReadExternalBuffer);
SPI_Glcd_Fill
Prototipo anular SPI_Glcd_Fill ( Char patrón);
Devoluciones Nada.
SPI_Glcd_Dot
Prototipo void SPI_Glcd_Dot
( char x_pos, char y_pos, char color);
Devoluciones Nada.
Devolucion Nada.
es
SPI_Glcd_V_Line
Prototipo void SPI_Glcd_V_Line
( char y_start, char y_end, char x_pos, charcolor)
;
Devolucione Nada.
s
SPI_Glcd_H_Line
Prototipo void SPI_Glcd_H_Line
( char x_start, char x_end, char y_pos, char color
);
Devolucione Nada.
s
SPI_Glcd_Rectangle
Prototi void SPI_Glcd_Rectangle
po ( char x_upper_left, char y_upper_left, charx_bottom_ri
ght, char y_bottom_right, char color);
Devolu Nada.
ciones
SPI_Glcd_Rectangle_Round_Edges
Prototipo void SPI_Glcd_Rectangle_Round_Edges ( sin signo
corto x_upper_left, sin signo
corto y_upper_left, sin signo
cortox_bottom_right, sin signo
corto y_bottom_right, sin
signo redondeado corto redondeado, sin signo
de color corto );
Devoluciones Nada.
SPI_Glcd_Rectangle_Round_Edges_Fill
Prototipo void SPI_Glcd_Rectangle_Round_Edges_Fill ( sin
signo corto x_upper_left, sin signo
corto y_upper_left, sin signo
cortox_bottom_right, sin signo
corto y_bottom_right, sin signo
corto red_radio, sin signo de color corto );
Devoluciones Nada.
SPI_Glcd_Box
Prototi void SPI_Glcd_Box
po ( char x_upper_left, char y_upper_left, charx_bottom_ri
ght, char y_bottom_right, char color);
Devolu Nada.
ciones
SPI_Glcd_Circle
Prototipo void SPI_Glcd_Circle
( int x_center, int y_center, int radio, charcolor
);
Devolucione Nada.
s
SPI_Glcd_Circle_FIll
Prototipo void SPI_Glcd_Circle_Fill
( int x_center, int y_center, int radius, char col
or);
Devolucione Nada.
s
SPI_Glcd_Set_Font
Prototipo void SPI_Glcd_Set_Font ( const code char *
activeFont, char aFontWidth, charaFontHeight, unsig
ned int aFontOffs);
Devolucione Nada.
s
Font_Glcd_System3x5
Font_Glcd_System5x7
Font_Glcd_5x7
Font_Glcd_Character8x7
Por el bien de la compatibilidad con versiones anteriores,
estas fuentes también son compatibles:
System3x5(equivalente a Font_Glcd_System3x5)
FontSystem5x7_v2(equivalente
a Font_Glcd_System5x7)
font5x7(equivalente a Font_Glcd_5x7)
Character8x7(equivalente
a Font_Glcd_Character8x7)
Requiere Glcd debe inicializarse para la comunicación SPI ,
consulte las rutinas SPI_Glcd_Init .
SPI_Glcd_Set_Font_Adv
Prototipo void SPI_Glcd_Set_Font_Adv ( const char *
activeFont, unsigned
char font_color, char font_orientation);
Devolucio Nada.
nes
Notas Ninguna.
SPI_Glcd_Set_Ext_Font_Adv
Prototipo void SPI_Glcd_Set_Ext_Font_Adv ( sin signo
long activeFont, sin signo corto aFontWidth, sin
signo corto aFontHeight, unsigned intaFontOffs);
Notas Ninguna.
SPI_Glcd_Write_Char
Prototipo void SPI_Glcd_Write_Char
( char chr1, char x_pos, char page_num, char color
);
Devolucione Nada.
s
SPI_Glcd_Write_Char_Adv
Prototipo void SPI_Glcd_Write_Char_Adv ( unsigned
int c, unsigned int x, unsigned int y);
Devoluciones Nada.
SPI_Glcd_Write_Text
Prototipo void SPI_Glcd_Write_Text
( texto char [], char x_pos, charpage_num, char col
or);
Devolucione Nada.
s
SPI_Glcd_Write_Text_Adv
Prototipo void SPI_Glcd_Write_Text_Adv
( texto sin signo *, int sin signo x, int y sin
signo );
Devoluciones Nada.
SPI_Glcd_Write_Const_Text_Adv
Prototipo void SPI_Glcd_Write_Const_Text_Adv ( const far
char * text, unsigned int x, unsigned int y);
Devoluciones Nada.
SPI_Glcd_Image
Prototipo void SPI_Glcd_Image ( const code char * image);
Devoluciones Nada.
SPI_Glcd_Ext_Image
Prototipo void SPI_Glcd_Ext_Image ( imagen larga sin
firmar );
Devoluciones Nada.
SPI_Glcd_PartialImage
Prototipo void SPI_Glcd_PartialImage ( sin signo
int x_left, sin signo int y_top, sin signo
int ancho, sin signo int alto, sin signo
int picture_width, sin signo
int picture_height, código const sin signo corto *
imagen);
Devoluciones Nada.
SPI_Glcd_Ext_PartialImage
Prototipo void SPI_Glcd_Ext_PartialImage ( sin signo
int x_left, sin signo int y_top, sin signo
int ancho, sin signo int alto, sin signo
intpicture_width, sin signo
int picture_height, sin signo largaimagen);
Devoluciones Nada.
Ejemplo de biblioteca
El ejemplo muestra cómo comunicarse con KS0108 Glcd a través del módulo SPI,
utilizando el convertidor serie a paralelo MCP23S17.
Copiar código al portapapeles
void main () {
char counter;
char * someText;
#define COMPLETE_EXAMPLE
ANSEL = 0; // Configurar AN pins como
digitales
ANSELH = 0;
C1ON_bit = 0; // Desactivar comparadores
C2ON_bit = 0;
mientras (1) {
#ifdef COMPLETE_EXAMPLE
SPI_Glcd_Image (truck_bmp); // dibujar imagen
Delay2s (); Delay2s ();
#terminara si
SPI_Glcd_Fill (0x00); // Borrar Glcd
Delay2s;
#ifdef COMPLETE_EXAMPLE
SPI_Glcd_Fill (0x00); // Borrar
Glcd
SPI_Glcd_Set_Font (Font_Glcd_Character8x7, 8, 8, 32); // Elija la
fuente, vea __Lib_GLCDFonts.c en la carpeta Usos
SPI_Glcd_Write_Text ("mikroE", 5, 7, 2); // escribir
cadena
#terminara si
#ifdef COMPLETE_EXAMPLE
SPI_Glcd_Box (12,20, 70,63, 2); // dibujar
caja
Delay2s ();
Conexión HW
Devoluciones Nada.
void main () {
SPI_Lcd_Out
Prototipo anulará SPI_Lcd_Out
( Char fila, carbón columna, Char * texto);
Devoluciones Nada.
SPI_Lcd_Out_Cp
Prototipo void SPI_Lcd_Out_CP ( char * text);
Devoluciones Nada.
SPI_Lcd_Chr
Prototipo void SPI_Lcd_Chr
( char Row, char Column, char Out_Char);
Devoluciones Nada.
SPI_Lcd_Chr_Cp
Prototipo void SPI_Lcd_Chr_CP ( char Out_Char);
Devoluciones Nada.
SPI_Lcd_Cmd
Prototipo void SPI_Lcd_Cmd ( char out_char);
Devoluciones Nada.
Descripción Envía el comando a Lcd.
Parámetros:
out_char: comando para ser enviado
void main () {
Conexión HW
Conexión SPI Lcd HW
Biblioteca SPI Lcd 8 (interfaz de 8 bits)
El mikroC PRO para PIC proporciona una biblioteca para la comunicación
con Lcd (con controladores compatibles con HD44780) en modo de 8 bits a través
de la interfaz SPI .
Para crear un conjunto personalizado de caracteres Lcd, use la Herramienta
de caracteres personalizados Lcd .
Importante:
Devoluciones Nada.
...
// Si Port Expander Library usa el módulo SPI1
SPI1_Init (); //
Inicializar el módulo SPI utilizado con PortExpander
SPI_Lcd8_Config (0); //
intialize Lcd en modo de 8 bits a través de SPI
SPI_Lcd8_Out
Prototipo void SPI_Lcd8_Out ( fila corta sin signo ,
columna corta sin signo , texto char *);
Devoluciones Nada.
SPI_Lcd8_Out_Cp
Prototipo void SPI_Lcd8_Out_CP ( char * text);
Devoluciones Nada.
SPI_Lcd8_Chr
Prototipo void SPI_Lcd8_Chr ( fila corta sin signo ,
columna corta sin signo, char out_char);
Devoluciones Nada.
SPI_Lcd8_Chr_Cp
Prototipo void SPI_Lcd8_Chr_CP ( char out_char);
Devoluciones Nada.
SPI_Lcd8_Cmd
Prototipo void SPI_Lcd8_Cmd ( char out_char);
Devoluciones Nada.
Ejemplo de biblioteca
Este ejemplo muestra cómo comunicar Lcd en modo de 8 bits a través del módulo
SPI, utilizando el convertidor en serie a paralelo MCP23S17.
Copiar código al portapapeles
void main () {
Conexión HW
Conexión SPI Lcd8 HW
SPI T6963C Graphic Lcd Library
El mikroC PRO para PIC proporciona una biblioteca para trabajar con Glcds basado
en el controlador TOSHIBA T6963C a través de la interfaz SPI . El Toshiba T6963C
es un controlador Lcd muy popular para el uso en pequeños módulos gráficos. Es
capaz de controlar pantallas con una resolución de hasta 240x128. Debido a su
baja potencia y pequeño perfil, es más adecuado para aplicaciones móviles como
PDA, reproductores de MP3 o equipos de medición móviles. Aunque este
controlador es pequeño, tiene la capacidad de mostrar y combinar texto y gráficos,
y administra todas las señales de interfaz a los controladores de fila y columna de
las pantallas.
Para crear un conjunto personalizado de imágenes Glcd use la herramienta Editor
de mapa de bits de Glcd .
Importante:
La biblioteca utiliza el módulo SPI para la comunicación.
El usuario debe inicializar el módulo SPI antes de usar la biblioteca SPI
T6963C Glcd.
Esta biblioteca está diseñada para trabajar con las placas adaptadoras
Serial Glcd 240x128 y 240x64 de mikroElektronika; consulte el
esquema en la parte inferior de esta página para obtener más
información.
Para utilizar las constantes localizadas en __Lib_SPIT6963C_Const.hel
archivo, el usuario debe incluir el archivo de origen: #include
"__SPIT6963C.h".
La familia de MCU PIC16 no admite trabajar con recursos externos.
Algunas tarjetas adaptadoras de mikroElektronika tienen un pinout diferente de las
hojas de datos T6369C. Las relaciones apropiadas entre estas etiquetas se dan en
la siguiente tabla:
Placa adaptadora Hoja de datos de T6369C
RS DISCOS COMPACTOS
R/W / RD
mi / WR
Devoluciones Nada.
...
SPI_T6963C_writeData
Prototipo void SPI_T6963C_writeData (ddata de
caracteres sin signo);
Devoluciones Nada.
SPI_T6963C_writeCommand
Prototipo void SPI_T6963C_writeCommand (ddata de
caracteres sin signo);
Devoluciones Nada.
Ejemplo SPI_T6963C_writeCommand
(SPI_T6963C_CURSOR_POINTER_SET);
SPI_T6963C_setPtr
Prototipo void SPI_T6963C_setPtr ( unsigned int p, unsigned
char c);
Devoluciones Nada.
Devoluciones Nada.
start_sector = Mmc_Get_File_Write_Sector () +
offset / 512;
pos = ( sin signo largo ) offset% 512;
if (start_sector == currentSector + 1) {
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
} else
if (start_sector! = currentSector) {
Mmc_Multi_Read_Stop ();
Mmc_Multi_Read_Start (start_sector);
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
}
si (cuenta> 512-pos) {
* num = 512-pos;
}
más
* num = cuenta;
SPI_T6963C_Set_Ext_Buffer (ReadExternalBuffer);
SPI_T6963C_waitReady
Prototipo void SPI_T6963C_waitReady ( void );
Devoluciones Nada.
SPI_T6963C_fill
Prototipo void SPI_T6963C_fill ( unsigned char v, unsigned
int start, unsigned int len);
Devoluciones Nada.
SPI_T6963C_dot
Prototipo void SPI_T6963C_dot ( int x, int y, unsigned
char color);
Devoluciones Nada.
SPI_T6963C_Set_Font_Adv
Prototipo void SPI_T6963C_Set_Font_Adv ( const far char *
activeFont, unsigned
char font_color, char font_orientation);
Devolucio Nada.
nes
Notas Ninguna.
SPI_T6963C_Set_Ext_Font_Adv
Prototipo void SPI_T6963C_Set_Ext_Font_Adv ( sin signo
long activeFont, unsigned
char font_color, char font_orientation);
Devoluci Nada.
ones
Requiere El módulo Toshiba Glcd necesita ser inicializado. Ver
la rutina SPI_T6963C_Config .
Notas Ninguna.
SPI_T6963C_write_char
Prototi void SPI_T6963C_write_char ( unsigned char c, unsigned
po char x, unsigned char y, unsigned char mode);
Devolu Nada.
ciones
SPI_T6963C_write_char_adv
Prototipo void SPI_T6963C_write_char_adv ( sin signo
char , sin signo int x, sin signo int y);
Devoluciones Nada.
Notas Ninguna.
SPI_T6963C_write_text
Prototi void SPI_T6963C_write_text ( unsigned char *
po str, unsigned char x, unsigned char y, unsigned
char mode);
Devolu Nada.
ciones
SPI_T6963C_Write_Text_Adv
Prototipo void SPI_T6963C_Write_Text_Adv
( texto sin signo *, int sin signo x, int y sin
signo );
Devoluciones Nada.
Notas Ninguna.
SPI_T6963C_Write_Const_Text_Adv
Prototipo void SPI_T6963C_Write_Const_Text_Adv ( const far
char * text, unsigned int x, unsigned int y);
Descripción Escribe el texto ubicado en la memoria del programa en el
glcd en las coordenadas (x, y).
Devoluciones Nada.
Notas Ninguna.
SPI_T6963C_line
Prototipo void SPI_T6963C_line
( int x0, int y0, int x1, int y1, unsigned
char pcolor);
Devoluciones Nada.
SPI_T6963C_rectangle
Prototipo void SPI_T6963C_rectangle
( int x0, int y0, int x1, int y1, unsigned
char pcolor);
Devoluciones Nada.
Descripción Dibuja un rectángulo en Glcd.
Parámetros:
x0: coordenada x de la esquina superior
izquierda del rectángulo
y0: coordenada y de la esquina superior
izquierda del rectángulo
x1: coordenada x de la esquina inferior derecha
del rectángulo
y1: coordenada y de la esquina inferior derecha
del rectángulo
pcolor:parámetro de color Valores válidos:
SPI_T6963C_BLACK, SPI_T6963C_WHITE y
SPI_T6963C_INVERT.
SPI_T6963C_rectangle_round_edges
Prototipo void SPI_T6963C_rectangle_round_edges
( int x0, int y0, int x1, inty1, int round_radius,
unsigned char pcolor);
Devolucion Nada.
es
SPI_T6963C_rectangle_round_edges_fill
Prototipo void SPI_T6963C_rectangle_round_edges_fill
( int x0, int y0, int x1, inty1, int round_radius,
unsigned char pcolor);
Devolucion Nada.
es
SPI_T6963C_box
Prototipo void SPI_T6963C_box
( int x0, int y0, int x1, int y1, unsigned
char pcolor);
Devoluciones Nada.
SPI_T6963C_circle
Prototipo void SPI_T6963C_circle
( int x, int y, long r, unsigned charpcolor);
Devoluciones Nada.
SPI_T6963C_circle_fill
Prototipo void SPI_T6963C_circle_fill
( int x, int y, long r, unsigned charpcolor);
Devoluciones Nada.
Devoluciones Nada.
SPI_T6963C_Ext_Image
Prototipo void SPI_T6963C_Ext_Image ( imagen larga sin
firmar );
Devoluciones Nada.
Devoluciones Nada.
SPI_T6963C_Ext_PartialImage
Prototipo void SPI_T6963C_Ext_PartialImage ( sin signo
int x_left, sin signo int y_top, sin signo
int ancho, sin signo int alto, sin signo
intpicture_width, sin signo
int picture_height, sin signo largaimagen);
Devoluciones Nada.
SPI_T6963C_sprite
Prototipo void SPI_T6963C_sprite ( unsigned
char px, unsigned char py, const code char *
pic, unsigned char sx, unsigned char sy);
Devoluciones Nada.
Descripción Rellena el área del rectángulo gráfico (px, py) a (px + sx,
py + sy) con una imagen de tamaño personalizado.
Parámetros:
px:Coordenada x de la esquina superior
izquierda de la imagen. Valores válidos:
múltiplos del ancho de la fuente.
py: coordenada y de la esquina superior
izquierda de la imagen
pic: imagen para mostrar
sx:ancho de la imagen Valores válidos:
múltiplos del ancho de la fuente.
sy: altura de la imagen
Nota: si pxy los sxparámetros no son múltiplos del
ancho de la fuente, se escalarán al número inferior más
cercano que sea un múltiplo del ancho de la fuente.
SPI_T6963C_set_cursor
Prototipo void SPI_T6963C_set_cursor ( unsigned
char x, unsigned char y);
Devoluciones Nada.
SPI_T6963C_clearbit
Prototipo void SPI_T6963C_clearBit ( char b);
Devoluciones Nada.
SPI_T6963C_setBit
Prototipo void SPI_T6963C_setBit ( char b);
Devoluciones Nada.
SPI_T6963C_negBit
Prototipo nulo SPI_T6963C_negBit ( char b);
Devoluciones Nada.
SPI_T6963C_DisplayGrPanel
Prototipo void SPI_T6963C_displayGrPanel ( char n);
Devoluciones Nada.
SPI_T6963C_displayTxtPanel
Prototipo void SPI_T6963C_displayTxtPanel ( char n);
Devoluciones Nada.
SPI_T6963C_setGrPanel
Prototipo void SPI_T6963C_setGrPanel ( char n);
Devoluciones Nada.
SPI_T6963C_setTxtPanel
Prototipo void SPI_T6963C_setTxtPanel ( char n);
Devoluciones Nada.
SPI_T6963C_panelFill
Prototipo void SPI_T6963C_panelFill ( unsigned char v);
Devoluciones Nada.
SPI_T6963C_grFill
Prototipo void SPI_T6963C_grFill ( unsigned char v);
Devoluciones Nada.
SPI_T6963C_txtFill
Prototipo void SPI_T6963C_txtFill ( unsigned char v);
Devoluciones Nada.
SPI_T6963C_cursor_height
Prototipo void SPI_T6963C_cursor_height ( unsigned char n);
Devoluciones Nada.
SPI_T6963C_graphics
Prototipo void SPI_T6963C_graphics ( char n);
Devoluciones Nada.
Descripción Habilitar / deshabilitar la visualización de gráficos.
Parámetros:
n:gráfico habilitar / deshabilitar
parámetro. Valores válidos: 0(deshabilitar la
visualización de gráficos) y 1(habilitar la
visualización gráfica).
SPI_T6963C_text
Prototipo void SPI_T6963C_text ( char n);
Devoluciones Nada.
SPI_T6963C_cursor
Prototipo void SPI_T6963C_cursor ( char n);
Devoluciones Nada.
SPI_T6963C_cursor_blink
Prototipo void SPI_T6963C_cursor_blink ( char n);
Devoluciones Nada.
Ejemplo de biblioteca
La siguiente demostración de dibujo prueba las rutinas avanzadas de la biblioteca
SPI T6963C Glcd. Las configuraciones de hardware en este ejemplo están hechas
para la pantalla T6963C 240x128, la placa EasyPIC6 y el 16F887.
Copiar código al portapapeles
#include "__SPIT6963C.h"
/ *
* Imágenes de mapa de bits almacenadas en ROM
* /
const code char mikroE_240x64_bmp []; // PIC16F887 no puede almacenar
una imagen más grande (240x128) en ROM
const code char einstein [];
void main () {
char txt1 [] = "EINSTEIN LE GUSTARÍA ME";
char txt [] = "DEMO DE LA BIBLIOTECA GLCD, ¡BIENVENIDO!";
/ *
* Pantalla de inicio para 240 píxeles de ancho y 128 píxeles de altura.
* Ancho de caracteres de 8 bits.
* bus de datos en el puerto MCP23S17
* bus de control en el puerto MCP23S17
* el bit 2 es! WR
* el bit 1 es! RD
* el bit 0 es! CD
* el bit 4 es RST
* chip habilitado, inverso, fuente 8x8 establecida internamente en la
biblioteca
* /
/ *
* Habilita la visualización de gráficos y texto al mismo tiempo
* /
SPI_T6963C_graphics (1);
SPI_T6963C_text (1);
panel = 0;
i = 0;
curs = 0;
cposx = cposy = 0;
/ *
* Mensajes de texto
* /
SPI_T6963C_write_text (txt, 0, 0, SPI_T6963C_ROM_MODE_XOR);
SPI_T6963C_write_text (txt1, 0, 15, SPI_T6963C_ROM_MODE_XOR);
/ *
* Cursor
* /
SPI_T6963C_cursor_height (8); // 8 píxeles de altura
SPI_T6963C_set_cursor (0, 0); // mover el cursor a la parte
superior izquierda
SPI_T6963C_cursor (0); // cursor apagado
/ *
* Dibujar rectángulos
* /
SPI_T6963C_rectangle (0, 0, 239, 127, SPI_T6963C_WHITE);
SPI_T6963C_rectangle (20, 20, 219, 107, SPI_T6963C_WHITE);
SPI_T6963C_rectangle (40, 40, 199, 87, SPI_T6963C_WHITE);
SPI_T6963C_rectangle (60, 60, 179, 67, SPI_T6963C_WHITE);
/ *
* Dibujar una cruz
* /
SPI_T6963C_line (0, 0, 239, 127, SPI_T6963C_WHITE);
SPI_T6963C_line (0, 127, 239, 0, SPI_T6963C_WHITE);
/ *
* Dibujar cajas sólidas.
* /
SPI_T6963C_box (0, 0, 239, 8, SPI_T6963C_WHITE);
SPI_T6963C_box (0, 119, 239, 127, SPI_T6963C_WHITE);
#ifdef COMPLETE_EXAMPLE
/ *
* Dibujar círculos
* /
SPI_T6963C_circle (120, 64, 10, SPI_T6963C_WHITE);
SPI_T6963C_circle (120, 64, 30, SPI_T6963C_WHITE);
SPI_T6963C_circle (120, 64, 50, SPI_T6963C_WHITE);
SPI_T6963C_circle (120, 64, 70, SPI_T6963C_WHITE);
SPI_T6963C_circle (120, 64, 90, SPI_T6963C_WHITE);
SPI_T6963C_circle (120, 64, 110, SPI_T6963C_WHITE);
SPI_T6963C_circle (120, 64, 130, SPI_T6963C_WHITE);
/ *
* Si se presiona RB3, se muestran los paneles de texto y gráficos.
* /
else if (RB3_bit) {
SPI_T6963C_graphics (1);
SPI_T6963C_text (1);
Delay_ms (300);
}
/ *
* Si se presiona RB4, cambia el cursor
* /
else if (RB4_bit) {
curs ++;
if (curs == 3) curs = 0;
interruptor (curs) {
caso 0:
// sin cursor
SPI_T6963C_cursor (0);
romper ;
caso 1:
// cursor parpadeante
SPI_T6963C_cursor (1);
SPI_T6963C_cursor_blink (1);
romper ;
caso 2:
// cursor sin parpadear
SPI_T6963C_cursor (1);
SPI_T6963C_cursor_blink (0);
romper ;
}
Delay_ms (300);
}
/ *
* Mover el cursor, incluso si no es visible
* /
cposx ++;
if (cposx == SPI_T6963C_txtCols) {
cposx = 0;
c ++ ++;
if (cposy == SPI_T6963C_grHeight / SPI_T6963C_CHARACTER_HEIGHT) {
cposy = 0;
}
}
SPI_T6963C_set_cursor (cposx, cposy);
Delay_ms (100);
}
}
Conexión HW
Conexión SPI T6963C Glcd HW
Biblioteca TFT
La pantalla de cristal líquido (TFT-LCD) con transistor de película delgada es una
variante de la pantalla de cristal líquido (LCD) que utiliza la tecnología de transistor
de película delgada (TFT) para mejorar la calidad de la imagen (por ejemplo,
direccionabilidad, contraste).
TFT LCD es un tipo de LCD de matriz activa, aunque todas las pantallas LCD se
basan en el direccionamiento de matriz activa TFT.
Las pantallas TFT LCD se utilizan en televisores, monitores de computadoras,
teléfonos móviles, sistemas de videojuegos portátiles, asistentes digitales
personales, sistemas de navegación, proyectores, etc.
El mikroC PRO for PIC proporciona una biblioteca para trabajar con los siguientes
controladores de pantalla:
Himax HX8347G,
Solomon Systech SSD1963,
Renesas SP R61526,
Sitronix SST7715R.
Nota :
Dirección
extern sfr
del puerto charTFT_DataPort_Direction at TRI
charTFT_DataPort_Directi
on; de datos SD;
TFT.
Escribir
extern sfr sbit TFT_WR; sbit TFT_WR atLATE1_bit;
señal.
Señal de
extern sfr sbit TFT_CS; selección de sbit TFT_CS atLATG3_bit;
chip.
Señal de
selección de
extern sfr sbit TFT_RS; sbit TFT_RS atLATH6_bit;
comando /
registro.
Restablecer
extern sfr sbit TFT_RST; sbit TFT_RST atLATH4_bit;
la señal.
Dirección
extern sfr sbit TFT_WR_Direction at TRISE1_b
sbitTFT_WR_Direction; del pin de it;
escritura.
Dirección
extern sfr sbit TFT_WR_Direction at TRISE0_b
sbitTFT_RD_Direction; del pin de it;
lectura.
Dirección
extern sfr sbit TFT_CS_Direction at TRISG3_b
sbitTFT_CS_Direction; del pin Chip it;
Select.
Dirección
extern sfr del registro sbit TFT_RS_Direction at TRISH6_b
sbitTFT_RS_Direction; Seleccionar it;
pin.
Dirección
extern sfr sbit TFT_RST_Direction at TRISH4_
sbitTFT_RST_Direction; del pin de bit;
reinicio.
Rutinas de la biblioteca
TFT_Init
TFT_Init_HX8347G
TFT_Init_SSD1963_8bit
TFT_Init_R61526
TFT_Init_SST7715R
TFT_Init_ILI9340_8bit
TFT_Init_ILI9481_8bit
TFT_Set_Index
TFT_Write_Command
TFT_Write_Data
TFT_Set_Reg
TFT_Set_Ext_Buffer
TFT_Set_Active
TFT_Set_Default_Mode
TFT_Set_Font
TFT_Set_Ext_Font
TFT_Write_Char
TFT_Write_Text
TFT_Write_Const_Text
TFT_Fill_Screen
TFT_Set_Pen
TFT_Set_Brush
TFT_Dot
TFT_Line
TFT_H_Line
TFT_V_Line
TFT_Rectangle
TFT_Rectangle_Round_Edges
TFT_Círculo
TFT_Imagen
TFT_Ext_Image
TFT_Partial_Image
TFT_Ext_Partial_Image
TFT_Image_Jpeg
TFT_RGBToColor16bit
TFT_Color16bitToRGB
TFT_Rotate_180
TFT_Init
Prototipo void TFT_Init ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_Init_HX8347G
Prototipo void TFT_Init_HX8347G ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_Init_SSD1963_8bit
Prototipo void TFT_Init_SSD1963_8bit ( unsigned
int display_width, unsigned char display_height);
Devoluciones Nada.
TFT_Init_R61526
Prototipo void TFT_Init_R61526 ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_Init_SST7715R
Prototipo void TFT_Init_SST7715R ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_Init_ILI9340_8bit
Prototipo void TFT_Init_ILI9340_8bit ( unsigned
int display_width, unsigned char display_height);
Devoluciones Nada.
TFT_Init_ILI9481_8bit
Prototipo void TFT_Init_ILI9481_8bit ( unsigned
int display_width, unsigned char display_height);
Devoluciones Nada.
TFT_Set_Index
Prototipo void TFT_Set_Index ( índice corto sin signo );
Devoluciones Nada.
TFT_Write_Command
Prototipo void TFT_Write_Command ( cmd corto sin firmar );
Devoluciones Nada.
TFT_Write_Data
Prototipo void TFT_Write_Data ( unsigned int _data);
Devoluciones Nada.
TFT_Set_Reg
Prototipo void TFT_Set_Reg ( índice corto
sin signo , valor corto sin signo);
Devoluciones Nada.
TFT_Set_Ext_Buffer
Prototipo void TFT_Set_Ext_Buffer (char * (* getExtDataPtr)
( desplazamiento largo sin signo , cuenta int
sin signo , int * num sin signo ));
Devoluciones Nada.
start_sector = Mmc_Get_File_Write_Sector () +
offset / 512;
pos = ( sin signo largo ) offset% 512;
if (start_sector == currentSector + 1) {
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
} else
if (start_sector! = currentSector) {
Mmc_Multi_Read_Stop ();
Mmc_Multi_Read_Start (start_sector);
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
}
si (cuenta> 512-pos) {
* num = 512-pos;
}
más
* num = cuenta;
TFT_Set_Ext_Buffer (ReadExternalBuffer);
TFT_Set_Active
Prototipo void TFT_Set_Active ( void (* Set_Index_Ptr) ( sin
signo corto ), void (* Write_Command_Ptr) ( sin
signo ), void (* Write_Data_Ptr) ( sin signo
int ));
Devoluciones Nada.
void main () {
TRISE = 0;
TRISD = 0;
.....
}
TFT_Set_Default_Mode
Prototipo void TFT_Set_Default_Mode ();
Devoluciones Nada.
Requiere Ninguna.
Devoluciones Nada.
TFT_Set_Ext_Font
Prototipo void TFT_Set_Ext_Font ( unsigned long *
activeFont, unsigned
intfont_color, char font_orientation);
Devoluciones Nada.
Devoluciones Nada.
TFT_Write_Text
Prototipo void TFT_Write_Text ( unsigned char *
text, unsigned int x, unsigned int y);
Devoluciones Nada.
TFT_Write_Const_Text
Prototipo void TFT_Write_Const_Text ( const char *
text, unsigned int x, unsigned int y);
Devoluciones Nada.
TFT_Fill_Screen
Prototipo void TFT_Fill_Screen ( sin signo int color);
Devoluciones Nada.
TFT_Dot
Prototipo void TFT_Dot ( int x, int y, unsigned int color);
Devoluciones Nada.
TFT_Set_Pen
Prototipo void TFT_Set_Pen ( unsigned
int pen_color, char pen_width);
Devoluciones Nada.
TFT_Set_Brush
Prototip void TFT_Set_Brush ( char brush_enabled, unsigned
o int brush_color, chargradient_enabled, char gradient_o
rientation, unsigned intgradient_color_from, unsigned
int gradient_color_to);
Devoluci Nada.
ones
1 Habilitar gradiente.
0 Desactivar gradiente.
Requiere El módulo TFT necesita ser inicializado. Por favor, vea la rutina
de inicialización TFTapropiada .
TFT_Line
Prototipo void TFT_Line ( int x1, int y1, int x2, int y2);
Devoluciones Nada.
TFT_H_Line
Prototipo void TFT_H_Line
( int x_start, int x_end, int y_pos);
Devoluciones Nada.
TFT_V_Line
Prototipo void TFT_V_Line
( int y_start, int y_end, int x_pos);
Devoluciones Nada.
TFT_Rectangle
Prototip void TFT_Rectangle
o ( int x_upper_left, int y_upper_left, intx_bottom_rig
ht, int y_bottom_right);
Devoluci Nada.
ones
Requiere El módulo TFT necesita ser inicializado. Por favor, vea la rutina
de inicialización TFT apropiada .
TFT_Rectangle_Round_Edges
Prototipo void TFT_Rectangle_Round_Edges ( unsigned
int x_upper_left, unsigned
int y_upper_left, unsigned
int x_bottom_right, unsigned
int y_bottom_right, unsigned int round_radius);
Devoluciones Nada.
Devoluciones Nada.
TFT_Imagen
Prototipo void TFT_Image ( sin signo int izquierda, sin
signo int arriba, código constante sin signo con
poca imagen *, sin signo conextensión);
Devoluciones Nada.
TFT_Ext_Image
Prototipo void TFT_Ext_Image ( sin signo int izquierda, sin
signo intarriba, imagen sin firmar larga , sin
signo estiramiento corto );
Devoluciones Nada.
Descripción Muestra una imagen de un recurso externo en una
dirección deseada.
Parámetros:
left: Posición del borde izquierdo de la
imagen.
top:Posición del borde superior de la imagen.
image:Imagen a mostrar. Este parámetro
representa la dirección en el recurso externo
desde donde comienzan los datos de la
imagen.
stretch: estira la imagen por un factor dado
(si es 2, doblará la imagen).
TFT_Partial_Image
Prototipo void TFT_Partial_Image ( sin signo
int izquierda, sin signo int arriba, sin signo
int ancho, sin signo int alto, código const hasta
ahora sin signo corto *, sin signo corto tramo);
Devoluciones Nada.
TFT_Ext_Partial_Image
Prototipo void TFT_Ext_Partial_Image ( unsigned
int izquierda, unsigned intsuperior, unsigned
int anchura, unsigned int altura, largo sin
signo imagen, corto sin signo de estiramiento);
Devoluciones Nada.
TFT_Image_Jpeg
Prototipo char TFT_Image_Jpeg ( unsigned int left, unsigned
int top, code const unsigned short * image);
TFT_RGBToColor16bit
Prototipo unsigned int TFT_RGBToColor16bit
( char rgb_red, char rgb_green, char rgb_blue);
Devoluciones Devuelve un valor de color en el siguiente orden de bits: 5
bits de color rojo, 6 bits de color verde y 5 bits de color
azul.
TFT_Color16bitToRGB
Prototipo void TFT_Color16bitToRGB ( sin signo
int color, char * rgb_red, char *
rgb_green, char * rgb_blue);
Devoluciones Nada.
TFT_Rotate_180
Prototipo void TFT_Rotate_180 ( char rotate );
Devoluciones Nada.
Conexión HW
Conexión TFT HW
Nota :
Puerto de
extern sfr char TFT_16bit_DataPort_Lo atLAT
charTFT_16bit_DataPort_Lo; datos TFT B;
bajo.
Puerto de
extern sfr char TFT_16bit_DataPort_Hi atLAT
charTFT_16bit_DataPort_Hi; datos TFT C;
alto.
Dirección
extern sfr del
charTFT_16bit_DataPort_Hi_Direct
charTFT_16bit_DataPort_Hi_ puerto de ion at TRISB;
Direction; datos TFT
bajo.
Dirección
extern sfr del
charTFT_16bit_DataPort_Lo_Direct
charTFT_16bit_DataPort_Lo_ puerto de ion at TRISC;
Direction; datos TFT
Alto.
Señal de
selección
extern sfr
sbit TFT_16bit_RS; de sbit TFT_16bit_RS at LATH6_bit;
comando
/ registro.
Restablec
extern sfr
sbit TFT_16bit_RST; er la sbit TFT_16bit_RST atLATH4_bit;
señal.
Dirección
extern sfr
sbitTFT_16bit_CS_Direction
del pin sbit TFT_16bit_CS_Direction atTR
; Chip ISG3_bit;
Select.
Dirección
extern sfr del
sbit TFT_16bit_RS_Direction atTR
sbitTFT_16bit_RS_Direction registro ISH6_bit;
; Seleccion
ar pin.
Rutinas de la biblioteca
TFT_Init_HX8347D
TFT_Init_HX8352A
TFT_Init_SSD1963
TFT_Init_ILI9340
TFT_Init_ILI9342
TFT_Init_ILI9481
TFT_Init_HX8347G_16bit
TFT_16bit_Set_Index
TFT_16bit_Write_Command
TFT_16bit_Write_Data
TFT_16bit_Set_Reg
TFT_16bit_Set_Ext_Buffer
TFT_16bit_Set_Active
TFT_16bit_Set_Default_Mode
TFT_16bit_Set_Font
TFT_16bit_Set_Ext_Font
TFT_16bit_Write_Char
TFT_16bit_Write_Text
TFT_16bit_Write_Const_Text
TFT_16bit_Fill_Screen
TFT_16bit_Set_Pen
TFT_16bit_Set_Brush
TFT_16bit_Dot
TFT_16bit_Line
TFT_16bit_H_Line
TFT_16bit_V_Line
TFT_16bit_Rectangle
TFT_16bit_Rectangle_Round_Edges
TFT_16bit_Circle
TFT_16bit_Image
TFT_16bit_Ext_Image
TFT_16bit_Partial_Image
TFT_16bit_Ext_Partial_Image
TFT_16bit_Image_Jpeg
TFT_16bit_RGBToColor16bit
TFT_16bit_Color16bitToRGB
TFT_16bit_Rotate_180
TFT_Init_HX8347D
Prototipo void TFT_Init_HX8347D ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_16bit_DataPort_Direction_Lo: Dirección
de puerto de datos bajo
TFT_16bit_DataPort_Direction_Hi: Dirección
de Puerto de Datos Alto
TFT_16bit_WR_Direction: Dirección de la señal
de escritura del pin
TFT_16bit_RD_Direction: Dirección del pin de
señal de lectura
TFT_16bit_CS_Direction: Dirección del pin de
señal Chip Select
TFT_16bit_RS_Direction: Dirección de registro
Seleccionar señal pin
TFT_16bit_RST_Direction: Dirección del pin de
señal de reinicio
Debe ser definido antes de usar esta función.
TFT_Init_HX8352A
Prototipo void TFT_Init_HX8352A ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_Init_SSD1963
Prototipo void TFT_Init_SSD1963 ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_16bit_DataPort_Direction_Lo: Dirección
de puerto de datos bajo
TFT_16bit_DataPort_Direction_Hi: Dirección
de Puerto de Datos Alto
TFT_16bit_WR_Direction: Dirección de la señal
de escritura del pin
TFT_16bit_RD_Direction: Dirección del pin de
señal de lectura
TFT_16bit_CS_Direction: Dirección del pin de
señal Chip Select
TFT_16bit_RS_Direction: Dirección de registro
Seleccionar señal pin
TFT_16bit_RST_Direction: Dirección del pin de
señal de reinicio
Debe ser definido antes de usar esta función.
TFT_Init_ILI9340
Prototipo void TFT_Init_ILI9340 ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
Descripción Inicializa el controlador de pantalla ILI9340 en modo de
trabajo de 16 bits.
Parámetros:
width: Ancho de la pantalla TFT.
height: Altura de la pantalla TFT.
TFT_16bit_DataPort_Direction_Lo: Dirección
de puerto de datos bajo
TFT_16bit_DataPort_Direction_Hi: Dirección
de Puerto de Datos Alto
TFT_16bit_WR_Direction: Dirección de la señal
de escritura del pin
TFT_16bit_RD_Direction: Dirección del pin de
señal de lectura
TFT_16bit_CS_Direction: Dirección del pin de
señal Chip Select
TFT_16bit_RS_Direction: Dirección de registro
Seleccionar señal pin
TFT_16bit_RST_Direction: Dirección del pin de
señal de reinicio
Debe ser definido antes de usar esta función.
TFT_Init_ILI9342
Prototipo void TFT_Init_ILI9342 ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_16bit_DataPort_Direction_Lo: Dirección
de puerto de datos bajo
TFT_16bit_DataPort_Direction_Hi: Dirección
de Puerto de Datos Alto
TFT_16bit_WR_Direction: Dirección de la señal
de escritura del pin
TFT_16bit_RD_Direction: Dirección del pin de
señal de lectura
TFT_16bit_CS_Direction: Dirección del pin de
señal Chip Select
TFT_16bit_RS_Direction: Dirección de registro
Seleccionar señal pin
TFT_16bit_RST_Direction: Dirección del pin de
señal de reinicio
Debe ser definido antes de usar esta función.
TFT_Init_ILI9481
Prototipo void TFT_Init_ILI9481 ( unsigned
int display_width, unsigned chardisplay_height);
Devoluciones Nada.
TFT_16bit_DataPort_Direction_Lo: Dirección
de puerto de datos bajo
TFT_16bit_DataPort_Direction_Hi: Dirección
de Puerto de Datos Alto
TFT_16bit_WR_Direction: Dirección de la señal
de escritura del pin
TFT_16bit_RD_Direction: Dirección del pin de
señal de lectura
TFT_16bit_CS_Direction: Dirección del pin de
señal Chip Select
TFT_16bit_RS_Direction: Dirección de registro
Seleccionar señal pin
TFT_16bit_RST_Direction: Dirección del pin de
señal de reinicio
Debe ser definido antes de usar esta función.
TFT_Init_HX8347G_16bit
Prototipo void TFT_Init_HX8347G_16bit ( unsigned
int display_width, unsigned char display_height);
Devoluciones Nada.
TFT_16bit_DataPort_Direction_Lo: Dirección
de puerto de datos bajo
TFT_16bit_DataPort_Direction_Hi: Dirección
de Puerto de Datos Alto
TFT_16bit_WR_Direction: Dirección de la señal
de escritura del pin
TFT_16bit_RD_Direction: Dirección del pin de
señal de lectura
TFT_16bit_CS_Direction: Dirección del pin de
señal Chip Select
TFT_16bit_RS_Direction: Dirección de registro
Seleccionar señal pin
TFT_16bit_RST_Direction: Dirección del pin de
señal de reinicio
Debe ser definido antes de usar esta función.
Ejemplo // TFT muestra las conexiones
char TFT_16bit_DataPort_Lo en LATB;
char TFT_16bit_DataPort_Hi en LATC;
sbit TFT_16bit_WR en LATE1_bit;
sbit TFT_16bit_RD en LATE0_bit;
sbit TFT_16bit_CS en LATG3_bit;
sbit TFT_16bit_RS en LATH6_bit;
sbit TFT_16bit_RST en LATH4_bit;
TFT_16bit_Set_Index
Prototipo void TFT_16bit_Set_Index ( índice corto sin
signo );
Devoluciones Nada.
TFT_16bit_Write_Command
Prototipo void TFT_16bit_Write_Command ( cmd corto sin
signo );
Devoluciones Nada.
TFT_16bit_Write_Data
Prototipo void TFT_16bit_Write_Data ( unsigned int _data);
Devoluciones Nada.
TFT_16bit_Set_Reg
Prototipo void TFT_16bit_Set_Reg ( índice corto
sin signo , valor corto sin signo );
Devoluciones Nada.
TFT_16bit_Set_Ext_Buffer
Prototipo void TFT_16bit_Set_Ext_Buffer (char * (*
getExtDataPtr) ( desplazamiento largo sin signo ,
cuenta int sin signo , int * num sin signo ));
Devoluciones Nada.
Descripción La función establece el puntero a la función de usuario que
manipula el recurso externo.
Parámetros:
offset - desplazamiento desde el principio del
recurso desde donde se solicitan los datos.
count - Número solicitado de bytes.
num - variable para mantener el número
devuelto de bytes (menor o igual al número de
bytes adquiridos).
start_sector = Mmc_Get_File_Write_Sector () +
offset / 512;
pos = ( sin signo largo ) offset% 512;
if (start_sector == currentSector + 1) {
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
} else
if (start_sector! = currentSector) {
Mmc_Multi_Read_Stop ();
Mmc_Multi_Read_Start (start_sector);
Mmc_Multi_Read_Buffer (EXT_BUFFER);
currentSector = start_sector;
}
si (cuenta> 512-pos) {
* num = 512-pos;
}
más
* num = cuenta;
TFT_16bit_Set_Ext_Buffer (ReadExternalBuffer);
TFT_16bit_Set_Active
Prototipo void TFT_16bit_Set_Active ( void (* Set_Index_Ptr)
( sin signo corto ), void (* Write_Command_Ptr)
( sin signo corto ), void (* Write_Data_Ptr) ( sin
signo int ));
Devoluciones Nada.
Requiere Ninguna.
Ejemplo Por favor, vea la hoja de datos del controlador para las
descripciones del modo de trabajo.
void Set_Index ( índice corto sin signo ) {
// Establecer índice
}
void main () {
...
TFT_Set_Active (Set_Index, Write_Command,
Write_Data);
TFT_Init_HX8352A (320, 240);
...
}
TFT_16bit_Set_Default_Mode
Prototipo void TFT_16bit_Set_Default_Mode ();
Devoluciones Nada.
Requiere Ninguna.
TFT_16bit_Set_Font
Prototipo void TFT_16bit_Set_Font ( const char far *
activeFont, unsigned
intfont_color, char font_orientation);
Devoluciones Nada.
TFT_16bit_Set_Ext_Font
Prototipo void TFT_16bit_Set_Ext_Font ( unsigned long *
activeFont, unsigned
int font_color, char font_orientation);
Devoluciones Nada.
TFT_16bit_Write_Char
Prototipo void TFT_16bit_Write_Char ( unsigned
int c, unsigned int x, unsigned int y);
Devoluciones Nada.
TFT_16bit_Write_Text
Prototipo void TFT_16bit_Write_Text ( unsigned char *
text, unsigned int x, unsigned inty);
Devoluciones Nada.
TFT_16bit_Write_Const_Text
Prototipo void TFT_16bit_Write_Const_Text ( const far char *
text, unsigned int x, unsigned int y);
Devoluciones Nada.
TFT_16bit_Fill_Screen
Prototipo void TFT_16bit_Fill_Screen ( sin signo int color);
Devoluciones Nada.
TFT_16bit_Dot
Prototipo void TFT_16bit_Dot ( int x, int y, unsigned
int color);
Devoluciones Nada.
TFT_16bit_Set_Pen
Prototipo void TFT_16bit_Set_Pen ( unsigned
int pen_color, char pen_width);
Devoluciones Nada.
TFT_16bit_Set_Brush
Prototip void TFT_16bit_Set_Brush
o ( char brush_enabled, unsigned
int brush_color, chargradient_enabled, char gradient_o
rientation, unsigned intgradient_color_from, unsigned
int gradient_color_to);
Devoluci Nada.
ones
1 Habilitar gradiente.
0 Desactivar gradiente.
Requiere El módulo TFT necesita ser inicializado. Por favor, vea la rutina
de inicialización TFTapropiada .
TFT_16bit_Line
Prototipo void TFT_16bit_Line
( int x1, int y1, int x2, int y2);
Devoluciones Nada.
TFT_16bit_H_Line
Prototipo void TFT_16bit_H_Line
( int x_start, int x_end, int y_pos);
Devoluciones Nada.
TFT_16bit_V_Line
Prototipo void TFT_16bit_V_Line
( int y_start, int y_end, int x_pos);
Devoluciones Nada.
TFT_16bit_Rectangle
Prototip void TFT_16bit_Rectangle
o ( int x_upper_left, int y_upper_left, intx_bottom_rig
ht, int y_bottom_right);
Devoluci Nada.
ones
Requiere El módulo TFT necesita ser inicializado. Por favor, vea la rutina
de inicialización TFT apropiada .
TFT_16bit_Rectangle_Round_Edges
Prototipo void TFT_16bit_Rectangle_Round_Edges ( unsigned
int x_upper_left, unsigned
int y_upper_left, unsigned
int x_bottom_right, unsigned
int y_bottom_right, unsigned int round_radius);
Devoluciones Nada.
TFT_16bit_Circle
Prototipo void TFT_16bit_Circle
( int x_center, int y_center, int radius);
Devoluciones Nada.
TFT_16bit_Image
Prototipo void TFT_16bit_Image ( sin signo
int izquierda, sin signo intarriba, código
constante hasta ahora sin firmar *
imagen corta , sin signo , extensión corta );
Devoluciones Nada.
TFT_16bit_Ext_Image
Prototipo void TFT_16bit_Ext_Image ( sin signo
int izquierda, sin signo intarriba, sin
firmar imagen larga , sin
signo estiramiento corto );
Devoluciones Nada.
Descripción Muestra una imagen de un recurso externo en una
dirección deseada.
Parámetros:
left: Posición del borde izquierdo de la
imagen.
top:Posición del borde superior de la imagen.
image:Imagen a mostrar. Este parámetro
representa la dirección en el recurso externo
desde donde comienzan los datos de la
imagen.
stretch: estira la imagen por un factor dado
(si es 2, doblará la imagen).
TFT_16bit_Partial_Image
Prototipo void TFT_16bit_Partial_Image ( sin signo
int izquierda, sin signo int arriba, sin signo
int ancho, sin signo int alto, código const hasta
ahora sin signo imagen corta *, sin signo
corto tramo);
Devoluciones Nada.
TFT_16bit_Ext_Partial_Image
Prototipo void TFT_16bit_Ext_Partial_Image ( sin signo
int izquierda, sin signo int arriba, sin signo
int ancho, sin signo int altura, sin signo
larga imagen, sin signo corto tramo);
Devoluciones Nada.
TFT_16bit_Image_Jpeg
Prototipo char TFT_16bit_Image_Jpeg ( unsigned
int left, unsigned int top, code const lejos
unsigned short * image);
TFT_16bit_RGBToColor16bit
Prototipo unsigned int TFT_16bit_RGBToColor16bit
( char rgb_red, charrgb_green, char rgb_blue);
TFT_16bit_Color16bitToRGB
Prototipo void TFT_16bit_Color16bitToRGB ( sin signo
int color, char * rgb_red, char *
rgb_green, char * rgb_blue);
Devoluciones Nada.
TFT_16bit_Rotate_180
Prototipo void TFT_16bit_Rotate_180 ( char rotate );
Devoluciones Nada.
Descripción Gira la pantalla TFT.
Parámetros:
rotate:Parámetro para pantalla
giratoria. Valores válidos:
0: la pantalla no se girará.
1 - la pantalla girará 180 grados.
extern sfr
sbit DriveA; Línea DriveA. sbit DriveA atRC0_bit;
extern sfr
sbit DriveB; Línea DriveB. sbit DriveB atRC1_bit;
extern sfr
Dirección del sbitDriveA_Direction at TRISC0_bit
sbitDriveA_Direction
; pin DriveA. ;
extern sfr
Dirección del sbitDriveB_Direction at TRISC1_bit
sbitDriveB_Direction
; pin DriveB. ;
Rutinas de la biblioteca
TP_Init
TP_Set_ADC_Threshold
TP_Press_Detect
TP_Get_Coordinates
TP_Calibrate_Bottom_Left
TP_Calibrate_Upper_Right
TP_Get_Calibration_Consts
TP_Set_Calibration_Consts
TP_Init
Prototipo void TP_Init ( unsigned
int display_width, unsigned
intdisplay_height, char readX_ChNo, char readY_ChN
o);
Devolucione Nada.
s
TP_Set_ADC_Threshold
Prototipo void TP_Set_ADC_Threshold ( umbral int sin
signo );
Devoluciones Nada.
Requiere TP_Init Tiene que ser llamado antes de usar esta rutina.
TP_Press_Detect
Prototipo char TP_Press_Detect ();
Descripción Detecta si el panel táctil ha sido presionado.
Parámetros Ninguna.
if (TP_Press_Detect ()) {
...
}
TP_Get_Coordinates
Prototipo char TP_Get_Coordinates ( unsigned int *
x_coordinate, unsigned int * y_coordinate);
Requiere Nada.
Parámetros Ninguna.
Devoluciones Nada.
Requiere Nada.
TP_Calibrate_Upper_Right
Prototipo void TP_Calibrate_Upper_Right ();
Parámetros Ninguna.
Devoluciones Nada.
Requiere Nada.
TP_Get_Calibration_Consts
Prototipo void TP_Get_Calibration_Consts ( unsigned int *
x_min, unsigned int * x_max, unsigned int *
y_min, unsigned int * y_max);
Devoluciones Nada.
Requiere Nada.
TP_Set_Calibration_Consts
Prototipo void TP_Set_Calibration_Consts ( unsigned
int x_min, unsigned int x_max, unsigned
inty_min, unsigned int y_max);
Devoluciones Nada.
Requiere Nada.
Ejemplo de biblioteca
La siguiente demostración de dibujo prueba las rutinas de la biblioteca del Panel
táctil:
Copiar código al portapapeles
bit write_erase;
char pen_size;
char write_msg [] = "WRITE"; // Mensajes
del menú
GLCD char clear_msg [] = "CLEAR";
char erase_msg [] = "ERASE";
unsigned int x_coord, y_coord;
void Initialize () {
DriveA_Direction = 0; // Establecer
el pin DriveA como salida
DriveB_Direction = 0; // Establecer
el pin DriveB como salida
ANSEL = 3; // Configure los
pines AN0 y AN1 como entradas analógicas
ANSELH = 0; // y otros
pines AN como E / S digital
TRISA = 3;
C1ON_bit = 0; // Desactivar
comparadores
C2ON_bit = 0;
void Calibrate () {
Delay_ms (1000);
}
void main () {
Inicializar();
Glcd_Fill (0);
Glcd_Write_Text ("WRITE ON SCREEN", 20, 5, 1);
Delay_ms (1000);
// Menú de la pluma:
Glcd_Rectangle (41,0,52,9,1);
Glcd_Box (45,3,48,6,1);
Glcd_Rectangle (63,0,70,7,1);
Glcd_Box (66,3,67,4,1);
Glcd_Rectangle (80,0,86,6,1);
Glcd_Dot (83,3,1);
write_erase = 1;
pen_size = 1;
mientras (1) {
if (TP_Press_Detect ()) {
// Después de que se detecte un PRESS, lea XY y
conviértalo a un espacio de 128x64 si (TP_Get_Coordinates (&
x_coord, & y_coord) == 0) {
Glcd_Fill (0);
// Menú de la pluma:
Glcd_Rectangle (41,0,52,9,1);
Glcd_Box (45,3,48,6,1);
Glcd_Rectangle (63,0,70,7,1);
Glcd_Box (66,3,67,4,1);
Glcd_Rectangle (80,0,86,6,1);
Glcd_Dot (83,3,1);
Glcd_V_Line (0,7,0,1);
Glcd_Write_Text (clear_msg, 1,0,0);
Glcd_V_Line (0,7,97,1);
if (write_erase)
Glcd_Write_Text (erase_msg, 98,0,0);
más
Glcd_Write_Text (write_msg, 98,0,0);
}
if ((x_coord> = 63) && (x_coord <= 70) && (y_coord <= 7))
pen_size = 2;
if ((x_coord> = 80) && (x_coord <= 86) && (y_coord <= 6))
pen_size = 1;
si (y_coord <11)
continúa ;
Importante:
Devoluciones Nada.
UARTx_Data_Ready
Prototipo char UARTx_Data_Ready ();
UARTx_Tx_Idle
Prototipo char UARTx_Tx_Idle ();
UARTx_Read
Prototipo char UARTx_Read ();
UARTx_Read_Text
Prototipo void UARTx_Read_Text ( char * Salida, char *
Delimitador, char Intentos);
Devoluciones Nada.
while (1) {
if (UART1_Data_Ready () == 1) {// si se reciben
datos
UART1_Read_Text (salida, "OK", 10); // lee el
texto hasta que se encuentra 'OK'
UART1_Write_Text (salida); // devuelve el texto
}
}
UARTx_Write
Prototipo void UARTx_Write ( char data_);
Devoluciones Nada.
UARTx_Write_Text
Prototipo void UARTx_Write_Text ( char * UART_text);
Devoluciones Nada.
UART_Set_Active
Prototipo void UART_Set_Active ( char (* read_ptr)
(), void (* write_ptr) ( unsigned
char data_), char (* ready_ptr) (), char (*
tx_idle_ptr) ())
Devoluciones Nada.
UART_Data_Listo
Prototipo char UART_Data_Ready ();
Devoluciones 1 si los datos están listos para leer
0 Si no hay datos en el registro de recepción.
UART_Tx_Idle
Prototipo char UART_Tx_Idle ();
UART_Leer
Prototipo char UART_Read ();
UART_Read_Text
Prototipo void UART_Read_Text ( char * Salida, char *
Delimitador, char Intentos);
Devoluciones Nada.
while (1) {
if (UART_Data_Ready () == 1) {// si se reciben
datos
UART_Read_Text (salida, "OK", 10); // lee el
texto hasta que se encuentra 'OK'
UART_Write_Text (salida); // devuelve el texto
}
}
UART_escribir
Prototipo void UART_Write ( char data_);
Devoluciones Nada.
UART_Write_Text
Prototipo void UART_Write_Text ( char * UART_text);
Devoluciones Nada.
while (1) {
if (UART_Data_Ready () == 1) {// si se reciben
datos
UART_Read_Text (salida, "OK", 10); // lee el
texto hasta que se encuentra 'OK'
UART_Write_Text (salida); // devuelve el texto
}
}
Ejemplo de biblioteca
El ejemplo demuestra un intercambio de datos simple a través de UART . Cuando
PIC MCU recibe datos, los envía inmediatamente. Si el PIC está conectado a la PC
(consulte la figura a continuación), puede probar el ejemplo desde el terminal
mikroC PRO for PIC para la comunicación RS-232, opción de menú Herramientas
›Terminal .
Copiar código al portapapeles
char uart_rd;
void main () {
ANSEL = 0; // Configurar AN pins como digitales
ANSELH = 0;
UART1_Write_Text ("Inicio");
UART1_Write (10);
UART1_Write (13);
Conexión HW
Conexión RS-232 HW
Biblioteca extraíble UART
El módulo de hardware extraíble UART está disponible con estas MCU: 18F2xJ11,
18F4xJ11, 18F2xJ50 y 18F4xJ50. mikroC PRO for PIC UART La biblioteca extraíble
proporciona un trabajo cómodo con el modo asíncrono (dúplex completo).
Puede comunicarse fácilmente con otros dispositivos a través del protocolo RS-232
(por ejemplo, con una PC, consulte la figura al final del tema - Conexión RS-232
HW). Luego, simplemente use las funciones enumeradas a continuación.
Rutinas de la biblioteca
UART_Remappable_Init
UART_Remappable_Data_Ready
UART_Remappable_Tx_Idle
UART_Remappable_Read
UART_Remappable_Read_Text
UART_Remappable_Write
UART_Remappable_Write_Text
UART_Remappable_Init
Prototipo void UART_Remappable_Init ( const unsigned
long baud_rate);
Devoluciones Nada.
UART_Remappable_Data_Ready
Prototipo UART_Remappable_Data_Ready () sin firmar ;
UART_Remappable_Tx_Idle
Prototipo char UART_Remappable_Tx_Idle ();
UART_Remappable_Read
Prototipo sin signo UART_Remappable_Read ();
UART_Remappable_Read_Text
Prototipo void UART_Remappable_Read_Text ( char *
Output, char * Delimiter, char Intenta);
Devoluciones Nada.
while (1) {
if (UART_Remappable_Data_Ready () == 1) {// si se
reciben datos
UART_Remappable_Read_Text (salida, "OK", 10); //
lee el texto hasta que se encuentra 'OK'
UART_Remappable_Write (salida); // devuelve el
texto
}
}
UART_Remappable_Write
Prototipo void UART_Remappable_Write (datos cortos
sin firmar_);
Devoluciones Nada.
UART_Remappable_Write_Text
Prototipo void UART_Remappable_Write_Text ( char *
uart_text);
Devoluciones Nada.
while (1) {
if (UART_Remappable_Data_Ready () == 1) {// si se
reciben datos
UART_Remappable_Read_Text (salida, "OK", 10); //
lee el texto hasta que se encuentra 'OK'
UART_Remappable_Write (salida); // devuelve el
texto
}
}
Biblioteca USB
Universal Serial Bus (USB) ofrece un estándar de bus serie para conectar una
amplia variedad de dispositivos, incluidos computadoras, teléfonos celulares,
consolas de juegos, PDA , etc.
La biblioteca USB contiene rutinas HID que admiten dispositivos de clase HID y
también las rutinas genéricas que se pueden usar con los controladores
especificados por el vendedor.
Clase USB HID
La clase HID consiste principalmente en dispositivos que utilizan los humanos para
controlar el funcionamiento de los sistemas informáticos. Ejemplos típicos
de dispositivos de clase HID incluyen:
Teclados y dispositivos señaladores, por ejemplo: dispositivos de mouse
estándar, trackballs y joysticks.
Controles del panel frontal, por ejemplo: mandos, interruptores,
botones y deslizadores.
Controles que se pueden encontrar en dispositivos como teléfonos,
controles remotos de VCR, juegos o dispositivos de simulación, por
ejemplo: guantes de datos, aceleradores, volantes y pedales del timón.
Los dispositivos que pueden no requerir la interacción humana pero
proporcionan datos en un formato similar a los dispositivos de
clase HID , por ejemplo, lectores de códigos de barras, termómetros o
voltímetros.
Muchos dispositivos típicos de clase HID incluyen indicadores, pantallas
especializadas, retroalimentación de audio y retroalimentación forzada o táctil. Por
lo tanto, la definición de clase HIDincluye soporte para varios tipos de resultados
dirigidos al usuario final.
Archivo descriptor
Cada proyecto basado en la biblioteca USB debe incluir un archivo fuente de
descriptor que contenga el ID y el nombre del proveedor, el ID y el nombre del
producto, la longitud del informe y otra información relevante. Para crear un
archivo descriptor, use el terminal USB HID integrado de mikroC PRO para PIC
( Herramientas ›Terminal USB HID ). El nombre predeterminado para el archivo
descriptor es USBdsc.c, pero puede cambiarle el nombre.
Importante:
Las rutinas de la librería USB han sido cambiadas. Tenga esto en cuenta
al migrar proyectos de versiones anteriores del compilador.
Además, esto se relaciona con el archivo fuente del descriptor, por lo
que es necesario crear un nuevo archivo descriptor para que su
proyecto funcione.
Rutinas de la biblioteca
HID_Enable
HID_Leer
HID_Write
HID_Disable
USB_Interrupt_Proc
USB_Polling_Proc
Gen_Enable
Gen_Read
Gen_Write
HID_Enable
Prototipo void HID_Enable ( char * readbuff, char *
writebuff);
Devoluciones Nada.
Requiere Nada.
HID_Leer
Prototipo char HID_Read ( void );
Descripción Recibe el mensaje del host y lo almacena en el búfer de
lectura.
Parámetros Ninguna.
Ejemplo //
vuelva a intentarlo hasta que tenga éxito while (!
HID_Read ())
;
Notas Ninguna.
HID_Write
Prototipo char HID_Write ( char * writebuff, char len);
Ejemplo //
vuelva a intentarlo hasta que tenga éxito while (!
HID_Write (& writebuff, 64))
;
HID_Disable
Prototipo void HID_Disable ( void );
Devoluciones Nada.
Notas Ninguna.
USB_Interrupt_Proc
Prototipo void USB_Interrupt_Proc ( void );
Parámetros Ninguna.
Devoluciones Nada.
Requiere Nada.
USB_Polling_Proc
Prototipo void USB_Polling_Proc ( void );
Parámetros Ninguna.
Devoluciones Nada.
Requiere Nada.
Gen_Enable
Prototipo void Gen_Enable ( char * readbuff, char *
writebuff);
Devoluciones Nada.
Notas Ninguna.
Gen_Read
Prototipo char Gen_Read ( char *
readbuff, char length, char ep);
Notas Ninguna.
Gen_Write
Prototipo char Gen_Write ( char *
writebuff, char length, char ep);
Notas Ninguna.
Ejemplo de biblioteca
Este ejemplo establece la conexión con el terminal HID que está activo en la
PC. Una vez establecida la conexión, el nombre del dispositivo HID aparecerá en la
ventana correspondiente. Después, el software esperará los datos y devolverá los
datos recibidos. Los ejemplos utilizan el USBdsc.carchivo descriptor, que se
encuentra en la misma carpeta y puede ser creado por el terminal HID.
Copiar código al portapapeles
unsigned char readbuff [64] absolute 0x500; // Los buffers deben estar
en USB RAM, consulte la hoja de datos
unsigned char writebuff [64] absolute 0x540;
char cnt;
char kk;
while (1) {
while (! HID_Read ())
;
Conexión HW
Importante:
isalfa
Prototipo isalpha corta sin signo ( carácter char );
iscntrl
Prototipo iscntrl corto sin signo ( carácter char );
isigigito
Prototipo un dígito corto sin signo ( carácter de carácter);
es bajo
Prototipo int islower ( Char personaje);
ispunct
Prototipo sin signo corto ispunct ( carácter char );
espacio de emisión
Prototipo espacio de escritura corto sin firmar ( carácter
de carácter);
isupper
Prototipo isupper corto sin signo ( carácter char );
isxdigit
Prototipo isxdigit corto sin signo ( carácter de carácter);
toupper
Prototipo toupper corto sin signo ( carácter de carácter);
reducir
Prototipo tolower corto sin firma ( carácter char );
Importante:
como en
Prototipo doble asin ( doble x);
un bronceado
Prototipo doble atan ( doble f);
atan2
Prototipo doble atan2 ( doble y, doble x);
hacer techo
Prototipo doble ceil ( doble x);
cos
Prototipo doble cos ( doble f);
aporrear
Prototipo doble cosh ( doble x);
exp
Prototipo doble exp ( doble x);
fabs
Prototipo fabs dobles ( doble d);
piso
Prototipo doble suelo ( doble x);
frexp
Prototipo doble frexp ( valor doble , int * eptr);
ldexp
Prototipo doble ldexp ( valor doble , int newexp);
Iniciar sesión
Prototipo doble registro ( doble x);
log10
Prototipo doble log10 ( doble x);
modf
Prototipo doble modf ( doble val, doble * iptr);
pow
Prototipo doble pow ( doble x, doble y);
pecado
Prototipo doble pecado ( doble f);
sinh
Prototipo doble pecado ( doble x);
sqrt
Prototipo doble cuadrado ( doble x);
bronceado
Prototipo doble bronceado ( doble x);
Tanh
Prototipo doble tanh ( doble x);
Importante:
Funciones de la biblioteca
abdominales
atof
atoi
atol
div
ldiv
uldiv
laboratorios
max
min
rand
srand
xtoi
abdominales
Prototipo int abs ( int a);
Descripción La función devuelve el valor absoluto (es decir, positivo)
de a.
atof
Prototipo doble atof ( char * s);
atoi
Prototipo int atoi ( char * s);
atol
Prototipo atol largo ( char * s);
div
Prototipo div_t div ( int número, int denom);
Descripción La función calcula el resultado de la división del
numerador numberpor el denominador denom; la función
devuelve una estructura de tipo que div_tcomprende
cociente ( quot) y resto ( rem), vea Div Structures .
ldiv
Prototipo ldiv_t ldiv ( largo número, largo denom);
uldiv
Prototipo uldiv_t uldiv ( número largo sin signo ,
denominación larga sinsigno);
laboratorios
Prototipo laboratorios largos ( largo x);
max
Prototipo int max ( int a, int b);
Descripción La función devuelve mayor de los dos enteros, ay b.
min
Prototipo int min ( int a, int b);
rand
Prototipo int rand ();
srand
Prototipo void srand ( sin signo x);
xtoi
Prototipo xtoi sin signo ( char * s);
Div Estructuras
Copiar código al portapapeles
Importante:
memcmp
Prototipo int memcmp ( void * s1, void * s2, int n);
memcpy
Prototipo void * memcpy ( void * d1, void * s1, int n);
memmove
Prototipo void * memmove ( void * to, void * from, int n);
memset
Prototipo void * memset ( void * p1, carácter char , int n);
strcat
Prototipo char * strcat ( char * to, char * from);
txt [3] = 0;
res = strcat (txt, "_test"); // rutina agregará el
'_test' en el lugar del primer carácter nulo,
agregando el carácter nulo que termina al resultado
// rutina devuelve la
dirección de la cadena 'txt'
strchr
Prototipo char * strchr ( char * ptr, char chr);
strcmp
Prototipo int strcmp ( char * s1, char * s2);
strcpy
Prototipo char * strcpy ( char * to, char * from);
Strlen
Prototipo int strlen ( char * s);
Strncat
Prototipo char * strncat ( char * to, char *
from, tamaño int );
txt [5] = 0;
resultado = strncat (txt, txt_sub, 4); // la rutina
agrega los primeros 4 caracteres de la cadena
'txt_sub' en el lugar del primer carácter nulo en la
cadena 'txt'
strncpy
Prototipo char * strncpy ( char * to, char *
from, tamaño int );
strspn
Prototipo int strspn ( char * str1, char * str2);
strncmp
Prototipo int strncmp ( char * s1, char * s2, char len);
strstr
Prototipo char * strstr ( char * s1, char * s2);
strcspn
Prototipo char * strcspn ( char * s1, char * s2);
Strpbrk
Prototipo char * strpbrk ( char * s1, char * s2);
Strrchr
Prototipo char * strrchr ( char * ptr, char chr);
strtok
Prototipo char * strtok ( char * s1, char * s2);
void main () {
Biblioteca de botones
La biblioteca de botones proporciona rutinas para la detección de pulsaciones de
botones y el rebote (eliminando la influencia del parpadeo de contacto al presionar
un botón).
Rutinas de la biblioteca
Botón
Botón
Prototipo Botón corto
sin firmar ( puerto corto * sin firmar , pin corto
sin firmar , tiempo corto
sin firmar , active_state corto sin firmar);
void main () {
ANSEL = 0; //
Configurar pines AN como E / S digital
ANSELH = 0;
C1ON_bit = 0; //
Desactivar comparadores
C2ON_bit = 0;
TRISB0_bit = 1; //
establece el pin RB0 como entrada
TRISC = 0x00; //
Configurar PORTC como salida
PORTC = 0xAA; //
Valor PORTC inicial
antiguo estado = 0;
do {
if (Button (& PORTB, 0, 1, 1)) {
// Detectar lógico
onestate = 1; //
indicador de actualización
}
if (oldstate && Button (& PORTB, 0, 1, 0)) {
// Detectar la transición de uno a cero
PORTC = ~ PORTC; //
Invertir PORTC
oldstate = 0; //
indicador de actualización
}
} while (1); //
Bucle sin fin
}
Biblioteca de conversiones
La biblioteca mikroC PRO for PIC Conversions proporciona rutinas para números a
cadenas y conversiones BCD / decimales.
Árbol de la dependencia de la biblioteca
Rutinas de la biblioteca
Puede obtener una representación de texto de valor numérico pasándolo a una de
las siguientes rutinas:
ByteToStr
ShortToStr
WordToStr
IntToStr
LongToStr
LongWordToStr
FloatToStr
WordToStrWithZeros
IntToStrWithZeros
LongWordToStrWithZeros
LongIntToStrWithZeros
ByteToHex
ShortToHex
WordToHex
IntToHex
LongWordToHex
LongIntToHex
Rtrim
Ltrim
Las siguientes funciones convierten los valores decimales en BCD y viceversa:
Dec2Bcd
Bcd2dec
Dec2Bcd16
Bcd2dec16
ByteToStr
Prototipo void ByteToStr ( entrada corta sin
signo , salida char *);
Devoluciones Nada.
ShortToStr
Prototipo void ShortToStr ( entrada corta , salida char *);
Devoluciones Nada.
WordToStr
Prototipo void WordToStr ( entrada sin
firmar , salida char *);
Devoluciones Nada.
IntToStr
Prototipo void IntToStr ( int input, char * output);
Devoluciones Nada.
LongToStr
Prototipo void LongToStr ( entrada larga , salida char *);
Devoluciones Nada.
LongWordToStr
Prototipo void LongWordToStr ( entrada larga sin
signo , salida char *);
Devoluciones Nada.
Descripción Convierte un número entero largo sin firmar de entrada en
una cadena. La cadena de salida tiene un ancho fijo de 11
caracteres, incluido un carácter nulo al final (terminación
de cadena). La cadena de salida está justificada a la
derecha y las posiciones restantes a la izquierda (si las
hay) se rellenan con espacios en blanco.
Parámetros:
input: Número entero largo sin firmar para
convertir
output: cadena de destino
FloatToStr
Prototipo unsigned char FloatToStr ( float fnum, unsigned
char * str);
WordToStrWithZeros
Prototipo void WordToStrWithZeros ( entrada int sin
firmar , salida char *);
Devoluciones Nada.
IntToStrWithZeros
Prototipo void IntToStrWithZeros ( int input, char *
output);
Devoluciones Nada.
LongWordToStrWithZeros
Prototipo void LongWordToStrWithZeros ( entrada larga sin
signo , salida char *);
Devoluciones Nada.
Descripción Convierte la palabra larga de entrada en una cadena. La
cadena de salida tiene un ancho fijo de 11 caracteres,
incluido un carácter nulo al final (terminación de
cadena). La cadena de salida está justificada a la derecha y
las posiciones restantes a la izquierda (si las hay) se
rellenan con ceros.
Parámetros:
input: Número largo sin firmar para convertir
output: cadena de destino
LongIntToStrWithZeros
Prototipo void LongIntToStrWithZeros
( entrada larga , salida char *);
Devoluciones Nada.
ByteToHex
Prototipo void ByteToHex ( Char de entrada, Char * salida);
Devoluciones Nada.
ShortToHex
Prototipo void ShortToHex ( entrada corta sin
signo , salida char *);
Devoluciones Nada.
WordToHex
Prototipo void WordToHex ( entrada sin
firmar , salida char *);
Devoluciones Nada.
IntToHex
Prototipo void IntToHex ( int input, char * output);
Devoluciones Nada.
LongWordToHex
Prototipo void LongWordToHex ( entrada larga sin
signo , salida char *);
Devoluciones Nada.
LongIntToHex
Prototipo void LongIntToHex ( entrada int
larga , salida char *);
Devoluciones Nada.
Dec2Bcd
Prototipo Dec2Bcd corto sin firmar (decnum corto
sin firmar );
Requiere Nada.
Bcd2dec
Prototipo Bcd2Dec corto sin firmar (decnum corto
sin firmar );
Requiere Nada.
Dec2Bcd16
Prototipo sin firmar Dec2Bcd16 ( decreto sin firmar);
Requiere Nada.
Bcd2dec16
Prototipo Bcd2Dec16 sin firmar ( bcdnum sin firmar);
Requiere Nada.
Rtrim
Prototipo char * Rtrim ( char * string);
Devoluciones La función devuelve el puntero a la matriz sin espacios
finales.
Requiere Nada.
Ltrim
Prototipo char * Ltrim ( char * string);
Requiere Nada.
Biblioteca de PrintOut
El mikroC PRO para PIC proporciona la rutina PrintOut para un fácil formateo e
impresión de datos.
Rutinas de la biblioteca
Imprimir
Imprimir
Prototipo void PrintOut ( void (* prntoutfunc)
( char ch), const char * f, ...);
Devolucione Nada.
s
Número decimal
d int
firmado
Número
hexadecimal sin
unsigned in
X signo utilizando
t
0123456789ABCED
F
Número de punto
flotante con el
f double
formato [-]
dddd.dddd
Número de punto
flotante con el
e double
formato [-] d.dddde
[-] dd
Número de punto
flotante con el
E double
formato [-] d.ddddE
[-] dd
Número de punto
flotante con el
formato e o f, el
g double que sea más
compacto para el
valor y la precisión
especificados
intse convierte
en un unsigned
c int char, y el
carácter resultante
se escribe
Cadena con un
s char * carácter nulo de
terminación
Requiere Nada.
void main () {
UART1_Init (9600);
Delay_ms (100);
Biblioteca de Setjmp
Esta biblioteca contiene definiciones de funciones y tipos para omitir la llamada de
función normal y la disciplina de devolución. El tipo declarado es jmp_buf, que es
un tipo de matriz adecuado para mantener la información necesaria para restaurar
un entorno de llamada.
La declaración de tipo está contenida en los archivos de cabecera sejmp16.h y
setjmp18.h para las mcus de las familias PIC16 y PIC18, respectivamente. Estos
encabezados se pueden encontrar en la carpeta de inclusión del compilador. La
implementación de esta biblioteca es diferente para los mcus de las familias PIC16
y PIC18. Para la familia PIC16, Setjmp y Longjmp se implementan como macros
definidas en el archivo de encabezado setjmp16.h y para la familia PIC18 como
funciones definidas en el archivo de biblioteca setjmp.
Rutinas de la biblioteca
Setjmp
Longjmp
Setjmp
Prototipo int setjmp ( jmp_buf env);
Requiere Nada.
Longjmp
Prototipo void longjmp ( jmp_buf env, int val);
Ejemplo de biblioteca
El ejemplo muestra la función de llamada cruzada usando las funciones setjmp y
longjmp. Cuando se llama, Setjmp () guarda su entorno de llamada en su
argumento jmp_buf para su uso posterior por el Longjmp (). Longjmp (), por otro
lado, restaura el entorno guardado por la invocación más reciente de Setjmp () con
el argumento jmp_buf correspondiente. El ejemplo dado es para P16.
Copiar código al portapapeles
#include <setjmp16.h>
Biblioteca Sprint
El mikroC PRO para PIC proporciona la función estándar ANSI C Sprintf para
facilitar el formateo de datos.
Nota: Además del estándar ANSI C, la Biblioteca Sprint también incluye dos
versiones limitadas de la sprintffunción ( sprintiy sprintl)
Estas funciones requieren menos ROM y RAM y pueden ser más convenientes
para el uso en algunos casos.
Funciones
sprintf
sprintl
sprinti
sprintf
Prototipo void sprintf ( char * wh, const code char * f,
...);
Número decimal
d int
firmado
Número
unsigned in hexadecimal sin
x
t firmar utilizando
0123456789abcdef
Número
hexadecimal sin
unsigned in
X signo utilizando
t
0123456789ABCED
F
Número de punto
flotante con el
f double
formato [-]
dddd.dddd
Número de punto
flotante con el
e double
formato [-] d.dddde
[-] dd
Número de punto
flotante con el
E double
formato [-] d.ddddE
[-] dd
Número de punto
flotante con el
formato e o f, el
g double que sea más
compacto para el
valor y la precisión
especificados
intse convierte
a unsigned
c int char, y el
carácter resultante
se escribe
Cadena con un
s char * carácter nulo de
terminación
Se escribe un%. No
se convierte ningún
argumento. La
% <none>
especificación de
conversión
completa será %%.
sprintl
Prototipo void sprintl ( char * wh, const code char * f,
...);
sprinti
Prototipo void sprinti ( char * wh, const code char * f,
...);
Ejemplo de biblioteca
Esta es una demostración del uso estándar de la rutina de la biblioteca C
sprintf. Tres representaciones diferentes del mismo número de poing flotante
obtenidas mediante el uso de la rutina sprintf se envían a través de UART.
Copiar código al portapapeles
doble ww = -1.2587538e + 1;
búfer de char [15];
void main () {
Biblioteca de tiempo
La biblioteca de tiempo contiene funciones y definiciones de tipo para los cálculos
de tiempo en el formato de tiempo UNIX que cuenta el número de segundos desde
la "época". Esto es muy conveniente para los programas que trabajan con
intervalos de tiempo: la diferencia entre dos valores de tiempo UNIX es una
diferencia de tiempo real medida en segundos.
¿Cuál es la época?
Originalmente se definió como el principio de 1970 GMT. (1 de enero de 1970, día
de Julian) GMT, Greenwich Mean Time, es un término tradicional para la zona
horaria de Inglaterra.
El tipo TimeStruct es un tipo de estructura adecuado para el almacenamiento de
fecha y hora. La declaración de tipo __Time.hse encuentra en la carpeta de ejemplo
de demostración de la biblioteca de tiempo de mikroC PRO for PIC.
Rutinas de la biblioteca
Time_dateToEpoch
Time_epochToDate
Time_dateDiff
Time_dateToEpoch
Prototipo long Time_dateToEpoch ( TimeStruct * ts);
Devoluciones Número de segundos desde el 1 de enero de 1970
0h00mn00s.
Requiere Nada.
Time_epochToDate
Prototipo void Time_epochToDate ( long e, TimeStruct * ts);
Devoluciones Nada.
Requiere Nada.
Time_dateDiff
Prototipo long Time_dateDiff ( TimeStruct * t1, TimeStruct *
t2);
Devoluciones La diferencia de tiempo en segundos como un largo
firmado.
Requiere Nada.
Ejemplo de biblioteca
Demostración del uso de las rutinas de la biblioteca de tiempo para cálculos de
tiempo en formato de tiempo UNIX.
Copiar código al portapapeles
#include "timelib.h"
void main () {
ts1.ss = 0;
ts1.mn = 7;
ts1.hh = 17;
ts1.md = 23;
ts1.mo = 5;
ts1.yy = 2006;
/ *
* ¿Cuál es la época de la fecha en ts?
* /
epoch = Time_dateToEpoch (& ts1); // 1148404020
/ *
* ¿Qué fecha es la época 1234567890?
* /
época = 1234567890;
Time_epochToDate (epoch, & ts2); // {0x1E, 0x1F, 0x17, 0x0D, 0x04,
0x02, 0x07D9}
/ *
* ¿Cuántos segundos hay entre estas dos fechas?
* /
diff = Time_dateDiff (& ts1, & ts2); // 86163870
}
Biblioteca de trigonometría
El mikroC PRO for PIC implementa funciones de trigonometría fundamentales. Estas
funciones se implementan como tablas de consulta. Las funciones de trigonometría
se implementan en formato entero para ahorrar memoria.
Rutinas de la biblioteca
sinE3
cosE3
sinE3
Prototipo int sinE3 ( angle_deg sin signo);
Requiere Nada.
cosE3
Prototipo int cosE3 ( angle_deg sin signo);
Requiere Nada.
Gerente de biblioteca
Library Manager permite el manejo sencillo de bibliotecas que se utilizan en un
proyecto. La ventana del Administrador de bibliotecas enumera todas las bibliotecas
(extensión .mcl) que se almacenan instantáneamente en la carpeta Usos del
compilador . La biblioteca deseable se agrega al proyecto seleccionando la casilla de
verificación junto al nombre de la biblioteca.
Para tener acceso a todas las funciones de la biblioteca, simplemente presione el
botón Verificar todas y se seleccionarán todas las bibliotecas. En caso de que
no se necesite ninguna biblioteca en un proyecto, presione el botón Borrar
todo y todas las bibliotecas se borrarán del proyecto.
Solo se enlazarán las bibliotecas seleccionadas.
Icono Descripción
Temas relacionados: mikroC PRO para bibliotecas PIC , creando una nueva
biblioteca
Archivos fuente
Los archivos fuente que contienen código fuente deben tener la extensión .c. La
lista de archivos de origen relevantes para la aplicación se almacena en un archivo
de proyecto con extensión .mcppi, junto con otra información del proyecto. Puede
compilar archivos de origen solo si son parte del proyecto.
Use la directiva del preprocesador #includepara incluir archivos de encabezado con
la extensión .h. No confíe en que el preprocesador incluya archivos de origen que
no sean encabezados; consulte Agregar / Eliminar archivos del
proyecto para obtener más información.
Administrar archivos de origen
Creando nuevo archivo fuente
Para crear un nuevo archivo fuente, haga lo siguiente:
1. Seleccione Archivo ›Nueva unidad en el menú desplegable, o
Icono Descripción
Gerente de proyecto
Project Manager es una función IDE que permite a los usuarios gestionar múltiples
proyectos. Varios proyectos que en conjunto forman un grupo de proyecto pueden
estar abiertos al mismo tiempo. Solo uno de ellos puede estar activo en este
momento.
La configuración del proyecto en modo activo se realiza haciendo doble clic en el
proyecto deseado en el Administrador de proyectos, lo que resultará en el nombre
del proyecto en negrita.
Además, el nombre del proyecto actualmente activo se mostrará en el título de la
ventana del Administrador de programas, junto con la cantidad de proyectos en el
grupo de proyectos.
Ajustes de salida
Al modificar la configuración de salida, el usuario puede configurar el contenido de
los archivos de salida.
Puede habilitar o deshabilitar, por ejemplo, la generación de ASM y el archivo de
lista.
Además, el usuario puede elegir el nivel de optimización y la configuración
específica del compilador, que incluye la sensibilidad a las mayúsculas y
minúsculas, el enlace dinámico para la configuración de literales de cadena
(descrito en mikroC PRO para las especificaciones PIC ).
Crear todos los archivos como biblioteca permite al usuario utilizar la biblioteca
compilada ( *.mcl) en cualquier MCU (cuando esta casilla está marcada), o para
una MCU seleccionada (cuando esta casilla no está marcada).
Para obtener más información sobre la creación de nuevas bibliotecas,
consulte Crear una nueva biblioteca .
Editor de código
El Editor de Código es un editor de texto avanzado diseñado para satisfacer las
necesidades de los profesionales. La edición de código general es lo mismo que
trabajar con cualquier editor de texto estándar, incluidas las acciones familiares de
Copiar, Pegar y Deshacer, comunes en el entorno de Windows.
Las opciones disponibles del Editor de código son: Configuración del editor, Colores
del editor, Corrección automática, Completar automáticamente y Estilo.
Configuraciones del editor
Las características principales de la configuración del editor son:
Guardar automáticamente
Resaltador
Ortografía
Estilo de comentario
Código Plegable
Asistente de código
Asistente de parámetros
Marcadores e ir a la línea
Guardar automáticamente
Auto Save es una función que guarda automáticamente un proyecto abierto, lo que
ayuda a reducir el riesgo de pérdida de datos en caso de un bloqueo o
congelación. El guardado automático se realiza en intervalos de tiempo definidos
por el usuario.
Resaltador
Resaltar es una característica conveniente para detectar corchetes que indican el
comienzo o el final de una rutina, al hacerlos visualmente distintos.
Ortografía
El corrector ortográfico subraya los objetos desconocidos en el código, para que se
puedan notar y corregir fácilmente antes de compilar su proyecto.
Seleccione Herramientas ›Opciones en el menú desplegable, o haga clic en el
Asistente de parámetros
El Asistente de parámetros se invocará automáticamente cuando abra el paréntesis
“(” o presione Shift + Ctrl + Space . Si el nombre de una función válida precede al
paréntesis, los parámetros esperados se mostrarán en un panel flotante. A medida
que escribe el parámetro real, El siguiente parámetro esperado se pondrá en
negrita.
Marcadores
Los marcadores hacen que la navegación a través de un código grande sea más
fácil. Para establecer un marcador, use Ctrl + Shift + number . El mismo principio se
aplica a la eliminación de los marcadores. Para saltar a un marcador,
usa Ctrl + number .
Ir a la linea
La opción Ir a la línea facilita la navegación a través de un código grande. Usa el
atajo Ctrl + G para activar esta opción.
Modo de selección de columna
Este modo cambia la operación del editor para seleccionar texto. Cuando se utiliza
el modo de selección de columna, el texto resaltado se basa en la posición de la
columna de caracteres del primer carácter seleccionado en la columna del último
carácter del texto seleccionado.
El texto seleccionado en este modo no incluye automáticamente todo el texto entre
la posición inicial y final, pero incluye todo el texto en las columnas entre el primer
y el último carácter seleccionado.
La edición del modo de columna a veces se denomina edición del modo de
bloque, ya que el hecho de seleccionar texto forma un rectángulo.
Para ingresar a este modo, presione Alt + botón izquierdo del ratón, arrastre el
mouse hacia la dirección deseada y seleccione el texto.
Colores del editor
La opción de colores del editor permite al usuario configurar, cambiar y guardar las
configuraciones de texto y color organizadas en esquemas. Los esquemas
representan una apariencia gráfica personalizada que se puede aplicar a la GUI
(Interfaz Gráfica de Usuario) para los gustos satifsy de diferentes usuarios.
Auto corregir
La opción Corrección automática facilita al usuario de tal manera que corrige
automáticamente los errores comunes de escritura o ortografía a medida que se
escribe.