#define TH1 (256 - FOSC / 12 / BAUD) void Usart_Init() { TMOD &= 0x0F; // 设置定时器 1 为模式 1 TMOD |= 0x20; SCON = 0x50; // 设置串口工作在方式 1 TH1 = TH1; TL1 = TH1; TR1 = 1; // 启动定时器 1 ES = 1; // 允许串口中断 EA = 1; // 开启总中断 } 该程序出现了问题: USART.H(7): error C213: left side of asn-op not an lvalue 请问怎么解决
时间: 2024-02-04 19:01:47 浏览: 99
C51-7447.zip_单片机开发_C/C++_
根据错误提示,可以看出问题出在赋值语句的左值不是一个 lvalue(左值),这通常是因为我们试图对一个不可修改的值进行赋值操作。
在这个程序中,出现问题的代码是 TH1 = TH1;,其中 TH1 是一个宏定义,它被定义为一个常量表达式,因此不能被修改。实际上,这行代码是在设置波特率发生器的初值,我们应该将其替换为 TH1 = 256 - FOSC / 12 / BAUD;。
修改后的程序如下:
```
#define TH1 (256 - FOSC / 12 / BAUD)
void Usart_Init() {
TMOD &= 0x0F; // 设置定时器 1 为模式 1
TMOD |= 0x20;
SCON = 0x50; // 设置串口工作在方式 1
TH1 = 256 - FOSC / 12 / BAUD;
TL1 = TH1;
TR1 = 1; // 启动定时器 1
ES = 1; // 允许串口中断
EA = 1; // 开启总中断
}
```
阅读全文