首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[请教]输入捕获的问题

[请教]输入捕获的问题

请问各位大侠


输入捕获的时候,如果寄存器溢出了,是会从0开始重计,还是怎样


有没有什么标志位被置位的

你可以设置的,一种是当TCNT计数超过65536时会重新计数,另一种是当输出比较满足时,也可一使TCNT重新计数
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
我没有用输出比较呀
是用TC0输入捕获的
哪位用过MCCNT来作输入捕获的,这个东西好用吗?
大家好.
外加一句,能否捕获脉冲???
可以用定时器来捕获脉冲,但是脉冲频率和定时器的时钟要配合好,尽量不要有溢出的时候捕获的情况出现
用霍尔元件产生脉冲,怎样捕获脉冲!!???
拜谢!!
直接用输入捕捉就行了,把分频系数搞大点就可以捕捉频率很低的脉冲了,还避免了计数器翻转的情况。
如果是频率太低的话,那就只能开定时中断,判断溢出次数了
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
哪位大侠有输入捕获的实例程序呀
typedef union {
byte Byte;
struct {
byte BIT0 :1;
byte BIT1 :1;
byte BIT2 :1;
byte BIT3 :1;
byte BIT4 :1;
byte BIT5 :1;
byte BIT6 :1;
byte BIT7 :1;
}Bit;
}COUN;
COUN _pulse_flag;
#define zsflag _pulse_flag.Bit.BIT0
#define csflag _pulse_flag.Bit.BIT1
unsigned int cs[6]; //
unsigned int zs[11]; //

void Init_Tim(void)
{
T1SC = 0X00;
T1SC1 = 0X48;
T2SC = 0X44;
T2SC1 = 0X48;
}
//****************************8
void interrupt TIM2_INTSVR(void)
{
T2SC_TOF=0; //清溢出标志
if(cscount!=6) //采集到6个信号?
{
if(csflag==1) //1s内有信号?
{
CAN_data2.Byte=0; //没信号,0
cscount=0; //重新开始采集
}
}
csflag=1; //标志1s内有信号?
if(zscount!=11) //采集到6个信号
{
if(zsflag==1) //1s内有信号?
{
CAN_data4.Byte=0; //无信号,0
CAN_data5.Byte=0;
zscount=0; //重新采集
}
}
zsflag=1; //标志1s内有信号?
}
//***********************(T2CH1)中断服务函数***********************************
void interrupt Capture_cs(void)
{
unsigned char csh,csl;
T2SC1_CH1F=0; //清中断标志
csh=T2CH1H;
csl=T2CH1L;
csflag=0; //清1s内有无信号标志
if(cscount!=6) //采集到6个信号?
{
cs[cscount]=csh*0x100+csl; //未到,采集信号
cscount++;
}
else T2SC1=0X00;
}
//***********************(T1CH1)中断服务函数***********************************
void interrupt Capture_zs(void)
{
unsigned char zsh,zsl;
T1SC1_CH1F=0; //清中断标志
zsh=T1CH1H;
zsl=T1CH1L;
zsflag=0; //清1s内有无信号标志
zs[zscount]=zsh*0x100+zsl; //未到6个信号,采集信号
zscount++;
if(zscount==11) T1SC1=0x00;
}
小弟写的 仅供参考
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
多谢大哥
返回列表