小弟我是大一新生 小弟我有思路但是不会写程序 求教 急

我是大一新生 我有思路但是不会写程序 求教 急啊!!!
小弟我是大一新生 小弟我有思路但是不会写程序 求教 急
我是大一学生,刚接触了2周单片机,老师搞了个竞赛,现在要求是有电机A,老师给定电机B,电机B装有叶片(匀速转动,可以改变转速),我要使我的电机A可以与它的电机保持同转速(最好是相位都一样,我没打算做),在开始前和达到相同速度之后均以灯光方式表示。

用的芯片是AT89S51;
p0.0、p0.1是两个红色led,低电平亮;p2.1和p2.0是两个按动按钮,按下为低电平;p2.4是电机,低电平运行;p2.5是一个红外接受管,发射管始终发射,用来测叶片经过次数;p2.3是另外一套红外,用来测我自己电机的叶片(这红外就等于是一个光电门);复位电路和晶振(12mhz)都装好了。

我现在考虑:
1.我要电机可以匀速,我就给p2.4端口高低电平交替变换的方波,通过改变高低电平时间的比例来使它在不同速度稳定(要用计时器t0)
2.我要同时使用r1和r2来记录一定时间内(用计时器t1)叶片转过次数(p2.3和p2.5由高变低再变高的过程),通过比较来确定转速,以此来达到同转速的效果(这里要循环,但是我没想好怎么跳出循环,因为转速相同不好操作)
3.最后就是怎么加上灯光的提示,特别是最后的。


现在就是这样,第一天过去了,上午把板子焊好了,一下午就在研究怎么写代码,之前老师讲过一点汇编,所以最好有哪位大神可以给我把这个程序写一下啊,是在不行用c也可以啊,有说明就更加棒了!

明天还有一上午,求各路大神一起帮帮我啊!!
51单片机 汇编

------解决方案--------------------
周末大家都玩去了,没人在的,你自己想办法了,定时器和外部中断你学会用法了就知道该怎么写了。才上两周课就要焊板写程序感觉急燥了点。
------解决方案--------------------
电机B的转速是匀速吗,要是匀速,你能测出来转速,直接在程序中使用定时器来让电机A转动即可
------解决方案--------------------
1、简单地看了一下你的板子,没有发现电机驱动的电路,我先对你的电机A能转动质疑。
2、检测电机B的转动(无论是否匀速,都不要紧的),其实就是脉冲检测,获得当前脉冲的周期。这个可以先把定时器0设置为1ms或者更小的定时,然后使用外中断0检测脉冲的下降沿来触发定时器计数的开始和停止,将周期保存到一个变量如MotorB_Cycle中。
3、检测你的电机A对应的光电对管的脉冲周期,(使用外中断1和定时器1,等同于2),保存在MotorA_Cycle中,使用PID算法,通过调节电机A的输入端的PWM占空比来对电机A进行调速,将MotorA_Cycle的值尽量靠近MotorB_Cycle的值。

这个是我的思路,如果大家对这里有质疑的话可以提出来,一起讨论一下。
------解决方案--------------------
个人感觉这个题目对新手来说太难了,很多单片机的熟手都未必能做得下来,或者说我把题目想得太难了?
有时间的话我会尝试做一下这个题目,印证我的想法。
------解决方案--------------------
引用:
1、简单地看了一下你的板子,没有发现电机驱动的电路,我先对你的电机A能转动质疑。
2、检测电机B的转动(无论是否匀速,都不要紧的),其实就是脉冲检测,获得当前脉冲的周期。这个可以先把定时器0设置为1ms或者更小的定时,然后使用外中断0检测脉冲的下降沿来触发定时器计数的开始和停止,将周期保存到一个变量如MotorB_Cycle中。
3、检测你的电机A对应的光电对管的脉冲周期,(使用外中断1和定时器1,等同于2),保存在MotorA_Cycle中,使用PID算法,通过调节电机A的输入端的PWM占空比来对电机A进行调速,将MotorA_Cycle的值尽量靠近MotorB_Cycle的值。

这个是我的思路,如果大家对这里有质疑的话可以提出来,一起讨论一下。

支持

只要能知道流程 程序就容易写
------解决方案--------------------
多谢版主大大支持小弟我是大一新生 小弟我有思路但是不会写程序 求教 急
------解决方案--------------------

基本上可以这样:

你设置一个有符号数据类型的计数器变量,用来保存和比较两个电机转动的周数。

你要做的,是不断地增减比较变量的值。

当检测到 A 转动一周,变量加 1;检测到 B 转动一周,变量减 1。

当变量绝对值在 0 和 1 之间跳变时,说明转速相同。

当绝对值大于某一个阈值时,说明相差太大,需要调整。

如果是正值,你就要提高电机 B 的供电电压,反之亦反。改变电压后,变量清零,进入新一轮检测。
------解决方案--------------------
为什么不用 C,汇编看不懂