X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
51单片机
[求助] 请教一个51单片机定时时间差问题
北宸xyz
2013-3-21 22:34
楼主
我用STC12LE5A32S2做了个东西。
用定时器0产生定时时间。
定时器是这样的:
void Time0(void) interrupt 1
{
ET0 = 0; //定时器0中断关
TH0=0xE5;//(65536-n*FOSC/12/1000)/256;//n=10ms 这里采用8M晶振计算的
TL0=0xF5;//(65536-n*FOSC/12/1000)%256;
if(run_time_flag==1) run_time--;
if(parameter[1]==1) L1 = 0;//L1指示灯,用于调试
else L1 = 1;
ET0 = 1; //定时器0中断打开
}
这里产生10MS定时。一直开着的。
在run_time_flag==1时进入运行时间递减。
主程序里面是这样的。
在SL1按下后,进入自动运行状态。
自动运行工作是这样的,
RUN=0就是运行,硬件电路是个继电器电路。硬件电路是没有问题的。
运行时间是在parameter[3]变量中存着。
然后发送一串按键数据出去:
“”“”“”“”“”“”“”“”“”“”“”“
Send_Data(0);
”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“
以上数据发送出去电机在RUN=0动作继电器后就会反转。
parameter[1] 是个电机运行状态记录变量,0为正转,1为反转;
主程序如下:
if(SL1 == 0)
{
delay(20);
if(SL1 == 0)
{
Show_flag = 1;
while(SL1 == 0);//
Auto_Flag=1;
Break_off_SL2 = 0;//暂停后自动运行取消标志 1:为取消
}
}
if(Auto_Flag == 1)
{
if(parameter[1]==1) Send_Data(0);
parameter[1] = 0;//启动 正转 存数据
run_time = parameter[3];//forward_run_time;
run_time_flag = 1;//开始计时
run = 0;run1 = 0;
while (run_time>0) //执行自动进刀 这里的80也为了给下面电机换向时的转动时间补
{
}
}
if(Break_off_SL2==0)
{
run_time_flag = 0;
run = 1;//停止
run1 = 1;
delay(10); //电机停下,后再发转 100ms
if(parameter[1]==0) Send_Data(0);
parameter[1] = 1;//启动 反转 数据保存
run_time = parameter[4];//backward_run_time;
run_time_flag = 1;
run = 0;
run1 = 0;
while (run_time>0)
{
}
}
run_time_flag = 0;
run = 1;//停止
run1 = 1;
Auto_Flag = 0;//自动运行结束
if(parameter[1]==1) Send_Data(0);
parameter[1] = 0;//正转 数据保存
Write_Chanshu();//写EEPROM参数,保存数据
问题是出现在:
运行是可以。
我设定正转运行个5S;反转运行个5S;中间有个100MS电机停机时间
我测试过,可以正常工作下下
我测试运行时间,每按下SL1后,电机会运行,并中间也会停机,然后再反转运行。
就是在三次到五次中间会出现个一次运行时间不是5S,而3S左右。
其他次数测试都是正常工作,运行时间也都正常,正转5S,反转5S。
测试过二三十次都是这样。
点赞
回复评论 (4)
沙发
北宸xyz
我还修改进时间,把设定正转改为2S,反转改为2S;
运行中也还是一样,会变短。
这个变短也是随机的,有时出现在正转,有时出现在反转,有时正转反转都出现。
变量也设定正常:
unsigned short int run_time;
会不会我Keil有问题啊!!!!
但我也换过一台电脑试过呀!
也是一样!
点赞
2013-3-21 22:36
板凳
lr2131
volatile unsigned short int run_time;
点赞
2013-3-22 09:46
4楼
huo_hu
看的出你很想描述你的程序,不过还是很难理解,也就不好推测问题出在哪里了.
既然有串口把关键的数据发出来分析分析,软件问题有时别人很难帮忙.
点赞
2013-3-22 14:19
5楼
astwyg
之后一直都是正常的?那就很难理解了.如果以后误差会累计那可能是因为进入IRQ需要几个语句.
TH0=0xE5;//(65536-n*FOSC/12/1000)/256;//n=10ms 这里采用8M晶振计算的
TL0=0xF5;//(65536-n*FOSC/12/1000)%256;
这个需要修正
你可以找一下对应的文章.
点赞
2013-3-23 22:20
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
模拟滤波器与电路设计手册
处理完5个记录的总时间是多少?谢谢!!
我们来找找茬~
MSP130spi通信
求购一块闲置的ARM9或ARM11开发板
SensorTile.Box套件操作模式之编程模式试用
CCS 6是否可以使用printf作为调试手段
基于STM32的NRF905模块遇到的问题
写一个虚拟打印驱动有多少工作量?
电路板级的电磁兼容设计
OK6410光盘里的uboot不能用TFTP下载文件?
51单片机和DS18B20做温度检测
手把手教你设计一个电源
TI DSP集成开发环境CCS的使用
空气流量传感器等五类汽车用传感器简介
mini2440裸机程序 如何点亮led灯 基于MDK4.11版(ZZ)
如何成为IC高手(转)
均衡器
有奖话题:你用过的最顺手的网站编辑器
两年提高136分 我的清华考研经历 (转)
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复