PIC16F886 + USART = ofunk
Postat: 19 maj 2016, 11:02:30
Jag labbar med en PIC16F886 och försöker spotta ut lite data på serieporten, men den PC som är inkopplad på kabeln reagerar inte alls. Har provat både asynkront och synkront, men det blir samma fel (dvs ingenting).
PIC:en sitter på ett kopplingsdäck, har ingenting inkopplat utöver Wisp648, och har ingen gammal firmware i sig som skulle kunna störa (kör erase för varje programmering). PIC:ens Vss + TX + RX är kopplade till en Serial-to-USB-adapter, som sitter i PC:n som COM6, och Putty lyssnar på COM6. PIC:en är inställd på 9600bps, Putty likaså.
Är det något i koden jag missar? Den är i princip kattenpejstad från databladet.
PIC:en sitter på ett kopplingsdäck, har ingenting inkopplat utöver Wisp648, och har ingen gammal firmware i sig som skulle kunna störa (kör erase för varje programmering). PIC:ens Vss + TX + RX är kopplade till en Serial-to-USB-adapter, som sitter i PC:n som COM6, och Putty lyssnar på COM6. PIC:en är inställd på 9600bps, Putty likaså.
Är det något i koden jag missar? Den är i princip kattenpejstad från databladet.
Kod: Markera allt
#include <xc.h>
void putch(char data)
{
while( ! TXIF)
continue;
TXREG = data;
}
void init_uart(void)
{
// Async
/* SPBRG = 12; // 9600 baud @ 8 MHz
TXEN = 1; // enable transmitter
BRGH = 0; // de-select high baud rate
BRG16 = 0;
SYNC = 0;
SPEN = 1; // enable serial port
CREN = 1; // enable continuous operation
*/
// Sync
SYNC = 1;
BRG16 = 0;
CSRC = 1;
SREN = 0;
CREN = 0;
SPEN = 1;
TXEN = 1;
SPBRG = 12;
}
void init_MCU() {
OSCCON = 0b01110001; // 8MHz INTOSC
ANSEL = 0; // No analog inputs
TRISA = TRISB = 0; // All outputs
CM1CON0 = CM2CON0 = 0; // Disable comparators
INTCON = PEIE = 0;
OPTION_REG = 0;
init_uart();
}
void main() {
init_MCU();
for(;;) {
putch('K');
putch('o');
putch('r');
putch('v');
}
}