Hola amigos!!!
Eh realizado unas modificaciones al programa y me parece que esta funcionando muy bien , de entrada quite el uso de interrupciones en el usart y me esta funcionando mejor (pienso yo) y no se si el usar el usart sin interrupciones es malo?? que piensan?
/********************************************************************
FileName: main.c
Dependencies: See INCLUDES section
Processor: PIC18, PIC24, and PIC32 USB Microcontrollers
Hardware: This demo is natively intended to be used on Microchip USB demo
boards supported by the MCHPFSUSB stack. See release notes for
support matrix. This demo can be modified for use on other hardware
platforms.
Complier: Microchip C18 (for PIC18), C30 (for PIC24), C32 (for PIC32)
********************************************************************/
/** INCLUDES *******************************************************/
#include "HardwareProfile.h"
#include "GenericTypeDefs.h"
#include "string.h"
#include "usart.h"
#include "delays.h"
#include "xlcd.h"
/** CONFIGURATION **************************************************/
#if defined(FOZZ_BOARD) // Configuration bits for PICDEM FS USB Demo Board (based on PIC18F4550)
#pragma config PLLDIV = 3
#pragma config CPUDIV = OSC3_PLL4
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = ON //USB Voltage Regulator
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
// #pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
// #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming
#pragma config XINST = OFF // Extended Instruction Set
#pragma config CP0 = OFF
#pragma config CP1 = OFF
// #pragma config CP2 = OFF
// #pragma config CP3 = OFF
#pragma config CPB = OFF
// #pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
// #pragma config WRT2 = OFF
// #pragma config WRT3 = OFF
#pragma config WRTB = OFF // Boot Block Write Protection
#pragma config WRTC = OFF
// #pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
// #pragma config EBTR2 = OFF
// #pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
#else
#error No hardware board defined, see "HardwareProfile.h" and __FILE__
#endif
/* ** PRIVATE PROTOTYPES ** */
void BlinkBTStatus(void);
void PassOK(void);
void ProcessIO(void);
/* ** Variables de uso general ** */
volatile unsigned char BufferPass [64];
static BOOL BTControl;
BOOL blinkStatusValid = TRUE;
/********************************************************************
* Function: void main(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: Main program entry point.
*
* Note: None
*******************************************************************/
void main(void) {
mInitAllLEDs();
OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 155);
BTControl = 0;
while (BusyUSART());
putrsUSART("\fintroducir Pasword \r\n");
while (1) {
if (BTControl == 1) {
ProcessIO(); //This function is a place holder for other user routines. It is a mixture of tasks.
} else {
PassOK(); //Verificar contraseña
}
}
}
/********************************************************************
* Function: void ProcessIO(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: This function is a place holder for other user
* routines. It is a mixture of tasks.
*
* Note: None
*******************************************************************/
void ProcessIO(void) {
//Blink the LEDs according to the USB device status
if (blinkStatusValid) {
BlinkBTStatus();
}
}
/********************************************************************
* Function: void PassOK(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: This function grant acces to the serial control
*
* Note:
*******************************************************************/
void PassOK(void) {
while (!DataRdyUSART());
memset(BufferPass,0,sizeof(BufferPass));
getsUSART(BufferPass, 4);
if (strcmppgm2ram(BufferPass, "1234") == 0) {
while (BusyUSART());
putrsUSART("Accsess Granted \r\n");
BTControl = 1;
} else {
while (BusyUSART());
putrsUSART("Accsess Denied \r\n");
BTControl = 0;
}
}
/********************************************************************
* Function: void BlinkBTStatus(void)
*
* PreCondition: None
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: BlinkBTStatus turns on and off LEDs
* corresponding to the control state.
*
* Note: mLED macros can be found in HardwareProfile.h
*******************************************************************/
void BlinkBTStatus(void) {
// No need to clear UIRbits.SOFIF to 0 here.
// Callback caller is already doing that.
static WORD led_count = 0;
if (led_count == 0)led_count = 10000U;
led_count--;
#define mLED_Both_Off() {mLED_1_Off();mLED_2_Off();}
#define mLED_Both_On() {mLED_1_On();mLED_2_On();}
#define mLED_Only_1_On() {mLED_1_On();mLED_2_Off();}
#define mLED_Only_2_On() {mLED_1_Off();mLED_2_On();}
if (BTControl == 1) {
if (led_count == 0) {
mLED_1_Toggle();
mLED_2_Off();
}//end if
}
}