编码器程序

2019-04-15 15:37

试验目的:通过连续记录输入信号的两个上升沿,用该程序可以计算出输入信号的频率;同时,利用脉冲累加器可以记录输入脉冲数。

#include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE \int count=0; float f;

double f1=2000000,first=0,second=0,n,N; void main(void) {

DisableInterrupts; //禁止全局中断

TSCR2=0X82; //计时器系统控制寄存器 0X80计时器溢出中断使能 0x02计数

器预分频为四分频

PACTL=0X20; //脉冲累加器A控制寄存器 0X20脉冲累加器溢出中断允许位 TIOS=0XFE; //IC/OC 选择寄存器 0xfe设定pt0输入捕捉口

TCTL4=0X01; //控制寄存器 0X01输入捕捉边沿设为仅捕捉上升沿

ICSYS=0X0A; //输入系统控制寄存器 标志设置方式控制位 0x80为1表示在所

有其他的输入捕捉情况下,PTn引脚发生的有效外部事件将置位中断标志,0x02 IC及PAC保持寄存器。锁存方式由控制位

LATQ设定,当位LATQ=1时,向寄存器MCCTL($26)中的ICLAT位写1,将导致捕捉寄存器和脉冲累加器将其中数值转移到各自的保持寄存器。

PBCTL_PBEN=0X00; ICPAR=0X01;

//脉冲累加器B控制寄存器 0x00 脉冲累加器B禁止 //输入脉冲累加器控制寄存器 0x01 PA0EN=1 表示对应的8位//脉冲累加器通道0使能

TIE=0X01; //计时器中断使能寄存器 0x01 输入捕捉/输出比较0中断使能 TSCR1=0X80; //计时器系统控制寄存器1 0x80 表示定时器使能,正常工作 EnableInterrupts; //使能全局中断 for(;;) {; } }

#pragma CODE_SEG __NEAR_SEG NON_BANKED interrupt void CH0IC(void) {

/****************************删掉***************************************

first= TC0H; // IC保持寄存器 这些寄存器用于为相应的捕捉寄存器提供锁存功能 second=TC0; // IC/OC寄存器 每个IC或OC通道都设置有一个16位的寄存器,

对//于IC通道,当通道的边沿探测器检测到由EDGnA,EDGnB指定的//条件时,//将自由定时器的值捕捉到寄存器TC

n=count*65535+second-first; f=f1/n;

*************************************************************************/ N=PA0H; //脉冲累加器保持寄存器 用于为Pan提供锁存功能

TFLG1=0X01; //0x01 IC/OC通道中断请求标志 为1表示IC/OC通道已经出现动作

count=0; }

interrupt void TOI(void) {

count++; TFLG2_TOF=1; }

//定时器溢出标志 当16位自由定时器从FFFF回滚到0000时,该位置位,将80写入到TFLAG2将自动清除该位。


编码器程序.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:辅料部 - 采购课 - 经理JD0531

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: