注册
登录
电子工程世界-论坛
返回首页
EEWORLD首页
频道
EE大学堂
下载中心
Datasheet
专题
单片机
物联网
汽车电子
嵌入式
手机/便携
模拟电子
家用电子
网络通信
电源管理
工业控制
测试测量
半导体设计/制造
安防电子
传感器
医疗电子
singleyork的个人空间
https://home.eeworld.com.cn/space-uid-477824.html
[收藏]
[复制]
[分享]
[RSS]
空间首页
动态
记录
日志
相册
主题
分享
留言板
个人资料
借用开发板
论坛
淘帖
Collection
查看新帖
最新回复
社区活动
联系管理员
我的空间
帖子
日志
收藏
好友
勋章
积分
安全验证
请完成以下验证码
日志
关于用STC12C2052AD实现自动化的问题[图片见附件]求各位大侠帮忙修改下程序+注释
已有 614 次阅读
2013-4-10 16:07
/ IN OUT
//P3.0 启动 P1.7 前进
//P3.1 启动 P1.5 下降
//P3.2 急停 P1.3 计数器
//P3.3 下降下限1
//P3.4 下降下限2
//P3.5 前进前限
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit STAR1 = P3^0; // 启动
sbit STAR2 = P3^1; // 启动
sbit ESTOP = P3^2; // 急停
sbit DW_LMT1 = P3^3; // 下降下限1
sbit DW_LMT2 = P3^4; // 下降下限2
sbit FWD_LMT = P3^5; // 前进前限
//sbit AD_FLG = P1^6;
bit button,Mau_Mark,AD_Mark; //定义位变量
uint j;
uchar i,Value_AD;
void timer0(void) interrupt 1 using 1 //中断
{
TH0 = (65536 - 46080)/256; //定时器T0的高8位赋初值
TL0 = (65536 - 46080)%256;//(11.0592=46080)--50ms //定时器T0的低8位赋初值
if(Mau_Mark)
{
i++;
if(i >= 30)
{
button = 1;
i = 0;
}
}
if(AD_Mark)
j++;
}
void delayms(int x) //延时函数
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
uchar Read2052(uchar port)//读取AD数据
{
ADC_DATA = 0x00;//清除原来结果
ADC_CONTR = 0x20;//设置转换速度,420T
ADC_CONTR = 0xe0;//清除ADC_FLAG,ADC_START和低3位
ADC_CONTR |= port;//选择A/D通道 0x00-P10 0x01-P11
delayms(450); //等输入电压达到稳定
ADC_CONTR |= 0x08;//令ADCS=1启动A/D转换
while((ADC_CONTR & 0x10) == 0x00);
ADC_CONTR &= 0xf7;//清除ADC_START位,关闭A/D转换
if(ADC_DATA > 200)
ADC_DATA = 200;
return ADC_DATA; // ADC_DATA A/D 转换结果特殊功能寄存器
}
void InitADC(void)
{
P1 |= 0x03;
ADC_CONTR |= 0x80;
delayms(300);
P1M0 = 0x03;
//P1M1 = 0x03;//设置P1.0,P1.1为开漏状态
P1M1 = 0x00; //设置P1.0,P1.1为高阻状态
}
void Two_Manu(void)
{
if((!STAR1)|(!STAR2))
Mau_Mark = 1;
else
{
Mau_Mark = 0;
i = 0;
button = 0;
}
}
void main(void)
{
P1 = 0xff;
P3 = 0xff;
TH0 = (65536 - 46080)/256; //定时器T0的高8位赋初值
TL0 = (65536 - 46080)%256; //定时器T0的低8位赋初值
InitADC();
delayms(1200);
EA = 1;
ET0 = 1;
TR0 = 1;
Value_AD = Read2052(0x00);
while(1)
{
Loop:
Two_Manu(); //调用函数
if(((P3&0x3f) == 0x38) && (button == 0))
{
delayms(200);
if((P3&0x3f) == 0x38)
{
P1 &= 0x7f;//前进
while(FWD_LMT)
{
if(ESTOP)
{
P1 = 0xff;
goto Loop; // 转去执行Loop标记的语句
}
}
P1 &= 0xdf;//下压
while(DW_LMT1 | DW_LMT2)
{
if(ESTOP)
{
P1 |= 0x20;
delayms(5000);
P1 = 0xff;
goto Loop;
}
}
j = 0;
Value_AD = Read2052(0x00);
// AD_FLG = 0;
AD_Mark = 1;
}
}
if(j > (4*Value_AD))
{
AD_Mark = 0;
// AD_FLG = 1;
j = 0;
P1 |= 0x20;//上升
delayms(5000);
P1 &= 0xf7;//计数
delayms(1000);
P1 |= 0x08;
delayms(5000);
P1 |= 0x80;
delayms(18000);//上升延时保护
}
}
}
[
本帖最后由 singleyork 于 2013-4-10 16:07 编辑
]
本文来自论坛,点击查看完整帖子内容。
收藏
邀请
举报
评论 (
0
个评论)
涂鸦板
您需要登录后才可以评论
登录
|
注册
评论
singleyork
加为好友
给我留言
打个招呼
发送消息
热门文章
头条资讯
新型MSP430超值传感系列微控制器到底有多强大?
对话Google全球VP Jay Yagnik:TensorFlow2.0会强化可控性
半导体设备厂商将迎来寒冬
台湾疫情升级,台积电和日月光分流上班,芯片供应面临新变数
台积电员工薪酬大曝光!有人接近1个亿
再也不怕功率电感“吓哭”了
新增数据手册
UM-4J/3L4J7130.0MHZ
SL3-108-SH095/01-95
PHT2010E2520DNTA
AMF06031K0.05%25PPM/KNP20
STL210-0940GTT-10-040U
E1UJA22-28.125M
热搜器件
63902-2800
05830
C0603X103K5RAC
KUSBX-AS2N-B30
03S107-P00S3
OZ-SH-112L1
推荐下载
电子元器件检测与维修完全学习手册
超声波模块参考学习资料
支持pwm输出的定时器计数器芯片设计
由8031单片机构成并行多微机处理机系统的设计
Allegro到Specctra的规则映射
现场总线教学实验开发平台系列产品选型指南
推荐关注
电子压力传感器SP1和SP2代表什么,SP1和SP2的特点与应用
Linux系统更换开机logo方法教程, RK3562开发板演示
【RainbowLink USB 协议转换器】485接口测试
伺服电机滑环的主要组成部分,伺服电机滑环怎么安装?
金属检测传感器怎么测量金属的尺寸,金属检测测量的核心原理
RainbowLink USB 协议转换器 测评一:开箱及与硬件赏析