//--获取内部RC,但是需要转化成10进制
void Get_Rc(char rc)
{
uchar idata *idata_point;
uchar i=0;
uchar j=0;
idata_point=0xF8;
for(j=0;j<=3;j++)
{
i=*idata_point;
//--send_UART(i);
idata_point++;
}
}
以上是我读内部RC频率的程序,不知道如何将其转化成10进制的频率,并进行串行通讯,波特率用这个公式:TH1=TL1=256 - ( CON_OSC / 1 / 32/ 11520 ) ?请大虾们指教
此帖出自
小平头技术问答
波特率计算的不清楚了,STC的技术手册上应该有吧!
//#define SYSOSCCLOCK 31795200 31334400//晶振频率,HZ单位,取值倍数接近
#define SYSOSCCLOCK 31795200
#define COM_BAUD_RATE 14400
#define COM_SMOD_DOUBLE_SPEED //倍频设置时波特率的实际值=波特率设定*2 ,注释掉不设置倍频
/*********************************以下不必修改****************************************/
#if (SYSOSCCLOCK/32/COM_BAUD_RATE > 256)
#else
#define COM_TIMER_1T_ENABLE // 1T使能,与BRT使用无关
#endif
#ifdef COM_TIMER_1T_ENABLE
#define COM_TIMER_SETUP 0xff-(uint8)(SYSOSCCLOCK/32/COM_BAUD_RATE)+1
#else
#define COM_TIMER_SETUP 0xff-(uint8)(SYSOSCCLOCK/12/32/COM_BAUD_RATE)+1
#endif
确定 COM_TIMER_SETUP 为整数即可
sfr AUXR = 0x8E;
sfr BRT = 0x9C; //S2 Baud-Rate Timer stc12c5A
void Com_Init(void)
{
//BRT设置
#ifdef COM_TIMER_1T_ENABLE
AUXR|=0x4;
#endif
BRT= COM_TIMER_SETUP;
AUXR|=0x11; //使能BRT
/**///串口设置
#ifdef COM_SMOD_DOUBLE_SPEED
// PCON |= 0x80; //=0默认32分频 =1 16
#endif
SCON = 0x50; //0101,0000 8位可变波特率,无奇偶校验
RI=0;
TI=0;
ES=1; //串口中断响应
SBUF='O';
while (!TI) TI=0;
SBUF='K';
}
一周热门 更多>