【问题标题】:compiling error while declaring sfr address声明 sfr 地址时编译错误
【发布时间】:2020-12-18 07:50:32
【问题描述】:

我正在开发基于 8051 的 MCU STC16C65A,我希望它通过 P2.0 发出 PWM,我从他们的手册中复制并修改此代码:

#include "8051.h"

    sfr AUXR = 0x8e;
                //Auxiliary register T0 interrupt service routine
void t0int() interrupt 1           //(location at 000BH)
{
}
void main()
{
    AUXR = 0x80;
                //timer0 work in 1T mode
    TMOD = 0x06;                  //set timer0 as counter mode2 (8-bit auto-reload)
    TL0 = TH0 = 0xff;               //fill with 0xff to count one time
    TR0 = 1;                        //timer0 start run
    ET0 = 1;                        //enable T0 interrupt
    EA = 1;                         //open global interrupt switch
    IF P2.0 = 0 THEN P2.0 = 1 ELSE P2.0 = 0;
    while (1);
}

但是当我使用 MCU 8051 ide 编译它时出现语法错误,sfr AUXR = 0x8e 中的声明被忽略;我认为使用的库(8051.reg)是一个通用库,而不是他们在手册中建议的 reg51.h(过时的),我不使用它,因为出现了关于库的错误消息过时 谁能救我?也许我必须为该指针选择另一个地址? 提前致谢

【问题讨论】:

  • edit您的问题并发布确切错误消息和您使用的编译器版本。
  • 我认为问题出在头文件中,我必须更改 AUXR 的地址,但在我删除所有 cmets 后,出现 PWMTimer0Mode2.c:2: error 1: Syntax error , 在 'sfr' PWMTimer0Mode2.c:2 处忽略声明:语法错误:token -> 'AUXR' ;第 8 列 PWMTimer0Mode2.c:9:错误 1:语法错误,在“TMOD”处忽略声明 PWMTimer0Mode2.c:10:错误 1:语法错误,在“TL0”处忽略声明 PWMTimer0Mode2.c:11:错误 1:语法错误,在“TR0”处忽略声明 PWMTimer0Mode2.c:12:错误 1:语法错误,在“ET0”处忽略声明 PWMTimer0Mode2.c:13:...
  • 我使用 sdcc-4.0;根本就是不编译,问题是为什么会出现这个错误信息?
  • 您仍然没有edit您的问题与错误消息。请这样做。但是,由于 SDCC 是与 Keil 不同的编译器,因此您必须预料到 C 标准的扩展会有所不同。 SFR 的声明是一种扩展。请阅读 SDCC 的文档!

标签: c embedded microcontroller keil 8051


【解决方案1】:

SDCC 是与 Keil C51 不同的编译器,您必须预料到 C 标准的扩展存在差异。而 SFR 的声明是一种扩展。

请使用文档中的语法:

__sfr __at(0x8e) AUXR;

【讨论】:

  • 谢谢,这些细节总是很重要
  • 如果您认为答案合适,请不要发布“谢谢”cmets。 ;-) 改为标记答案。 -- 你可能想更新你的知识如何使用 StackOverflow...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 2014-08-09
相关资源
最近更新 更多