|
本帖最后由 Tuier 于 2021-5-26 20:35 编辑
#include<reg52.h>
sbit input=P1^0;
sbit output=P1^1;
void main()
{
TMOD=0x051; //模式设置,定时计数器0用于定时,定时计数器1用于计数
TR0=1; //打开定时器0
TR1=1; //开通TR1计数器
TH0=(65536-46080)/256;// 计时器每隔50000微秒(晶振11.0592MHz)发起一次中断。
TL0=(65536-46080)%256;
ET0=1; //开定时器0中断
EA=1; //开总中断
while(1)
{//TL1为定时计数器1对应的内部寄存器的低八位。每当外部脉冲由1变为0时,其值加一。
if(TL1==2) //对从T1端口采得的波形四分频。1为二分频,2为四分频,3为6分频,以此类推。
//每计数一次(即采的模拟输入方波的一个周期),即执行此函数
{
output=~output;//模拟方波的周期为100ms,而此处,每隔一个输入方波的周期,
//输出信号电平变换一次,故其周期为200ms,实现了二分频。
TL1=0;
}
}
}
void timer0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
input=~input; //定时器每隔50ms发起一次中断,input电平变换一次,故模拟输入方波的周期为100ms
} |
|