📄 mc.c
字号:
//本程序利用定时中断T0产生固定频率为2KHz的脉冲方波信号,通过示波器进行观察//
//初始脉宽为高电平3ms,低电平2ms;//
//占空比可通过按键循环调整,步进宽度为0.1ms//
#include <AT89X52.H>
//=========================================================================//
bit GD=1; //定义翻转标志位//
unsigned int i; //定义脉宽调整变量//
void chushi_T0(void);
void ZengJia(void); //函数声明//
void JianShao(void);
//=========================================================================//
main()
{
i=3000;
chushi_T0();
while(1)
{
ZengJia();
JianShao();
}
}
//=========================================================================//
void chushi_T0(void) //T0中断初始化子函数//
{
ET0=1;
TF0=0;
TMOD=(TMOD&0xF0)|0x01; //T0模式设置为方式一,定时,不需外部控制,T1模式不变//
TH0=(-i)>>8;
TL0=(-i);
TR0=1;
EA=1;
}
//=========================================================================//
void int_T0(void) interrupt 1 //T0中断子函数//
{
EA=0;
TR0=0;
GD=!GD; //每次中断溢出GD标志翻转//
P1_1=GD;
if(GD)
{
TH0=(-i)>>8; //根据标志位不同给不同的初值//
TL0=(-i);
} //初始高电平宽度3ms//
else
{
TH0=(-(5000-i))>>8; //初始低电平宽度2ms//
TL0=(-(5000-i));
}
TR0=1;
EA=1;
}
//=========================================================================//
void ZengJia(void) //高电平脉宽增加子函数//
{
if(P3_1==0)
{
while(P3_1==0);
i=i+100;
}
if(i==5000) //补充脉宽调整循环条件//
i=100;
}
//=========================================================================//
void JianShao(void) //高电平脉宽减少子函数//
{
if(P3_5==0)
{
while(P3_5==0);
i=i-100;
}
if(i==0) //补充脉宽调整循环条件//
i=4900;
}
//=========================================================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -