Mình đang làm giao tiếp giữa PC với 89C51, nhưng ko hiểu sao truyền/nhận luôn bị sai 3 bit cuối. Ví dụ truyền chữ a=97=01100001 thì lại ra thành 11000001. Luôn như vậy, đôi lúc lại thành 11100001, nói chung là 3 bit cuối bị sai.
Sơ đồ bắt mạch giữa Max232 với 89c51 có lẽ mình ko cần post lên, vì phần này khó lòng mà làm sai đc. Mình nghĩ là có thể là do tần số thạch anh? Mình dùng thạch anh 12MHz (Đáng lẽ là 11.0592MHz phảikko?).
Sau đây là code viết bằng Keil C cho 89s52
void send_data(char uart_data)//gui du lieu qua cong COM
{
TI=0;
SBUF=uart_data;
while(TI==0){;}//cho trong khi dang gui du lieu
}
void receive_data() interrupt 4//nhan du lieu
{
if(RI==1)
{
RI=0;
data_receive=SBUF;
}
}
Đã 2 ngày, ngồi tìm chỗ sai mà vẫn chưa ra . Mong các bạn cho ý kiến.
Có phải là do thạch anh ko? Mình dùng baud 9600
Mình đã giả lập với proteus thì hoàn toàn đúng (giả lập với cổng Com ảo, và dùng thạch anh 11.0592MHz.
Sơ đồ bắt mạch giữa Max232 với 89c51 có lẽ mình ko cần post lên, vì phần này khó lòng mà làm sai đc. Mình nghĩ là có thể là do tần số thạch anh? Mình dùng thạch anh 12MHz (Đáng lẽ là 11.0592MHz phảikko?).
Sau đây là code viết bằng Keil C cho 89s52
void send_data(char uart_data)//gui du lieu qua cong COM
{
TI=0;
SBUF=uart_data;
while(TI==0){;}//cho trong khi dang gui du lieu
}
void receive_data() interrupt 4//nhan du lieu
{
if(RI==1)
{
RI=0;
data_receive=SBUF;
}
}
Đã 2 ngày, ngồi tìm chỗ sai mà vẫn chưa ra . Mong các bạn cho ý kiến.
Có phải là do thạch anh ko? Mình dùng baud 9600
Mình đã giả lập với proteus thì hoàn toàn đúng (giả lập với cổng Com ảo, và dùng thạch anh 11.0592MHz.
Comment