找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2276|回复: 6
打印 上一主题 下一主题
收起左侧

STC8单片机写EEPROM头文件错误

[复制链接]
跳转到指定楼层
楼主
ID:95375 发表于 2021-8-29 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在的问题是官方代码配reg51.h头文件是没问题的,但如果用STC8.h头文件就会出错,是什么原因呢?

官方读写EEPROM代码
  1. #include "reg51.h"
  2. //#include "STC8.h"
  3. #include "intrins.h"

  4. //测试工作频率为11.0592MHz

  5. sfr IAP_DATA = 0xC2;
  6. sfr IAP_ADDRH = 0xC3;
  7. sfr IAP_ADDRL = 0xC4;
  8. sfr IAP_CMD = 0xC5;
  9. sfr IAP_TRIG = 0xC6;
  10. sfr IAP_CONTR = 0xC7;

  11. #define WT_30M 0x80
  12. #define WT_24M 0x81
  13. #define WT_20M 0x82
  14. #define WT_12M 0x83
  15. #define WT_6M 0x84
  16. #define WT_3M 0x85
  17. #define WT_2M 0x86
  18. #define WT_1M 0x87


  19. void IapIdle()
  20. {
  21.         IAP_CONTR=0;
  22.                 IAP_CMD=0;
  23.                 IAP_TRIG=0;
  24.                 IAP_ADDRH=0x80;
  25.                 IAP_ADDRL=0;

  26. }


  27. char IapRead(int addr)
  28. {
  29.         char dat;
  30.         
  31.         IAP_CONTR=WT_12M;
  32.         IAP_CMD=1;
  33.         IAP_ADDRL=addr;
  34.         IAP_ADDRH=addr>>8;
  35.         IAP_TRIG=0x5a;
  36.         IAP_TRIG=0xa5;
  37.         _nop_();
  38.         dat=IAP_DATA;
  39.         IapIdle();
  40.         
  41.         return dat;

  42. }


  43. void IapProgram(int addr,char dat)
  44. {
  45.         IAP_CONTR=WT_12M;
  46.         IAP_CMD=2;
  47.         IAP_ADDRL=addr;
  48.         IAP_ADDRH=addr>>8;
  49.         IAP_DATA=dat;
  50.         IAP_TRIG=0x5a;
  51.         IAP_TRIG=0xa5;
  52.         _nop_();
  53.         IapIdle();

  54. }


  55. void IapErase(int addr)
  56. {
  57.         IAP_CONTR=WT_12M;
  58.         IAP_CMD=3;
  59.         IAP_ADDRL=addr;
  60.         IAP_ADDRH=addr>>8;
  61.         IAP_TRIG=0x5a;
  62.         IAP_TRIG=0xa5;
  63.         _nop_();
  64.         IapIdle();
  65.         

  66. }


  67. void main()
  68. {
  69.         
  70.         IapErase(0x0400);
  71.         P0=IapRead(0x0400);
  72.         IapProgram(0x0400,0x12);
  73.         P1=IapRead(0x0400);
  74.         
  75.         while(1);
  76.         
  77. }
复制代码

reg51.h
  1. /*--------------------------------------------------------------------------
  2. REG51.H

  3. Header file for generic 80C51 and 80C31 microcontroller.
  4. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
  5. All rights reserved.
  6. --------------------------------------------------------------------------*/

  7. #ifndef __REG51_H__
  8. #define __REG51_H__

  9. /*  BYTE Register  */
  10. sfr P0   = 0x80;
  11. sfr P1   = 0x90;
  12. sfr P2   = 0xA0;
  13. sfr P3   = 0xB0;
  14. sfr P4          =   0xc0;
  15. sfr P5          =   0xc8;
  16. sfr P6          =   0xe8;
  17. sfr P7          =   0xf8;
  18. sfr PSW  = 0xD0;
  19. sfr ACC  = 0xE0;
  20. sfr B    = 0xF0;
  21. sfr SP   = 0x81;
  22. sfr DPL  = 0x82;
  23. sfr DPH  = 0x83;
  24. sfr PCON = 0x87;
  25. sfr TCON = 0x88;
  26. sfr TMOD = 0x89;
  27. sfr TL0  = 0x8A;
  28. sfr TL1  = 0x8B;
  29. sfr TH0  = 0x8C;
  30. sfr TH1  = 0x8D;
  31. sfr IE   = 0xA8;
  32. sfr IP   = 0xB8;
  33. sfr SCON = 0x98;
  34. sfr SBUF = 0x99;


  35. /*  BIT Register  */
  36. /*  PSW   */
  37. sbit CY   = 0xD7;
  38. sbit AC   = 0xD6;
  39. sbit F0   = 0xD5;
  40. sbit RS1  = 0xD4;
  41. sbit RS0  = 0xD3;
  42. sbit OV   = 0xD2;
  43. sbit P    = 0xD0;

  44. /*  TCON  */
  45. sbit TF1  = 0x8F;
  46. sbit TR1  = 0x8E;
  47. sbit TF0  = 0x8D;
  48. sbit TR0  = 0x8C;
  49. sbit IE1  = 0x8B;
  50. sbit IT1  = 0x8A;
  51. sbit IE0  = 0x89;
  52. sbit IT0  = 0x88;

  53. /*  IE   */
  54. sbit EA   = 0xAF;
  55. sbit ES   = 0xAC;
  56. sbit ET1  = 0xAB;
  57. sbit EX1  = 0xAA;
  58. sbit ET0  = 0xA9;
  59. sbit EX0  = 0xA8;

  60. /*  IP   */
  61. sbit PS   = 0xBC;
  62. sbit PT1  = 0xBB;
  63. sbit PX1  = 0xBA;
  64. sbit PT0  = 0xB9;
  65. sbit PX0  = 0xB8;

  66. /*  P3  */
  67. sbit RD   = 0xB7;
  68. sbit WR   = 0xB6;
  69. sbit T1   = 0xB5;
  70. sbit T0   = 0xB4;
  71. sbit INT1 = 0xB3;
  72. sbit INT0 = 0xB2;
  73. sbit TXD  = 0xB1;
  74. sbit RXD  = 0xB0;

  75. /*  SCON  */
  76. sbit SM0  = 0x9F;
  77. sbit SM1  = 0x9E;
  78. sbit SM2  = 0x9D;
  79. sbit REN  = 0x9C;
  80. sbit TB8  = 0x9B;
  81. sbit RB8  = 0x9A;
  82. sbit TI   = 0x99;
  83. sbit RI   = 0x98;

  84. #endif
复制代码

STC8.h
  1. #ifndef __STC8F_H_
  2. #define __STC8F_H_

  3. /////////////////////////////////////////////////

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

  5. //内核特殊功能寄存器
  6. sfr ACC         =   0xe0;
  7. sfr B           =   0xf0;
  8. sfr PSW         =   0xd0;
  9. sbit CY         =   PSW^7;
  10. sbit AC         =   PSW^6;
  11. sbit F0         =   PSW^5;
  12. sbit RS1        =   PSW^4;
  13. sbit RS0        =   PSW^3;
  14. sbit OV         =   PSW^2;
  15. sbit F1         =   PSW^1;
  16. sbit P          =   PSW^0;
  17. sfr SP          =   0x81;
  18. sfr DPL         =   0x82;
  19. sfr DPH         =   0x83;
  20. sfr TA          =   0xae;
  21. sfr DPS         =   0xe3;
  22. sfr DPL1        =   0xe4;
  23. sfr DPH1        =   0xe5;


  24. //I/O 口特殊功能寄存器
  25. sfr P0          =   0x80;
  26. sfr P1          =   0x90;
  27. sfr P2          =   0xa0;
  28. sfr P3          =   0xb0;
  29. sfr P4          =   0xc0;
  30. sfr P5          =   0xc8;
  31. sfr P6          =   0xe8;
  32. sfr P7          =   0xf8;
  33. sfr P0M0        =   0x94;
  34. sfr P0M1        =   0x93;
  35. sfr P1M0        =   0x92;
  36. sfr P1M1        =   0x91;
  37. sfr P2M0        =   0x96;
  38. sfr P2M1        =   0x95;
  39. sfr P3M0        =   0xb2;
  40. sfr P3M1        =   0xb1;
  41. sfr P4M0        =   0xb4;
  42. sfr P4M1        =   0xb3;
  43. sfr P5M0        =   0xca;
  44. sfr P5M1        =   0xc9;
  45. sfr P6M0        =   0xcc;
  46. sfr P6M1        =   0xcb;
  47. sfr P7M0        =   0xe2;
  48. sfr P7M1        =   0xe1;

  49. sbit P00        =   P0^0;
  50. sbit P01        =   P0^1;
  51. sbit P02        =   P0^2;
  52. sbit P03        =   P0^3;
  53. sbit P04        =   P0^4;
  54. sbit P05        =   P0^5;
  55. sbit P06        =   P0^6;
  56. sbit P07        =   P0^7;
  57. sbit P10        =   P1^0;
  58. sbit P11        =   P1^1;
  59. sbit P12        =   P1^2;
  60. sbit P13        =   P1^3;
  61. sbit P14        =   P1^4;
  62. sbit P15        =   P1^5;
  63. sbit P16        =   P1^6;
  64. sbit P17        =   P1^7;
  65. sbit P20        =   P2^0;
  66. sbit P21        =   P2^1;
  67. sbit P22        =   P2^2;
  68. sbit P23        =   P2^3;
  69. sbit P24        =   P2^4;
  70. sbit P25        =   P2^5;
  71. sbit P26        =   P2^6;
  72. sbit P27        =   P2^7;
  73. sbit P30        =   P3^0;
  74. sbit P31        =   P3^1;
  75. sbit P32        =   P3^2;
  76. sbit P33        =   P3^3;
  77. sbit P34        =   P3^4;
  78. sbit P35        =   P3^5;
  79. sbit P36        =   P3^6;
  80. sbit P37        =   P3^7;
  81. sbit P40        =   P4^0;
  82. sbit P41        =   P4^1;
  83. sbit P42        =   P4^2;
  84. sbit P43        =   P4^3;
  85. sbit P44        =   P4^4;
  86. sbit P45        =   P4^5;
  87. sbit P46        =   P4^6;
  88. sbit P47        =   P4^7;
  89. sbit P50        =   P5^0;
  90. sbit P51        =   P5^1;
  91. sbit P52        =   P5^2;
  92. sbit P53        =   P5^3;
  93. sbit P54        =   P5^4;
  94. sbit P55        =   P5^5;
  95. sbit P56        =   P5^6;
  96. sbit P57        =   P5^7;
  97. sbit P60        =   P6^0;
  98. sbit P61        =   P6^1;
  99. sbit P62        =   P6^2;
  100. sbit P63        =   P6^3;
  101. sbit P64        =   P6^4;
  102. sbit P65        =   P6^5;
  103. sbit P66        =   P6^6;
  104. sbit P67        =   P6^7;
  105. sbit P70        =   P7^0;
  106. sbit P71        =   P7^1;
  107. sbit P72        =   P7^2;
  108. sbit P73        =   P7^3;
  109. sbit P74        =   P7^4;
  110. sbit P75        =   P7^5;
  111. sbit P76        =   P7^6;
  112. sbit P77        =   P7^7;

  113. //如下特殊功能寄存器位于扩展RAM区域
  114. //访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
  115. #define P0PU        (*(unsigned char volatile xdata *)0xfe10)
  116. #define P1PU        (*(unsigned char volatile xdata *)0xfe11)
  117. #define P2PU        (*(unsigned char volatile xdata *)0xfe12)
  118. #define P3PU        (*(unsigned char volatile xdata *)0xfe13)
  119. #define P4PU        (*(unsigned char volatile xdata *)0xfe14)
  120. #define P5PU        (*(unsigned char volatile xdata *)0xfe15)
  121. #define P6PU        (*(unsigned char volatile xdata *)0xfe16)
  122. #define P7PU        (*(unsigned char volatile xdata *)0xfe17)
  123. #define P0NCS       (*(unsigned char volatile xdata *)0xfe18)
  124. #define P1NCS       (*(unsigned char volatile xdata *)0xfe19)
  125. #define P2NCS       (*(unsigned char volatile xdata *)0xfe1a)
  126. #define P3NCS       (*(unsigned char volatile xdata *)0xfe1b)
  127. #define P4NCS       (*(unsigned char volatile xdata *)0xfe1c)
  128. #define P5NCS       (*(unsigned char volatile xdata *)0xfe1d)
  129. #define P6NCS       (*(unsigned char volatile xdata *)0xfe1e)
  130. #define P7NCS       (*(unsigned char volatile xdata *)0xfe1f)

  131. //系统管理特殊功能寄存器
  132. sfr PCON        =   0x87;
  133. #define SMOD        0x80
  134. #define SMOD0       0x40
  135. #define LVDF        0x20
  136. #define POF         0x10
  137. #define GF1         0x08
  138. #define GF0         0x04
  139. #define PD          0x02
  140. #define IDL         0x01
  141. sfr AUXR        =   0x8e;
  142. #define T0x12       0x80
  143. #define T1x12       0x40
  144. #define UART_M0x6   0x20
  145. #define T2R         0x10
  146. #define T2_CT       0x08
  147. #define T2x12       0x04
  148. #define EXTRAM      0x02
  149. #define S1ST2       0x01
  150. sfr AUXR2       =   0x97;
  151. #define TXLNRX      0x10
  152. sfr BUS_SPEED   =   0xa1;
  153. sfr P_SW1       =   0xa2;
  154. sfr P_SW2       =   0xba;
  155. #define EAXFR       0x80
  156. sfr VOCTRL      =   0xbb;
  157. sfr RSTCFG      =   0xff;

  158. //如下特殊功能寄存器位于扩展RAM区域
  159. //访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
  160. #define CKSEL       (*(unsigned char volatile xdata *)0xfe00)
  161. #define CLKDIV      (*(unsigned char volatile xdata *)0xfe01)
  162. #define IRC24MCR    (*(unsigned char volatile xdata *)0xfe02)
  163. #define XOSCCR      (*(unsigned char volatile xdata *)0xfe03)
  164. #define IRC32KCR    (*(unsigned char volatile xdata *)0xfe04)

  165. //中断特殊功能寄存器
  166. sfr IE          =   0xa8;
  167. sbit EA         =   IE^7;
  168. sbit ELVD       =   IE^6;
  169. sbit EADC       =   IE^5;
  170. sbit ES         =   IE^4;
  171. sbit ET1        =   IE^3;
  172. sbit EX1        =   IE^2;
  173. sbit ET0        =   IE^1;
  174. sbit EX0        =   IE^0;
  175. sfr IE2         =   0xaf;
  176. #define ET4         0x40
  177. #define ET3         0x20
  178. #define ES4         0x10
  179. #define ES3         0x08
  180. #define ET2         0x04
  181. #define ESPI        0x02
  182. #define ES2         0x01
  183. sfr IP          =   0xb8;
  184. sbit PPCA       =   IP^7;
  185. sbit PLVD       =   IP^6;
  186. sbit PADC       =   IP^5;
  187. sbit PS         =   IP^4;
  188. sbit PT1        =   IP^3;
  189. sbit PX1        =   IP^2;
  190. sbit PT0        =   IP^1;
  191. sbit PX0        =   IP^0;
  192. sfr IP2         =   0xb5;
  193. #define PI2C        0x40
  194. #define PCMP        0x20
  195. #define PX4         0x10
  196. #define PPWMFD      0x08
  197. #define PPWM        0x04
  198. #define PSPI        0x02
  199. #define PS2         0x01
  200. sfr IPH         =   0xb7;
  201. #define PPCAH       0x80
  202. #define PLVDH       0x40
  203. #define PADCH       0x20
  204. #define PSH         0x10
  205. #define PT1H        0x08
  206. #define PX1H        0x04
  207. #define PT0H        0x02
  208. #define PX0H        0x01
  209. sfr IP2H        =   0xb6;
  210. #define PI2CH       0x40
  211. #define PCMPH       0x20
  212. #define PX4H        0x10
  213. #define PPWMFDH     0x08
  214. #define PPWMH       0x04
  215. #define PSPIH       0x02
  216. #define PS2H        0x01
  217. sfr INTCLKO     =   0x8f;
  218. #define EX4         0x40
  219. #define EX3         0x20
  220. #define EX2         0x10
  221. #define T2CLKO      0x04
  222. #define T1CLKO      0x02
  223. #define T0CLKO      0x01
  224. sfr AUXINTIF    =   0xef;
  225. #define INT4IF      0x40
  226. #define INT3IF      0x20
  227. #define INT2IF      0x10
  228. #define T4IF        0x04
  229. #define T3IF        0x02
  230. #define T2IF        0x01

  231. //定时器特殊功能寄存器
  232. sfr TCON        =   0x88;
  233. sbit TF1        =   TCON^7;
  234. sbit TR1        =   TCON^6;
  235. sbit TF0        =   TCON^5;
  236. sbit TR0        =   TCON^4;
  237. sbit IE1        =   TCON^3;
  238. sbit IT1        =   TCON^2;
  239. sbit IE0        =   TCON^1;
  240. sbit IT0        =   TCON^0;
  241. sfr TMOD        =   0x89;
  242. #define T1_GATE     0x80
  243. #define T1_CT       0x40
  244. #define T1_M1       0x20
  245. #define T1_M0       0x10
  246. #define T0_GATE     0x08
  247. #define T0_CT       0x04
  248. #define T0_M1       0x02
  249. #define T0_M0       0x01
  250. sfr TL0         =   0x8a;
  251. sfr TL1         =   0x8b;
  252. sfr TH0         =   0x8c;
  253. sfr TH1         =   0x8d;
  254. sfr T4T3M       =   0xd1;
  255. #define T4R         0x80
  256. #define T4_CT       0x40
  257. #define T4x12       0x20
  258. #define T4CLKO      0x10
  259. #define T3R         0x08
  260. #define T3_CT       0x04
  261. #define T3x12       0x02
  262. #define T3CLKO      0x01
  263. sfr T4H         =   0xd2;
  264. sfr T4L         =   0xd3;
  265. sfr T3H         =   0xd4;
  266. sfr T3L         =   0xd5;
  267. sfr T2H         =   0xd6;
  268. sfr T2L         =   0xd7;
  269. sfr TH4         =   0xd2;
  270. sfr TL4         =   0xd3;
  271. sfr TH3         =   0xd4;
  272. sfr TL3         =   0xd5;
  273. sfr TH2         =   0xd6;
  274. sfr TL2         =   0xd7;
  275. sfr WKTCL       =   0xaa;
  276. sfr WKTCH       =   0xab;
  277. #define WKTEN       0x80
  278. sfr WDT_CONTR   =   0xc1;
  279. #define WDT_FLAG    0x80
  280. #define EN_WDT      0x20
  281. #define CLR_WDT     0x10
  282. #define IDL_WDT     0x08

  283. //串行口特殊功能寄存器
  284. sfr SCON        =   0x98;
  285. sbit SM0        =   SCON^7;
  286. sbit SM1        =   SCON^6;
  287. sbit SM2        =   SCON^5;
  288. sbit REN        =   SCON^4;
  289. sbit TB8        =   SCON^3;
  290. sbit RB8        =   SCON^2;
  291. sbit TI         =   SCON^1;
  292. sbit RI         =   SCON^0;
  293. sfr SBUF        =   0x99;
  294. sfr S2CON       =   0x9a;
  295. #define S2SM0       0x80
  296. #define S2ST4       0x40
  297. #define S2SM2       0x20
  298. #define S2REN       0x10
  299. #define S2TB8       0x08
  300. #define S2RB8       0x04
  301. #define S2TI        0x02
  302. #define S2RI        0x01
  303. sfr S2BUF       =   0x9b;
  304. sfr S3CON       =   0xac;
  305. #define S3SM0       0x80
  306. #define S3ST4       0x40
  307. #define S3SM2       0x20
  308. #define S3REN       0x10
  309. #define S3TB8       0x08
  310. #define S3RB8       0x04
  311. #define S3TI        0x02
  312. #define S3RI        0x01
  313. sfr S3BUF       =   0xad;
  314. sfr S4CON       =   0x84;
  315. #define S4SM0       0x80
  316. #define S4ST4       0x40
  317. #define S4SM2       0x20
  318. #define S4REN       0x10
  319. #define S4TB8       0x08
  320. #define S4RB8       0x04
  321. #define S4TI        0x02
  322. #define S4RI        0x01
  323. sfr S4BUF       =   0x85;
  324. sfr SADDR       =   0xa9;
  325. sfr SADEN       =   0xb9;

  326. //ADC 特殊功能寄存器
  327. sfr ADC_CONTR   =   0xbc;
  328. #define ADC_POWER   0x80
  329. #define ADC_START   0x40
  330. #define ADC_FLAG    0x20
  331. sfr ADC_RES     =   0xbd;
  332. sfr ADC_RESL    =   0xbe;
  333. sfr ADCCFG      =   0xde;
  334. #define ADC_RESFMT  0x20

  335. //SPI 特殊功能寄存器
  336. sfr SPSTAT      =   0xcd;
  337. #define SPIF        0x80
  338. #define WCOL        0x40
  339. sfr SPCTL       =   0xce;
  340. #define SSIG        0x80
  341. #define SPEN        0x40
  342. #define DORD        0x20
  343. #define MSTR        0x10
  344. #define CPOL        0x08
  345. #define CPHA        0x04
  346. sfr SPDAT       =   0xcf;

  347. //IAP/ISP 特殊功能寄存器
  348. sfr IAP_DATA    =   0xc2;
  349. sfr IAP_ADDRH   =   0xc3;
  350. sfr IAP_ADDRL   =   0xc4;
  351. sfr IAP_CMD     =   0xc5;
  352. #define IAP_IDL     0x00
  353. #define IAP_READ    0x01
  354. #define IAP_WRITE   0x02
  355. #define IAP_ERASE   0x03
  356. sfr IAP_TRIG    =   0xc6;
  357. sfr IAP_CONTR   =   0xc7;
  358. #define IAPEN       0x80
  359. #define SWBS        0x40
  360. #define SWRST       0x20
  361. #define CMD_FAIL    0x10
  362. sfr ISP_DATA    =   0xc2;
  363. sfr ISP_ADDRH   =   0xc3;
  364. sfr ISP_ADDRL   =   0xc4;
  365. sfr ISP_CMD     =   0xc5;
  366. sfr ISP_TRIG    =   0xc6;
  367. sfr ISP_CONTR   =   0xc7;

  368. //比较器特殊功能寄存器
  369. sfr CMPCR1      =   0xe6;
  370. #define CMPEN       0x80
  371. #define CMPIF       0x40
  372. #define PIE         0x20
  373. #define NIE         0x10
  374. #define PIS         0x08
  375. #define NIS         0x04
  376. #define CMPOE       0x02
  377. #define CMPRES      0x01
  378. sfr CMPCR2      =   0xe7;
  379. #define INVCMPO     0x80
  380. #define DISFLT      0x40

  381. //PCA/PWM 特殊功能寄存器
  382. sfr CCON        =   0xd8;
  383. sbit CF         =   CCON^7;
  384. sbit CR         =   CCON^6;
  385. sbit CCF3       =   CCON^3;
  386. sbit CCF2       =   CCON^2;
  387. sbit CCF1       =   CCON^1;
  388. sbit CCF0       =   CCON^0;
  389. sfr CMOD        =   0xd9;
  390. #define CIDL        0x80
  391. #define ECF         0x01
  392. sfr CL          =   0xe9;
  393. sfr CH          =   0xf9;
  394. sfr CCAPM0      =   0xda;
  395. #define ECOM0       0x40
  396. #define CCAPP0      0x20
  397. #define CCAPN0      0x10
  398. #define MAT0        0x08
  399. #define TOG0        0x04
  400. #define PWM0        0x02
  401. #define ECCF0       0x01
  402. sfr CCAPM1      =   0xdb;
  403. #define ECOM1       0x40
  404. #define CCAPP1      0x20
  405. #define CCAPN1      0x10
  406. #define MAT1        0x08
  407. #define TOG1        0x04
  408. #define PWM1        0x02
  409. #define ECCF1       0x01
  410. sfr CCAPM2      =   0xdc;
  411. #define ECOM2       0x40
  412. #define CCAPP2      0x20
  413. #define CCAPN2      0x10
  414. #define MAT2        0x08
  415. #define TOG2        0x04
  416. #define PWM2        0x02
  417. #define ECCF2       0x01
  418. sfr CCAPM3      =   0xdd;
  419. #define ECOM3       0x40
  420. #define CCAPP3      0x20
  421. #define CCAPN3      0x10
  422. #define MAT3        0x08
  423. #define TOG3        0x04
  424. #define PWM3        0x02
  425. #define ECCF3       0x01
  426. sfr CCAP0L      =   0xea;
  427. sfr CCAP1L      =   0xeb;
  428. sfr CCAP2L      =   0xec;
  429. sfr CCAP3L      =   0xed;
  430. sfr CCAP0H      =   0xfa;
  431. sfr CCAP1H      =   0xfb;
  432. sfr CCAP2H      =   0xfc;
  433. sfr CCAP3H      =   0xfd;
  434. sfr PCA_PWM0    =   0xf2;
  435. sfr PCA_PWM1    =   0xf3;
  436. sfr PCA_PWM2    =   0xf4;
  437. sfr PCA_PWM3    =   0xf5;

  438. //增强型PWM波形发生器特殊功能寄存器
  439. sfr PWMCFG      =   0xf1;
  440. #define CBIF        0x80
  441. #define ETADC       0x40
  442. sfr PWMIF       =   0xf6;
  443. #define C7IF        0x80
  444. #define C6IF        0x40
  445. #define C5IF        0x20
  446. #define C4IF        0x10
  447. #define C3IF        0x08
  448. #define C2IF        0x04
  449. #define C1IF        0x02
  450. #define C0IF        0x01
  451. sfr PWMFDCR     =   0xf7;
  452. #define INVCMP      0x80
  453. #define INVIO       0x40
  454. #define ENFD        0x20
  455. #define FLTFLIO     0x10
  456. #define EFDI        0x08
  457. #define FDCMP       0x04
  458. #define FDIO        0x02
  459. #define FDIF        0x01
  460. sfr PWMCR       =   0xfe;
  461. #define ENPWM       0x80
  462. #define ECBI        0x40

  463. //如下特殊功能寄存器位于扩展RAM区域
  464. //访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
  465. #define PWMC        (*(unsigned int  volatile xdata *)0xfff0)
  466. #define PWMCH       (*(unsigned char volatile xdata *)0xfff0)
  467. #define PWMCL       (*(unsigned char volatile xdata *)0xfff1)
  468. #define PWMCKS      (*(unsigned char volatile xdata *)0xfff2)
  469. #define TADCP       (*(unsigned char volatile xdata *)0xfff3)
  470. #define TADCPH      (*(unsigned char volatile xdata *)0xfff3)
  471. #define TADCPL      (*(unsigned char volatile xdata *)0xfff4)
  472. #define PWM0T1      (*(unsigned int  volatile xdata *)0xff00)
  473. #define PWM0T1H     (*(unsigned char volatile xdata *)0xff00)
  474. #define PWM0T1L     (*(unsigned char volatile xdata *)0xff01)
  475. #define PWM0T2      (*(unsigned int  volatile xdata *)0xff02)
  476. #define PWM0T2H     (*(unsigned char volatile xdata *)0xff02)
  477. #define PWM0T2L     (*(unsigned char volatile xdata *)0xff03)
  478. #define PWM0CR      (*(unsigned char volatile xdata *)0xff04)
  479. #define PWM0HLD     (*(unsigned char volatile xdata *)0xff05)
  480. #define PWM1T1      (*(unsigned int  volatile xdata *)0xff10)
  481. #define PWM1T1H     (*(unsigned char volatile xdata *)0xff10)
  482. #define PWM1T1L     (*(unsigned char volatile xdata *)0xff11)
  483. #define PWM1T2      (*(unsigned int  volatile xdata *)0xff12)
  484. #define PWM1T2H     (*(unsigned char volatile xdata *)0xff12)
  485. #define PWM1T2L     (*(unsigned char volatile xdata *)0xff13)
  486. #define PWM1CR      (*(unsigned char volatile xdata *)0xff14)
  487. #define PWM1HLD     (*(unsigned char volatile xdata *)0xff15)
  488. #define PWM2T1      (*(unsigned int  volatile xdata *)0xff20)
  489. #define PWM2T1H     (*(unsigned char volatile xdata *)0xff20)
  490. #define PWM2T1L     (*(unsigned char volatile xdata *)0xff21)
  491. #define PWM2T2      (*(unsigned int  volatile xdata *)0xff22)
  492. #define PWM2T2H     (*(unsigned char volatile xdata *)0xff22)
  493. #define PWM2T2L     (*(unsigned char volatile xdata *)0xff23)
  494. #define PWM2CR      (*(unsigned char volatile xdata *)0xff24)
  495. #define PWM2HLD     (*(unsigned char volatile xdata *)0xff25)
  496. #define PWM3T1      (*(unsigned int  volatile xdata *)0xff30)
  497. #define PWM3T1H     (*(unsigned char volatile xdata *)0xff30)
  498. #define PWM3T1L     (*(unsigned char volatile xdata *)0xff31)
  499. #define PWM3T2      (*(unsigned int  volatile xdata *)0xff32)
  500. #define PWM3T2H     (*(unsigned char volatile xdata *)0xff32)
  501. #define PWM3T2L     (*(unsigned char volatile xdata *)0xff33)
  502. #define PWM3CR      (*(unsigned char volatile xdata *)0xff34)
  503. #define PWM3HLD     (*(unsigned char volatile xdata *)0xff35)
  504. #define PWM4T1      (*(unsigned int  volatile xdata *)0xff40)
  505. #define PWM4T1H     (*(unsigned char volatile xdata *)0xff40)
  506. #define PWM4T1L     (*(unsigned char volatile xdata *)0xff41)
  507. #define PWM4T2      (*(unsigned int  volatile xdata *)0xff42)
  508. #define PWM4T2H     (*(unsigned char volatile xdata *)0xff42)
  509. #define PWM4T2L     (*(unsigned char volatile xdata *)0xff43)
  510. #define PWM4CR      (*(unsigned char volatile xdata *)0xff44)
  511. #define PWM4HLD     (*(unsigned char volatile xdata *)0xff45)
  512. #define PWM5T1      (*(unsigned int  volatile xdata *)0xff50)
  513. #define PWM5T1H     (*(unsigned char volatile xdata *)0xff50)
  514. #define PWM5T1L     (*(unsigned char volatile xdata *)0xff51)
  515. #define PWM5T2      (*(unsigned int  volatile xdata *)0xff52)
  516. #define PWM5T2H     (*(unsigned char volatile xdata *)0xff52)
  517. #define PWM5T2L     (*(unsigned char volatile xdata *)0xff53)
  518. #define PWM5CR      (*(unsigned char volatile xdata *)0xff54)
  519. #define PWM5HLD     (*(unsigned char volatile xdata *)0xff55)
  520. #define PWM6T1      (*(unsigned int  volatile xdata *)0xff60)
  521. #define PWM6T1H     (*(unsigned char volatile xdata *)0xff60)
  522. #define PWM6T1L     (*(unsigned char volatile xdata *)0xff61)
  523. #define PWM6T2      (*(unsigned int  volatile xdata *)0xff62)
  524. #define PWM6T2H     (*(unsigned char volatile xdata *)0xff62)
  525. #define PWM6T2L     (*(unsigned char volatile xdata *)0xff63)
  526. #define PWM6CR      (*(unsigned char volatile xdata *)0xff64)
  527. #define PWM6HLD     (*(unsigned char volatile xdata *)0xff65)
  528. #define PWM7T1      (*(unsigned int  volatile xdata *)0xff70)
  529. #define PWM7T1H     (*(unsigned char volatile xdata *)0xff70)
  530. #define PWM7T1L     (*(unsigned char volatile xdata *)0xff71)
  531. #define PWM7T2      (*(unsigned int  volatile xdata *)0xff72)
  532. #define PWM7T2H     (*(unsigned char volatile xdata *)0xff72)
  533. #define PWM7T2L     (*(unsigned char volatile xdata *)0xff73)
  534. #define PWM7CR      (*(unsigned char volatile xdata *)0xff74)
  535. #define PWM7HLD     (*(unsigned char volatile xdata *)0xff75)

  536. //I2C特殊功能寄存器
  537. //如下特殊功能寄存器位于扩展RAM区域
  538. //访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
  539. #define I2CCFG      (*(unsigned char volatile xdata *)0xfe80)
  540. #define ENI2C       0x80
  541. #define MSSL        0x40
  542. #define I2CMSCR     (*(unsigned char volatile xdata *)0xfe81)
  543. #define EMSI        0x80
  544. #define I2CMSST     (*(unsigned char volatile xdata *)0xfe82)
  545. #define MSBUSY      0x80
  546. #define MSIF        0x40
  547. #define MSACKI      0x02
  548. #define MSACKO      0x01
  549. #define I2CSLCR     (*(unsigned char volatile xdata *)0xfe83)
  550. #define ESTAI       0x40
  551. #define ERXI        0x20
  552. #define ETXI        0x10
  553. #define ESTOI       0x08
  554. #define SLRST       0x01
  555. #define I2CSLST     (*(unsigned char volatile xdata *)0xfe84)
  556. #define SLBUSY      0x80
  557. #define STAIF       0x40
  558. #define RXIF        0x20
  559. #define TXIF        0x10
  560. #define STOIF       0x08
  561. #define TXING       0x04
  562. #define SLACKI      0x02
  563. #define SLACKO      0x01
  564. #define I2CSLADR    (*(unsigned char volatile xdata *)0xfe85)
  565. #define I2CTXD      (*(unsigned char volatile xdata *)0xfe86)
  566. #define I2CRXD      (*(unsigned char volatile xdata *)0xfe87)

  567. /////////////////////////////////////////////////

  568. #endif

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:510170 发表于 2021-8-29 11:11 | 只看该作者
//包含本头文件后,不用另外再包含"REG51.H"
回复

使用道具 举报

板凳
ID:57657 发表于 2021-8-29 11:12 | 只看该作者
使用 stc8.h 不需要再使用 sfr 定义寄存器,请删除7~12行。
回复

使用道具 举报

地板
ID:95375 发表于 2021-8-29 13:49 | 只看该作者
ttmax3 发表于 2021-8-29 11:11
//包含本头文件后,不用另外再包含"REG51.H"

当然不会犯这么低级的错误
回复

使用道具 举报

5#
ID:95375 发表于 2021-8-29 13:50 | 只看该作者
npn 发表于 2021-8-29 11:12
使用 stc8.h 不需要再使用 sfr 定义寄存器,请删除7~12行。

谢谢,受教了。
回复

使用道具 举报

6#
ID:95375 发表于 2021-8-29 14:00 | 只看该作者
npn 发表于 2021-8-29 11:12
使用 stc8.h 不需要再使用 sfr 定义寄存器,请删除7~12行。

谢谢,受教了。
回复

使用道具 举报

7#
ID:624769 发表于 2021-8-29 22:28 | 只看该作者
宏晶的头文件非常的完整, 所以,只要用STC8.H, 就不要再定义任何 SFR, SBIT 这些了。甚至XFR的 define也不要定义。不然就会出现重复定义错误。最后,STC8系列有好几个头文件。比如STC8G,STC8H,根据自己实际机型选择头文件。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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