PDA

View Full Version : Help em truyền 1 ki tự xuống vdk


magic_boy_1989
01-12-2010, 02:20 AM
em có 1 đoạn code truyen ki tu như sau : không biết la hàm if(c==65 đúng không)hay if(c==A), nhờ mấy huyen xem hộ code co bi sai không ?em muốn nhấn A thi pinB0=0 tương tự khi nhấn B va C,chi em vơi mốt là em phải nộp báo cáo rui Thanks
char c;
////////////////Chuong Trinh Con////////////////////////////////////

#INT_RDA //khai bao ngat khi co tin hieu thanh cong tu cong com
void receive_isr()
{
c=getc(); // thu du lieu nhan duoc cat giu vao bien c
while(1)
{
if (c==65){ //65 la ma DEC cua chu A
input(pin_B0.0);
}
if (c==66){ //66 la ma DEC cua chu B
input(pin_B2.0);
}
if (c==67){ //66 la ma DEC cua chu B
input(pin_B4.0);
}
}
}
void main()
{while(true)
{

ENABLE_INTERRUPTS(INT_RDA); // ngat khi data nhan tu RS232 san sang
ENABLE_INTERRUPTS(GLOBAL); // ngat toan cuc
....
}

xuanducdhcn
01-12-2010, 08:16 PM
em có 1 đoạn code truyen ki tu như sau : không biết la hàm if(c==65 đúng không)hay if(c==A), nhờ mấy huyen xem hộ code co bi sai không ?em muốn nhấn A thi pinB0=0 tương tự khi nhấn B va C,chi em vơi mốt là em phải nộp báo cáo rui Thanks
char c;
////////////////Chuong Trinh Con////////////////////////////////////

#INT_RDA //khai bao ngat khi co tin hieu thanh cong tu cong com
void receive_isr()
{
c=getc(); // thu du lieu nhan duoc cat giu vao bien c
while(1)
{
if (c==65){ //65 la ma DEC cua chu A
input(pin_B0.0);
}
if (c==66){ //66 la ma DEC cua chu B
input(pin_B2.0);
}
if (c==67){ //66 la ma DEC cua chu B
input(pin_B4.0);
}
}
}
void main()
{while(true)
{

ENABLE_INTERRUPTS(INT_RDA); // ngat khi data nhan tu RS232 san sang
ENABLE_INTERRUPTS(GLOBAL); // ngat toan cuc
....
}
//
Quan trọng là bạn gửi tín hiệu từ PC-> PIC ở dạng nào thôi nếu gửi dạng DEC thì như vậy là đúng rồi
Còn nếu gửi dạng ký tự thì ( c==a) là đúng
bạn dùng hàm switch trông sẽ hay hơn cái này mình đang dùng này hy vọng giúp được bạn

#INT_RDA
void RDA_interrupt(){
value = getc();
delay_ms(10);
putc(value);
switch(value)
{
case 'f': forward(); break; // neu ky tu nhan duoc la 'f' di thang.
case 'l': left(); break;
case 'r': right(); break;
case 'b': backward(); break;
case '1': M1_forward(); break;
case '2': M1_backward(); break;
case '3': M1_stop(); break;
case '4': M2_forward(); break;
case '5': M2_backward(); break;
case '6': M2_stop(); break;
default: full_stop(); break;

}
}

stupid11
16-03-2011, 09:47 PM
em có 1 đoạn code truyen ki tu như sau : không biết la hàm if(c==65 đúng không)hay if(c==A), nhờ mấy huyen xem hộ code co bi sai không ?em muốn nhấn A thi pinB0=0 tương tự khi nhấn B va C,chi em vơi mốt là em phải nộp báo cáo rui Thanks
char c;
////////////////Chuong Trinh Con////////////////////////////////////

#INT_RDA //khai bao ngat khi co tin hieu thanh cong tu cong com
void receive_isr()
{
c=getc(); // thu du lieu nhan duoc cat giu vao bien c
while(1)
{
if (c==65){ //65 la ma DEC cua chu A
input(pin_B0.0);
}
if (c==66){ //66 la ma DEC cua chu B
input(pin_B2.0);
}
if (c==67){ //66 la ma DEC cua chu B
input(pin_B4.0);
}
}
}
void main()
{while(true)
{

ENABLE_INTERRUPTS(INT_RDA); // ngat khi data nhan tu RS232 san sang
ENABLE_INTERRUPTS(GLOBAL); // ngat toan cuc
....
}





Bạn viết như vậy thì chương trình của bạn không thoát khỏi vòng lặp while(1) trong ngắt..như vậy sẽ "treo"

còn muốn xem ký tự bạn truyền đúng hay sai thỉ xem bảng mã ASCII .chúc bạn thành công.

tranba221188
23-05-2011, 08:08 PM
code sai roi ban oi,65 la ma cua PIC con truyen tu VB xuong la ma ASCII

tranba221188
23-05-2011, 08:08 PM
phai chuyen thanh ma ASCII thi PIC moi hieu dc

daretowin
25-04-2012, 12:57 AM
//
Quan trọng là bạn gửi tín hiệu từ PC-> PIC ở dạng nào thôi nếu gửi dạng DEC thì như vậy là đúng rồi
Còn nếu gửi dạng ký tự thì ( c==a) là đúng
bạn dùng hàm switch trông sẽ hay hơn cái này mình đang dùng này hy vọng giúp được bạn

#INT_RDA
void RDA_interrupt(){
value = getc();
delay_ms(10);
putc(value);
switch(value)
{
case 'f': forward(); break; // neu ky tu nhan duoc la 'f' di thang.
case 'l': left(); break;
case 'r': right(); break;
case 'b': backward(); break;
case '1': M1_forward(); break;
case '2': M1_backward(); break;
case '3': M1_stop(); break;
case '4': M2_forward(); break;
case '5': M2_backward(); break;
case '6': M2_stop(); break;
default: full_stop(); break;

}
}


Gửi số xuống em đã làm được
Còn cái gửi kí tự xuống như trên thì em dùng lệnh gửi ri đúng không anh. Sao nó vẫn không được kết quả.
private void turnright_Click(object sender, EventArgs e)
{
serialPort1.Write("r");
STATUS.Text = "ROBOT TURN RIGHT";
}