我用STC11F60XE单片机的独立波特率发生器在P1.0口输出脉冲信号,控制伺服电机,用T0计数并触发中断使脉冲数固定,可中断后再想启动P1.0口发脉冲就有点问题了,动作会有点乱,而且我的T0还有其它用处。想改用T2计数,要能停能开,或者你有其它的好办法也行。求高手帮忙解决,问题解决后加分。
main()
{
BRT = (256 - 10);//设定独立波特率发生器频率
WAKE_CLKO= (WAKE_CLKO | 0x07);//允许T0,T1,独立波特率发生器输出时钟
AUXR = (AUXR | 0x10);//启动独立波特率发生器
TMOD = 0x05;
TH0 = 0x3C;
TL0 = 0xB0;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
if(y == 0)
{
input_delay();
if(y == 0)
{
TH0 = 0x3C;
TL0 = 0xB0;
TR0 = 1;
AUXR = (AUXR | 0x10);
}
}
}
}
count() interrupt 1
{
AUXR = 0;
TR0 = 0;
P1 = 0xFF;//这一步不能使P1^0口拉高!奇怪
}
BRT = (256 - 10);
WAKE_CLKO= (WAKE_CLKO | 0x07);
AUXR = (AUXR | 0x10);//启动独立波特率发生器
前面都已经使用独立波特率发生器了,再去中断中更改P1状态……
P1^0 = ~P1^0;
好像不太对吧,我在中断中试过 “P1 = 0xFF;//这一步不能使P1^0口拉高!奇怪” 改不了的
我也用过定时器发脉冲,可要是想让脉冲频率高就要不停的中断,弄的CPU都不能做其它事了。
于是想了这个办法,可又没办法控制发出脉冲的数量了
去掉这句:WAKE_CLKO= (WAKE_CLKO | 0x07);//允许T0,T1,独立波特率发生器输出时钟
没有必要用其输出