![]() |
![]() |
#1 |
Đệ tử 2 túi
Tham gia ngày: Jul 2008
Bài gửi: 33
: |
USART trong C18
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. thay đổi nội dung bởi: const_nos, 27-03-2010 lúc 03:01 PM. Lý do: đính kèm thêm file |
![]() |
![]() |
![]() |
#2 |
Đệ tử 2 túi
Tham gia ngày: Jul 2008
Bài gửi: 33
: |
![]() Hic sao không có ai quan tam thế nhỉ?
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 6 túi
Tham gia ngày: Jul 2009
Bài gửi: 152
: |
Tớ quan tâm nhưng không giúp gì được cả.hichic
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 2 túi
Tham gia ngày: Jul 2008
Bài gửi: 33
: |
![]() 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. thay đổi nội dung bởi: const_nos, 28-03-2010 lúc 07:10 PM. Lý do: bổ sung nội dung |
![]() |
![]() |
![]() |
#5 |
Đệ tử 5 túi
|
Đ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); }
__________________
Hãy chung sức vì nền Điện Tử Viêt Nam...! Sản Phẩm thương hiệu Việt "Made in Viet Nam" Nguyen Van Dung - Nguyễn Văn Dũng. Mobile : (+84) 97 329 1368 Nick name : VanDungEvn ( Yahoo + Skype ) Tư vấn & thiết kế điện tử + Làm mạch in + Hoàn thiện sản phẩm điện tử. Mạch nạp 89-PIC-AVR. Email: vandungevn@gmail.com Website: www.dientuphuongdung.com Xóm Mới - Nguyên Xá - Minh Khai - Từ Liêm - Hà Nôi - Viet Nam. |
![]() |
![]() |
![]() |
|
|