Mình có làm giao tiếp giữa máy tính và Atmega32. HMTR/RS232 gắn vào máy tính, HMTR/TTL gắn vào Atmega32. Mình truyền nhận ok hết. Nhưng có vấn đề mình ko hiểu thế này:
- Đây là code truyền từ Atmega32 lên máy tính. Code này là code đúng:
unsigned char truyendanhsach(void)
{
int i;
for(i = 0; i < 30; i++)
{
putchar(48 + i);
}
return 0;
}
- Đoạn code trên các bạn chú ý là dữ liệu đẩy vào HMTR từ Atmega32 là dưới 32 Byte (chỗ i < 30). Vấn đề là nếu dữ liệu đẩy vào HMTR từ Atmega32 đúng bằng 32 Byte thì sau khi HMTR truyền lên máy tính thì nó treo luôn (ko nhận dữ liệu từ máy tính gửi xuống được). Ví dụ đoạn code này là bị treo
unsigned char truyendanhsach(void)
{
int i;
for(i = 0; i < 32; i++)
{
putchar(48 + i);
}
return 0;
}
- Mình đã test và rút ra kết luận như sau: Nếu dữ liệu đẩy vào HMTR từ Atmega32 là đúng 32 Byte thì sau khi HMTR truyền lên máy tính thì nó bị treo. Ngoài ra nếu dữ liệu đẩy vào HMTR từ Atmega32 nhỏ hơn hoặc lớn hơn 32 Byte thì mọi việc bình thường. Mình đọc datasheet của HMTR ko thấy đề cập vấn đề này. Bạn nào từng bị hay có kinh nghiệm về HMTR chỉ giáo mình với. Thanks!
- Đây là code truyền từ Atmega32 lên máy tính. Code này là code đúng:
unsigned char truyendanhsach(void)
{
int i;
for(i = 0; i < 30; i++)
{
putchar(48 + i);
}
return 0;
}
- Đoạn code trên các bạn chú ý là dữ liệu đẩy vào HMTR từ Atmega32 là dưới 32 Byte (chỗ i < 30). Vấn đề là nếu dữ liệu đẩy vào HMTR từ Atmega32 đúng bằng 32 Byte thì sau khi HMTR truyền lên máy tính thì nó treo luôn (ko nhận dữ liệu từ máy tính gửi xuống được). Ví dụ đoạn code này là bị treo
unsigned char truyendanhsach(void)
{
int i;
for(i = 0; i < 32; i++)
{
putchar(48 + i);
}
return 0;
}
- Mình đã test và rút ra kết luận như sau: Nếu dữ liệu đẩy vào HMTR từ Atmega32 là đúng 32 Byte thì sau khi HMTR truyền lên máy tính thì nó bị treo. Ngoài ra nếu dữ liệu đẩy vào HMTR từ Atmega32 nhỏ hơn hoặc lớn hơn 32 Byte thì mọi việc bình thường. Mình đọc datasheet của HMTR ko thấy đề cập vấn đề này. Bạn nào từng bị hay có kinh nghiệm về HMTR chỉ giáo mình với. Thanks!