em có thử viết CCS cho pic 16f877a giao tiếp qua máy tính, nhưng chỉ truyền kí tự thì nhận tốt, còn chuỗi thì không nhận ji cả, code như sau:
Đây là mã nhận kí tự ok:
Code:
#include <16f877a.h>
#include <def_877a.h>
#device *=16
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#include <lcd_lib_4bitm.c>
char c;
#int_rda // ngat khi da co du lieu truyen thanh cong qua cong COM
void receive_isr()
{
c=getc(c); // thu du lieu nhan duoc cat giu vao bien c
LCD_putcmd(0x80);
printf(lcd_putchar,"nhan duoc:%c ",c); // in ra cho biet nhan dc
}
VOID main()
{
ENABLE_INTERRUPTS(INT_RDA); // ngat khi data nhan tu RS232 san sang
ENABLE_INTERRUPTS(GLOBAL); // ngat toan cuc
trisb7=0;
trisb6=1;
TRISE=0X00; // portE: cong xuat du lieu (dieu khien cac chan E|R/W|RS cua LCD)
TRISD=0X00; // portB: cong xuat du lieu (du lieu tren man hinh LCD)
LCD_init(); // khoi tao LCD
while(1)
{
}
}
Giờ thay đuổi biến kí tự c thành mảng kí tự c thì ko nhận đc ji cả --> ngắt ko xảy ra?
Code:
#include <16f877a.h>
#include <def_877a.h>
#device *=16
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#include <lcd_lib_4bitm.c>
char c[80];
#int_rda // ngat khi da co du lieu truyen thanh cong qua cong COM
void receive_isr()
{
gets(c); // thu du lieu nhan duoc cat giu vao c
LCD_putcmd(0x80);
printf(lcd_putchar,"nhan duoc:%s ",c); // in ra cho biet nhan dc
}
VOID main()
{
ENABLE_INTERRUPTS(INT_RDA); // ngat khi data nhan tu RS232 san sang
ENABLE_INTERRUPTS(GLOBAL); // ngat toan cuc
trisb7=0;
trisb6=1;
TRISE=0X00; // portE: cong xuat du lieu (dieu khien cac chan E|R/W|RS cua LCD)
TRISD=0X00; // portB: cong xuat du lieu (du lieu tren man hinh LCD)
LCD_init(); // khoi tao LCD
while(1)
{
}
}
Anh Bắc, anh Falleft có vô chỉ dùm hay ai nhiều túi biết cái này cũng đc, chỉ giùm với, thanks nhiều!