sdcc 在 keil 中运行的代码上给出语法错误

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

我试图理解这段代码。这是在教程中,我正在按照教程进行操作,所以我尝试了这段代码。

我使用 sdcc 编译它,但它在第 7 列上给了我一个语法错误。

教程显示该代码在keil中可以运行。而且我还发现你必须用 8051 头文件替换 reg51 头文件。但第 7 列仍然出现语法错误。

我不知道问题是什么。我什至无法理解它。

错误,

lcd.c:6:语法错误:标记 -> 'rs' ;第 7 栏

#include <8051.h>

#define lcd_data P2

sbit rs=P0^0;
sbit rw=P0^1;
sbit en=P0^2;

void lcd_init();
void cmd(unsigned char a);
void dat(unsigned char b);
void show(unsigned char *s);
void lcd_delay();

void lcd_init()
{
    cmd(0x38);
    cmd(0x0e);
    cmd(0x01);
    cmd(0x06);
    cmd(0x0c);
    cmd(0x80);
}

void cmd(unsigned char a)
{
    lcd_data=a;
    rs=0;
    rw=0;
    en=1;
    lcd_delay();
    en=0;
}
keil lcd 8051 sdcc
2个回答
4
投票

Keil C51 编译器有很多非标准的扩展,例如

sbit
在您的代码中。在SDCC中,您可以使用C99标准中的_Bool,或
__bit
,或
__sbit
,这3个关键字在SDCC中是相同的。

在您的情况下,您还必须使用扩展名

__at

__bit __at (0x80) rs; /* I/O port 0, bit 0 */

警告:请勿使用

~
来切换位,请在 SDCC 中使用
!

b = ~b; /* equivalent to b=1 instead of toggling b */
b = !b; /* toggles b */

更多信息请阅读官方文档:http://sdcc.sourceforge.net/doc/sdccman.pdf


0
投票

#包括

#定义RS P0_0

#定义读写P0_1

#定义P0_2

无效主(无效){

}

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