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*********************
************************************************/
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』