大家好、我尝试在每1秒的间隔内发送数据、并同时闪烁。 但我不知道为什么会延迟时间。 LED 闪烁需要1秒以上的时间。 并且我在每4秒的间隔内接收1个字符"V"(0x56) 我们将感谢您的任何帮助。 如果中断或传输代码有任何问题、请通过注释通知我。
当我删除这些函数时、UART (SELECT_CLOCK_SIGNAL)可能会导致这种情况。 它开始以所需的速度运行、但会变大、并且不会接收我需要的数据
#include
#define RED_LED 0x0001
#define ENABLE_Pins 0xFFFE //需要使用输入和输出
#define UART_CLK_SEL 0x0080 //指定 UART 外设的精确时钟
#define br0_for_9600 0x34 //使用9600波特所需的值
#define BR1_for_9600 0x00 //使用9600波特所需的值
#define CLK_MOD 0x4911 //微控制器将"清理"时钟信号
#define STOP_WATCHDOG 0x5A80 //停止看门狗计时器
#define ACLK 0x0100 // Timer_A ACLK 源
#define Up 0x0010 // Timer_A 向上计数模式
#define ADC12_P84 0x0007 //将输入 P8.4用于模拟输入
void select_clock_Signals (void);//分配微控制器时钟信号
void assign_pins_TO_UART (void);// P4.2表示 TXD、P4.3表示 RXD
void use_9600_Baud (void);// UART 以9600位/秒的速度运行
main (空)
{
WDTCTL = STOP_WATCHDOG;//停止 WDT
PM5CTL0 = ENABLE_Pins;//使能引脚
P1DIR = RED_LED;
TA0CCR0 = 40000;// 400计数为1s
TA0CTL = ACLK + UP;//为 Timer_0设置 ACLK、UP 模式
TA0CCTL0 = CCIE;//为 Timer_启用中断
select_clock_Signals ();//分配微控制器时钟信号
assign_pins_to _UART ();// P4.2用于 TXD
USE_9600_BAUD ();// UART 以9600位/秒的速度运行
BIS_SR (LPM0_Bits | GIE);//激活使能 中断
while (1);
}
#pragma vector=TIMER0_A0_VECTOR
_interrupt void Timer0_ISR (void)
{
P1OUT = P1OUT ^ RED_LED;
UCA0TXBUF = 0x56;
}
void select_clock_Signals (void)
{
CSCTL0 = 0xA500;//访问时钟校准寄存器的"密码"
CSCTL1 = 0x0046;//指定主时钟的频率
CSCTL2 = 0x0133;//分配额外的时钟信号
CSCTL3 = 0x0000;//使用预期频率的时钟,不要减慢时钟速度
}
void assign_pins_to _UART (void)
{
P4SEL1 = 0x00;// 0000 0000
P4SEL0 = BIT2;
}
void use_9600_Baud (void)
{
UCA0CTLW0 = UCSWRST;//将 UART 置于软件复位状态
UCA0CTLW0 = UCA0CTLW0 | UART_CLK_SEL;//指定 UART 的时钟源
UCA0BR0 = br0_for_9600;//指定9600的比特率(波特率)
UCA0BR1 = BR1_for_9600;//指定9600的比特率(波特率)
UCA0MCTLW = CLK_MOD;//"清除"时钟信号
UCA0CTLW0 = UCA0CTLW0 &(~UCSWRST);//使 UART 退出软件复位
}