bác namqn cho em hỏi vấn đề này. trên VB6 em viết cho 1 nút ấn đơn giản là khi ân nút thì truyền 1 lúc 12 byte ví dụ là chữ "XIN CHAO BAN" với 12 lênh MSComm1.Output = các kí tự tương ứng.
ở vdk em cấu hình UART như sau
Code:
U2MODE = 0x8000; //Main I/O, 8-bit, no parity, 1 stop bit
U2STA = 0x0400; //bit10=UTXEN, ngắt khi nhận 1 kí tự
U2BRG = 32; //9600 bps @ Fcy = 5 MHz
trong hàm ngắt em viết vi dụ như sau
Code:
void __attribute__((__interrupt__)) _U2RXInterrupt(void)
{
_U2RXIF = 0;
m++;
if (m==5)
{ putstr(U2RXREG);}
}
thi đoặn này nhẽ ra phải hiện chữ C, nhưng lại ko hiện chữ j
nếu em thay if(m==1) thì hiện ra đúng chữ X, nhung thay if(m==2) vẫn hiện ra chứ X, còn thay if(m==3 hoặc 4 hoặc 5.....) thì ko hiện ra chữ j cả
em thay thành đoặn code sau
Code:
void __attribute__((__interrupt__)) _U2RXInterrupt(void)
{
_U2RXIF = 0;
m++;
dislayLCD(m);
}
để đếm số lần ngắt thì nó hiển thị m=2, nghĩa là em truyền 1 lúc 12 byte thì chỉ xảy ra 2 lần ngắt, cho nên ở đoặn trên với if(m== sô lớn hơn 2) là ko hiển thị đuọc. Em đã đặt chế độ ngắt khi nhận dc 1 byte, vậy trong tr hợp này m phải bằng 12 chứ bác, tốc đọ truyền của vdk và PC đều là 9600.
Với đoặn trên thì từ trên PC em viết lại là ấn nút thì chỉ truyền 1 byte thôi thì ở dưới số lần ngắt có tăng lên, nhưng m chỉ bằng đến 4 là ko tăng nữa, mặc dù vẫn ấn truyền. Tr hợp này thì như nào hả bác. Mong bác giải thích cho em và chỉ em cách để làm sao mà mình truyền trên PC 1 lúc nhiều byte thì vdk nhận từng byte sẽ ngắt đúng hả bác