View Full Version : cho em hỏi về mạch và lập trình cho pic 16F877A
ngosythuat
22-09-2011, 11:31 PM
1.các anh cho em hỏi em muốn tạo các nút ấn chọn sân và reset thì phải mắc mạch và viết code như thế nào ạ.
2.em viết một chương trìnnh con để rẽ trái cho robot dùng 6 led cảm biến từ 1 đến 6, không phụ thuộc led 0 và led 7 như sau có đúng không
void turn_left()
{
do
{
motor_left_stop();
motor_right_forward();
}while(0bx000000x||0bx100000x||0bx110000x||0bx0110 00x);
hangocminh1989
25-09-2011, 06:31 PM
xin lỗi, bạn cho mình hỏi 1 câu hơi ngu. bạn viết cái này có biên dịch được không? chạy thì chạy như thế nào?
ngosythuat
25-09-2011, 07:07 PM
xin lỗi, bạn cho mình hỏi 1 câu hơi ngu. bạn viết cái này có biên dịch được không? chạy thì chạy như thế nào?
ừ thì tại tớ mới tìm hiểu nên chưa biết nó thế nào mới hỏi bạn thông cảm
chương trình để điều khiển cho robot rẽ trái. tớ dùng 8 con led dò đường cho dữ liệu vào cổng D. tớ dùng 6 con từ 1>6 để thực hiện việc dò đường và quay. còn 2 con 0 và 7 làm việc khác. thì t viết đoạn chương trình như vậy có được ko. bạn biết làm thế nào thì chỉ giùm tớ
void turn_left()
{
switch (SENSOR)
{
case 0bx001100x: sang_trai(); break;
case 0bx000110x: sang_trai(); break;
case 0bx000011x: sang_trai(); break;
case 0bx000001x: sang_trai(); break;
case 0bx000000x: sang_trai(); break;
case 0bx100000x: sang_trai(); break;
case 0bx110000x: sang_trai(); break;
case 0bx011000x: di_thang(); break;
}
}
hangocminh1989
26-09-2011, 10:47 PM
tớ cũng chẳng biết cái chương trình con bạn viết thế nào, nhìn vào cái này thấy có chút vấn đề chỗ 2 biến x đầu và x cuối của portb, mình share cho bạn tài liệu này, mình mong là nó có ích
hangocminh1989
26-09-2011, 10:50 PM
ớ, quên, hì hì, tài liệu đây
ngosythuat
27-09-2011, 09:11 PM
ừ. thanks bạn cái này tớ cũng có rồi. tớ đọc cái tài liệu này xong tớ viết cái đó. ý của tớ là khi không cần quan tâm tới cái rb0 với rb7 thì viết vậy có được không. mà bạn có cách nào hay chỉ tớ cái
ngosythuat
27-09-2011, 09:18 PM
à cho tớ hỏi về cái tài liệu bạn gửi đó sao đầu vào cảm biến là portD sao trong chương trình lại viết
/* CHƯƠNG TRÌNH CHÍNH */
void main ()
{
TRISC=0x00; // PORTC là ngõ ra ( động cơ)
TRISD=0x00; // PORTD là ngõ vào (cảm biến quang)
PORTC=0x00; // Khởi tạo giá trị ban đầu 0x00 cho PORTC
while(1)
{
switch (SENSOR)
{
case 0b00011000: forward(); break;
case 0b00001100: turn_left(); break;
case 0b00000110: turn_left(); break;
case 0b00000011: turn_left(); break;
case 0b00000001: turn_left(); break;
case 0b00110000: turn_right(); break;
case 0b01100000: turn_right(); break;
case 0b11000000: turn_right(); break;
case 0b10000000: turn_right(); break;
}}
}
lionking
28-09-2011, 12:14 AM
à cho tớ hỏi về cái tài liệu bạn gửi đó sao đầu vào cảm biến là portD sao trong chương trình lại viết
/* CHƯƠNG TRÌNH CHÍNH */
void main ()
{
TRISC=0x00; // PORTC là ngõ ra ( động cơ)
TRISD=0x00; // PORTD là ngõ vào (cảm biến quang)
PORTC=0x00; // Khởi tạo giá trị ban đầu 0x00 cho PORTC
while(1)
{
switch (SENSOR)
{
case 0b00011000: forward(); break;
case 0b00001100: turn_left(); break;
case 0b00000110: turn_left(); break;
case 0b00000011: turn_left(); break;
case 0b00000001: turn_left(); break;
case 0b00110000: turn_right(); break;
case 0b01100000: turn_right(); break;
case 0b11000000: turn_right(); break;
case 0b10000000: turn_right(); break;
}}
}
viết vầy gọn hơn
while(1)
{
if( SENSOR == 24 )
{
forward() ;
}
else
{
if( SENSOR < 24 )
{
turn_left();
}
else
{
turn_right();
}
}
}
ngosythuat
29-09-2011, 09:14 AM
viết vầy gọn hơn
while(1)
{
if( SENSOR == 24 )
{
forward() ;
}
else
{
if( SENSOR < 24 )
{
turn_left();
}
else
{
turn_right();
}
}
}
viết thế được hả bạn
chairman_t
29-09-2011, 09:46 AM
bạn à, nếu ngõ vào cảm vào biến thì trisd = 0xff, thứ hai nữa : chẵn hạn khi lệch trái nhiều 00000001 và lệch trái nhẹ hơn là 00000100 thì turnright ở 2 trường hợp này tốc độ của bánh trái sẽ khác nhau.
ngosythuat
29-09-2011, 10:30 AM
bạn à, nếu ngõ vào cảm vào biến thì trisd = 0xff, thứ hai nữa : chẵn hạn khi lệch trái nhiều 00000001 và lệch trái nhẹ hơn là 00000100 thì turnright ở 2 trường hợp này tốc độ của bánh trái sẽ khác nhau.
tớ đang làm chương trình con quay trái cho robot tớ chỉ dùng 6 cảm biến từ 1 đến 6 thôi, còn con 0 và 7 để làm việc khác. bạn có thuật toán nào hay chỉ cho tớ với
chairman_t
29-09-2011, 12:34 PM
thế này nhé khi đến ngã tư cần rẽ trái(giả sử bit6=bên trái), cho bánh phải quay thuận ,bánh trái quay ngược đồng thời bit6 đi qua vạch( đèn cảm biến của bạn sẽ sáng rồi tắt) dùng While(bit6==1) chờ nó tắt, cho 2 bánh dừng, thế thôi.
lionking
29-09-2011, 03:09 PM
viết thế được hả bạn
0b00011000 tương đương với 24 ở hệ thập phân , nên nấy giá trị 24 làm mốc để so sánh
ngosythuat
29-09-2011, 09:06 PM
thanks mọi người. có gì khúc mắc hôm sau tớ hỏi mọi người tiếp
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.