小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 5657|回复: 2

ATMEGA-M8的下位机程序(原创,自己按照需求修改)

[复制链接]
发表于 2012-12-19 13:49:34 | 显示全部楼层 |阅读模式
#include<iom8v.h>
#include<macros.h>
#include<stdio.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define Fosc 8000000
#define BAUD 9600
#define UBRR_i (Fosc/BAUD/16)-1
uchar key_stime_counter=0,hight_votage,timeT_counter=0,key_stime_ok=0;;   //舵机的变量
uchar key_stime_counter1=0,hight_votage1,timeT_counter1=0,key_stime_ok1=0;  //舵机的变量
void delay_nms(unsigned int n) ;
void delay_1ms(void) ;
void Time0_init(void);
void SteerEngineTurningUp(void);
void SteerEngineTurningDown(void);
void key_scan(void);
void SteerEngineTurningUp0(void);
void SteerEngineTurningDown0(void);
void Time2_init(void);
void USART_Init( unsigned int baud );
unsigned char USART_Receive( void );
uchar Buffer[4] = {0};
void main(void)
{
DDRC|=BIT(6);
PORTC&=~BIT(6);
  DDRB|=BIT(0)|BIT(1);
  DDRD|=BIT(7)|BIT(6)|BIT(5)|BIT(4)|BIT(3)|BIT(2);//led for checking
PORTD|=BIT(7)|BIT(6)|BIT(5)|BIT(4)|BIT(3)|BIT(2);
USART_Init( UBRR_i );
Time0_init( );
Time2_init( );
  while(1)
{
   Buffer[0]=USART_Receive(  );
  //Buffer[1]=Buffer[0]-48;
  switch(Buffer[0])
  {
   case ***:
         if(Buffer[0]==***)
    {
           PORTD&=~BIT(7);
      SteerEngineTurningDown();
      }
      //Buffer[0]=0;
      break;
   case***:
         if(Buffer[0]==***)
    {
           PORTD&=~BIT(6);
      SteerEngineTurningUp();
      }
     // Buffer[0]=0;
      break;
   case ***:
         if(Buffer[0]==***)
    {
           PORTD^=~BIT(5);
     SteerEngineTurningDown0();
  
     }
     //Buffer[0]=0;
      break;
   case ***:
           PORTD^=~BIT(4);
      //SteerEngineTurningUp0();
   
      break;
   case ***:
         if(Buffer[0]==***)
    {
           PORTD^=~BIT(3);
      SteerEngineTurningUp0();
      }
      break;
    case ***:
         if(Buffer[0]==***)
    {
           PORTC|=BIT(6);
     
      }
      break;
   default:  
            break;
  }
}
}
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1140;i++);
  }
  void USART_Init( unsigned int baud )
{
/* 设置波特率*/
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* 接收器与发送器使能 */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* 设置帧格式: 8 个数据位, 2个停止位 */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
unsigned char USART_Receive( void )
{
/* 等待接收数据 */
while ( !(UCSRA & (1<<RXC)) )
;
/* 从缓冲器中获取并返回数据 */
return UDR;
}
  void Time2_init(void)
  {
   CLI();
   TCNT2=0;
   TCCR2=0X01;
   PORTB&=~BIT(1);
   //SEI();
  }
   void Time0_init(void)
  {
   CLI();//关闭中断
   TCNT0=0;//装初值
   TCCR0=0X01;//设置分频数和工作模式、这里是256分频和普通模式
  PORTB&=~BIT(0);
   //SEI();//开中断
  }
#pragma interrupt_handler timer2:5    //Time2溢出中断
void timer2(void)
{
  //TCNT2=0;
     if (++key_stime_counter1>=625)
  {
       key_stime_counter1=0;
     PORTB|=BIT(1);       //       control_signal=1;
       key_stime_ok1 = 1;               // 20ms到
       timeT_counter1=0;
  }
  
  if (key_stime_ok1&&(++timeT_counter1>=hight_votage1))
  {
      key_stime_ok1=0;
       timeT_counter1=0;
        PORTB&=~BIT(1);      //  control_signal=0;              // hight_votage*0.1ms到
  }
}
#pragma interrupt_handler timer0:10    //Time0溢出中断
  void timer0(void)
  {
//TCNT0=0;
     if (++key_stime_counter>=625)
  {
       key_stime_counter=0;
     PORTB|=BIT(0);       //       control_signal=1;
       key_stime_ok = 1;               // 20ms到
       timeT_counter=0;
  }
  
  if (key_stime_ok&&(++timeT_counter>=hight_votage))
  {
      key_stime_ok=0;
       timeT_counter=0;
        PORTB&=~BIT(0);      //  control_signal=0;              // hight_votage*0.1ms到
  }
  }
   void SteerEngineTurningUp(void)
{
   TIMSK=0X01;//溢出中断使能
    SEI();//开中断
    delay_nms(5);
  hight_votage-=1;
  if(hight_votage<16)
  hight_votage=16;
  TIMSK=0X00;//溢出中断使能
  CLI();
}
/********************************************************************
* 名称 :SteerEngineTurningDown()
* 功能 : 舵机向下转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteerEngineTurningDown(void)
{   
    TIMSK=0X01;//溢出中断使能
  SEI();//开中断
  delay_nms(5);
   hight_votage+=1;
   if(hight_votage>78)
   hight_votage=78;
   TIMSK=0X40;//溢出中断使能
   CLI();
}
  void SteerEngineTurningUp0(void)
{
   TIMSK=0X40;//溢出中断使能
    SEI();//开中断
    delay_nms(5);
  hight_votage1-=1;
  if(hight_votage1<16)
  hight_votage1=16;
  TIMSK=0X00;//溢出中断使能
  CLI();
}
/********************************************************************
* 名称 :SteerEngineTurningDown()
* 功能 : 舵机向下转。
* 输入 : 无
* 输出 : 无
***********************************************************************/
  void SteerEngineTurningDown0(void)
{   
    TIMSK=0X40;//溢出中断使能
  SEI();//开中断
delay_nms(5);
   hight_votage1+=1;
   if(hight_votage1>78)
   hight_votage1=78;
  TIMSK=0X00;//溢出中断使能
  CLI();
}

评分

参与人数 1威望 +2 金钱 +2 贡献 +3 收起 理由
liuviking + 2 + 2 + 3 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-12-20 00:35:36 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2012-12-20 17:23:25 | 显示全部楼层
:):):):):)顶一个~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 05:21 , Processed in 1.090183 second(s), 20 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表