那位大哥能用Keil uVision3 帮我编个51单片机程序, 非常感谢。程序流程如下。

单片机接通电源按P1.0口按键程序启动P1.1输出低电平同时P1.2口开始计数(高电平低电平都可以)P1.2计数到500时P1.1停止输出低电平P1.3开始输出低电平P1... 单片机接通电源
按P1.0口按键程序启动
P1.1 输出低电平
同时P1.2口开始计数 (高电平低电平都可以)
P1.2计数到500时
P1.1 停止输出低电平
P1.3开始输出低电平
P1.2计数到1000时
P1.3停止输出低 电平
P1.1 开始输出低电平
P1.2计数到2000时所有程序结束
等待按P1.0口按键程序启动

我是想用这个程序做个小CNC钻床的,
实际运行是
开始按键(P1.0)
1 快速运动(P1.1)
2 快接触到加工材料时低速运行( P1.3)
3然后快速返回(P1.1)
4 P1.2计数器用作位置记录, 会装在马达上, 马达转一圈产生100个脉冲。
不知道我写明白没有。
单片机接口电路可以随便定义,我写的只是做参考。
对不起, 3然后快速返回(P1.1)是错的应该是P1.4口。上面的也错了。下面是正确的
单片机接通电源
按P1.0口按键程序启动
P1.1 输出低电平
同时P1.2口开始计数 (高电平低电平都可以)
P1.2计数到500时
P1.1 停止输出低电平
P1.3开始输出低电平
P1.2计数到1000时
P1.3停止输出低 电平
P1.4 开始输出低电平
P1.2计数到2000时所有程序结束
等待按P1.0口按键程序启动

我是想用这个程序做个小CNC钻床的,
实际运行是
开始按键(P1.0)
1 快速运动(P1.1)
2 快接触到加工材料时低速运行( P1.3)
3然后快速返回(P1.4)
4 P1.2计数器用作位置记录, 会装在马达上, 马达转一圈产生100个脉冲。
不知道我写明白没有。
单片机接口电路可以随便定义,我写的只是做参考。
单片机是STC89C52的,谢谢你
展开
 我来答
百度网友c4214fa
2011-01-20
知道答主
回答量:6
采纳率:0%
帮助的人:3.7万
展开全部
我用的也是STC89C52单片机,但楼主搞错了,52单片机有三个计数脉冲输入端,分别为T0(P3.4),T1(P3.5),T2(P1.0)而不是用P1.2做为计数输入,下面是我专为你的问题编的程序,用的是KEIL开发环境,所编的程序编译完全正确,楼主放心使用就行
#include<reg52.h>
#define uchar unsigned char
sbit p1_0=P1^0;
sbit p1_1=P1^1;
sbit p1_3=P1^3;
sbit p1_4=P1^4;
uchar m,i;
void init()//定义初始化子函数
{
m=0;
i=0;
TMOD=0x05;//设置计数器0为工作方式1
TH0=(65535-500)/256;//为计数器寄存器付初值:每记500次计数器溢出一次
TL0=(65535-500)%256;
}
void main()
{
init();
while(1)
{
if(p1_0==0)
m=1;//当按下开始按键时为标志位m赋值1
while(m==1)
{
p1_1=0;//p1_0输出低电平
TR0=1;//同时启动计数器开始计数
if(i==1)//计数到500时
{
p1_1=1;//p1_1输出高电平
p1_3=0;//p1_3输出低电平
}
if(i==2)//计数到1000时
{
p1_3=1;//p1_3输出高电平
p1_4=0;//p1_4输出低电平
}
if(i==4)//计数到2000时
{
TR0=0;//关闭计数器
i=0;
m=0;//标志位清零等待再次按下开始键
}
}
}
}
void counter0() interrupt 1//计数器0中断服务子程序
{
TH0=(65535-500)/256;
TL0=(65535-500)%256;
i++;

}
书若枋YR
2011-01-19 · TA获得超过235个赞
知道答主
回答量:381
采纳率:100%
帮助的人:271万
展开全部
:
ORG 0X0000
LJMP START
START:
MOV A, #0XFE
LOOP:
jnb F0, key ;F0=0 就转移,不显示.
;------------------------------------------
RL A
MOV P1, A
LCALL DELAY
;------------------------------------------
key:
jnb P0.0, key2 ;P0.0=0,按键按下就转移.
SJMP LOOP ;没按,就继续.
key2:
mov r5, #1 ;延时短一点.
call OUT ;延时消抖.
jb P0.0, LOOP ;松开就不算按下.
jnb P0.0, $ ;等待释放.
cpl F0 ;控制位取反.
SJMP LOOP ;继续.
;-------------------------------------------
DELAY: ;延时程序.
MOV R5,#200
OUT: MOV R6,#250
OUT1: MOV R7,#250
IN: DJNZ R7,$
DJNZ R6,OUT1
DJNZ R5,OUT
RET
END
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
04005627
2011-01-19 · TA获得超过219个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:225万
展开全部
ms很简单~LZ自学一小下就能搞定了~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mingfengm
2011-01-19 · 超过19用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:44.9万
展开全部
程序很简单, 是什么片子?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式