apiao

apiao

0个粉丝

26

问答

0

专栏

8

资料

apiao  发布于  2008-07-15 17:42:45
采纳率 0%
26个问答
5949

MC9sDG128单片机的脉冲计数程序

[code]#include"LCD.h"

unsigned long int distance[50]@0x800={5,4,3,2,1};
unsigned int  TimeCounter@0x700;     //第几个时间计数
unsigned int Count_Flow;        //脉冲计数器溢出标志
unsigned long int rising_1;     //第一个上升沿
unsigned long int rising_2;
float period;                   //周期
struct distancc distanc[100];
  void PAC_ini(void)     //初始化定时器
{
   TIE=0x80;            //允许中断
   TIOS=0x00;           //ch7设置为输入捕捉
   TCTL3=0x40;          //捕捉上升沿
   PACTL=0x52;          //PAEN=1; PAMOD=0;PEDGE=0;PAOV1=1;PAI=1;
   ICSYS_LATQ=1;        //锁存方式
   ICSYS_TFMOD=0;      //设置模式
   ICSYS_BUFEN=1;      //保持寄存器使能
   ICOVW_NOVW7=0;       //这两个设定1个事件产生一个中断
  //MCCTL_ICLAT=1;      //锁存位置位
   TSCR2=0x82;  //时钟=M Clock/4=2MHz   允许溢出中断
   TSCR1=0x80;  //启用定时器  用于计算周期
   TFLG1=0xFF;  //写1清除标志,其实是让寄存器中的值变成0
  //MCCTL_ICLAT=1; //强制锁存 每读一次用一次
   PAFLG_PAOVF=1;  //清除溢出标志
   PAFLG_PAIF=0;   //清除边沿标志
   TCNT=0;         //置计数器初值
   rising_1=0;     //设定初值为0
   Count_Flow=0;   //PAC32溢出计数置0
   TimeCounter=0;  //定时器置0
}
//------------------------------------------------

//------------------------------------------------
void Pulsecounter(int time_NO,int fangxiang)
{distanc[time_NO].distan=65535*Count_Flow+PACN32;  //保存数据并清0
distanc[time_NO].flag=fangxiang;
PACN32=0;           //使脉冲计数器重新置0
Count_Flow=0;       //溢出个数复0
}

  #pragma CODE_SEG NON_BANKED         
  interrupt  15 void measure_wave(void)  //上升沿中断
  {
    static unsigned long int temp;
    unsigned long int new_rising;
    TIE=0x00;           //关中断
    TFLG1=TFLG1|0xff;         //标志位清0   
    temp=TCNT;          //保存当前定时器值
          rising_2=temp;
          new_rising=rising_2+65536*TimeCounter;
    period=((float)new_rising-(float)rising_1)*0.0000005; //放大了100倍 便于后面比较
          rising_1=temp;          
    TCNT=0;             //定时器清0
    TimeCounter=0;      //溢出个数清0
          TIE=0x80;          //开中断
  }

  interrupt 16 void Period_Interrupt(void) //定时计数器溢出中断
  {TimeCounter++;
   TFLG2_TOF=1;
  }
  
  interrupt 17 void PACA_Interrupt(void) //脉冲计数溢出中断
  {PAFLG_PAOVF=1;
   Count_Flow++;   
  }

  #pragma CODE_SEG DEFAULT[/code]脉冲是外部源产生的。可以是霍尔传感器等。
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区