ATmega128单片机通过舵机控制板,控制多路舵机动作。舵机控制板与单片机之间数据通信的方式,采用了常见的串行通信(USART)。舵机控制板具有自动识别波特率(9600,19200,38400,57600,115200,128000自动识别)的功能。
舵机移动指令:
指令格式:#
\r\n = 十六进制数0x0d,0x0a(回车符),指令结束符。
例如: #8P600T1000\r\n
移动8号舵机到脉宽600us,使用时间为1000毫秒
#11P2000#30P2500T1500\r\n
移动11号舵机到脉宽2000us,移动30号舵机到脉宽2500us,使用的时间为1500毫秒,舵机移动的速度依赖于前一时刻舵机的位置决定,11号舵机和30号舵机同时到达指定位置。
下面是代码:
/****************************************************
----------------------------------------main.c-----------------------------------
****************************************************/
#include
#include
#include"128_USART0.h"
/*******************************************
函数名称: void delay_nms(uint ms)
功 能: 延时指定毫秒(8M晶振)
参 数: ms--延时的毫秒数
返 回 值: 无
/********************************************/
void delay_nms(uint ms)
{
uint i,j;
for( i=0;i
for(j=0;j<1141;j++);//1141是在8MHz晶振下,仿真得到的数值
}
/*******************************************
函数名称: main
功 能: 主函数
参 数: 无
返 回 值: 无
/********************************************/
void main(void)
{
USART0_init();
while(1)
{
USAT0_send_string("#1P1056#2P2056T2500\r\n");
delay_nms(3000);
USAT0_send_string("#1P1722#2P1433T2500\r\n");
delay_nms(3000);
}
}
/************************************************
************************END*********************
************************************************/
/***********************************************
--------------------------------128_USART0.h-------------------------
***********************************************/
#ifndef _128_USART0_H_
#define _128_USART0_H_
/******************数据类型宏定义******************/
#define uchar unsigned char
#define uint unsigned int
#define fosc 8000000 //系统晶振
#define baud 9600 //波特率
/******************串口函数**********************/
void USART0_init(void);
void USART0_send_byte(uchar data);
uchar USART0_receive_byte(void);
void USAT0_send_string(char *str);
#endif
/************************************************
************************END*********************
************************************************/
/***********************************************
--------------------------------128_USART0.c-------------------------
***********************************************/
#include
#include"128_USART0.h"
/*******************************************
函数名称: uart0_init
功 能: 串口0的初始化
参 数: com
返 回 值: 无
/********************************************/
void USART0_init(void)
{
UCSR0B=0X00;
UCSR0A=0X00;
UCSR0C=(1<
UBRR0L=(fosc/16/(baud+1))%256; //波特率寄存器设定
UBRR0H=(fosc/16/(baud+1))/256;
UCSR0B=(1<
}
/*******************************************
函数名称: USART0_send_byte
功 能: 串口0发送单字节
参 数: data--发送字符元素
返 回 值: 无
/********************************************/
void USART0_send_byte(uchar data)
{
while(!(UCSR0A & (1<
UDR0=data;
}
/*******************************************
函数名称: USART0_receive_byte
功 能: 串口0接收单字节
参 数: 无
返 回 值: UDR0--接收字符元素
/********************************************/
uchar USART0_receive_byte(void)
{
while(!(UCSR0A & (1<
return (UDR0);
}
/*******************************************
函数名称: USAT0_send_string
功 能: 串口0发送字符串
参 数: str--字符串数据
返 回 值: 无
/********************************************/
void USAT0_send_string(char *str)
{
while(*str)
{
USART0_send_byte(*str);
str++;
}
USART0_send_byte(0X0A);//换行
USART0_send_byte(0X0D);//回车
}
/************************************************
************************END*********************
************************************************/
上一篇:ICCAVR编译出现Cannot find source file X:\XXXX
下一篇: ICCAVR编译报错 !E
推荐阅读最新更新时间:2024-03-16 16:03
设计资源 培训 开发板 精华推荐
- 【已结束】R&S 直播【PCI Express Gen 3 一致性测试(含demo演示)】
- CadenceLIVE China 2022中国线上用户大会 报名中!
- 邀您观看 微信直播:户外照明智能互连解决方案 让TE连接光明与智能未来
- 爱“拼”才会赢 英飞凌栅极驱动IC拼图闯关 活动开始啦!
- “ADI实验室电路技术中心”落户EEWORLD!
- 了解 PI 全新 PowiGaN 开关电源 IC ,答题赢好礼!
- 【搜集令】晒晒你收藏的经典模拟电路!!!
- Dig八月 EEWORLD为你做专题!
- 12月6日上午10:00有奖直播:如何使用Microchip安全方案为IoT设备保驾护航
- 《CoolSiC™英飞凌最佳的伺服驱动解决方案》白皮书下载