|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位大神大虾,小弟编程过程中遇到几个问题, 希望能得到 各位的帮助,小弟不胜感激!·!
我开发用的是STC8925C,11.0592M的晶振
,这是我写的一段程序,作用是串口收到电脑给的信号(0~256),从而来调节占空比,但是我用串口调试的时候,不是按我想的0~256的变化,比如我输进去0x80,应该是出来一半的占空比,结果却出来高电平占大部分时间
#include <REG52.H>
#include <stdio.h>
#include <intrins.h>
unsigned char ZKB1=0x00;
unsigned char ZKB2=0x00;
char flag=1;
sbit p1=P0^0;
sbit p2=P1^0;
void inituart(void) /*串口初始化
{ SCON=0x40;
PCON=0x00;
REN=1;
TI=0;
RI=0;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
unsigned char incept(void) /* 串口接收子函数
{
unsigned char uart_data;
while(RI==0);
RI=0;
uart_data=SBUF;
return uart_data;
}
void timer0(void) interrupt 2 时间中断0,即产生PWM
{
TR0=0;
TH0=0xff;
if(flag==1)
{ TH0=0xff;
TL0=ZKB1;
flag=0;
p2=1;
}
else
{ TH0=0xff;
TL0=ZKB2;
flag=1;
p2=0;
}
TR0=1;
}
void main(void) 主函数,
{
inituart();
TMOD=0x21;
TH0=0xff;
TL0=0x00;
TR0=1;
ET0=1;
EA=1;
while(1)
{ while(RI==1)
{ZKB1=incept();
ZKB2=0xff-ZKB1;}
}
}
还有,我要实现在另外一个功能,就是采集电机上的encoder的位置,上面有A,B,A和B是正交的,A接int0,当A来信号,检测B的电平高低,从而判断是正转还是反转
#include <REG52.H>
#include <stdio.h>
#include <intrins.h>
unsigned short position=0;
unsigned short position1=0;
sbit p1=P0^0;
void uart(void) 串口初始化
{ SCON=0x40;
PCON=0x00;
REN=1;
TI=0;
RI=0;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void sendbuf(unsigned char _data) 串口发送子函数
{ SBUF=_data;
while(TI==0);
TI=0;
}
void INT_0(void)interrupt 0
{
if (p1==0)
position++;
else
position--;
}
main() 主函数,送出数据
{ uart();
EA=1;
EX0=1;
IT0=1;
while(1)
{
sendbuf(position);
position1=position&0xff00;
position1=position1>>8;
sendbuf(position1);
}
}
这个CK的程序和PWM的程序放一起就不工作了,也不知道为什么,特别是把下面这段程序
void sendbuf(unsigned char _data)
{ SBUF=_data;
while(TI==0);
TI=0;
}
放到PWM里,pwm就不出来结果来,是和接收口冲突了么?
希望各位好心人帮帮忙。小弟不胜感激 |
|