21ic问答首页 - 【STC单片机】请问谁能解释一下stc8h/stc8g系列IO口驱动问题
【STC单片机】请问谁能解释一下stc8h/stc8g系列IO口驱动问题
8191099642022-06-21
最新发现一个IO口输出两组方波,第一组直接等于IO口取反,第二组等于第一组的取反,不管是用推挽还是准双向,频率在20M,22.1184M,24M,27M的时候,用测试表笔同时测两个信号(需拉信号线测试,直接在IO口上测试,有时候是正常的),拉了信号线测试第二个信号会没掉,单独只测一个信号都是ok的,单片机用其他频率也是正常的,哪位大神能解释一下
P2M1 &= ~0x06; //推挽
P2M0 |= 0x06;
// P2M1 &= ~0x06; //准双向
// P2M0 &= ~0x06;
while (1)
{
P21=~P21;
P22=~P21;
Delay1us();
}
搜索
P2M1 &= ~0x06; //推挽
P2M0 |= 0x06;
// P2M1 &= ~0x06; //准双向
// P2M0 &= ~0x06;
while (1)
{
P21=~P21;
P22=~P21;
Delay1us();
}
搜索
复制
赞0
评论
2022-06-22
赞0
void timer0_int (void) interrupt TIMER0_VECTOR
{
bit aaa;
TH0=0xff;
TL0=0xFE;
aaa=!aaa;
SCK=aaa;
if(!aaa)
//SCK=!SCK; //周期15.625k,64us 进一次中断32us
//if(!SCK)
{
if(++SCKtimes>=16)
{
SCKtimes=0;
DATA=1;
}
if(SCKtimes>=1)
{
DATA=0;
}
}
}
评论
2022-06-22
赞0
你可以这样:
bit B_clip;
B_clip = B_clip;
P21=B_clip;
P22=~B_clip;
或者这样:
P21=~P21;
_nop_();
_nop_();
P22=~P21;
评论
2022-06-22
赞0
谢谢,我试了加延时确实可以,但是我用30M和35M不加延时也是可以的,就是20-27M的时候不行,以前用stc15系列没有这个问题,8G和8H是有什么区别吗?我实际运用的时候是定时器0采外部脉冲,产生两个方波信号SCK和DATA,就是不加延时的话,还有什么解决方法吗
void timer0_int (void) interrupt TIMER0_VECTOR
{
TH0=0xff;
TL0=0xFE;
SCK=!SCK; //周期15.625k,64us 进一次中断32us
if(!SCK)
{
if(++SCKtimes>=16)
{
SCKtimes=0;
DATA=1;
}
if(SCKtimes>=1)
{
DATA=0;
}
}
}
评论
2022-06-22
赞0
谢谢,我试了加延时确实可以,但是我用30M和35M不加延时也是可以的,就是20-27M的时候不行,以前用stc15系列没有这个问题,8G和8H是有什么区别吗
评论
2022-06-22
赞0
void timer0_int (void) interrupt TIMER0_VECTOR
{
TH0=0xff;
TL0=0xFE;
SCK=!SCK; //周期15.625k,64us 进一次中断32us
if(!SCK)
{
if(++SCKtimes>=16)
{
SCKtimes=0;
DATA=1;
}
if(SCKtimes>=1)
{
DATA=0;
}
}
}
评论
2022-06-22
赞0
评论
2022-06-21
赞0
评论
2022-06-21
您需要登录后才可以回复 登录 | 注册