rubnun 发表于 2025-1-20 12:23:42

'S2CON': invalid base address

在reg51.h头文件中添加了S2CON的,但是还是报错,别的都不报,就这个S2CON报错

zhp 发表于 2025-1-20 12:35:27

看看你的reg51.h文件的94和95行,
是不是用sbit定义了TI2和RI2 ?
S2CON的地址为9AH,不支持位寻址

rubnun 发表于 2025-1-20 12:39:24

zhp 发表于 2025-1-20 12:35
看看你的reg51.h文件的94和95行,
是不是用sbit定义了TI2和RI2 ?
S2CON的地址为9AH,不支持位寻址 ...

是的,但是SCON定义的是0x99,TI和RI是SCON^1和SCON^1,没有报错。S2CON的定义的是0x9A,TI2和RI2是S2CON^1和S2CON^1。这里报错了

Ayb_ice 发表于 2025-1-20 13:05:15

rubnun 发表于 2025-1-20 12:39
是的,但是SCON定义的是0x99,TI和RI是SCON^1和SCON^1,没有报错。S2CON的定义的是0x9A,TI2和RI2是S2CON ...

SCON的定义是0x98,尾数的0或8的SFR可以位寻址,其它的不可以

jwd 发表于 2025-1-20 13:25:41

void Uart2Isr() interrupt 8
{
    if (S2CON & 0x02)
    {
      S2CON &= ~0x02;
      busy = 0;
    }
    if (S2CON & 0x01)
    {
      S2CON &= ~0x01;
      buffer = S2BUF;
      wptr &= 0x0f;
    }
}

void Uart2Init()
{
    S2CON = 0x10;
    T2L = BRT;
    T2H = BRT >> 8;
    AUXR = 0x14;
    wptr = 0x00;
    rptr = 0x00;
    busy = 0;
}
中断要这样写,不能直接访问TI2和RI2

rubnun 发表于 2025-1-20 15:26:19

jwd 发表于 2025-1-20 13:25
中断要这样写,不能直接访问TI2和RI2

好的,十分感谢
页: [1]
查看完整版本: 'S2CON': invalid base address