PDA

View Full Version : USART trong C18


const_nos
27-03-2010, 12:24 PM
hiện tại mình đang làm truyền kô đồng bộ cho con 18f67j60 dùng C18. và đang gặp khó khăn về xữ lí ngắt Nhận. Code của mình thế này:


#include "p18f67j60.h"
#include "lastfile.h"
#include "stdio.h"
#pragma config XINST=OFF, WDT=OFF, FOSC2=ON, FOSC=HS, ETHLED=OFF

void rx_handler (void);

#pragma code rx_interrupt = 0x08
void rx_int (void)
{
_asm goto rx_handler _endasm
}
#pragma code

#pragma interrupt rx_handler
void rx_handler (void)
{
unsigned char c;

/* Get the character received from the USART */
c = ReadUSART();
PORTB = c;
WriteUSART('w');

/* Clear the interrupt flag */
PIR1bits.RCIF = 0;
}

void main (void)
{
/* Configure all PORTB pins for output */
TRISB = 0x00;
OpenUSART();

/* Display a prompt to the USART */
putrsUSART ((const rom char*)"\n\rEnter a digit 0-9!\n\r");

/* Enable interrupt priority */
RCONbits.IPEN = 1;

/* Make receive interrupt high priority */
IPR1bits.RCIP = 1;

/* Enable all high priority interrupts */
INTCONbits.GIEH = 1;

putrsUSART((const rom char*)"\n\rWaiting interrupt.....\n\r");
printf("Dung lenh cua thu vien C...");
/* Loop forever */
while (1)
;
}

Trong đó lastfile.h là file mình khai báo lại các lệnh và cấu hình cho USART.(mình đã đính kèm theo).Nhờ các cao thủ xem và chỉ giúp Code bị lỗi chổ nào mà nó không chạy.mình dùng Vituar Teminal của protues để mô phỏng. Thank mọi người trước.

const_nos
28-03-2010, 12:13 PM
Hic sao không có ai quan tam thế nhỉ?

greenfield
28-03-2010, 02:47 PM
Tớ quan tâm nhưng không giúp gì được cả.hichic

const_nos
28-03-2010, 07:06 PM
Các bạn cho hỏi : extern union USART USART_Status;
USART_Status.val &= 0xf2;

Được khai báo trong uread trong C:\MCC18\src\traditional\pmc\USART có tác dụng như thế nào? nó nằm trong file C của hàm ReadUSART. Khi mình khai báo lại trong file mới thì mình không dùng biến này:

char ReadUSART(void)
{
char data; // Holds received data

data = RCREG; // Read data

return (data); // Return the received data
}

hàm lệnh này có ổn không nhỉ. Sao mà mình dùng nó trong chương trình của mình thì chỉ truỳen lên PC được nhưng nhận từ PC thì không. Mong các bạn chỉ giúp.

vandungevn
28-07-2010, 10:02 AM
Đoạn code dưới đây mình dùng C18 cho 18F4520 chạy ngon, các bạn tham khảo nhé.

void txChar(unsigned char c)
{
while(!TXSTAbits.TRMT); // wait Buffer tranmits Emply
TXREG = c;
}

unsigned char rxChar(void)
{
return (RCREG);
}