本人想编写一个单片机控制气缸的应用程序。气缸上安装有两个行程开关,通过两个行程开关分别接入P1.0和P1.1端;电磁阀接在P2.0和P2.1输出端(2个继电器)上。需要实现的功能:
1、气缸行驶到末端(行程开关1-P1.0)时停止,并延时1秒,然后返回行驶,行驶到起始端(行程开关2-P1.1)时停止,并延时10秒,就这样往复运行。停止时气缸回到原来位置。
我自己编写了两个简单的程序,但是还达不到要求:
第一程序:通过P1.0端口高低电平监测(行程开关的状态),打开或关闭P2.0口继电器。
#include <reg52.h>
sbit LED0=P2^0;
sbit PP0=P1^0;
void main()
{
if(PP0==1) LED0=0; else LED0=1;
}
第二个程序是延时5秒程序,切换P2.0口状态
#include <reg52.h>
sbit LED0=P2^0;
unsigned char i=0; //ÑÓʱֵÉ趨
void ZD_Init();
void main()
{
ZD_Init();
while(1);
}
void ZD_Init()
{
EA=1; //´ò¿ª×ÜÖжϿª¹Ø
ET0=1; //´ò¿ª¶¨Ê±Æ÷0
TR0=1; //Æô¶¯¶¨Ê±Æ÷0¹¤×÷
TMOD=0X01; //Ñ¡Ôñ¶¨Ê±Æ÷0¹¤×÷ģʽ1£»16λ¶¨Ê±Æ÷
TH0=(65536-50000)/256; //¶¨Ê±Æ÷0¸ß8λװ³õÖµ£»¶¨Ê±50ºÁÃë
TL0=(65536-50000)%256; //¶¨Ê±Æ÷0µÍ8λװ³õÖµ£»¶¨Ê±50ºÁÃë
}
void Time0() interrupt 1 using 0 //????
{
TH0=(65536-50000)/256; //¶¨Ê±Æ÷0¸ß8λÖØ×°³õÖµ
TL0=(65536-50000)%256; //¶¨Ê±Æ÷0µÍ8λÖØ×°³õÖµ
i++;
if(i==100) //ÖжÏ20´ÎΪ1Ã룻ÖжÏ100´ÎΪ5Ãë;ÖжÏ200´ÎΪ10Ã룻
{
i=0;
LED0=~LED0;
}
}
两个程序单独运行都没有问题。
希望大虾指点下??
此帖出自
小平头技术问答
一周热门 更多>