舵机:

红色:VCC

棕色:GND

黄色:PWM

这是定时器0初始化:

unsigned cha count = 0;
unsigned char timer1 ;void Timer1_Init()
{
//  TMOD&=0x00;
//  TMOD|=0x01; //定时器T1设置成方式1TMOD &= 0xF0;        //设置定时器模式TH0 = (65536-100)/256;TL0 =(65536-92)%256;ET0=1;   //打开定时器0中断允许   TR0=1;    //打开定时器0EA=1;    //打开总中断
}

这是舵机运行函数:

void duoji()
{timer1 =5;//舵机恢复到0度的位置count=0;//让定时器重新计数delay_ms(200);timer1 =15;//舵机旋转90度count=0;delay_ms(200);
//      timer1=25;//舵机转动180度
//      count=0;
//    delay_ms(300);
}

这是定时器0中断:

void InterruptTime0() interrupt 1
{TR0 = 0;//关闭定时器TH0 = (65536-100)/256;TL0 = (65536-92)%256;if(count <= timer1) //5==0° 15==90°{ PWM = 1; }else { PWM = 0; }count++;if (count >= 200) //T = 20ms清零  //这里可以替换成count%200;{ count = 0;      }TR0 = 1; //开启T0
}

这是主函数部分:

void main()
{ Timer1_Init() ;while(1){  duoji();}
}

以上代码可做舵机调试例子。


问题是这样的,我们都知道以下代码可做为100us的定时。

TH0 = (65536-100)/256;
TL0 = (65536-100)%256;

然而当将此段代码植入程序运行舵机发现舵机卡死;

于是采取软件定时器得到TH0,TL0的值;

通过计算器算得TH0值为255,TL0值为164;而(65536-100)%256=156;小于软件得到的164

通过计算器不断取值得到应该减去92,也就是(65536-92)%256。

推测定时器低位的这种取值方法可能存在误差。且正好为8。

然而当我们取

TH0 = (65536-500)/256;
TL0 = (65536-500)%256;也就是取0.5ms

如将timer1值改为对于的40;也就是20ms的周期时发现程序完美运行。

51单片机控制舵机,舵机不动的定时器原因相关推荐

  1. 51单片机控制SG90舵机、MG90S舵机

    舵机的控制信号为周期是20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化.也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应 ...

  2. 51单片机控制小舵机

    以前从没有想过写博客,但是最近发现以前的代码老是找不到,而且找到了也不一定想得起当时的逻辑,很麻烦,所以打算写写提醒一下自己. 最近老板让做一个扫描二维码装钥匙的小盒子,就给个小舵机和3D打印机,传动 ...

  3. 51单片机控制sg90舵机

    1.PWM PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就 ...

  4. 51单片机c语言直流电机廷迟启停,51单片机控制直流电机不会加定时器延时程序...

    这是自己改的延时,串口输入1,电机转动,再输入其他没用了 #include void uart_init(); void qudong (unsigned int t); sbit en1=P0^0; ...

  5. 【Proteus仿真】51单片机8路舵机点动±90°点动控制

    [Proteus仿真]51单片机8路舵机点动±90°点动控制 Proteus仿真 Proteus连线图 程序代码 #include<reg52.h>sbit PWM0 = P1^0; sb ...

  6. 51单片机控制TB6600驱动器驱动42步进电机

    51单片机控制TB6600驱动器驱动42步进电机 第一次 功能实现目标 硬件简介 硬件连接 程序代码 第一次 以前总是看别人写的博客,通过别人的博客解决了我很多问题,从中也学到了各种知识,虽然不是很系 ...

  7. 51单片机入门教程(5)——定时器中断

    51单片机入门教程(5)--定时器中断 一.中断的概念 二.定时器中断 2.1 软件延时的不足 2.2 中断寄存器 2.2.1 中断允许控制寄存器 IE 2.2.2 定时器工作方式寄存器 TMOD 2 ...

  8. 51单片机控制二相四线步进电机

    步进电机按定子上绕组来分,有二相.三相和五相等系列.最受欢迎的是两相混合式步进电机,约占97%以上的市场份额,其原因是性价比高,配上细分驱动器后效果良好.该种电机的基本步距角为1.8°/步,配上半步驱 ...

  9. 51单片机控制的数字温度计 PROTEUS 和51单片机教程

    51单片机控制的数字温度计 总览部分 MCU部分 显示部分 开仿真以后实时显示温度 因为这个程序比较简单,我就直接上代码了,有不明白的请看我以前的文章,谢谢哦! 参考代码如下: #include &q ...

  10. 51单片机控制步进电机-电路连接

    51单片机控制步进电机-电路连接 概要:本案例讲解的内容是51单片机控制步进电机硬件连接部分.后续会分别讲解单片机程序,S曲线加减速方法,上位机等相关内容 硬件清单: 1.51单片机控制板一个 2.二 ...

最新文章

  1. Python 笔试集:什么时候 i = i + 1 并不等于 i += 1?
  2. Linux tar.gz、tar、bz2、zip的区别,如何选择呢
  3. 罕见!百度、微博、拼多多、B站等全国34家互联网巨头集体表态
  4. [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
  5. C/C++语言之通过定义指针函数方式来实现在一个cpp文件里面获取另外一个cpp文件函数的返回值
  6. rman备份rman-00554 ,rman-04005错误
  7. ASP.NET MVC TagBuilder使用
  8. DELL服务器运行硬件检测
  9. tcp/ip协议栈总结
  10. 一个简单的if控制语句
  11. Java读取星历excel数据并计算卫星坐标
  12. chm转换成txt的url顺序问题
  13. VMware虚拟机中安装的系统共享主机无线网络的方法
  14. ionic自定义图标(ion-icon)
  15. 基于nodejs+vue+elementui酒店民宿客房预订管理系统
  16. java8 .stream().anyMatch / allMatch / noneMatch用法
  17. Java线程池原理与实例详解
  18. 亲历:IT 从业者避免猝死攻略 v1.0
  19. [杂谈]亿元大奖为何总落陌生客
  20. 应用宝认领应用签名_Android腾讯应用宝应用认领

热门文章

  1. 柔性AMOLED基板PI浆料行业现状调研及趋势分析报告
  2. TSF(Text Service Framework)简介
  3. JNI系列(一)JNI简介
  4. 牛津3000词汇表(The Oxford 3000™)
  5. maven 跳过单元测试打包
  6. oracle数据库审计优点缺点,Oracle数据库安全性:标准数据库审计
  7. 虚拟内存与虚拟存储器的区别
  8. Android应用耗电分析与优化
  9. 泰勒公式专题 拉格朗日余项与佩亚诺余项,麦克劳林公式
  10. 排球计分规则功能说明书