在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 2291|回复: 1

[求助] 单片机求助

[复制链接]
发表于 2011-9-6 22:40:07 | 显示全部楼层 |阅读模式
1资产

要采集两路高低电平信号(差分方波信号,每个电平1ms,同为低电平时认为截止),用51单片机,我用的方法是在一路电平信号下降沿触发中断,进入中断后,延时200us采集第一个低电平,然后赋初值给定时器,使定时器计时1ms中断,每次中断采一次数据,如果出现两路信号采集都是0的情况则计时中断终止。我写的程序如下:

void Data_PC(void)
interrupt
0

{


Delay();


a=Data_m_PC;// Data_m_PC
是要采集的信号D_


b=Data_a_PC;// Data_a_PC
是要采集的信号D+,把采集的信号给变量ab


Data_m_Device=a;


Data_a_Device=b;// Data_m_Device
Data_a_Device为采样的信号输出


ET0=1;


TMOD=0x01;


TL0=time_1ms;


TH0=time_1ms>>8;


TR0=1;//
定时器赋值,并开启


}

void timer0_isr() interrupt 1

//
定时器0

{


uchar endpoint;



a=Data_m_PC;


b=Data_a_PC;


endpoint=a|b;


Data_m_Device=a;


Data_a_Device=b;//
第一次采样后,每1ms再采样,数据传给Device ,同上



if(!endpoint)


{ TR0=0;


}//
判定截止


TL0=time_1ms;


TH0=time_1ms>>8;//
采一次后再赋初值,重新定时1ms,直到采到截止

}

void main()

{


Port_Init(); //
初使化


EA=1;
//
打开总中断


EX0=1; //
允许外部0中断


IT0=1; //INT0
为边沿触发


/*while(1)


{


}
*/

}

上面的程序在单片机上跑时,信号源给的是2ms的方波周期信号,理论上讲,输出的也应该是这样的方波信号。但输出管脚却不是这样的信号,为不连续的方波,时有时无,且占空比也不是输入的那样。一个理解是有中断进入后,因为程序执行时间的关系,可能造成采样错误,但我晶振12MHz,指令周期1us,不知道是不是有影响;另外一个理解就是我采用的是中断嵌套,是不是在这一块出问题了,造成采不到所有数据?

跪求大侠详解,急!

 楼主| 发表于 2011-9-7 09:49:11 | 显示全部楼层
没有高人指点一下吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-2 18:22 , Processed in 0.017498 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表