PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   USART trong C18 (http://www.picvietnam.com/forum/showthread.php?t=6025)

const_nos 27-03-2010 12:24 PM

USART trong C18
 
1 Attachment(s)
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

UART trong C18
 
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

UART trong C18
 
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);
}


Múi giờ GMT. Hiện tại là 02:33 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam