Zaseknutí PIC16F877A

Tak jsem si po delší době opět začal hrát se starým picem. Starší programy jsem měl na jiném pc a už jsem ztratil zdrojáky. Když se pokouším zprovoznit si UART s PC tak narážím na zásadní problém. PIC nereaguje, v hlavní smyčce mám jen blikání ledkou, pokud je uart vypnutý, ledka bliká, pokud jej zapnu, ani se nerozsvítí. Programuju v C (PICC a Hi-tide). HW je v pořádku( i když používám převodník USB->RS232) protože ho programuji přes bootloader a tak to funguje. Mám pocit, že jsem jednou už podobnou věc řešil a pak to byla nějaká prkotina. Jenže teď už nemám sil to hledat, jsem ještě nějakej zničenej po silvestru a nezapaluje mi to. Tak třeba kdyby už někdo věděl…
Tady je init, vygeneroval to hitide:

[code]#include <htc.h>

/* Program device configuration word

  • Oscillator = XT
  • Watchdog Timer = Off
  • Power Up Timer = On
  • Brown Out Detect = On
  • Low Voltage Program = Enabled
  • Flash Program Write = Write Protection Off
  • Background Debug = Disabled
  • Data EE Read Protect = Off
  • Code Protect = Off
    */
    __CONFIG(XT & WDTDIS & PWRTEN & BOREN & LVPEN & WRTEN & DEBUGDIS & DUNPROT & UNPROTECT);

// Peripheral initialization function
void init(void){
/***** Common Code ****
* Timer 2 interrupt enabled.
* Usart TX interrupt enabled.
* Usart RX interrupt enabled.
* A2D interrupt enabled
/
PIE1 = 0b01110010;
/

* A2D Converter input (AN0) on RA0
* A2D Converter input (AN1) on RA1
* A2D Converter input (VREF-) on RA2
* A2D Converter input (VREF+) on RA3
/
TRISA = 0b00001111;
/

* Peripheral interrupts enabled
* Global interrupt disabled during initialization
*/
INTCON = 0b01000000;

/***** A2D Converter Code ****
 *  A2D module powered up
 *  Channel selected is AN0
 *  conversion clock is set at Fosc/8
 */
ADCON0	= 0b01000001;
/*
 *  Analog/Digital ports using configuration 14
 *  Format is right justified
 */
ADCON1	= 0b10001110;

/***** PortD Code ****
 *  Port directions: 1=input, 0=output
 */
TRISD	= 0b00000000;

/***** Timer 2 Code ****
 *  Prescale ratio is 1:16
 *  Timer 2 is active
 *  Postscale ratio set to 1:16
 */
T2CON	= 0b01111110;
/*
 *  Period register set to 0xFF
 */
PR2	= 0b11111111;

/***** Usart Code ****
 *  High speed baud rate generator enabled
 *  Usart in Asynchronous mode
 *  Usart transmission enabled
 *  TX in eight bit format
 */
TXSTA	= 0b00100100;
/*
 *  Usart reception enabled
 *  RX in eight bit format
 *  Usart module disabled
 */
RCSTA	= 0b00010000;
/*
 *  Baud rate is 19200
 */
SPBRG	= 0b00001010;

ei();	// Global interrupts enabled

}
[/code]
Teď dokonce koukám, že tam mám, baud rate 19200, nejsem si jistej jestli to je ok. bootloader mi s tím nechtěl běhat, ale zkoušel jsem i 9600, které mám odzkoušené a taky bez úspěchu.

Tak problém spočívá nejspíš někde v přerušení…

Problém byl opravdu v přerušení kdybych si datasheet přečetl pečlivě tak to vim, protože jsem v TXREG neměl data, tak se pořád předávalo řízení přerušení.