STC单片机波特率计算

正在做STC系列单片机的串口实验,

可是上网没找到适合的波特率计算软件,总不能每次都用脑袋算吧,

干脆花了点时间写了个小程序,粗糙了些,但将就着用呗,呵呵

 

程序:

#include #include #include int main(void) { int timeMod; //1T或12T int reload; //独立波特初值 int doubleBaud; //波特率加倍 double baud0; //标准波特率 double baud; //计算的波特率 double crystal; //晶振MHz double Fosc; //时钟频率Hz double error; //错误率 while (1) { printf("STC单片机波特率计算,适用于独立波特率发生器:/n"); printf(" 1. 12T/n 2. 1T/n 3. quit/n"); scanf("%d", &timeMod); if (timeMod == 3) { exit(0); } if (timeMod!=1 && timeMod!=2) { printf("time mod error!/n/n"); continue; } printf(" 晶振(MHz):/n"); scanf("%lf", &crystal); printf(" 波特率:/n"); scanf("%lf", &baud0); printf(" 0.波特率不加倍:/n"); printf(" 1.波特率加倍:/n"); scanf("%d", &doubleBaud); if (doubleBaud==0 || doubleBaud==1) { doubleBaud = (int)pow(2, doubleBaud); } else { printf("波特率加倍出错!/n/n"); continue; } Fosc = crystal*pow(10, 6); //时钟频率 if (timeMod == 1) //12T { reload = 256 - (int)(floor(Fosc/baud0/(32/doubleBaud)/12 + 0.5)); baud = Fosc / (256 - reload)/(32/doubleBaud)/12; } else if(timeMod == 2) //1T { reload = 256 - (int)(floor(Fosc/baud0/(32/doubleBaud) + 0.5)); baud = Fosc / (256 - reload)/(32/doubleBaud); } if (reload <= 0) //计算初值太大出错 { reload = 0; error = 100; } else { error = fabs(baud - baud0)/baud0 * 100; if (error > 3.0) { printf("误差太大,请重新计算!/n"); } } printf("reload: %d 0x%X/nerror: %0.2lf%%/n/n/n", reload, reload, error); } return 0; }

你可能感兴趣的:(C语言)