智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2044|回复: 6
打印 上一主题 下一主题

编码器测速问题

[复制链接]

6

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
522
威望
267
贡献
159
兑换币
145
注册时间
2012-11-12
在线时间
48 小时
毕业学校
安徽交通职业技术学院
跳转到指定楼层
1#
发表于 2013-10-31 21:08:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一段卖家给的测速程序,试了好多次都是没有结果,求大神帮我看看给点建议,我不太会改,只能勉强看懂。
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define PUPAE 0
/*void 1(unsigned int m)
{
unsigned char base=0xff;
for(;m;m--)
{
      for(base=0xff;base;base--);
       }
    }*/
   
volatile int back_speed_left = 0,back_speed_right = 0 ;   
   
void intchu()
{
     DDRA = 0x00;  //输入
     PUCR|=(1<<PUPAE);
     DDRB |= 0X01 ;//输出
     
     PORTB &=0XFE;
  
     
   
}
void inticlock()
{                    //倍到40 正常16/2
     SYNR=0x44;
     REFDV=0x81;
     POSTDIV=0x00;
     while(CRGFLG_LOCK!=1);
     CLKSEL_PLLSEL=1;
}  
//串口初始化
void SCIInt(void){         
    char temp;
    //SCI0BDH = 0x01;
    //SCI0BDL = 0x05;
   
    SCI0BDL = 0x16;//设置波特率为115200
    SCI0BDH = 0x00;
    SCI0CR1_M = 0;  //数据位8位 停止位一位
    SCI0CR1_PE = 0;  //无奇偶校验
    temp = SCI0DRL;   //把寄存器清空,准备发数据到上位机
    temp = SCI0DRH;
    //SCI0CR2 = 0x2c;  //发送允许
    SCI0CR2 = 0x2c;     //两个一起发 发送允许 接收中断允许  
}
     
void send(uchar a)
{
     while(!SCI0SR1_TDRE);
     SCI0DRL=a;
     SCI0DRH=0x00;
}     
     
void sendInt(int num)
{
     char dat_h,dat_l;
     dat_l=(uchar)(num);//低字节直接赋值 高位舍去
     dat_h=(uchar)(num>>8);  //拆分高字节
    send(dat_h);
    send(dat_l);
}
     
         
/* 初始化计数器模块(TIM - Timer Module) *
* PT7:用于测速(捕捉脉冲的上升沿)      */

void Init_TIM(void)
{
    DDRT&=~(1<<7);
    PERT|=(1<<7);//编码器脉冲累加器口为输入,上拉有效。其他口没作用。

   
    PACTL = 0x40;     // 使能累加器
    PACNT = 0x0000;   // 累加器清零
}

/*void Init_CD4520(void)
{
   
   PT0AD0 = 0;
   ATD0DIEN=0xff00;  //ATD输入使能
   DDR0AD0 = 0x00;         //用AD复用的IO口高八位  设置为输入
   DDR1AD0_DDR1AD06 = 1; //
   PT1AD0_PT1AD06 = 1;
  
   asm(nop);
   asm(nop);

   PT1AD0_PT1AD06 = 0;
   asm(nop);
   asm(nop);
} */
void Init_CD4520(void)
{
   PORTB |= 0x01;
   asm(nop);
   asm(nop);
   asm(nop);
   asm(nop);
   asm(nop);
   asm(nop);
   asm(nop);
   asm(nop);
   PORTB &=0XFE;
}

// 时钟模块 输出比较。。。。
void intTime_OUTPUT(void){
    TIOS_IOS1 = 1;   //选择输出比较方向为output
    //TCTL4_EDG1B = 0 ;   //选择扑捉形式  上升沿
    //TCTL4_EDG1A = 1 ;
    TSCR2_PR2 = 0 ;       //预分频到5兆
    TSCR2_PR1 = 1 ;
    TSCR2_PR0 = 1 ;
    TC1 = 25000;          //要比较的数
    TIE_C1I = 1;        //时钟使能
    TSCR1_TEN = 1 ;     //整个时钟使能
}


     
void main(void) {
      intchu();
      inticlock();
      SCIInt();
      Init_TIM();
      Init_CD4520();
      intTime_OUTPUT();
      EnableInterrupts;
  for(;;) {
  
  }
}
volatile int count = 0;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
  #pragma TRAP_PROC
  void Interrupts()
  {
       TFLG1_C1F=1;//接受中断信号
       TC1+=25000;
       count++;
       if(count >= 500)
       {
           count=0;
           back_speed_left = PORTA;
           back_speed_right = PACNT;         
           sendInt(back_speed_left);
           sendInt(back_speed_right);
           
           PORTB |= 0x01;
           asm(nop);
           asm(nop);
           asm(nop);
           asm(nop);
           asm(nop);
           asm(nop);
           asm(nop);
           asm(nop);
           PORTB &=0XFE;
   
           
           PACNT = 0;     
       }
  }
#pragma CODE_SEG DEFAULT  

16

主题

590

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2987
威望
1599
贡献
34
兑换币
939
注册时间
2012-11-17
在线时间
677 小时
2#
发表于 2013-10-31 21:36:30 | 只看该作者
自己写吧  不难的
回复 支持 反对

使用道具 举报

4

主题

143

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2367
威望
1143
贡献
822
兑换币
770
注册时间
2012-11-8
在线时间
201 小时
3#
发表于 2013-12-19 12:28:01 | 只看该作者
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

高级会员

Rank: 4

积分
533
威望
253
贡献
146
兑换币
157
注册时间
2013-11-6
在线时间
67 小时
4#
发表于 2014-1-12 18:23:39 | 只看该作者
回复 支持 反对

使用道具 举报

6

主题

673

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2357

优秀会员奖章活跃会员奖章

QQ
威望
1073
贡献
634
兑换币
740
注册时间
2013-7-5
在线时间
325 小时
5#
发表于 2014-1-12 22:17:16 | 只看该作者
:lol:lol:lol:lol:lol
回复 支持 反对

使用道具 举报

9

主题

32

帖子

0

精华

高级会员

Rank: 4

积分
595
威望
290
贡献
167
兑换币
173
注册时间
2014-2-23
在线时间
69 小时
6#
发表于 2014-3-29 10:32:08 | 只看该作者
你的cd4520在哪买的,几个引脚?

回复 支持 反对

使用道具 举报

0

主题

40

帖子

0

精华

高级会员

Rank: 4

积分
973
威望
517
贡献
276
兑换币
318
注册时间
2012-11-11
在线时间
90 小时
7#
发表于 2014-7-8 01:23:41 | 只看该作者
CD4520的程序块中,没有对芯片进行使能。
void Init_CD4520(void)
{
   //PORTA = 0xff;
   //DDRA = 0x00;  //输入//***********************加上也行一样PORTA = 0xff;DDRA = 0x00;
   DDRE_DDRE3 = 1;
   PORTE_PE3= 1;
   asm(nop);
   asm(nop);
   
   PORTE_PE3= 0;
   asm(nop);
   asm(nop);
   
}
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 01:40 , Processed in 0.129534 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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