code trên có chạy được đâu mà bạn bảo là nhận không đúng
bạn khai báo phần cứng như sau. thạch anh chạy 20M
#include<18f4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CP UDIV1,VREGEN,NOBROWNOUT
#device 18F4550*=16 ADC=10
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
mỗi khi giao tiếp, PC chỉ truyền xuống 1 byte. khi có ngắt RDA chương trình (PIC) nhảy vào ngắt xử lý ctr ngắt (nhận 1 byte từ PC gửi xuống) sau đó nhảy về vị trí củ. khi có ngắt thì nhảy vào xử lý tiếp ctr ngắt để nhận 1 byte khác từ PC gửi xuống. chứ nó không nằm ở chương trình ngắt RDA để nhận toàn bộ chuỗi từ PC gửi xuống. dó đó phần do ... white() của bạn để lập lại cho đến khi nhận byte stop là không đúng.
bạn xem lại lý thuyết về các ngắt nhé
|