/* Chương trình
-Đọc data ở P0 gửi nối tiếp đến computer và P2
-Nhận data nối tiếp từ computer gửi đến P1
-Dùng ngắt nối tiếp
*/
#include<at89x51.h>
void serial_int() interrupt 4 //ngắt được gọi khi TI hay RI=1
{ if(TI==1) TI=0 //truyền xong 1 byte
P1=SBUF; //nhận data từ comp
RI=0; //sãn sàng nhận byte tiếp theo
}
void main()
{
P0=0xff; //input
EA=1; //cho phép ngắt
ES=1; //ngắt nối tiếp
TMOD=0x20; //timer 1 mode 2
TH1=0xe8; //toc độ baud 1200
SCON=0x50; //1 start, 8data, 1 stop, non p, REN=1
TR1=1; // chạy timer 1
while(1)
{ SBUF=P0; //send data tu P0 den comp
P2=P0; //send data den P2
}
}
====câu hỏi====
mình có một số thắc mắc:
1/dựa vào câu lệnh while(1), hàm ngắt chỉ được gọi khi truyền xong 1 byte nghĩa là lúc này TI=1. Khi thực thi hàm ngắt, gặp lệnh "P1=SBUF" thì P1=P0??? (vì while(1) có lệnh SBUF=P0)
2/ sau lệnh "P1=SBUF" => nhận xong 1 byte=> RI=1 => ngắt lại được gọi tiếp??? nếu vậ nó sẽ bo qua lệnh "RI=0"
3/vì mình đang mò VB(chưa bít xài ), nên chưa test được chương trình này, các bồ coi có sai chỗ nào thì góp ý dùm mình
4/ai có lòng tốt đại bác có thể chỉ mình các bước truyền và nhận data bằng VB được ko?
vd như xài timer thì :
-chọn mode bởi thghi TMOD
-nạp giá trị cho THn,TLn (ứng với mỗi mode có giới hạn khác nhau)
-SETB TRn
-JNB TFn,$
-CLR TFn ...
vậy truyền và nhận data bằng VB gồm các bước nào?, nếu được thì viết CT demo cho yêu cầu trên cho mình được ko?(hì hì), vì mình đang làm bài tập lớn, tốn 2 tuần với mớ sách VB mà chưa được gì (cùi bắp quá), nếu có được CT demo thì mình sẽ chỉnh sửa lại theo kiến thức của mình (ko chôm chỉa)
...có gì bí mình sẽ hỏi tiếp
thz for ur read and reply
-Đọc data ở P0 gửi nối tiếp đến computer và P2
-Nhận data nối tiếp từ computer gửi đến P1
-Dùng ngắt nối tiếp
*/
#include<at89x51.h>
void serial_int() interrupt 4 //ngắt được gọi khi TI hay RI=1
{ if(TI==1) TI=0 //truyền xong 1 byte
P1=SBUF; //nhận data từ comp
RI=0; //sãn sàng nhận byte tiếp theo
}
void main()
{
P0=0xff; //input
EA=1; //cho phép ngắt
ES=1; //ngắt nối tiếp
TMOD=0x20; //timer 1 mode 2
TH1=0xe8; //toc độ baud 1200
SCON=0x50; //1 start, 8data, 1 stop, non p, REN=1
TR1=1; // chạy timer 1
while(1)
{ SBUF=P0; //send data tu P0 den comp
P2=P0; //send data den P2
}
}
====câu hỏi====
mình có một số thắc mắc:
1/dựa vào câu lệnh while(1), hàm ngắt chỉ được gọi khi truyền xong 1 byte nghĩa là lúc này TI=1. Khi thực thi hàm ngắt, gặp lệnh "P1=SBUF" thì P1=P0??? (vì while(1) có lệnh SBUF=P0)
2/ sau lệnh "P1=SBUF" => nhận xong 1 byte=> RI=1 => ngắt lại được gọi tiếp??? nếu vậ nó sẽ bo qua lệnh "RI=0"
3/vì mình đang mò VB(chưa bít xài ), nên chưa test được chương trình này, các bồ coi có sai chỗ nào thì góp ý dùm mình
4/ai có lòng tốt đại bác có thể chỉ mình các bước truyền và nhận data bằng VB được ko?
vd như xài timer thì :
-chọn mode bởi thghi TMOD
-nạp giá trị cho THn,TLn (ứng với mỗi mode có giới hạn khác nhau)
-SETB TRn
-JNB TFn,$
-CLR TFn ...
vậy truyền và nhận data bằng VB gồm các bước nào?, nếu được thì viết CT demo cho yêu cầu trên cho mình được ko?(hì hì), vì mình đang làm bài tập lớn, tốn 2 tuần với mớ sách VB mà chưa được gì (cùi bắp quá), nếu có được CT demo thì mình sẽ chỉnh sửa lại theo kiến thức của mình (ko chôm chỉa)
...có gì bí mình sẽ hỏi tiếp
thz for ur read and reply
Comment