EDN首页   博客首页

日志档案

发表于 2006-9-13 2:56:15

11

标签: 430f149  波特率  单片机  设定函数  寄存器  

用于430f149波特率设定的一个函数

unsigned int code T_H[]={3360,1120,672,480,373,305,258,224,0};
unsigned char code UM_CTL1_N[9]={0x00,0x08,0x22,0x92,0x55,0x6d,0xdb,0x7f,0xff};
/*******************************************************************/
//函数输入参数两个,BRCLK为给定输入频率,BAUD为需要得到的波特率
//UBR01,UBR11,UMCTL1,是430的USART三个分频与调整必须的配置寄存器在程序调用中被设定
//返回值代表成功与否,1为成功,0为失败。失败原因是波特率高于给定频率或过低,无法分频。
//
/*******************************************************************/
unsigned char usart_ubr_init(long unsigned int BRCLK,long unsigned int BAUD)
{   
    unsigned char i;
    unsigned int UBR_temp;
    long unsigned int T_UBR_ADD;
    if(BAUD>BRCLK){return(0);}
    else if((BRCLK/BAUD)>65535){return(0);}
    UBR_temp=BRCLK/BAUD;
    UBR01=UBR_temp;
    UBR_temp>>=8;
    UBR11=UBR_temp;
    UBR_temp=(BRCLK-(BRCLK/BAUD)*BAUD);
    if(UBR_temp==0){UMCTL1=UM_CTL1_N[0];return(1);}
    else
        {
            T_UBR_ADD=BAUD*210/UBR_temp;
            if(T_UBR_ADD>65535){UMCTL1=UM_CTL1_N[0];return(1);}
            else UBR_temp=T_UBR_ADD;
            for(i=0;i<9;i++)
                {
                    if(T_UBR_ADD>T_H[i]){UMCTL1=UM_CTL1_N[i];return(1);}
                }
        }
    return(1);
}
//我想至于它的应用想用的应该清楚吧

系统分类: 单片机   |   用户分类: 单片机   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1452)    回复(1)  

投一票您将和博主都有获奖机会!

最新评论

  • bb

    2006-9-25 10:44:01

    不错,下来研究下,谢谢兄弟!