beishen2009 发表于 2024-9-15 07:28:35

为什么官方的串口通信例程我都编译不过去啊

EAXFR = 1; //扩展寄存器(XFR)访问使能 提示不能赋值
MAIN.C(67): error C213: left side of asn-op not an lvalue
MAIN.C(128): error C202: 'T2H': undefined identifier
MAIN.C(129): error C202: 'T2L': undefined identifier
T2HT2L 提示没定义 我加载#include <AI8051U.H> 头文件了啊 要疯了。。。。

神农鼎 发表于 2024-9-15 13:44:07

sfr         TH4         =         0xd2;
sfr         TL4         =         0xd3;
sfr         TH3         =         0xd4;
sfr         TL3         =         0xd5;
sfr         TH2         =         0xd6;
sfr         TL2         =         0xd7;

sfr         TL0         =         0x8a;
sfr         TL1         =         0x8b;
sfr         TH0         =         0x8c;
sfr         TH1         =         0x8d;









可见:
T0H, T0L; TH0, TL0
T1H, T1L; TH1, TL1

T2H, T2L; TH2, TL2
T3H, T3L; TH3, TL3

T4H, T4L; TH4, TL4
上面2种风格都有人不同阶段的喜欢
还是都声明下好,也不增加成本

soma 发表于 2024-9-15 08:02:19

如果是8051U的头文件加载正确是不会有这些错误提示的。

beishen2009 发表于 2024-9-15 08:08:09

我加载#include <AI8051U.H> 头文件了啊 去掉那几个变量就可以编译过去啊

21cnsound 发表于 2024-9-15 08:14:54

这就疯了!?检查一下你所include的AI8051U.H中是否定义了T2HT2L

21cnsound 发表于 2024-9-15 08:19:55

本帖最后由 21cnsound 于 2024-9-15 08:21 编辑

AI8051U.h中确实没定义,用T2H和T2L需要自己定义

beishen2009 发表于 2024-9-15 08:22:11

本帖最后由 beishen2009 于 2024-9-15 08:38 编辑

确实没定义 例程也没定义下
EAXFR = 1; //扩展寄存器(XFR)访问使能 提示不能赋值   这个确实是定义了的
这个是头文件的定义啊

sfr         AUXR      =         0x8e;
    #define T0x12                   0x80
    #define T1x12                   0x40
    #define S1M0x6                  0x20
    #define T2R                     0x10
    #define T2_CT                   0x08
    #define T2x12                   0x04
    #define EXTRAM                  0x02
    #define S1BRT                   0x01

autopccopy 发表于 2024-9-15 08:32:54

除了改头文件,还要检查你的例程是否是对应的单片机的?

9

beishen2009 发表于 2024-9-15 08:39:15

autopccopy 发表于 2024-9-15 08:32
除了改头文件,还要检查你的例程是否是对应的单片机的?

9

是啊 这个没问题我设置了啊

21cnsound 发表于 2024-9-15 13:02:43

beishen2009 发表于 2024-9-15 08:22
确实没定义 例程也没定义下
EAXFR = 1; //扩展寄存器(XFR)访问使能 提示不能赋值   这个确实是定义了的
这 ...
sfr         P_SW2       =         0xba;
    #define EAXFR                   0x80
    #define I2C_S1                  0x20
    #define I2C_S0                  0x10
    #define CMPO_S                  0x08
    #define S4_S                  0x04
    #define S3_S                  0x02
    #define S2_S                  0x01

这里的EAXFR是宏定义,不是寄存器定义/声明,所以不能直接赋值
这个宏定义对应的sbit不可位寻址,赋值需要用位运算对EAXFR对应的位进行操作才行。

如: 对EAXFR置1或清零
P_SW2       |= EAXFR
P_SW2       &= ~EAXFR

angmall 发表于 2024-9-15 13:30:45

你是用哪一个来编译的,C251还是 C51 ?
C251的EAXFR是可位寻址的
页: [1] 2
查看完整版本: 为什么官方的串口通信例程我都编译不过去啊