找回密码
 立即注册
查看: 1333|回复: 20

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

[复制链接]

1

主题

5

回帖

29

积分

新手上路

积分
29
发表于 2024-7-7 17:58:54 | 显示全部楼层 |阅读模式
如题,程序是以前写的,用的8C的芯片,一直都在正常用,正常改写。
就今天忽然改写一处小参数后,发现再编译时,提示:
: error C202: 'ET2': undefined identifier

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

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

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


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-7-7 18:03:00 | 显示全部楼层
截图202407071801489111.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 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


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-7-7 18:04:35 | 显示全部楼层
截图202407071804155997.jpg
回复 支持 反对

使用道具 举报 送花

1

主题

5

回帖

29

积分

新手上路

积分
29
发表于 2024-7-7 18:05:02 | 显示全部楼层

这样重新生成了头文件,但是没有解决这个问题,很是奇怪
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-7-7 18:05:16 | 显示全部楼层
没有 ET2的定义,自己用其他方式代替
回复 支持 反对

使用道具 举报 送花

1

主题

5

回帖

29

积分

新手上路

积分
29
发表于 2024-7-7 18:08:54 | 显示全部楼层
神*** 发表于 2024-7-7 18:05
没有 ET2的定义,自己用其他方式代替

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

点评

有人建议去掉那个ET2宏定义,后来就去掉了  发表于 2024-7-7 22:04
回复 支持 反对

使用道具 举报 送花

1

主题

5

回帖

29

积分

新手上路

积分
29
发表于 2024-7-7 18:09:38 | 显示全部楼层
神*** 发表于 2024-7-7 18:05
没有 ET2的定义,自己用其他方式代替

请教一下,用什么方式代替?自己在头文件里加一句吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-04-23 20:59:03
已绑定手机

36

主题

560

回帖

1885

积分

荣誉版主

积分
1885
发表于 2024-7-7 19:48:53 | 显示全部楼层
我特意把STC8C的头文件搞下来看了一下,如你所说,没有ET2
回答1.JPG

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

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

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

然后我继续往下看
回答3.JPG

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


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

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

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

点评

以前头文件中有做了 ET2的宏定义,后来有些新人不理解 ET2 这个宏定义, 并且还批评其他的一些技巧,我们同事说,有人反对头文件的高级技巧, 那就去掉这些吧,说头文件就是头文件,不要用高级技巧太多了 ===就是很  详情 回复 发表于 2024-7-7 21:58
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-7-7 21:58:52 | 显示全部楼层
Yim_*** 发表于 2024-7-7 19:48
我特意把STC8C的头文件搞下来看了一下,如你所说,没有ET2

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

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

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




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

截图202407072202285126.jpg

点评

其实也不是,仅是个人见解,您听一下,采不采纳不重要。 比现有的稍微加一点点“花活”。。。 或者就两手准备,一是还是保留现有的方式,再增加一种稍微花一点的方式。 以后的以后,库是趋势,类似于CUBEIDE也是趋势  详情 回复 发表于 2024-7-7 22:19
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 08:56 , Processed in 0.187551 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表