* 串行通信接口波特率计算
内部生成的串行时钟由系统时钟SYSCLK频率和波特率选择寄存器决定。串行通信接口使用16位波特率选择寄存器,数据传输的速度可以被编程为65000多种不同的方式。
不同通信模式下的串行通信接口异步波特率由下列方法决定,
- BRR=1—65535时的串行通信接口异步波特率,
SCI异步波特率=SYSCLK/ [( BRR+1)*8]
其中,BRR=SYSCLK/(SCI异步波特率*8)-1;
- BRR=0时的串行通信接口异步波特率,
SCI异步波特率=SYSCLK/16
这里BRR等于波特率选择寄存器的16位值。
哈尔滨工业大学——DSP 原理与应用实验指导书
III-66
四,实验程序
/* 2407A板:将JP11和JP14短接到2-3;
使用直连的串口通信电缆;
启动串口调试助手.exe;
PC机发送一个"."为结束标志*/
#include "2407c.h"
void wait(int nWait);
char cString[17]={"Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]
= {"Oh,you say"};
int bReceive,nLen;
main()
{
unsigned int uWork;
int i,k;
bReceive=0;
asm(" setc INTM");
asm(" clrc SXM");
asm(" clrc OVM");
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa; /*关闭看门狗中断*/
*SCSR1=0x81fe; /* 打开所有外设,设置时钟频率为40MHz */
uWork=(*MCRA);
uWork|=0x03; /* use SCITXD,SCIRXD */
哈尔滨工业大学——DSP 原理与应用实验指导书
III-67
(*MCRA)=uWork;
(*SCICCR)=0x07; /* 8位字符,1停止位,无校验*/
(*SCICTL1)=0x03; /* 使能发送和接收 */
(*SCICTL2)=0x00; /* 禁止接收和发送中断 */
(*SCIHBAUD)=0x02; /* 波特率=208H,40MHz */
(*SCILBAUD)=0x08; /* 208h=40*10^6/(9600*8)-1 */
(*SCICTL1)=0x23; /* 使能发送和接收,复位SCI */
while ( 1 )
{
if ( bReceive==0 )
{
for ( i=0;i<16;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
(*SCITXBUF)=cString[i];
wait(1024);
}
}
else
{
for ( i=0;i<10;i++ )
{
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
哈尔滨工业大学——DSP 原理与应用实验指导书
III-68
(*SCITXBUF)=cAnswer[i];
wait(1024);
}
do
{
uWork=(*SCICTL2);
} while ( uWork&0x0c0 != 0x0c0 );
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-29489-101.html
回归了终于