會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





16F1824 UR問題發問
初級會員
註冊日期:
2015/07/18 15:05
所屬群組:
註冊會員
文章: 22
等級: 3; EXP: 41
HP : 0 / 60
MP : 7 / 425
離線
各位先進好 :
我使用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
}
}

}

4月12日 11:42:37
轉換PDF檔 列印


Re: 16F1824 UR問題發問
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14183
等級: 72; EXP: 56
HP : 1073 / 1789
MP : 4727 / 71235
離線
在 Data Sheet 裡,RCIF 的f除機制是讀取 REREG 暫存器後 RCIF 就會自動被清除。

先架設你的 PPS 設定 UART 的腳位是正確的。

建議你直接修改一下SendByteSerially(RCREG); // Echo back received char 為 TXREG=RCREG; 看看。這時只要收什麼就會傳什麼出去。如果還不行就要使用斷點設定來檢測一下中斷是否有發生。

4月12日 12:05:05
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2017 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project