在线时间0 小时
UID231752
注册时间2010-10-17
NXP金币0
该用户从未签到
新手上路

- 积分
- 36
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2011-7-18 16:01:33
|
显示全部楼层
回复:急!!有关输入捕获问题
回复第 4 楼 安于2011-07-18 07:18:04发表:
ICSYS=0x02应该是0x03,你这也试试。另外count只有在溢出以后才会+1,你可以使用断点的方式,看看每次下降沿是不是都能进入中断。还有,不看你的程序配置,不知道当前是否正确。能不能把你配置的代码发出来?
我的代码是这样写的:
#include /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#pragma LINK_INFO DERIVATIVE "MC9S12XEP100"
unsigned int count=0;
unsigned long f1=500000,first=0,second=0,n,N;
union inttochar{ //定义共同体,用于串口发送int型16位数据
int fr ;
char ch[2];
}lc;
/****************
初始化串口6
************/
void SCI_Init(void)
{ unsigned char t;
//定义波特率Bt=9600,SCI6BD=fBUS/(16*Bt),晶振频率4mhz
SCI6BDL = 0x0d; //须先给低8位赋值,总线频率2MHz
SCI6BDH = 0x00; //再给高8位赋值
SCI6CR1 = 0x00; //设置允许SCI,正常码输出,8位数据,无校验
t = SCI6DRL; //读数据寄存器(清0)
t = SCI6SR1; //读状态寄存器(清0)
SCI6CR2 = 0x0C; //允许SCI6接收和发送 查询方式
}
/****************
串口发送程序
************/
void put_char (char c) {
while((SCI6SR1 & 0X80)==0);//SCI6SR1的loops置0,正常模式,即当SCI6SR1.7=0时,等待
SCI6DRL=c;
}
/****************
初始化IC
************/
void IC_Init(void)
{
ECT_TSCR2=0X82; //溢出中断,4分频
ECT_TIOS=0XFE; //设定pt0输入捕捉口
ECT_TCTL4=0X02;
ECT_ICSYS=0X02;
ECT_TIE=0X01;
ECT_TSCR1=0X80;
}
void main(void)
{
DisableInterrupts;
SCI_Init();
IC_Init();
EnableInterrupts;
for(;;);
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 CH0IC(void)
{first=ECT_TC0H;
second=ECT_TC0;
n=count*65536+second-first;
lc.fr=f1/n;
put_char(lc.ch[0]);
put_char(lc.ch[1]);
ECT_TFLG1=0X01;
count=0;
}
interrupt 16 void TOI(void)
{
count++;
ECT_TFLG2_TOF=1;
}
这样写在遇到有溢出的时候就可能会出问题,那个频率就不是正常频率了,原因就是n多加了一个65536. |
|