16F1824 UR問題發問

作者 moteqqqq 於 2017年04月12日 11:42:37
各位先進好 :
我使用16F1824 , 程式中可以成功將字串傳送至終端機 , 但想利用中斷方式接收 , 將電腦KEY入的字元接收後 ,顯示在終端機上 ,但不知為何總是無法接收 ,終端機上永遠無顯示任何東西 , 看了老半天也不知什麼問題 ? 可以請各位先進指出程式中的哪裡錯誤嗎 ? 感恩



/*****************************
INITIALIZE FOSC
*****************************/
void Init_INTOSC( void )
{
IRCF0 = 1;
IRCF1 = 1;
IRCF2 = 1;
IRCF3 = 1;
SCS1 = 1;
}

void Init_System(void)
{

TRISA = 0b00000001; // 設定RA0為輸入
ANSELA =0b00000000; // 設定RA0為 IO PIN
// ANSEL = 0x00; // 關閉 PORTA AN0~AN4的AD , 設定PORTA全為數位IO
// ANSELH = 0x00; // 關閉 PORTB AN8~AN13的AD , 設定PORTB全為數位IO
}

// =================================================================

void InitUART(void)
{
TRISB5 = 1; //
TRISB7 = 0; //

RXDTSEL = 0; //表示1828裡的RB5為RX功能
TXCKSEL = 0 ; //表示1828裡的RB7為TX功能

TXIE = 0; // Disable tx interrupts
RCIE = 1; // Enable rx interrupts

BRGH = 1; // Fast baudrate
BRG16 = 0; //選擇8位元波特率發射器
SYNC = 0; // Asynchronous
SPBRGL = 0b01100111 ;
SPEN = 1; // Enable serial port pins
CREN = 1; // Enable reception
SREN = 0; // No effect


TX9 = 0; // 8-bit transmission
RX9 = 0; // 8-bit reception
//TXEN = 0; // Reset transmitter
TXEN = 1; // Enable the transmitter
}




void SendByteSerially(unsigned char Byte) // Writes a character to the serial port
{
while(!TXIF); // wait for previous transmission to finish
TXREG = Byte;

}

unsigned char ReceiveByteSerially(void) // Reads a character from the serial port
{
if(OERR) // If over run error, then reset the receiver
{
CREN = 0;
CREN = 1;
}

while(!RCIF); // Wait for transmission to receive

return RCREG;
}

void SendStringSerially(const unsigned char* st)
{
while(*st)
SendByteSerially(*st++);
}


void interrupt ISR(void)
{
if(RCIF) // If UART Rx Interrupt
{
if(OERR || FERR) // If over run error, then reset the receiver
{
CREN = 0;
NOP();
NOP();
CREN = 1;
}

SendByteSerially(RCREG); // Echo back received char
}
}




void main(void)
{

Init_INTOSC();
Init_System(); // Initialize System Function and Variables
InitUART(); // Intialize UART

GIE = 1; // Enable global interrupts
PEIE = 1; // Enable Peripheral Interrupts




while(1)
{
if(RA0 == 0)
{
SendStringSerially("Hello World!"); // Send string on UART
}
}

}

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=20583&post_id=74827