首先,就谈谈舵机的控制原理:
   舵机有三根线,分别是电源正负极和信号线 。正负极接6V左右的直流电源,信号线则输出PWM脉冲,

PWM的周期为20mm,宽度(高电平的时间)是从0.5ms--2.5ms对应着舵机角度0度到180度。现在我用单片机的一个引脚P0^0接到信号线,我让引脚变化这样:输出高电平,1.5ms后变低电平20-1.5=18.5ms后再变成高电平。舵机就转到90度,实现舵机的摆动。

以下是测试程序:

/**********************************************************************
该程序是实现一个舵机在两个角度之间摆动。0度和90度
***********************************************************************/
#include <12c5a.H>        //STC12C5A系列单片机
void delay(uint16 time);    //软件延时函数
void Timer_init();          //定时器初始化函数
void Timer0(uint32 us);     //定时器0定时函数
uint16 pwm_valu=500;
sbit pwm1=P2^7;                //将舵机插到P0^0口上
/**************************************************************************
函数名:main()
/*************************************************************************/
void main()
{
P2M1=0;
P2M0=0XFF;         //将P0口设置成强推免输出,提高带负载能力
Timer_init();           //定时器初始化
Timer0(31);         //通过一个定时值进入定时循环
while(1)
{
pwm_valu=500;     //脉宽=500us=0.5ms即0度位置
delay(1000);
pwm_valu=1500;    //脉宽=1500us=1.5ms即90度位置
delay(1000);       //舵机在两个角度之间摆动
}
}
/**************************************************************************************************
函数名:delay(uint16 time)
功能:  软件延时函数
参数:  time 定时值,其大小与延时长短成正比
/***************************************************************************************************/
void delay(uint16 time)
{
uint16 i;
uint16 j;
for(i=0;i<1000;i++)
for(j=0;j<time;j++);
}
/***************************************************************************
函数名:timer_init()
功能:  定时器初始化函数
备注:12T
/***************************************************************************/
void Timer_init()
{
EA=1;                  //开总中断
AUXR|=0x00;                //T0,T1工作在12T
TMOD|= 0x11;                  //T0工作在方式1,16位
ET0 = 1;               //开定时器0中断
}
/***************************************************************************
函数名:timer0(uint32 us)
功能:  定时器0定时函数
参数:  us,毫秒。  精确定时。
备注:   晶振12M,工作模式12T
/***************************************************************************/
void Timer0(uint32 us)
{
uint32 valu;
valu=0xffff-us;        //
TH0=valu>>8;     //存放高8位
TL0=(valu<<8)>>8;    //存放低8为
TR0  = 1;              //T0开始工作
}
/*********************************************************************
函数名:T0zd(void) interrupt 1
功能:  定时器0中断函数
/********************************************************************/
void T0zd(void) interrupt 1
{
static uint8 i=1;
switch(i)     //
{
case 1:
{
pwm1=1;
Timer0(pwm_valu);   //pwm_valu的值在主函数while循环中不断改变,实现舵机在两个角度之间摆动。
//pwm_walu对应着脉宽值
}  break;
case 2:
{
pwm1=0;//  pwm1变低
Timer0(20000-pwm_valu);//  保证周期是20MS ,即20 000 us
i=0;
}  break;
default:break;
}
i++;
}

串口的测试程序

这是单片机串口程序的编写,可以通过串口助手测试

#include "12c5a.h"     //STC12C5A系列单片机
void UART1_Init(void);
void main()
{
UART1_Init();//串口初始化
while(1);//单片机一直运行
}
void UART1_Init(void)
{
SCON |= 0x50;       //串口1方式1,接收充许
BRT = 0xF6;         //12M,波特率38400
AUXR |= 0x15;       //串口1使用独立波特率发生器,独立波特率发生器1T
PCON = 0;//0x7F;    //波特率不加倍
EA = 1;
ES = 1;             //充许串口1中断
}
//把串口收到的数据发送出去
void UART1_SendOneChar(uint8 valu)
{
SBUF = valu;
while(TI == 0);
TI = 0;
}
//串口中断程序
void UART1_Int(void) interrupt 4
{
uint8 redata;
if(RI == 1)         // 检测是不是接收数据引起的中断
{
RI = 0;
redata = SBUF;
UART1_SendOneChar(redata); //发送数据
}
}

以上就是单片机对一个舵机的控制测试程序和串口测试程序

机器人的灵魂(1)——单片机C程序开发相关推荐

  1. 单片机应用程序开发QY-JXSY51

    单片机应用系统开发的一般方法 单片机应用系统是为完成某项具体任务而研制开发的用户系统,可以分为智能仪器仪表和工业测控系统两大类.虽然每个系统都有很强的针对性,结构和功能也不相同,但它们的开发过程和方法 ...

  2. 51单片机程序开发入门知识

    51单片机在我的理解上来说,就是遵循51指令集工作的芯片.他就像一台超微型的电脑,里面有内存.硬盘.CPU等基本配备. 而他所谓的CPU使用的就是51指令集,他的硬盘就是内置的Flash,他的内存也是 ...

  3. 单片机广告灯实验总结_温州很强的ly51s单片机程序开发公司

    温州很强的ly51s单片机程序开发公司 sdthfsfd 温州很强的ly51s单片机程序开发公司 "时,表示波特率自适应工作正确完成,如图所示,可以进行参数设置和校准操作.这也是为什么晶振的 ...

  4. ABB机器人、PLC、C#上位机全套程序,项目用的是ABB蜘蛛机器人,六轴用的程序开发都一样

    ABB机器人.PLC.C#上位机全套程序 1.项目用的是ABB蜘蛛机器人,六轴用的程序开发都一样 2.上位机与机器人和PLC通讯都是通过以太网总线方式,没有使用传统的IO方式 3.PLC使用的是200 ...

  5. 微信小程序开发—项目实战之聊天机器人

    项目功能介绍 人工智能虚拟机器人"微软小冰"大家玩过吧,很酷的一个应用.发送文字.语音和图片都能得到智能的回复. 那现在我们就用小程序做一个模拟的应用,智能聊天机器人.发送文字它可 ...

  6. 基于51单片机的扫地小车,扫地机器人设计。 有原理图,程序代码

    基于51单片机的扫地小车,扫地机器人设计. 有原理图,程序代码,原文. 可做实物. 主要功能有寻迹避障,来回清扫功能,往返清扫功能. YID:3350665853241481

  7. 基于51单片机的扫地小车,扫地机器人设计。有原理图,程序代码,原文论文。可做实物

    基于51单片机的扫地小车,扫地机器人设计.有原理图,程序代码,原文.可做实物. 主要功能有寻迹避障,来回清扫功能,往返清扫功能.

  8. 搭建机器人电控系统——如何从零开发主控?——文件下载、工程配置、烧录

    文章目录 搭建机器人电控系统--如何从零开发主控? 如何开发主控?(软件实现烧录控制功能) 确定你选择的MCU参数 ①首先去ST官网上找到对应的单片机型号: ②找到对应型号的三大关键参数: ③找到官网 ...

  9. 微信小程序开发导航:精品教程+网友观点+demo源码(5月9日更新)

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

最新文章

  1. 【CV】吴恩达机器学习课程笔记第16章
  2. html向js传递id
  3. 李航《统计学习方法》习题答案
  4. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(二)
  5. RuntimeError: Model class paypal.standard.ipn.models.PayPalIPN doesn't declare an explicit app_label
  6. 网站等保测评针对服务器,互联互通测评知识分享之信息安全建设要点
  7. [机器学习-原理篇]支持向量机(SVM)深入理解
  8. SLAM Cartographer(10)子图
  9. SecureCRT或XShell软件
  10. 17.和优化相关的hint
  11. 乐优商城(12)--授权中心
  12. 【iOS】快捷指令下载动漫屋漫画
  13. Linux下用五笔输入法
  14. 博才教育三校领导莅临湖南省智慧教育装备展示体验中心参观交流
  15. 数据传输加密——非对称加密算法RSA+对称算法AES(适用于java,android和Web)
  16. pandas 筛选数据的 8 个骚操作
  17. 【java并发编程实践】源码
  18. Oracle Grant详解
  19. Nginx反向代理https
  20. 使用openssl制作证书和进行CMS格式数字签名

热门文章

  1. 【小程序源码】星座运势,周公解梦下载
  2. quil-ediotr编辑器工具栏图表鼠标悬浮提示
  3. 申宝策略-A股逆市抗跌
  4. python配色_[转]修改Python IDLE代码配色及语法高亮主题
  5. springboot毕设项目影评网站系统4i684(java+VUE+Mybatis+Maven+Mysql)
  6. Access中操作必须使用一个可更新的查询错误的解决办法
  7. 第九节 PyQt5之QRadioButton对象(单选按钮)
  8. java锁源码分析-1获取锁的过程
  9. 如何把已有代码和远程仓库相关联。
  10. 饶毅:我为什么用了九年才获得博士学位?