PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 22-09-2011, 11:31 PM   #1
ngosythuat
Đệ tử 1 túi
 
Tham gia ngày: Sep 2011
Bài gửi: 17
:
cho em hỏi về mạch và lập trình cho pic 16F877A

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);

thay đổi nội dung bởi: ngosythuat, 22-09-2011 lúc 11:50 PM.
ngosythuat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-09-2011, 06:31 PM   #2
hangocminh1989
Đệ tử 6 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 132
:
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?
hangocminh1989 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-09-2011, 07:07 PM   #3
ngosythuat
Đệ tử 1 túi
 
Tham gia ngày: Sep 2011
Bài gửi: 17
:
Trích:
Nguyên văn bởi hangocminh1989 View Post
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;
}
}

thay đổi nội dung bởi: ngosythuat, 25-09-2011 lúc 07:19 PM.
ngosythuat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-09-2011, 10:47 PM   #4
hangocminh1989
Đệ tử 6 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 132
:
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 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-09-2011, 10:50 PM   #5
hangocminh1989
Đệ tử 6 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 132
:
ớ, quên, hì hì, tài liệu đây
File Kèm Theo
File Type: pdf Lap trinh Robot tu dong voi PIC16F877A.pdf (2.98 MB, 121 lần tải)
hangocminh1989 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-09-2011, 09:11 PM   #6
ngosythuat
Đệ tử 1 túi
 
Tham gia ngày: Sep 2011
Bài gửi: 17
:
ừ. 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 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-09-2011, 09:18 PM   #7
ngosythuat
Đệ tử 1 túi
 
Tham gia ngày: Sep 2011
Bài gửi: 17
:
à 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;
}}
}
ngosythuat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-09-2011, 12:14 AM   #8
lionking
Đệ tử 3 túi
 
lionking's Avatar
 
Tham gia ngày: May 2011
Bài gửi: 47
:
Trích:
Nguyên văn bởi ngosythuat View Post
à 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();
}

}
}
lionking vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-09-2011, 09:14 AM   #9
ngosythuat
Đệ tử 1 túi
 
Tham gia ngày: Sep 2011
Bài gửi: 17
:
Trích:
Nguyên văn bởi lionking View Post
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
ngosythuat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-09-2011, 09:46 AM   #10
chairman_t
Đệ tử 2 túi
 
Tham gia ngày: Aug 2009
Bài gửi: 36
:
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.
chairman_t vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-09-2011, 10:30 AM   #11
ngosythuat
Đệ tử 1 túi
 
Tham gia ngày: Sep 2011
Bài gửi: 17
:
Trích:
Nguyên văn bởi chairman_t View Post
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
ngosythuat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-09-2011, 12:34 PM   #12
chairman_t
Đệ tử 2 túi
 
Tham gia ngày: Aug 2009
Bài gửi: 36
:
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.
chairman_t vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-09-2011, 03:09 PM   #13
lionking
Đệ tử 3 túi
 
lionking's Avatar
 
Tham gia ngày: May 2011
Bài gửi: 47
:
Trích:
Nguyên văn bởi ngosythuat View Post
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
lionking vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-09-2011, 09:06 PM   #14
ngosythuat
Đệ tử 1 túi
 
Tham gia ngày: Sep 2011
Bài gửi: 17
:
thanks mọi người. có gì khúc mắc hôm sau tớ hỏi mọi người tiếp
ngosythuat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 10:35 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam