ADE5169单片机串口通讯
ADE5169使用的是51内核,在设置串口波特率的时候与51单片机类似,都是使用定时器来生成波特率,但是ADE5169为了不占用Timer1/2,为每个串口都增加了一个独立的UART定时器,并且配置起来非常简单,不用像59c51一样自己去计算(其实是人家已经帮你算好了),先上代码(我配置的是8bit,115200 Baud)
//首先将fcore配置为4M,初始化时调用这个函数 void set_fCORE( void ) { KYREG = unlock_key_0xa7 ; POWCON = 0x80; KYREG = lock_key_0x00 ; } //然后初始化串口 void serial1_init( void ) { SCON = 0X50; SBAUDT = 0X01; //设置波特率为115200 SBAUDF = 0X87; } //发送数据 void Serial1_send_str( char* buf ) { while( *buf != 0 ) { SBUF = *buf; while( TI == 0 ); TI = 0; buf++; } }
至于SBAUDT和SBAUDF的取值参考数据手册,SBTH和DIV来自SBAUDT
至于SBAUDT和SBAUDF的取值是怎么回事,手册里也有些,搜索文档“UART Timer Generated Baud Rates”这个章节就是具体介绍这两个寄存器取值的,具体公式这里就不深究了