关于51单片机C语言编程的问题。

现在我将两路相位相差90°的方波信号其中一路信号接外部中断INT0接口(P3.2),另一路接计数器T1(P3.5),中断方式设置为下降沿触发,当INT0的下降沿到来时,如果T1的信号为高电平,则计数器加1,如果为T1为低电平,则计数器减1。新手刚入门不知如何用C编程来实现,求大神帮忙!

第1个回答  2014-07-27

图中蓝色比红色超前90°,每次蓝色下降沿时,红色都是低电平,所以我认为计数器不会加,只能减。

追问

你好,我是码盘的两路信号来模拟计数的,当码盘正向转动时,是正向计数,计数器只能加,但当码盘逆向转动时,计数器是能够减的,比如我正向转动3个周期,加3,但再逆向转动1个周期,又减1。

第2个回答  2014-07-27
答:
PinC PinB PinA是位变量(只有两个值0、1);
Address是字节变量(八位二进制数,用16进制表示是从00H到FFH)。

这几句:
PinC = (bit) (Address & 0x04);
PinB = (bit) (Address & 0x02);
PinA = (bit) (Address & 0x01);

的意思是把 Address和后面的 0x04 0x02 0x01 进行“与”运算后,转换成位变量。赋给PinC PinB PinA。

bit是位变量的定义。

假如Address取值为4的话,PINA,PinB,PinC分别等于什么值啊?是几位的啊?

PINA为0,PinB为0,PinC为1.
举例说明如下:
0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 0

0 0 0 0 0 1 0 0 与运算,按位相“与”

0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 0 与运算,按位相“与”

0 1 1 0 1 1 1 0
0 0 1 1 0 0 1 0

0 0 1 0 0 0 1 0 与运算,按位相“与”

两者全为1时结果才是1.
希望对你能有所帮助。本回答被网友采纳
第3个回答  2014-08-01
简单:

if(T1) n++;
else n--;

即可。
相似回答
大家正在搜