智能车制作

标题: 有关蓝牙的 [打印本页]

作者: ^蒲公英@约定_    时间: 2013-3-31 20:11
标题: 有关蓝牙的
大家看看我这个程序
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */


  unsigned char  Image_Data[60][74];

//基于16M外部晶振
//byte nM 预设定的总线频率
//函数可能存在问题,仅供参考演示
void SetBusCLK_nM(byte nM)
{   
    MMCCTL1=0X00;                       
    PKGCR  =0X06;                       
    DIRECT =0x00;
    IVBR   =0xFF;   
    ECLKCTL=0xC0;   
    CPMUPROT   =0x26;   //停止保护时钟配置寄存器
    CPMUCLKS_PSTP=0;    //
    CPMUCLKS_PLLSEL=1;  //应用PLL
    CPMUCLKS   =0x80;    //允许PLL分频        
    //CPMUSYNR   =nM-1;   //设置分频因子  
    CPMUSYNR   =0xc0|(nM-1); //设置分频因子
    CPMUREFDIV =0x80|0x00; //pllclock=2*(1+SYNR)= MHz;
    CPMUPOSTDIV=0x00;   // Set the post divider register      
    //CPMUPOSTDIV=0x00;   // Set the post divider register  
    CPMUPLL    =0x10;   // Set the PLL frequency modulation  
    while(CPMUFLG_LOCK == 0);          /* Wait until the PLL is within the desired tolerance of the target frequency */
    CPMUPROT=0x00;            /* Enable protection of clock configuration registers */
}

void PWM_Init(void)
{      
    //SB,B for ch2367
    //SA,A for ch0145  
    PWMPRCLK = 0X44;    //clockA,CLK B 32分频:6000k //预分频寄存器  
    PWMSCLA = 0x01;     //对clock SA 进行2*PWMSCLA=2分频;pwm clock=clockA/4=10KHz;分频寄存  107k     
    PWMSCLB = 0X06;     //clk SB=clk B/(2*pwmsclb)=10KHZ   分频寄存
     // PWMCTL_CON67=1 --- 通道6、7 级联成一个16位的PWM通道  150k
     //pwm1  
    //PWMCNT2 = 0;
    PWMCTL_CON01=1;    //--- 通道0、1 级联成一个16位的PWM通道
    PWMCTL_CON23=1;
    PWMCTL_CON67=1;         
    //PWMCAE_CAE0=1;   // 左对齐  1居中对齐置为0左对齐   只有输出通道被关闭后才能对其进行设置
    PWMCAE_CAE1=0;            //通道时钟周期*PWMPER23
    PWMCAE_CAE3=0;         
    PWMCAE_CAE7=0;
    //PWMPOL_PPOL0=1;  //  极性设置 寄存器  通道对外输出波形先是高电平然后再变为低电平        
    PWMPOL_PPOL1=1;           //  PWMDTY23/PWMPER23
    PWMPOL_PPOL3=1;          //(PWMPER23-PWMDTY23)/PWMPER23
    PWMPOL_PPOL7=1;
    /*PWMPER1 =4000;   // 周期寄存器设置  100HZ
    PWMDTY1 =800;      //  占空比寄存器设置中值39
    PWMPER3 =100;        
    PWMDTY3 =0;
    PWMPER7 =100;        
    PWMDTY7 =50;*/
    PWMPER01 = 20000;  //周期10ms; 75Hz;
    PWMDTY01 = 2300;   //高电平时间为430    16.7  加左3800减右3000;
    PWMPER23 = 5000;   //周期10ms; 100Hz;
    PWMDTY23 = 600;
    PWMPER67 = 3000;  //周期10ms; 100Hz;
    PWMDTY67 = 0;                          
    //PWMCLK_PCLK0 = 1;           //0 1 4 5时钟源的选择   1通道的时钟源设为SA   0通道的时钟源设为A
    PWMCLK_PCLK1 = 1;
    PWMCLK_PCLK3 = 0;
    PWMCLK_PCLK7 = 0;
    //PWME_PWME0 = 1;
    PWME_PWME1 = 1;
    PWME_PWME3 = 1;
    PWME_PWME7 = 1;                        
}

//计数初始化//
void time1Init(void)
{
  //TIOS_IOS0=0;
  //TCTL4=0x02;
  //TIE_C0I=1;
  PACTL_PAEN=0;//0-16b计数禁止,1允许,先禁止
  PACTL_PAMOD=0;//0-计数模式,1-门时计数模式,设0
  PACTL_PEDGE=0;//0下降沿,1-上升沿,指定有IOC7-PT7口输入,此位受PACTL_PAMOD影响,此设0
  PACTL_CLK1=0;//当计数位外部脉冲,此设置无意义,都设0
  PACTL_CLK0=0;
  PACTL_PAOVI=0;//0-溢出中断禁止,1-允许,本例计数个数有time0时钟中断读取,不需要溢出中断,设0
  PACTL_PAI=0;//0禁止中断,1允许,设0
  PACNT=0;//计数器寄存器的值,可以使0000~FFFF,先清0
  //PAFLG_PAOVF=1;//计数溢出FFFF>0000
  PAFLG_PAIF=1;//脉冲数入1=IOC7-PT7,最大65536个脉冲
  PACTL_PAEN=0;//16b计数允禁止
}

//--------------------行场初始化------------------//
void ECT0_Init(void)
{
  TSCR1=0x80; //允许主时钟,允许预分频时钟
        TIOS=0x40;  //PT4,PT6均为输入捕捉
        TCTL3=0x09; //PT6捕捉下降沿,PT4捕捉上升沿
        TFLG2=0x80;//清主时钟溢出中断标志位
        TFLG1=0xFF;//清PT4,PT6中断标志位
        TIE=0x00;  //关PT4,PT6中断
}

//--------------------定时器初始化------------------//
void ECT0_Init_time(void)
{
  TIOS=0x40;    //定时器通道0设置为输出比较
  TC6=0x00ee;   //赋初值,当TCNT从0计数到此值时第一次进入中断
  TCTL1=0x10;   //其他七路与定时器断开   执行的动作时:0通道输出清零
  TSCR2=0x06;   //溢出中断禁止   64M/64=1微秒,计一个数用1微秒
  TSCR1=0x80;   //使能定时器
  TIE=0x00;     //通道0输出比较中断允许  通道1、2、6、7输入捕捉中断允许
}

//---------------图像初始化------------------//
void tuxiang_init()
{
     TIE_C5I=1;
     TIE_C4I=1;
     TIE_C6I=1;
     TIE_C7I=1;
}

void SCI_Init(void)
{
      SCI0BD=31; /*波特率为115200 误差为0.0079*/
      //SCI0BD =BusCLK_nM/16/9600;
      SCI0CR1=0;/*一个起始位8位数据位一位停止位,无奇偶校验*/
      SCI0CR2=0x2C;/*TIE=0发送中断申请,TCIE发送完成中断,RIE接受完成中断,ILIE空闲中断,TE允许发送,RE允许接收
                      7                       6                   5              4            3             2
                  */

}
void SEND(unsigned char DATE)
{

      while(!(SCI0SR1_TDRE==1));
      SCI0DRH=0;
      SCI0DRL=DATE;
      _asm(nop);

}
void ling()
{
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
           SEND(0x00);SEND(0x00);
}
//求绝对值
int abs_1(int xn)
{
  if(xn<0)xn=-xn;
  return(xn);
}
int abs_stub(int anx,int bnx)
{
  if(anx>=bnx) return anx-bnx;
  else return bnx-anx;
}
int absa(int an)
{
  if(an>=0)return an;
  else return -an;
}

void delay(unsigned int time)
{
   unsigned int i,j,k;
   for(i=0;i<125;i++)
   {
      for(j=0;j<125;j++)
      {
         for(k=time;k>0;k--);
      }
   }  
}
void delay1(unsigned int time)
{
   unsigned int i,j,k;
   for(i=0;i<80;i++)
   for(j=0;j<125;j++)
   for(k=time;k>0;k--);
}




void main(void)
{
  unsigned char i,j;
// unsigned char T,T1,T2,n=0,m=0;
  SetBusCLK_nM(48);
  SCI_Init();
  PWM_Init();
  ECT0_Init();
  ECT0_Init_time();
  time1Init();
  DDRA=0x00;   
  DDRD=0xFF;
  PORTD=0xff;
  DDRB=0xFF;
  DDRC=0xFF;
  tuxiang_init();
        EnableInterrupts;
  for(;;)
  {   
          if(flag==2)
     {      
          for(i=0;i<50;i++)
            {
              for(j=0;j<74;j++)           
              {
                  if(Image_Data[j]>0xa0)
                  {
                        Image_Data[j]=1;
                        SEND(0x01);   
                  }
                  else
                  {
                        Image_Data[j]=0;
                        SEND(0x00);   
                  }

              }
           }

            flag=0;            
            PORTD_PD7=~PORTD_PD7;
            TIE_C4I=1; //开行中断
            TIE_C5I=1; //开场中断                  
            _FEED_COP(); // feeds the dog               
         }   
    }   
}

#pragma CODE_SEG NON_BANKED    //定时器通道0输入捕捉中断
void interrupt 20 SCI_R(void)
{                                   
     volatile unsigned char da;
     if(SCI0SR1_RDRF==1)
     da=SCI0DRL;
     SEND(da);

}   
void interrupt 12  LINE0(void)
{  
          unsigned char n;
          TFLG1_C4F=1;
          Line_C++;
          if((Line_C%3==0)&&(flag==1))
          {



               for(n=0;n<74;n++)
               {

                   Image_Data[ROW][n]=PORTA;
               }
                  if(ROW==55)
                  {
                     TIE_C4I=0; //开行中断
                  }
                  ROW++;     

          }
          if(Line_C>240)   //为什么要用这个数字
           {
          Line_C=0;
          }   

}
void interrupt 13 ROW0(void)
{            
            TFLG1_C5F=1;
            PORTD_PD6=~PORTD_PD6;            //PACTL_PAEN=1;//16b计数允许
            Line_C=0;
            ROW=0;
            flag++;
            if(flag==2)
            {            
              TIE_C4I=0; //开行中断
              TIE_C5I=0; //开场中断
            }      
}
void interrupt 14 dingshi(void)
{  
            unsigned int m;
            TFLG1_C6F=1;
            TIE_C6I=0;
            PACTL_PAEN=0;//16b计数禁止
            PORTD_PD3=~PORTD_PD3;  //PACTL_PAEN=1;//16b计数允许

            m=TCNT;
            TC6=m+10000;           //10000*1us=10ms定时时间
            PACTL_PAEN=1;//16b计数禁止
            TIE_C6I=1;
}
按照这个程序用蓝牙应该能看到赛道情况啊,可是我的界面是这样的,为什么呀谁能帮我看看,谢谢了[attach]43038[/attach]



作者: ^蒲公英@约定_    时间: 2013-3-31 20:12
蓝牙已经配对成功了。。。
作者: mxj1005071012    时间: 2013-3-31 21:13
协议呢 按照协议发了吗 我以前也把蓝牙配对成功了 可是我不知道协议
作者: exiao    时间: 2013-3-31 21:18
不懂蓝牙
作者: huang91    时间: 2013-3-31 23:59
鼠标钛合金滑轮已坏。

作者: ^蒲公英@约定_    时间: 2013-4-1 09:11
mxj1005071012 发表于 2013-3-31 21:13
协议呢 按照协议发了吗 我以前也把蓝牙配对成功了 可是我不知道协议

怎么个协议法???

作者: exiao    时间: 2013-4-1 11:07
标题: RE: 有关蓝牙的
^蒲公英@约定_ 发表于 2013-4-1 09:11
怎么个协议法???

应该是蓝牙通信协议,网上能查到
作者: ^蒲公英@约定_    时间: 2013-4-1 11:39
是这个嘛
作者: ^蒲公英@约定_    时间: 2013-4-1 12:22
我用的是串口通信,不需要啥协议的吧
作者: mxj1005071012    时间: 2013-4-1 12:32

作者: ^蒲公英@约定_    时间: 2013-4-1 14:36
问题解决了,我波特率算的少了一位……谢谢大家
作者: 飞翔的翅膀    时间: 2013-4-1 16:02
网上很多的例程
作者: tujunjie    时间: 2013-9-6 14:25
本帖最后由 tujunjie 于 2013-9-6 14:29 编辑
^蒲公英@约定_ 发表于 2013-3-31 20:12
蓝牙已经配对成功了。。。

哥们,你好!这两天我也在弄蓝牙,可以请教一下吗?谢谢你了。我用串口232发送没有问题,但是用蓝牙就是没有反应呀!不知道怎么回事,谢谢,我用的是128的

作者: 天河之外    时间: 2013-12-2 23:41





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2