기사 디렉토리
이 레지스터 :
전송 속도 발생기 분배기 (프리스케일러 / 분배기) 의존 및 변조 (변조).
9600 보레이트, 분주 값을 설정, 시계 등 8MHZ SMCLK 소스들의 세트로부터 선택된다 :
UCA0BR1 높은 여덟 UCA0BR0의 하위 8.
833.3333333333 (DEC)는 소수의 이진 표현을 제공하기 위해 제거 직접 디바이더 UCA0BR0 UCA0BR1는 보레이트 구성을 완성하기 위해 결합.
N은 16과 동일보다 큰 경우, 전송 속도의 생성 모드를 오버 샘플링 세트 UCOS16하는데 사용될 수있다.
가능한 한 가깝게 소수 부분에 대한 변조기.
수동뿐만 아니라 복잡한 문제 및 솔루션의 다양한. 너무 멀게하고 디버깅 자신을 계산, 참조 구성 테이블, 큰 가치를 제공합니다.
참조 구성 테이블 :
참조 코드 :
// MSP430G2xx3
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.2/UCA0TXD|------------>
// | | 9600 - 8N1
// | P1.1/UCA0RXD|<------------
#define CPU_F ( (double) 8000000)
#define delay_us( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) )
#define delay_ms( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000.0) )
/* 串口波特率计算,当BRCLK=CPU_F时用下面的公式可以计算,否则要根据设置加入分频系数 */
#define baud 9600 /* 设置波特率的大小 */
#define baud_setting (uint) ( (ulong) CPU_F / ( (ulong) baud) ) /* 波特率计算公式 */
#define baud_h (uchar) (baud_setting >> 8) /* 提取高位 */
#define baud_l (uchar) (baud_setting) /* 低位 */
void initUSART(void)
{
P1SEL = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = baud_l; // 8MHz 9600
UCA0BR1 = baud_h; // 8MHz 9600
UCA0MCTL = UCBRS1; // Modulation UCBRSx 2=010= UCBRS2 UCBRS1 UCBRS0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
}