Atmel Studio 6.2 模拟器,带 USART(UDRE0 位)

问题描述 投票:0回答:1

这是我第一次在这个论坛发帖,希望大家能帮助我。

对于我的研究项目,我需要用 C 语言实现 Petri Net 执行器以使用微控制器的所有子系统。我一直在使用 Atmel Studio 6.2 来模拟我的网络的结果。

我在 UART 系统方面遇到了很多问题。

void transmiteUART0(unsigned char data)
{
    //Wait until the Transmitter is ready
    while ( (UCSR0A & (1 << UDRE0))==0 );   
    //Get that data outta here!
    UDR0 = data;    
}

这是我的UART系统传输功能。但是当我尝试将数据分配给 UDR0 时,它不会分配,因为 UDRE0 位仍然设置在 UCSR0A 寄存器中,并且模拟器不会让我关闭该位。

有什么解决办法吗?如果这是一个相当基本的问题,我很抱歉,但我尝试了所有不同类型的解决方案和模拟教程,但我似乎无法弄清楚为什么它不起作用。

c uart atmelstudio petri-net
1个回答
0
投票

此答案假设您正在使用 Arduino Uno 微控制器 (ATmega328P)。

我发现下面的代码和你的代码基本相同,说明你应该去其他地方寻找你的问题(硬件问题、电路转换问题、短路等):

void USART_Transmit(unsigned char data)
{
    /* Wait for empty transmit buffer */
    while (!(UCSRnA & (1<<UDREn)))
    ;
    /* Put data into buffer, sends the data */
    UDRn = data;
}

以上代码复制自:

Arduino Uno 微控制器数据表
ATmega328P(汽车 == 汽车温度范围:–40°C 至 +125°C)
第 150 页,共 294 页
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf

© www.soinside.com 2019 - 2024. All rights reserved.