查看: 2098|回复: 18
|
8051 program?
[复制链接]
|
|
发表于 30-11-2008 03:59 PM
|
显示全部楼层
原帖由 pic 于 27-11-2008 01:53 PM 发表
观摩这家美国公司开发的Pololu 3pi Mobile Robot, 我个人是觉得很强了。
机械部分也很完美, 他做line following robot是高速过弯也不跑飞。。。(不过那个line 也有够粗啦)
http://www.pololu.com/picture/thum ...
这架有用 PID 的(严格来说只有 PD)。而且它的 line sensor 是 patent 起来了的
那个 line 是用 electrical tape 粘的。就是拿来包电线的那种 (18mm 的)。
[ 本帖最后由 waiweng83 于 30-11-2008 04:01 PM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 18-11-2008 01:34 AM
|
显示全部楼层
我UPLOAD 2 个PIC, 不知有用吗?
请帮帮看一下。谢谢 |
|
|
|
|
|
|
|
发表于 30-11-2008 03:39 PM
|
显示全部楼层
rothman已经解释了基本operation.
关于你的code.
- while(1) {
- P3|= 0x0f;
- Run();
- }
复制代码
P3|= 0x0f; -->这一行多余,可以删掉。pin 3.0, 3.1, 3.2, 3.3是input,只要一开始set P3.0, P3.1, P3.2, P3.3成为high 就可以了(一开始你已经P3&0xff了)。P3.4, P3.5, P3.6, P3.7 or 0是没有意义的。
- Run()
- {
- char sensors;
- sensors = (P3 &=0x0f);
- if((sensors & 0x01)==0) {
- TurnRight();
- flag = 1; }
- else if((sensors & 0x08)==0) {
- TurnLeft();
- flag = 2; }
- else if(sensors == 0x09) {
- Forward(high);
- flag = 0; }
- else if(((sensors==0x0b)||(sensors==0x0d))&&(flag==0))
- Forward(low);
- }
复制代码
sensor input是靠sensors = (P3 &=0x0f);。不管P3.4,5,6,7是什么value,用来做什么, 你只是拿P3.0,1,2,3的value.不过你的P3&=0x0f,你连P3.4,5,6,7的value都改了。如果这四支pin有其他用途的话,这个会导致问题。 应该用sensors = (P3 &0x0f);
你的algo 好像怪怪的。 根据你的图片, s1在左边,接去P3.0。
- if((sensors & 0x01)==0) {
- TurnRight();
- flag = 1; }
复制代码
如果这时候S1在线上,就代表P3.0 = 0. 那么这个condition就true也就是robot会turn right.
不过如果s1 在线上,就代表robot偏右,如果又在turn right,不就更偏了吗?所以你要turn left才对。
可能我误解了你的algo, 不过根据我看是这样的。 |
|
|
|
|
|
|
|
楼主 |
发表于 14-11-2008 04:37 PM
|
显示全部楼层
回复 7# rothmans 的帖子
ooo。。。还LM324,resistor, capacitor.......
我现在做line following robot.但是programming part我不大明白。
我想用c++ program.. |
|
|
|
|
|
|
|
发表于 15-11-2008 05:29 PM
|
显示全部楼层
原帖由 korean 于 15-11-2008 03:36 PM 发表
concept我知道,我不会program吧了。。
我不懂要怎样program input&output..
concept你知道,问题就在我不知道你的concept啊。。。。。
我不知道你在想什么和你要什么, 要怎样跟你解释。
我解释了也不知道到底对不对,也不知道适不适合你。 |
|
|
|
|
|
|
|
发表于 27-11-2008 10:40 AM
|
显示全部楼层
原帖由 korean 于 19-11-2008 12:06 AM 发表
不知这2个pic能表达一切
请看看。。
这两张图片已经表达好多讯息了。
[ 本帖最后由 rothmans 于 27-11-2008 11:00 AM 编辑 ] |
评分
-
查看全部评分
|
|
|
|
|
|
|
请问有没有人可以讲解这个program..
以下program是我从internet copy 下来的。
这个program是来控制line following robot.
- #include d:\mc51\8051io.h
- #include d:\mc51\8051reg.h
- extern register unsigned char speedleft,speedright;
- register unsigned char high,low,flag,time;
- main()
- {
- P1=0x40;
- P3=0xff;
- high = 80;
- low = 30;
- flag = 0;
- time = 50;
- Start();
- while(1) {
- P3|= 0x0f;
- Run();
- }
- }
- Start()
- {
- char exit,key;
- exit =1;
- while(exit)
- {
- key = P1;
- if((key & 0x40)==0) exit=0;
- }
- }
- Run()
- {
- char sensors;
- sensors = (P3 &=0x0f);
- if((sensors & 0x01)==0) {
- TurnRight();
- flag = 1; }
- else if((sensors & 0x08)==0) {
- TurnLeft();
- flag = 2; }
- else if(sensors == 0x09) {
- Forward(high);
- flag = 0; }
- else if(((sensors==0x0b)||(sensors==0x0d))&&(flag==0))
- Forward(low);
- }
- Forward(char speed)
- {
- P1=0x64;
- speedright = speed+10;
- speedleft = speed;
- delay(time);
- }
- TurnRight()
- {
- P1=0x68;
- speedright = low+5;
- speedleft = low;
- delay(time);
- }
- TurnLeft()
- {
- P1=0x54;
- speedright = low+5;
- speedleft = low;
- delay(time);
- }
- Reverse(char speed)
- {
- P1=0x58;
- speedright = speed;
- speedleft = speed+5;
- delay(time);
- }
复制代码
[ 本帖最后由 fritlizt 于 30-11-2008 03:15 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 13-11-2008 06:41 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 13-11-2008 10:21 PM
|
显示全部楼层
回复 2# rothmans 的帖子
是的我要用的。
请问0x40,0xff,0x40什么来的? |
|
|
|
|
|
|
|
发表于 13-11-2008 11:43 PM
|
显示全部楼层
原帖由 korean 于 13-11-2008 10:21 PM 发表
是的我要用的。
请问0x40,0xff,0x40什么来的?
没有完整的资料很难回答你。 能的的话post schematics上来,解释你的用途。过后我们才能清楚地回答你的问题。
以现在有的资料, 只能回答你0x40, 0xff是hexadecimel. 那个程式把P1 set 成0x40, P3set 成0xff
在Port 1, P1.4 = high (5v)其余的等于 0(0v)
在Port 3,全部 = high (5v) |
|
|
|
|
|
|
|
发表于 14-11-2008 08:35 AM
|
显示全部楼层
原帖由 korean 于 13-11-2008 10:21 PM 发表
是的我要用的。
请问0x40,0xff,0x40什么来的?
不如这样好了,就别管那个程序的操作在执行什么结果,先说出你要做的是什么项目?
用什么零件或有什么零件,再说出你要得到什么结果。才来分析这个程序你是否还用得着。 |
|
|
|
|
|
|
|
楼主 |
发表于 14-11-2008 03:08 PM
|
显示全部楼层
我用4个ir sensor,L923D,AT80c51 .... |
|
|
|
|
|
|
|
发表于 14-11-2008 04:02 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 15-11-2008 12:17 AM
|
显示全部楼层
原帖由 korean 于 14-11-2008 04:37 PM 发表
ooo。。。还LM324,resistor, capacitor.......
我现在做line following robot.但是programming part我不大明白。
我想用c++ program..
我不会c++ for 8051.我会c for 8051而已。
line following robot concept怎样跑你知道吗?
你解释看看你所了解到的东西。 我再来补充。
先从concept谈, 然后再进入比较深一点。没有的话你会mong cha cha. |
|
|
|
|
|
|
|
楼主 |
发表于 15-11-2008 03:36 PM
|
显示全部楼层
回复 9# fritlizt 的帖子
concept我知道,我不会program吧了。。
我不懂要怎样program input&output.. |
|
|
|
|
|
|
|
楼主 |
发表于 19-11-2008 12:06 AM
|
显示全部楼层
回复 11# fritlizt 的帖子
不知这2个pic能表达一切
请看看。。 |
|
|
|
|
|
|
|
发表于 26-11-2008 11:07 PM
|
显示全部楼层
请你用心让人帮忙你,我也看不过眼了,请写长一点仔细一点,有头有尾,要不你就别问了,浪费大家的时间,问自己吧,来回发了那么多帖,你得到了什么? |
|
|
|
|
|
|
|
发表于 26-11-2008 11:53 PM
|
显示全部楼层
原帖由 korean 于 19-11-2008 12:06 AM 发表
不知这2个pic能表达一切
请看看。。
楼主, 最近很忙 有空才update你。 |
|
|
|
|
|
|
|
发表于 27-11-2008 01:53 PM
|
显示全部楼层
|
|
|
|
|
|
| |
本周最热论坛帖子
|