Mình không có viết kiểu này. Mình dùng ngắt để nhận ký tự trên máy tính truyền xuống. Với đoạn code trên , nếu là mình thì sẽ viết như sau :
Code:
#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, parity=N, xmit=pin_C6, rcv=pin_C7, bits=9)
char t;
#INT_RDA
void rda_isr()
{
t=getc() ;
}
void main()
{
enable_interrupts(INT_RDA) ;
enabled_interrupts(GLOBALS) ;
while(1)
{
putc(t) ;
}
}
Khi trên máy tính truyền xuống hết 1 byte thì ngắt INT_RDA xảy ra. Chương trình ngắt được thực hiện, biến t sẽ nhận 1 byte truyền xuống đó. Sau đó nó thoát ra chương trình ngắt và lặp vòng trong lệnh while(1).
Bạn thử viết kiểu này được không.