编码器程序

更新时间:2024-06-03 12:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

#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将自动清除该位。

本文来源:https://www.bwwdw.com/article/pe46.html

Top