Académique Documents
Professionnel Documents
Culture Documents
INGENIERÍA ELECTRÓNICA
Sucre-Bolivia
PROYECTO 8.2 — Entrada / Salida de microcontroladores basados en USB
1. Descripción del proyecto.
donde el carácter P indica el inicio de los datos, n es el byte que se enviará a PORTB y T
es el carácter de terminación.
Por ejemplo, si se deben establecer los bits 3 y 4 de PORTB, es decir, PORTB =
"00011000", entonces el programa de Visual Basic envía el paquete P = 24T (el número
24 se envía como un solo byte binario y no como dos bytes ASCII) al microcontrolador
a través del enlace USB. La parte inferior del formulario muestra el estado de la conexión.
El reloj del microcontrolador debe configurarse como en el Proyecto 8.1 (es decir, tanto
la CPU como el módulo USB deben tener relojes de 48MHz).
4. Código y Descripción.
#include "C:\Program
Files\Mikroelektronika\mikroC\Examples\EasyPic4\extra_examples\HIDlibrary\
USBdsc.c"
unsigned char Read_buffer[64];
unsigned char Write_buffer[64];
unsigned char num,i;
//
// Rutina de servicio del temporizador de interrupción
//
void interrupt()
{
HID_InterruptProc(); // Keep alive
TMR0L = 100; // Reload TMR0L
INTCON.TMR0IF = 0; // Re-enable TMR0 interrupts
}
//
// Inicia el programa principal
//
void main()
{
ADCON1 = 0xFF; // Set PORTB to digital I/O
TRISB = 0; // Set PORTB to outputs
PORTB = 0; // PORTB all 0s to start with
//
// Establecer los registros de interrupción en los valores predeterminados de encendido
// Desabilita todas las interrupciones
//
INTCON=0;
INTCON2=0xF5;
INTCON3=0xC0;
RCON.IPEN=0;
PIE1=0;
PIE2=0;
PIR1=0;
PIR2=0;
//
// Configurar el temporizador 0 para interrupciones de 20ms. Establece preescala en 256
// y cargue TMR0L a 156 para que el intervalo de tiempo para el temporizador
// las interrupciones a 8MHz son 256 ∗ 156 ∗ 0.5 = 20ms
//
// El temporizador está en modo de 8 bits por defecto
//
T0CON = 0x47; // Prescaler = 256
TMR0L = 100; // Timer count is 256-156 = 100
INTCON.TMR0IE = 1; // Enable T0IE
T0CON.TMR0ON = 1; // Turn Timer 0 ON
INTCON = 0xE0; // Enable interrupts
//
// Habilitar puerto USB
//
Hid_Enable(&Read_buffer, &Write_buffer);
Delay_ms(1000);
Delay_ms(1000);
//
// Leer desde el puerto USB. El número de bytes leídos está en num.//
for(;;) // do forever
{
num=0;
while(num != 4)
{
num = Hid_Read();
}
if(Read_buffer[0] == 'P' && Read_buffer[1] == '=' &&
Read_buffer[2] == '?' && Read_Buffer[3] == '?')
{
TRISB = 0xFF;
Write_buffer[0] = 'P'; Write_buffer[1] = '=';
Write_buffer[2] = PORTB; Write_buffer[3] = 'T';
Hid_Write(&Write_buffer,4);
}
else
{
if(Read_buffer[0] == 'P' && Read_buffer[1] == '=' &&
Read_buffer[3] == 'T')
{
TRISB = 0;
PORTB = Read_buffer[2];
}
}
}
Hid_Disable();
}
5. Simulación del proyecto.