liuming 发表于 2024-7-7 17:58:54

8C芯片,ET2未定义的情况,请教一下

如题,程序是以前写的,用的8C的芯片,一直都在正常用,正常改写。
就今天忽然改写一处小参数后,发现再编译时,提示:
: error C202: 'ET2': undefined identifier

又打开别的正常一直用的程序,再编译还是出现这个提示,程序前的头文件如下:

#include"STC8C.H"
#include<intrins.h>                // _nop_();
#define WT_12M          0x83            //测试工作频率为12MHz

应该是头文件里没有ET2的定义吧,请教一下大家,为什么会突然出现这种情况,
PS:电脑近期没有做过改动,一直正常在用


神农鼎 发表于 2024-7-7 18:03:00


神农鼎 发表于 2024-7-7 18:04:08

#ifndef __STC8C_H__
#define __STC8C_H__

/////////////////////////////////////////////////

//包含本头文件后,不用另外再包含"REG51.H"

sfr         P0          =         0x80;
    sbit    P00         =         P0^0;
    sbit    P01         =         P0^1;
    sbit    P02         =         P0^2;
    sbit    P03         =         P0^3;
    sbit    P04         =         P0^4;
    sbit    P05         =         P0^5;
    sbit    P06         =         P0^6;
    sbit    P07         =         P0^7;

sfr         SP          =         0x81;
sfr         DPL         =         0x82;
sfr         DPH         =         0x83;
sfr         PCON      =         0x87;

sfr         TCON      =         0x88;
    sbit    TF1         =         TCON^7;
    sbit    TR1         =         TCON^6;
    sbit    TF0         =         TCON^5;
    sbit    TR0         =         TCON^4;
    sbit    IE1         =         TCON^3;
    sbit    IT1         =         TCON^2;
    sbit    IE0         =         TCON^1;
    sbit    IT0         =         TCON^0;

sfr         TMOD      =         0x89;
sfr         TL0         =         0x8A;
sfr         TL1         =         0x8B;
sfr         TH0         =         0x8C;
sfr         TH1         =         0x8D;
sfr         AUXR      =         0x8E;
sfr         INTCLKO   =         0x8F;

sfr         P1          =         0x90;
    sbit    P10         =         P1^0;
    sbit    P11         =         P1^1;
    sbit    P12         =         P1^2;
    sbit    P13         =         P1^3;
    sbit    P14         =         P1^4;
    sbit    P15         =         P1^5;
    sbit    P16         =         P1^6;
    sbit    P17         =         P1^7;

sfr         P1M1      =         0x91;
sfr         P1M0      =         0x92;
sfr         P0M1      =         0x93;
sfr         P0M0      =         0x94;
sfr         P2M1      =         0x95;
sfr         P2M0      =         0x96;

sfr         SCON      =         0x98;
    sbit    SM0         =         SCON^7;
    sbit    SM1         =         SCON^6;
    sbit    SM2         =         SCON^5;
    sbit    REN         =         SCON^4;
    sbit    TB8         =         SCON^3;
    sbit    RB8         =         SCON^2;
    sbit    TI          =         SCON^1;
    sbit    RI          =         SCON^0;

sfr         SBUF      =         0x99;
sfr         S2CON       =         0x9A;
sfr         S2BUF       =         0x9B;
sfr         IRCBAND   =         0x9D;
sfr         LIRTRIM   =         0x9E;
sfr         IRTRIM      =         0x9F;

sfr         P2          =         0xA0;
    sbit    P20         =         P2^0;
    sbit    P21         =         P2^1;
    sbit    P22         =         P2^2;
    sbit    P23         =         P2^3;
    sbit    P24         =         P2^4;
    sbit    P25         =         P2^5;
    sbit    P26         =         P2^6;
    sbit    P27         =         P2^7;

sfr         BUS_SPEED   =         0xA1;
sfr         P_SW1       =         0xA2;

sfr         IE          =         0xA8;
    sbit    EA          =         IE^7;
    sbit    ELVD      =         IE^6;
    sbit    EADC      =         IE^5;
    sbit    ES          =         IE^4;
    sbit    ET1         =         IE^3;
    sbit    EX1         =         IE^2;
    sbit    ET0         =         IE^1;
    sbit    EX0         =         IE^0;

sfr         SADDR       =         0xA9;
sfr         WKTCL       =         0xAA;
sfr         WKTCH       =         0xAB;
sfr         TA          =         0xAE;
sfr         IE2         =         0xAF;

sfr         P3          =         0xB0;
    sbit    P30         =         P3^0;
    sbit    P31         =         P3^1;
    sbit    P32         =         P3^2;
    sbit    P33         =         P3^3;
    sbit    P34         =         P3^4;
    sbit    P35         =         P3^5;
    sbit    P36         =         P3^6;
    sbit    P37         =         P3^7;

    sbit    RD          =         P3^7;
    sbit    WR          =         P3^6;
    sbit    T1          =         P3^5;
    sbit    T0          =         P3^4;
    sbit    INT1      =         P3^3;
    sbit    INT0      =         P3^2;
    sbit    TXD         =         P3^1;
    sbit    RXD         =         P3^0;

sfr         P3M1      =         0xB1;
sfr         P3M0      =         0xB2;
sfr         P4M1      =         0xB3;
sfr         P4M0      =         0xB4;
sfr         IP2         =         0xB5;
sfr         IP2H      =         0xB6;
sfr         IPH         =         0xB7;

sfr         IP          =         0xB8;
    sbit    PLVD      =         IP^6;
    sbit    PS          =         IP^4;
    sbit    PT1         =         IP^3;
    sbit    PX1         =         IP^2;
    sbit    PT0         =         IP^1;
    sbit    PX0         =         IP^0;

sfr         SADEN       =         0xB9;
sfr         P_SW2       =         0xBA;

sfr         P4          =         0xC0;
    sbit    P40         =         P4^0;
    sbit    P41         =         P4^1;
    sbit    P42         =         P4^2;
    sbit    P43         =         P4^3;
    sbit    P44         =         P4^4;
    sbit    P45         =         P4^5;
    sbit    P46         =         P4^6;
    sbit    P47         =         P4^7;

sfr         WDT_CONTR   =         0xC1;
sfr         IAP_DATA    =         0xC2;
sfr         IAP_ADDRH   =         0xC3;
sfr         IAP_ADDRL   =         0xC4;
sfr         IAP_CMD   =         0xC5;
sfr         IAP_TRIG    =         0xC6;
sfr         IAP_CONTR   =         0xC7;

sfr         P5          =         0xC8;
    sbit    P50         =         P5^0;
    sbit    P51         =         P5^1;
    sbit    P52         =         P5^2;
    sbit    P53         =         P5^3;
    sbit    P54         =         P5^4;
    sbit    P55         =         P5^5;
    sbit    P56         =         P5^6;
    sbit    P57         =         P5^7;

sfr         P5M1      =         0xC9;
sfr         P5M0      =         0xCA;
sfr         SPSTAT      =         0xCD;
sfr         SPCTL       =         0xCE;
sfr         SPDAT       =         0xCF;

sfr         PSW         =         0xD0;
    sbit    CY          =         PSW^7;
    sbit    AC          =         PSW^6;
    sbit    F0          =         PSW^5;
    sbit    RS1         =         PSW^4;
    sbit    RS0         =         PSW^3;
    sbit    OV          =         PSW^2;
    sbit    F1          =         PSW^1;
    sbit    P         =         PSW^0;

sfr         T4T3M       =         0xD1;
sfr         T4H         =         0xD2;
sfr         T4L         =         0xD3;
sfr         T3H         =         0xD4;
sfr         T3L         =         0xD5;
sfr         T2H         =         0xD6;
sfr         T2L         =         0xD7;

sfr         T3T4M       =         0xD1;
sfr         TH4         =         0xD2;
sfr         TL4         =         0xD3;
sfr         TH3         =         0xD4;
sfr         TL3         =         0xD5;
sfr         TH2         =         0xD6;
sfr         TL2         =         0xD7;

sfr         IP3         =         0xDF;
sfr         ACC         =         0xE0;
sfr         DPS         =         0xE3;
sfr         DPL1      =         0xE4;
sfr         DPH1      =         0xE5;
sfr         CMPCR1      =         0xE6;
sfr         CMPCR2      =         0xE7;
sfr         IP3H      =         0xEE;
sfr         AUXINTIF    =         0xEF;
sfr         B         =         0xF0;
sfr         IAP_TPS   =         0xF5;
sfr         RSTCFG      =         0xFF;

//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写

/////////////////////////////////////////////////
//FF00H-FFFFH
/////////////////////////////////////////////////


/////////////////////////////////////////////////
//FE00H-FEFFH
/////////////////////////////////////////////////

#define   CLKSEL      (*(unsigned char volatile xdata *)0xfe00)
#define   CLKDIV      (*(unsigned char volatile xdata *)0xfe01)
#define   HIRCCR      (*(unsigned char volatile xdata *)0xfe02)
#define   XOSCCR      (*(unsigned char volatile xdata *)0xfe03)
#define   IRC32KCR    (*(unsigned char volatile xdata *)0xfe04)
#define   MCLKOCR   (*(unsigned char volatile xdata *)0xfe05)
#define   IRCDB       (*(unsigned char volatile xdata *)0xfe06)

#define   P0PU      (*(unsigned char volatile xdata *)0xfe10)
#define   P1PU      (*(unsigned char volatile xdata *)0xfe11)
#define   P2PU      (*(unsigned char volatile xdata *)0xfe12)
#define   P3PU      (*(unsigned char volatile xdata *)0xfe13)
#define   P4PU      (*(unsigned char volatile xdata *)0xfe14)
#define   P5PU      (*(unsigned char volatile xdata *)0xfe15)
#define   P0NCS       (*(unsigned char volatile xdata *)0xfe18)
#define   P1NCS       (*(unsigned char volatile xdata *)0xfe19)
#define   P2NCS       (*(unsigned char volatile xdata *)0xfe1a)
#define   P3NCS       (*(unsigned char volatile xdata *)0xfe1b)
#define   P4NCS       (*(unsigned char volatile xdata *)0xfe1c)
#define   P5NCS       (*(unsigned char volatile xdata *)0xfe1d)
#define   P0SR      (*(unsigned char volatile xdata *)0xfe20)
#define   P1SR      (*(unsigned char volatile xdata *)0xfe21)
#define   P2SR      (*(unsigned char volatile xdata *)0xfe22)
#define   P3SR      (*(unsigned char volatile xdata *)0xfe23)
#define   P4SR      (*(unsigned char volatile xdata *)0xfe24)
#define   P5SR      (*(unsigned char volatile xdata *)0xfe25)
#define   P0DR      (*(unsigned char volatile xdata *)0xfe28)
#define   P1DR      (*(unsigned char volatile xdata *)0xfe29)
#define   P2DR      (*(unsigned char volatile xdata *)0xfe2a)
#define   P3DR      (*(unsigned char volatile xdata *)0xfe2b)
#define   P4DR      (*(unsigned char volatile xdata *)0xfe2c)
#define   P5DR      (*(unsigned char volatile xdata *)0xfe2d)
#define   P0IE      (*(unsigned char volatile xdata *)0xfe30)
#define   P1IE      (*(unsigned char volatile xdata *)0xfe31)

#define   I2CCFG      (*(unsigned char volatile xdata *)0xfe80)
#define   I2CMSCR   (*(unsigned char volatile xdata *)0xfe81)
#define   I2CMSST   (*(unsigned char volatile xdata *)0xfe82)
#define   I2CSLCR   (*(unsigned char volatile xdata *)0xfe83)
#define   I2CSLST   (*(unsigned char volatile xdata *)0xfe84)
#define   I2CSLADR    (*(unsigned char volatile xdata *)0xfe85)
#define   I2CTXD      (*(unsigned char volatile xdata *)0xfe86)
#define   I2CRXD      (*(unsigned char volatile xdata *)0xfe87)
#define   I2CMSAUX    (*(unsigned char volatile xdata *)0xfe88)

#define   TM2PS       (*(unsigned char volatile xdata *)0xfea2)
#define   TM3PS       (*(unsigned char volatile xdata *)0xfea3)
#define   TM4PS       (*(unsigned char volatile xdata *)0xfea4)

/////////////////////////////////////////////////
//FD00H-FDFFH
/////////////////////////////////////////////////

#define   P0INTE      (*(unsigned char volatile xdata *)0xfd00)
#define   P1INTE      (*(unsigned char volatile xdata *)0xfd01)
#define   P2INTE      (*(unsigned char volatile xdata *)0xfd02)
#define   P3INTE      (*(unsigned char volatile xdata *)0xfd03)
#define   P4INTE      (*(unsigned char volatile xdata *)0xfd04)
#define   P5INTE      (*(unsigned char volatile xdata *)0xfd05)
#define   P0INTF      (*(unsigned char volatile xdata *)0xfd10)
#define   P1INTF      (*(unsigned char volatile xdata *)0xfd11)
#define   P2INTF      (*(unsigned char volatile xdata *)0xfd12)
#define   P3INTF      (*(unsigned char volatile xdata *)0xfd13)
#define   P4INTF      (*(unsigned char volatile xdata *)0xfd14)
#define   P5INTF      (*(unsigned char volatile xdata *)0xfd15)
#define   P0IM0       (*(unsigned char volatile xdata *)0xfd20)
#define   P1IM0       (*(unsigned char volatile xdata *)0xfd21)
#define   P2IM0       (*(unsigned char volatile xdata *)0xfd22)
#define   P3IM0       (*(unsigned char volatile xdata *)0xfd23)
#define   P4IM0       (*(unsigned char volatile xdata *)0xfd24)
#define   P5IM0       (*(unsigned char volatile xdata *)0xfd25)
#define   P0IM1       (*(unsigned char volatile xdata *)0xfd30)
#define   P1IM1       (*(unsigned char volatile xdata *)0xfd31)
#define   P2IM1       (*(unsigned char volatile xdata *)0xfd32)
#define   P3IM1       (*(unsigned char volatile xdata *)0xfd33)
#define   P4IM1       (*(unsigned char volatile xdata *)0xfd34)
#define   P5IM1       (*(unsigned char volatile xdata *)0xfd35)

/////////////////////////////////////////////////
//FC00H-FCFFH
/////////////////////////////////////////////////

#define   MD3         (*(unsigned char volatile xdata *)0xfcf0)
#define   MD2         (*(unsigned char volatile xdata *)0xfcf1)
#define   MD1         (*(unsigned char volatile xdata *)0xfcf2)
#define   MD0         (*(unsigned char volatile xdata *)0xfcf3)
#define   MD5         (*(unsigned char volatile xdata *)0xfcf4)
#define   MD4         (*(unsigned char volatile xdata *)0xfcf5)
#define   ARCON       (*(unsigned char volatile xdata *)0xfcf6)
#define   OPCON       (*(unsigned char volatile xdata *)0xfcf7)

/////////////////////////////////////////////////
//FB00H-FBFFH
/////////////////////////////////////////////////


/////////////////////////////////////////////////
//FA00H-FAFFH
/////////////////////////////////////////////////


/////////////////////////////////////////////////

#endif


神农鼎 发表于 2024-7-7 18:04:35


liuming 发表于 2024-7-7 18:05:02

神农鼎 发表于 2024-7-7 18:03


这样重新生成了头文件,但是没有解决这个问题,很是奇怪

神农鼎 发表于 2024-7-7 18:05:16

没有 ET2的定义,自己用其他方式代替

liuming 发表于 2024-7-7 18:08:54

神农鼎 发表于 2024-7-7 18:05
没有 ET2的定义,自己用其他方式代替

就是实在想不明白这些程序都是以前正常用的,忽然出现这个情况,我第一怀疑就是头文件出问题了,再重新生成时,就是找不到这个ET2

liuming 发表于 2024-7-7 18:09:38

神农鼎 发表于 2024-7-7 18:05
没有 ET2的定义,自己用其他方式代替

请教一下,用什么方式代替?自己在头文件里加一句吗?

Yim_Hom 发表于 2024-7-7 19:48:53

我特意把STC8C的头文件搞下来看了一下,如你所说,没有ET2


但是你得明白在8C里ET2是干嘛的,对不?
这时候我凭经验看,是定时器2的使能,不就是允许/禁止定时器2的中断嘛,因为Enable Timer2,缩写为ET2。

但做技术不允许猜测,所以我就继续帮你看。
我没用过8C,为了回答这个问题,我就得看8C的手册{:4_165:}
然后在手册里找到了ET2的说明


属于IE2,中断允许寄存器2。

然后我继续往下看


所以,到这里,你就有办法了啊。
甭管头文件有没有,你想用,还不想或不会修改头文件(当然,一般建议不要改,听说离职的工程师会在离职前瞎改,哈哈,开个玩笑)
那法子不就来了嘛
IE2 |= 0x04;
这不就把ET2单独进行了一次赋值为1嘛。
到这里其实已经可以算结束了,但是你可以在未来不断提高的路上,让别人知道你这一步是做什么,增强一下程序的可读性,
那就在前面宏定义#define ET2 0x04
然后在定时器2的允许时,把IE2 |= 0x04;换成IE2 |= ET2;这样不仅能实现,还能知道你是做什么。


这是一种方法,
另外一种就是常用的一种移位操作,也能提高程序的可读性。
IE2 |= (2<<1);//通过移位操作实现

现在相当于是3种方式来表达同一个东西,但万变不离其宗,你只是在操作ET2,却有好几种方式去实现。
玩的花了,见笑。{:4_183:}

感觉已经相当于发了一个帖子了。神农鼎前辈怎么看,哈哈。

神农鼎 发表于 2024-7-7 21:58:52

Yim_Hom 发表于 2024-7-7 19:48
我特意把STC8C的头文件搞下来看了一下,如你所说,没有ET2



以前头文件中有做了 ET2的宏定义,后来有些新人不理解 ET2 这个宏定义,
并且还批评其他的一些技巧,我们同事说,有人反对头文件的高级技巧,
那就去掉这些吧,说头文件就是头文件,不要用高级技巧太多了
===就是很多建议都有道理,选择支持哪种建议而已

这ET2的宏定义去掉的事我是知到的,头文件从优秀回到了入门级

以前实验箱的例程也是用了很多编程技巧,后来也简化了,
部分老师说,同学们 C 还没懂,又上这么多宏,
增加理解难度了



如下技巧都增加了初学者的理解难度



页: [1] 2
查看完整版本: 8C芯片,ET2未定义的情况,请教一下