《单片机控制简易伺服电路原理图》
这个很简单,我教你怎么玩,下面是思路和方式思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用p0.0到p0.2来代替;输出2个或以上(这看你接什么显示器,如果是pc的话,就不用数字量输出,直接串口就可以了)控制正反转的继电器管脚用p1.0、p1.1;
ps:显示那块我不知道你怎么处理,但是需要与一个全局变量转动次数k连接起来,另外两个输入接近开关选用npn传感器或用光电隔离,总之有效信号能把管脚电压拉低就可以了,具体硬件要注意什么,有需要就问我
现在我们来写程序:
#include
//选用晶振11.0592mhz
unsigned
char
k=0;
//k表示正反转次数
sbit
x0=p3^2;
//调节按钮
sbit
x1=p1^1;
//上限位接近开关信号
sbit
x2=p1^2;
//下限位接近开关信号
sbit
y1=p0^0;
//电机上升(注意:我使用的是管脚输出为0时候,电机运动,这样可以避免启动时候,单片机自复位对电机点动的影响)
sbit
y2=p0^1;
//电机下降
void
delay50ms(unsigned
int
i)
{
unsigned
int
j;
for
(i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
it0=1;
//下降沿触发
ex0=1;
//开p3.2外部中断
ea=1;
//总中断开
while(1)
while(k)
{
y1=0;
//正转
while(x1==1);
//等待正转接近开关反应
y1=1;
//正转停
delay50ms(1);
//停止时间50ms
y2=0;
//反转
while(x2==1);
//等待反转接近开关反应
y2=1;
//反转停
k--;
//圈数减一
}
}
void
counter0(void)
interrupt
0
{
k++;
//外部中断控制圈数加一
//这个位置可以加你显示程序
}
程序已经通过测试,放上去就能用,很好玩哟,呵呵
8位和32位单片机最本质区别,2分钟看懂!
单片机的8位或32位说的是什么呢?要搞懂这个问题,首先要搞明白8位或32位说的是单片机的哪一个部件。
这是单片机的内部框图,你看单片机内部有这么多部件构成,并不单单是一个CPU,它内部还集成了很多其它部件。
我们平时所说的这个单片机是多少位的,说的是这个单片机的CPU是多少位的,而和其它的部件无关。
而CPU也是由很多部件构成的,真正决定这个单片机或者处理器是多少位的,其实取决于ALU,ALU是Arithmeticlogicunit的首字母缩写,即逻辑运算单元。
CPU是单片机的核心,而ALU是CPU的核心。
CPU所有的运算靠的都是ALU,它专门执行算术和逻辑运算,例如加减乘除运算、与或非。
我们所说的这个单片机是多少位的,其实说的是的ALU的位数,8位单片机的ALU是8位的。
A、B是它的数据输入,Y是输出
8位的ALU一次性最多可以处理8位数据。
比如计算两个8位二进制相加,
只需要给A和B输入两个8位二进制数,它的输出端就能计算这两个8位二进制相加的和。
而32位单片机的ALU是32位的,一次可以计算两个32位二级制数相加。
那8位机可以进行16位或者32位的计算吗?
这也是可以的,但是相对麻烦一些,比如当我们对8位单片机编程时,所定义的int型数据就是16位的,那么8位机就需要把这个16位数分成两个字节,分别计算。
计算32位数据也一样,在8位机当中,我们定义的longint整型数据其实是32位的,这样8位单片机就得把32位数据分成4个字节来分别计算。
如果是32位单片机,则它的ALU是32位的,计算32位数据只需要一次运算就完事了。
这就是32位单片机的优势所在。
而对于计算8位数据,8位或者32位单片机在速度上几乎差不多。
ALU和其它部件的数据传输靠的是数据总线,所以我们一般的说法是,8位单片机中的8位指的是数据总线的位宽是8位。
但其本质上还是它的ALU一次性最多能处理多少位数据。
数据总线是传输数据的,比如数据总线传输的是01010000,那么RAM的某一个字节就会存储01010000,但是RAM存储器有很多个字节,我们怎么确定要给哪一个字节存储数据呢?
这就得靠地址总线了,它可以指定给RAM存储器的哪一个字节存储数据。
在RAM存储器的最开始有一个地址译码器的部件。
这是一个两位译码器,它有两个输入,四个输出。
如果我们给它输入00,它的第一根线输出1(高电平),此时只有第一个RAM字节可以被数据总线写入;
而给它输入10,它的第二根线输出1(高电平),指向第二个RAM字节。
以此类推,它可以单独控制每一根线的输出1。
它一共有4种不同的输入,则每一个不同的输入,对应一个输出线是高电平。