我用C来写好了,计数很简单,只是写起来很繁,我不写了,给你定义好定时器
#include
#define uchar unsigned char
sbit d0=P0^0;
sbit d1=P0^1;
uchar t0;
void init()
{
t0=0;
TH0=(65536/10000)/256;//这是定义定时器初值,0.1MS记一次
TL0=(65536/10000)%256;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536/10000)/256;
TL0=(65536/10000)%256;
t0++;
if(t0==30)//30*0.1=3ms
{
d0=0;
}
if(t0==70)//7MS输出高电平
{
t0=0;
d0=1;
}
}
void main()
{
init();
while(1)
{
//写你接下来要写的东西
}
}
输出PWM信号,对信号的上升沿或者下降沿采取中断计数就好了呀。
采用定时中断吧。定一个1ms的中断。
在中断程序里面:
count++;
if(count>9)
{
count=0;
countNO++;//脉冲个数
}
if(count<7)
{
P0.1=1;
}
ese
{
P0.1=0;
}
应该简单呀
可用一个定时/计数器,设置成定时中断,输出7ms高电平、3ms低电平的周期信号。
在主程序中,循环检测P0.1引脚上输入的脉冲,每逢下降沿,加一次一即可。
用汇编实现:
_P01_ADD_R7:
JB P0.1, $ ;高电平原地转移,等待低电平出现
INC R7 ;出现了下降,用R7计数
JNB P0.1, $ ;等待重新出现高电平
SJMP _P01_ADD_R7