找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个错误是那个头文件没有申明,找不到问题,帮忙看一下

[复制链接]
跳转到指定楼层
楼主
ID:202598 发表于 2018-8-6 22:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MIAN.C(76): error C202: 'P0M0': undefined identifier
MIAN.C(77): error C202: 'P0M1': undefined identifier
MIAN.C(79): error C202: 'P1M0': undefined identifier
MIAN.C(80): error C202: 'P1M1': undefined identifier
MIAN.C(82): error C202: 'P2M0': undefined identifier
MIAN.C(83): error C202: 'P2M1': undefined identifier
MIAN.C(85): error C202: 'P3M0': undefined identifier
MIAN.C(86): error C202: 'P3M1': undefined identifier
MIAN.C(88): error C202: 'P4M0': undefined identifier
MIAN.C(89): error C202: 'P4M1': undefined identifier
MIAN.C(94): error C202: 'S2CON': undefined identifier
MIAN.C(95): error C202: 'AUXR': undefined identifier
MIAN.C(97): error C202: 'T2L': undefined identifier
MIAN.C(98): error C202: 'T2H': undefined identifier
MIAN.C(100): error C202: 'AUXR': undefined identifier
MIAN.C(106): error C202: 'S2BUF': undefined identifier
MIAN.C(107): error C202: 'S2CON': undefined identifier
MIAN.C(108): error C202: 'S2CON': undefined identifier
MIAN.C(114): error C202: 'IE2': undefined identifier
MIAN.C(119): error C202: 'IE2': undefined identifier
MIAN.C(126): error C202: 'IE2': undefined identifier
MIAN.C(127): error C202: 'S2CON': undefined identifier
MIAN.C(129): error C202: 'S2CON': undefined identifier
MIAN.C(130): error C202: 'S2BUF': undefined identifier
MIAN.C(134): error C202: 'S2CON': undefined identifier
MIAN.C(136): error C202: 'S2CON': undefined identifier
MIAN.C(138): error C202: 'IE2': undefined identifier
mian.c - 27 Error(s), 0 Warning(s).

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

使用道具 举报

沙发
ID:155507 发表于 2018-8-7 06:16 | 只看该作者


  1. #ifndef        _STC15Fxxxx_H
  2. #define        _STC15Fxxxx_H

  3. #include <intrins.h>

  4. /*  BYTE Registers  */
  5. sfr P0   = 0x80;
  6. sfr SP   = 0x81;
  7. sfr DPL  = 0x82;
  8. sfr DPH  = 0x83;
  9. sfr        S4CON = 0x84;
  10. sfr        S4BUF = 0x85;
  11. sfr PCON = 0x87;

  12. sfr TCON = 0x88;
  13. sfr TMOD = 0x89;
  14. sfr TL0  = 0x8A;
  15. sfr TL1  = 0x8B;
  16. sfr TH0  = 0x8C;
  17. sfr TH1  = 0x8D;
  18. sfr        AUXR = 0x8E;
  19. sfr WAKE_CLKO = 0x8F;
  20. sfr INT_CLKO = 0x8F;
  21. sfr        AUXR2    = 0x8F;

  22. sfr RL_TL0  = 0x8A;
  23. sfr RL_TL1  = 0x8B;
  24. sfr RL_TH0  = 0x8C;
  25. sfr RL_TH1  = 0x8D;


  26. sfr P1   = 0x90;
  27. sfr P1M1 = 0x91;        //P1M1.n,P1M0.n         =00--->Standard,        01--->push-pull                实际上1T的都一样
  28. sfr P1M0 = 0x92;        //                                        =10--->pure input,        11--->open drain
  29. sfr P0M1 = 0x93;        //P0M1.n,P0M0.n         =00--->Standard,        01--->push-pull
  30. sfr P0M0 = 0x94;        //                                        =10--->pure input,        11--->open drain
  31. sfr P2M1 = 0x95;        //P2M1.n,P2M0.n         =00--->Standard,        01--->push-pull
  32. sfr P2M0 = 0x96;        //                                        =10--->pure input,        11--->open drain
  33. sfr CLK_DIV = 0x97;
  34. sfr PCON2   = 0x97;

  35. sfr SCON  = 0x98;
  36. sfr SBUF  = 0x99;
  37. sfr S2CON = 0x9A;        //
  38. sfr S2BUF = 0x9B;        //
  39. sfr P1ASF = 0x9D;        //只写,模拟输入(AD或LVD)选择

  40. sfr P2    = 0xA0;
  41. sfr BUS_SPEED = 0xA1;
  42. sfr AUXR1 = 0xA2;
  43. sfr P_SW1 = 0xA2;

  44. sfr IE    = 0xA8;
  45. sfr SADDR = 0xA9;
  46. sfr WKTCL = 0xAA;        //唤醒定时器低字节
  47. sfr WKTCH = 0xAB;        //唤醒定时器高字节
  48. sfr        S3CON = 0xAC;
  49. sfr S3BUF = 0xAD;
  50. sfr IE2   = 0xAF;        //STC12C5A60S2系列

  51. sfr P3    = 0xB0;
  52. sfr P3M1  = 0xB1;        //P3M1.n,P3M0.n         =00--->Standard,        01--->push-pull
  53. sfr P3M0  = 0xB2;        //                                        =10--->pure input,        11--->open drain
  54. sfr P4M1  = 0xB3;        //P4M1.n,P4M0.n         =00--->Standard,        01--->push-pull
  55. sfr P4M0  = 0xB4;        //                                        =10--->pure input,        11--->open drain
  56. sfr IP2   = 0xB5;        //STC12C5A60S2系列
  57. sfr IPH2  = 0xB6;        //STC12C5A60S2系列
  58. sfr IPH   = 0xB7;

  59. sfr IP        = 0xB8;
  60. sfr SADEN     = 0xB9;
  61. sfr        P_SW2     = 0xBA;
  62. sfr ADC_CONTR = 0xBC;        //带AD系列
  63. sfr ADC_RES   = 0xBD;        //带AD系列
  64. sfr ADC_RESL  = 0xBE;        //带AD系列

  65. sfr P4        = 0xC0;
  66. sfr WDT_CONTR = 0xC1;
  67. sfr IAP_DATA  = 0xC2;
  68. sfr IAP_ADDRH = 0xC3;
  69. sfr IAP_ADDRL = 0xC4;
  70. sfr IAP_CMD   = 0xC5;
  71. sfr IAP_TRIG  = 0xC6;
  72. sfr IAP_CONTR = 0xC7;

  73. sfr ISP_DATA  = 0xC2;
  74. sfr ISP_ADDRH = 0xC3;
  75. sfr ISP_ADDRL = 0xC4;
  76. sfr ISP_CMD   = 0xC5;
  77. sfr ISP_TRIG  = 0xC6;
  78. sfr ISP_CONTR = 0xC7;

  79. sfr P5     = 0xC8;        //
  80. sfr P5M1   = 0xC9;        //        P5M1.n,P5M0.n         =00--->Standard,        01--->push-pull
  81. sfr P5M0   = 0xCA;        //                                        =10--->pure input,        11--->open drain
  82. sfr P6M1   = 0xCB;        //        P5M1.n,P5M0.n         =00--->Standard,        01--->push-pull
  83. sfr P6M0   = 0xCC;        //                                        =10--->pure input,        11--->open drain
  84. sfr SPSTAT = 0xCD;        //
  85. sfr SPCTL  = 0xCE;        //
  86. sfr SPDAT  = 0xCF;        //

  87. sfr PSW  = 0xD0;
  88. sfr        T4T3M = 0xD1;
  89. sfr        T4H  = 0xD2;
  90. sfr        T4L  = 0xD3;
  91. sfr        T3H  = 0xD4;
  92. sfr        T3L  = 0xD5;
  93. sfr        T2H  = 0xD6;
  94. sfr        T2L  = 0xD7;

  95. sfr        TH4  = 0xD2;
  96. sfr        TL4  = 0xD3;
  97. sfr        TH3  = 0xD4;
  98. sfr        TL3  = 0xD5;
  99. sfr        TH2  = 0xD6;
  100. sfr        TL2  = 0xD7;

  101. sfr        RL_T4H  = 0xD2;
  102. sfr        RL_T4L  = 0xD3;
  103. sfr        RL_T3H  = 0xD4;
  104. sfr        RL_T3L  = 0xD5;
  105. sfr        RL_T2H  = 0xD6;
  106. sfr        RL_T2L  = 0xD7;

  107. sfr CCON = 0xD8;        //
  108. sfr CMOD = 0xD9;        //
  109. sfr CCAPM0 = 0xDA;        //PCA模块0的工作模式寄存器。
  110. sfr CCAPM1 = 0xDB;        //PCA模块1的工作模式寄存器。
  111. sfr CCAPM2 = 0xDC;        //PCA模块2的工作模式寄存器。

  112. sfr ACC    = 0xE0;
  113. sfr        P7M1   = 0xE1;
  114. sfr        P7M0   = 0xE2;

  115. sfr        P6     = 0xE8;
  116. sfr CL     = 0xE9;        //
  117. sfr CCAP0L = 0xEA;        //PCA模块0的捕捉/比较寄存器低8位。
  118. sfr CCAP1L = 0xEB;        //PCA模块1的捕捉/比较寄存器低8位。
  119. sfr CCAP2L = 0xEC;        //PCA模块2的捕捉/比较寄存器低8位。

  120. sfr B      = 0xF0;
  121. sfr PCA_PWM0 = 0xF2;        //PCA模块0 PWM寄存器。
  122. sfr PCA_PWM1 = 0xF3;        //PCA模块1 PWM寄存器。
  123. sfr PCA_PWM2 = 0xF4;        //PCA模块2 PWM寄存器。

  124. sfr        P7     = 0xF8;
  125. sfr CH     = 0xF9;
  126. sfr CCAP0H = 0xFA;                //PCA模块0的捕捉/比较寄存器高8位。
  127. sfr CCAP1H = 0xFB;                //PCA模块1的捕捉/比较寄存器高8位。
  128. sfr CCAP2H = 0xFC;                //PCA模块2的捕捉/比较寄存器高8位。


  129. /*  BIT Registers  */
  130. /*  PSW   */
  131. sbit CY   = PSW^7;
  132. sbit AC   = PSW^6;
  133. sbit F0   = PSW^5;
  134. sbit RS1  = PSW^4;
  135. sbit RS0  = PSW^3;
  136. sbit OV   = PSW^2;
  137. sbit F1   = PSW^1;
  138. sbit P    = PSW^0;

  139. /*  TCON  */
  140. sbit TF1  = TCON^7;        //定时器1溢出中断标志位
  141. sbit TR1  = TCON^6;        //定时器1运行控制位
  142. sbit TF0  = TCON^5;        //定时器0溢出中断标志位
  143. sbit TR0  = TCON^4;        //定时器0运行控制位
  144. sbit IE1  = TCON^3;        //外中断1标志位
  145. sbit IT1  = TCON^2;        //外中断1信号方式控制位,1:下降沿中断,0:上升下降均中断。
  146. sbit IE0  = TCON^1;        //外中断0标志位
  147. sbit IT0  = TCON^0;        //外中断0信号方式控制位,1:下降沿中断,0:上升下降均中断。

  148. /*  P0  */
  149. sbit  P00 = P0^0;
  150. sbit  P01 = P0^1;
  151. sbit  P02 = P0^2;
  152. sbit  P03 = P0^3;
  153. sbit  P04 = P0^4;
  154. sbit  P05 = P0^5;
  155. sbit  P06 = P0^6;
  156. sbit  P07 = P0^7;

  157. /*  P1  */
  158. sbit  P10 = P1^0;
  159. sbit  P11 = P1^1;
  160. sbit  P12 = P1^2;
  161. sbit  P13 = P1^3;
  162. sbit  P14 = P1^4;
  163. sbit  P15 = P1^5;
  164. sbit  P16 = P1^6;
  165. sbit  P17 = P1^7;

  166. sbit  RXD2      = P1^0;
  167. sbit  TXD2      = P1^1;
  168. sbit  CCP1      = P1^0;
  169. sbit  CCP0      = P1^1;
  170. sbit  SPI_SS    = P1^2;
  171. sbit  SPI_MOSI  = P1^3;
  172. sbit  SPI_MISO  = P1^4;
  173. sbit  SPI_SCLK  = P1^5;

  174. sbit  SPI_SS_2    = P2^4;
  175. sbit  SPI_MOSI_2  = P2^3;
  176. sbit  SPI_MISO_2  = P2^2;
  177. sbit  SPI_SCLK_2  = P2^1;

  178. sbit  SPI_SS_3    = P5^4;
  179. sbit  SPI_MOSI_3  = P4^0;
  180. sbit  SPI_MISO_3  = P4^1;
  181. sbit  SPI_SCLK_3  = P4^3;

  182. /*  P2  */
  183. sbit  P20 = P2^0;
  184. sbit  P21 = P2^1;
  185. sbit  P22 = P2^2;
  186. sbit  P23 = P2^3;
  187. sbit  P24 = P2^4;
  188. sbit  P25 = P2^5;
  189. sbit  P26 = P2^6;
  190. sbit  P27 = P2^7;

  191. /*  P3  */
  192. sbit  P30 = P3^0;
  193. sbit  P31 = P3^1;
  194. sbit  P32 = P3^2;
  195. sbit  P33 = P3^3;
  196. sbit  P34 = P3^4;
  197. sbit  P35 = P3^5;
  198. sbit  P36 = P3^6;
  199. sbit  P37 = P3^7;

  200. sbit RXD  = P3^0;
  201. sbit TXD  = P3^1;
  202. sbit INT0 = P3^2;
  203. sbit INT1 = P3^3;
  204. sbit T0   = P3^4;
  205. sbit T1   = P3^5;
  206. sbit WR   = P3^6;
  207. sbit RD   = P3^7;
  208. sbit CCP2  = P3^7;

  209. sbit CLKOUT0   = P3^5;
  210. sbit CLKOUT1   = P3^4;

  211. /*  P4  */
  212. sbit  P40 = P4^0;
  213. sbit  P41 = P4^1;
  214. sbit  P42 = P4^2;
  215. sbit  P43 = P4^3;
  216. sbit  P44 = P4^4;
  217. sbit  P45 = P4^5;
  218. sbit  P46 = P4^6;
  219. sbit  P47 = P4^7;

  220. /*  P5  */
  221. sbit  P50 = P5^0;
  222. sbit  P51 = P5^1;
  223. sbit  P52 = P5^2;
  224. sbit  P53 = P5^3;
  225. sbit  P54 = P5^4;
  226. sbit  P55 = P5^5;
  227. sbit  P56 = P5^6;
  228. sbit  P57 = P5^7;

  229. /*  SCON  */
  230. sbit SM0  = SCON^7;        //SM0/FE                SM0 SM1 = 00 ~ 11: 方式0~3
  231. sbit SM1  = SCON^6;        //
  232. sbit SM2  = SCON^5;        //多机通讯
  233. sbit REN  = SCON^4;        //接收允许
  234. sbit TB8  = SCON^3;        //发送数据第8位
  235. sbit RB8  = SCON^2;        //接收数据第8位
  236. sbit TI   = SCON^1;        //发送中断标志位
  237. sbit RI   = SCON^0;        //接收中断标志位

  238. /*  IE   */
  239. sbit EA   = IE^7;        //中断允许总控制位
  240. sbit ELVD = IE^6;        //低压监测中断允许位
  241. sbit EADC = IE^5;        //ADC 中断 允许位
  242. sbit ES   = IE^4;        //串行中断 允许控制位
  243. sbit ET1  = IE^3;        //定时中断1允许控制位
  244. sbit EX1  = IE^2;        //外部中断1允许控制位
  245. sbit ET0  = IE^1;        //定时中断0允许控制位
  246. sbit EX0  = IE^0;        //外部中断0允许控制位


  247. /*  IP   */
  248. /*
  249. sbit PPCA = IP^7;        //PCA 中断 优先级设定位
  250. sbit PLVD = IP^6;         //低压中断 优先级设定位
  251. sbit PADC = IP^5;         //ADC 中断 优先级设定位
  252. sbit PS   = IP^4;        //串行中断0优先级设定位
  253. sbit PT1  = IP^3;        //定时中断1优先级设定位
  254. sbit PX1  = IP^2;        //外部中断1优先级设定位
  255. sbit PT0  = IP^1;        //定时中断0优先级设定位
  256. sbit PX0  = IP^0;        //外部中断0优先级设定位
  257. */

  258. sbit ACC0 = ACC^0;
  259. sbit ACC1 = ACC^1;
  260. sbit ACC2 = ACC^2;
  261. sbit ACC3 = ACC^3;
  262. sbit ACC4 = ACC^4;
  263. sbit ACC5 = ACC^5;
  264. sbit ACC6 = ACC^6;
  265. sbit ACC7 = ACC^7;

  266. sbit B0 = B^0;
  267. sbit B1 = B^1;
  268. sbit B2 = B^2;
  269. sbit B3 = B^3;
  270. sbit B4 = B^4;
  271. sbit B5 = B^5;
  272. sbit B6 = B^6;
  273. sbit B7 = B^7;


  274. //                                                        7     6     5    4    3    2    1     0    Reset Value
  275. //sfr IE2       = 0xAF;                -     -     -    -    -    -   ESPI  ES2   0000,0000B        //Auxiliary Interrupt   
  276. #define                SPI_INT_ENABLE()                IE2 |=  2        //允许SPI中断
  277. #define                SPI_INT_DISABLE()                IE2 &= ~2        //允许SPI中断
  278. #define                UART2_INT_ENABLE()                IE2 |=  1        //允许串口2中断
  279. #define                UART2_INT_DISABLE()                IE2 &= ~1        //允许串口2中断

  280. //                                          7     6     5    4    3    2    1    0    Reset Value
  281. //sfr IP      = 0xB8; //中断优先级低位      PPCA  PLVD  PADC  PS   PT1  PX1  PT0  PX0   0000,0000
  282. //--------
  283. sbit PPCA        = IP^7;        //PCA 模块中断优先级
  284. sbit PLVD        = IP^6;        //低压监测中断优先级
  285. sbit PADC        = IP^5;        //ADC 中断优先级
  286. sbit PS           = IP^4;        //串行中断0优先级设定位
  287. sbit PT1        = IP^3;        //定时中断1优先级设定位
  288. sbit PX1        = IP^2;        //外部中断1优先级设定位
  289. sbit PT0        = IP^1;        //定时中断0优先级设定位
  290. sbit PX0        = IP^0;        //外部中断0优先级设定位

  291. //                                           7      6      5     4     3     2    1     0        Reset Value
  292. //sfr IPH   = 0xB7; //中断优先级高位       PPCAH  PLVDH  PADCH  PSH  PT1H  PX1H  PT0H  PX0H   0000,0000
  293. //sfr IP2   = 0xB5; //                       -      -      -     -     -     -   PSPI   PS2   xxxx,xx00
  294. //sfr IPH2  = 0xB6; //                       -      -      -     -     -     -   PSPIH  PS2H  xxxx,xx00
  295. #define                PPCAH        0x80
  296. #define                PLVDH        0x40
  297. #define                PADCH        0x20
  298. #define                PSH                0x10
  299. #define                PT1H        0x08
  300. #define                PX1H        0x04
  301. #define                PT0H        0x02
  302. #define                PX0H        0x01

  303. #define                PCA_InterruptFirst()        PPCA = 1
  304. #define                LVD_InterruptFirst()        PLVD = 1
  305. #define                ADC_InterruptFirst()        PADC = 1
  306. #define                UART1_InterruptFirst()        PS   = 1
  307. #define                Timer1_InterruptFirst()        PT1  = 1
  308. #define                INT1_InterruptFirst()        PX1  = 1
  309. #define                Timer0_InterruptFirst()        PT0  = 1
  310. #define                INT0_InterruptFirst()        PX0  = 1



  311. /*************************************************************************************************/
  312. #define                S1_DoubleRate()                PCON |= 0x80
  313. #define                S1_SHIFT()                        SCON &= 0x3f
  314. #define                S1_8bit()                        SCON |= 0x40
  315. #define                S1_9bit()                        SCON |= 0xc0
  316. #define                S1_RX_Enable()                SCON |= 0x10
  317. #define                S1_USE_P30P31()                P_SW1 &=  ~0xc0                                        //UART1 使用P30 P31口        默认
  318. #define                S1_USE_P36P37()                P_SW1 = (P_SW1 & ~0xc0) | 0x40        //UART1 使用P36 P37口
  319. #define                S1_USE_P16P17()                P_SW1 = (P_SW1 & ~0xc0) | 0x80        //UART1 使用P16 P17口
  320. #define                S1_TXD_RXD_SHORT()        PCON2 |= (1<<4)        //将TXD与RXD连接中继输出
  321. #define                S1_TXD_RXD_OPEN()        PCON2 |= (1<<4)        //将TXD与RXD连接中继断开        默认
  322. #define         S1_BRT_UseTimer2()        AUXR |=  1;
  323. #define         S1_BRT_UseTimer1()        AUXR &= ~1;

  324. //                                                  7      6      5      4      3      2     1     0        Reset Value
  325. //sfr S2CON = 0x9A;                S2SM0    -    S2SM2  S2REN  S2TB8  S2RB8  S2TI  S2RI      00000000B                 //S2 Control

  326. #define                S2_8bit()                        S2CON &= ~(1<<7)                //串口2模式0,8位UART,波特率 = 定时器2的溢出率 / 4
  327. #define                S2_9bit()                        S2CON |=  (1<<7)                //串口2模式1,9位UART,波特率 = 定时器2的溢出率 / 4
  328. #define                S2_RX_Enable()                S2CON |=  (1<<4)                //允许串2接收

  329. #define                S2_MODE0()                        S2CON &= ~(1<<7)                //串口2模式0,8位UART,波特率 = 定时器2的溢出率 / 4
  330. #define                S2_MODE1()                        S2CON |=  (1<<7)                //串口2模式1,9位UART,波特率 = 定时器2的溢出率 / 4
  331. #define                S2_RX_EN()                        S2CON |=  (1<<4)                                                        //允许串2接收
  332. #define                S2_RX_Disable()                S2CON &= ~(1<<4)                                                        //禁止串2接收
  333. #define                TI2                                        (S2CON & 2) != 0
  334. #define                RI2                                        (S2CON & 1) != 0
  335. #define                SET_TI2()                        S2CON |=  2
  336. #define                CLR_TI2()                        S2CON &= ~2
  337. #define                CLR_RI2()                        S2CON &= ~1
  338. #define                S2TB8_SET()                        S2CON |=  8
  339. #define                S2TB8_CLR()                        S2CON &= ~8
  340. #define                S2_Int_en()                        IE2   |=  1                //串口2允许中断
  341. #define                S2_USE_P10P11()                P_SW2 &= ~1                //UART2 使用P1口        默认
  342. #define                S2_USE_P46P47()                P_SW2 |=  1                //UART2 使用P4口

  343. #define                S3_USE_P00P01()                P_SW2 &= ~2                //UART3 使用P0口        默认
  344. #define                S3_USE_P50P51()                P_SW2 |=  2                //UART3 使用P5口
  345. #define                S4_USE_P02P03()                P_SW2 &= ~4                //UART4 使用P0口        默认
  346. #define                S4_USE_P52P53()                P_SW2 |=  4                //UART4 使用P5口


  347. /**********************************************************/

  348. #define                Timer0_16bitAutoReload()        TMOD &= ~0x03                                        //16位自动重装
  349. #define                Timer0_16bit()                                TMOD  = (TMOD & ~0x03) | 0x01        //16位
  350. #define                Timer0_8bitAutoReload()                TMOD  = (TMOD & ~0x03) | 0x02        //8位自动重装
  351. #define                Timer0_16bitAutoRL_NoMask()        TMOD |=  0x03                //16位自动重装不可屏蔽中断
  352. #define                Timer0_AsCounterP32()                TMOD |=  4                //时器0用做计数器
  353. #define                Timer0_AsTimer()                        TMOD &= ~4                //时器0用做定时器
  354. #define                Timer0_ExtControlP34()                TMOD |=  4                //时器0由外部INT0高电平允许定时计数
  355. #define         Timer0_Run()                                 TR0 = 1                                //允许定时器0计数
  356. #define         Timer0_Stop()                                 TR0 = 0                                //禁止定时器0计数
  357. #define         Timer0_InterruptEnable()        ET0 = 1                                //允许Timer1中断.
  358. #define         Timer0_InterruptDisable()        ET0 = 0                                //禁止Timer1中断.

  359. #define                Timer1_16bitAutoReload()        TMOD &= ~0x30                                        //16位自动重装
  360. #define                Timer1_16bit()                                TMOD  = (TMOD & ~0x30) | 0x10        //16位
  361. #define                Timer1_8bitAutoReload()                TMOD  = (TMOD & ~0x30) | 0x20        //8位自动重装
  362. #define                Timer1_16bitAutoRL_NoMask()        TMOD |=  0x30                //16位自动重装不可屏蔽中断
  363. #define                Timer1_AsCounterP33()                TMOD |=  (1<<6)                //时器1用做计数器
  364. #define                Timer1_AsTimer()                        TMOD &= ~(1<<6)                //时器1用做定时器
  365. #define                Timer1_ExtControlP35()                TMOD |=  (1<<7)                //时器1由外部INT1高电平允许定时计数
  366. #define         Timer1_Run()                                 TR1 = 1                                //允许定时器1计数
  367. #define         Timer1_Stop()                                 TR1 = 0                                //禁止定时器1计数
  368. #define         Timer1_InterruptEnable()        ET1 = 1                                //允许Timer1中断.
  369. #define         Timer1_InterruptDisable()        ET1 = 0                                //禁止Timer1中断.


  370. //                                                   7     6       5      4     3      2      1      0    Reset Value
  371. //sfr AUXR  = 0x8E;                T0x12 T1x12 UART_M0x6  BRTR S2SMOD BRTx12 EXTRAM S1BRS  0000,0000        //Auxiliary Register

  372. #define         Timer0_1T()                                        AUXR |=  (1<<7)        //Timer0 clodk = fo
  373. #define         Timer0_12T()                                AUXR &= ~(1<<7)        //Timer0 clodk = fo/12        12分频,        default
  374. #define         Timer1_1T()                                        AUXR |=  (1<<6)        //Timer1 clodk = fo
  375. #define         Timer1_12T()                                AUXR &= ~(1<<6)        //Timer1 clodk = fo/12        12分频,        default
  376. #define                S1_M0x6()                                        AUXR |=  (1<<5)        //UART Mode0 Speed is 6x Standard
  377. #define                S1_M0x1()                                        AUXR &= ~(1<<5)        //default,        UART Mode0 Speed is Standard
  378. #define         Timer2_Run()                                 AUXR |=  (1<<4)        //允许定时器2计数
  379. #define         Timer2_Stop()                                 AUXR &= ~(1<<4)        //禁止定时器2计数
  380. #define                Timer2_AsCounterP31()                AUXR |=  (1<<3)        //时器2用做计数器
  381. #define                Timer2_AsTimer()                        AUXR &= ~(1<<3)        //时器2用做定时器
  382. #define         Timer2_1T()                                        AUXR |=  (1<<2)        //Timer0 clodk = fo
  383. #define         Timer2_12T()                                AUXR &= ~(1<<2)        //Timer0 clodk = fo/12        12分频,        default
  384. #define         Timer2_InterruptEnable()        IE2  |=  (1<<2)        //允许Timer2中断.
  385. #define         Timer2_InterruptDisable()        IE2  &= ~(1<<2)        //禁止Timer2中断.

  386. #define         ExternalRAM_enable()                AUXR |=  2                //允许外部XRAM,禁止使用内部1024RAM
  387. #define         InternalRAM_enable()                AUXR &= ~2                //禁止外部XRAM,允许使用内部1024RAM

  388. #define                T0_pulseP34_enable()                AUXR2 |=  1                //允许 T0 溢出脉冲在T0(P3.5)脚输出,Fck0 = 1/2 T0 溢出率,T0可以1T或12T。
  389. #define                T0_pulseP34_disable()                AUXR2 &= ~1
  390. #define                T1_pulseP35_enable()                AUXR2 |=  2                //允许 T1 溢出脉冲在T1(P3.4)脚输出,Fck1 = 1/2 T1 溢出率,T1可以1T或12T。
  391. #define                T1_pulseP35_disable()                AUXR2 &= ~2
  392. #define                T2_pulseP30_enable()                AUXR2 |=  4                //允许 T2 溢出脉冲在T1(P3.0)脚输出,Fck2 = 1/2 T2 溢出率,T2可以1T或12T。
  393. #define                T2_pulseP30_disable()                AUXR2 &= ~4

  394. #define                T0_pulseP35(n)                ET0=0,Timer0_AsTimer(),Timer0_1T(),Timer0_16bitAutoReload(),TH0=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL0=(65536-(n/2+MAIN_Fosc/2)/(n))%256,AUXR2 |= bit0,TR0=1                //fx=fosc/(2*M)/n,  M=1 or M=12
  395. #define                T1_pulseP34(n)                ET1=0,Timer1_AsTimer(),Timer1_1T(),Timer1_16bitAutoReload(),TH1=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL1=(65536-(n/2+MAIN_Fosc/2)/(n))%256,AUXR2 |= bit1,TR1=1                //fx=fosc/(2*M)/n,  M=1 or M=12
  396. #define                T2_pulseP30(n)                Timer2_InterruptDisable(),Timer2_AsTimer(),Timer2_1T(),TH2=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL2=(65536-(n/2+MAIN_Fosc/2)/(n))%256,AUXR2 |= bit2,Timer2_Run()        //fx=fosc/(2*M)/n,  M=1 or M=12

  397. #define                Timer0_Load(n)                TH0 = (n) / 256,        TL0 = (n) % 256
  398. #define                Timer1_Load(n)                TH1 = (n) / 256,        TL1 = (n) % 256
  399. #define                Timer2_Load(n)                TH2 = (n) / 256,        TL2 = (n) % 256

  400. #define                Timer0_Load_us(n)        TH0=(65536-MainFosc_KHZ*(n)/1000)/256,TL0=(65536-MainFosc_KHZ*(n)/1000)%256
  401. #define                Timer1_Load_us(n)        TH1=(65536-MainFosc_KHZ*(n)/1000)/256,TL1=(65536-MainFosc_KHZ*(n)/1000)%256
  402. #define                Timer2_Load_us(n)        TH2=(65536-MainFosc_KHZ*(n)/1000)/256,TL2=(65536-MainFosc_KHZ*(n)/1000)%256


  403. //sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register
  404. //                                      7     6     5      4       3      2   1   0     Reset Value
  405. //                                  WDT_FLAG  -  EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0    xx00,0000
  406. #define D_WDT_FLAG                        (1<<7)
  407. #define D_EN_WDT                        (1<<5)
  408. #define D_CLR_WDT                        (1<<4)        //auto clear
  409. #define D_IDLE_WDT                        (1<<3)        //WDT counter when Idle
  410. #define D_WDT_SCALE_2                0
  411. #define D_WDT_SCALE_4                1
  412. #define D_WDT_SCALE_8                2                //T=393216*N/fo
  413. #define D_WDT_SCALE_16                3
  414. #define D_WDT_SCALE_32                4
  415. #define D_WDT_SCALE_64                5
  416. #define D_WDT_SCALE_128                6
  417. #define D_WDT_SCALE_256                7

  418. #define        WDT_reset(n)        WDT_CONTR = D_EN_WDT + D_CLR_WDT + D_IDLE_WDT + (n)                //初始化WDT,喂狗


  419. //                                                  7     6      5    4     3      2    1     0     Reset Value
  420. //sfr PCON   = 0x87;        SMOD  SMOD0  LVDF  POF   GF1    GF0   PD   IDL    0001,0000         //Power Control
  421. //SMOD                //串口双倍速
  422. //SMOD0
  423. #define                LVDF                (1<<5)        //P4.6低压检测标志
  424. //POF
  425. //GF1
  426. //GF0
  427. //#define         D_PD                2                //set 1, power down mode
  428. //#define         D_IDLE                1                //set 1, idle mode
  429. #define                MCU_IDLE()                        PCON |= 1        //MCU 进入 IDLE 模式
  430. #define                MCU_POWER_DOWN()        PCON |= 2        //MCU 进入 睡眠 模式


  431. //sfr ISP_CMD   = 0xC5;
  432. #define                ISP_STANDBY()        ISP_CMD = 0                //ISP空闲命令(禁止)
  433. #define                ISP_READ()                ISP_CMD = 1                //ISP读出命令
  434. #define                ISP_WRITE()                ISP_CMD = 2                //ISP写入命令
  435. #define                ISP_ERASE()                ISP_CMD = 3                //ISP擦除命令

  436. //sfr ISP_TRIG  = 0xC6;
  437. #define         ISP_TRIG()        ISP_TRIG = 0x5A,        ISP_TRIG = 0xA5                //ISP触发命令

  438. //                                                          7    6    5      4    3    2    1     0    Reset Value
  439. //sfr IAP_CONTR = 0xC7;                IAPEN SWBS SWRST CFAIL  -   WT2  WT1   WT0   0000,x000        //IAP Control Register
  440. #define ISP_EN                        (1<<7)
  441. #define ISP_SWBS                (1<<6)
  442. #define ISP_SWRST                (1<<5)
  443. #define ISP_CMD_FAIL        (1<<4)
  444. #define ISP_WAIT_1MHZ        7
  445. #define ISP_WAIT_2MHZ        6
  446. #define ISP_WAIT_3MHZ        5
  447. #define ISP_WAIT_6MHZ        4
  448. #define ISP_WAIT_12MHZ        3
  449. #define ISP_WAIT_20MHZ        2
  450. #define ISP_WAIT_24MHZ        1
  451. #define ISP_WAIT_30MHZ        0

  452. #if (MAIN_Fosc >= 24000000L)
  453.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_30MHZ
  454. #elif (MAIN_Fosc >= 20000000L)
  455.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_24MHZ
  456. #elif (MAIN_Fosc >= 12000000L)
  457.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_20MHZ
  458. #elif (MAIN_Fosc >= 6000000L)
  459.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_12MHZ
  460. #elif (MAIN_Fosc >= 3000000L)
  461.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_6MHZ
  462. #elif (MAIN_Fosc >= 2000000L)
  463.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_3MHZ
  464. #elif (MAIN_Fosc >= 1000000L)
  465.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_2MHZ
  466. #else
  467.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_1MHZ
  468. #endif



  469. /* ADC Register */
  470. //                                                                7       6      5       4         3      2    1    0   Reset Value
  471. //sfr ADC_CONTR = 0xBC;                ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000        //AD 转换控制寄存器
  472. //sfr ADC_RES  = 0xBD;                ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2          0000,0000        //A/D 转换结果高8位
  473. //sfr ADC_RESL = 0xBE;                                                                                                  ADCV.1 ADCV.0          0000,0000        //A/D 转换结果低2位
  474. //sfr ADC_CONTR  = 0xBC;        //直接用MOV操作,不要用与或


  475. //sfr SPCTL  = 0xCE;        SPI控制寄存器
  476. //   7       6       5       4       3       2       1       0            Reset Value
  477. //        SSIG        SPEN        DORD        MSTR        CPOL        CPHA        SPR1        SPR0                0x00

  478. #define        SPI_SSIG_None()                SPCTL |=  (1<<7)                //1: 忽略SS脚
  479. #define        SPI_SSIG_Enable()        SPCTL &= ~(1<<7)                //0: SS脚用于决定主从机
  480. #define        SPI_Enable()                SPCTL |=  (1<<6)                //1: 允许SPI
  481. #define        SPI_Disable()                SPCTL &= ~(1<<6)                //0: 禁止SPI
  482. #define        SPI_LSB_First()                SPCTL |=  (1<<5)                //1: LSB先发
  483. #define        SPI_MSB_First()                SPCTL &= ~(1<<5)                //0: MSB先发
  484. #define        SPI_Master()                SPCTL |=  (1<<4)                //1: 设为主机
  485. #define        SPI_Slave()                        SPCTL &= ~(1<<4)                //0: 设为从机
  486. #define        SPI_SCLK_NormalH()        SPCTL |=  (1<<3)                //1: 空闲时SCLK为高电平
  487. #define        SPI_SCLK_NormalL()        SPCTL &= ~(1<<3)                //0: 空闲时SCLK为低电平
  488. #define        SPI_PhaseH()                SPCTL |=  (1<<2)                //1:
  489. #define        SPI_PhaseL()                SPCTL &= ~(1<<2)                //0:
  490. #define        SPI_Speed(n)                SPCTL = (SPCTL & ~3) | (n)        //设置速度, 0 -- fosc/4, 1 -- fosc/16, 2 -- fosc/64, 3 -- fosc/128

  491. //sfr SPDAT  = 0xCF; //SPI Data Register                                                     0000,0000
  492. //sfr SPSTAT  = 0xCD;        //SPI状态寄存器
  493. //   7       6      5   4   3   2   1   0            Reset Value
  494. //        SPIF        WCOL        -        -        -        -        -        -
  495. #define        SPIF        0x80                //SPI传输完成标志。写入1清0。
  496. #define        WCOL        0x40                //SPI写冲突标志。写入1清0。

  497. #define                SPI_USE_P12P13P14P15()        AUXR1 &= 0x0c        //将SPI切换到P12(SS) P13(MOSI) P14(MISO) P15(SCLK)(上电默认)。
  498. #define                SPI_USE_P24P23P22P21()        AUXR1 = (AUXR1 & ~0x0c) | 0x04        //将SPI切换到P24(SS) P23(MOSI) P22(MISO) P21(SCLK)。
  499. #define                SPI_USE_P54P40P41P43()        AUXR1 = (AUXR1 & ~0x0c) | 0x08        //将SPI切换到P54(SS) P40(MOSI) P41(MISO) P43(SCLK)。


  500. /*
  501. ;PCA_PWMn:    7       6     5   4   3   2     1       0
  502. ;                        EBSn_1        EBSn_0        -        -        -        -        EPCnH        EPCnL
  503. ;B5-B2:                保留
  504. ;B1(EPCnH):        在PWM模式下,与CCAPnH组成9位数。
  505. ;B0(EPCnL):        在PWM模式下,与CCAPnL组成9位数。
  506. */
  507. #define                PWM0_NORMAL()        PCA_PWM0 &= ~3                                //PWM0正常输出(默认)
  508. #define                PWM0_OUT_0()        PCA_PWM0 |=  3                                //PWM0一直输出0
  509. #define                PWM0_OUT_1()        PCA_PWM0 &= ~3, CCAP0H = 0;        //PWM0一直输出1

  510. #define                PWM1_NORMAL()        PCA_PWM1 &= ~3                                //PWM0正常输出(默认)
  511. #define                PWM1_OUT_0()        PCA_PWM1 |=  3                                //PWM0一直输出0
  512. #define                PWM1_OUT_1()        PCA_PWM1 &= ~3, CCAP1H = 0;        //PWM1一直输出1

  513. #define                PWM2_NORMAL()        PCA_PWM2 &= ~3                                //PWM1正常输出(默认)
  514. #define                PWM2_OUT_0()        PCA_PWM2 |=  3                                //PWM2一直输出0
  515. #define                PWM2_OUT_1()        PCA_PWM2 &= ~3, CCAP2H = 0;        //PWM2一直输出1


  516. //                                                7     6     5     4     3     2     1     0     Reset Value
  517. //sfr CCON   = 0xD8;        CF    CR    -     -     -    CCF2  CCF1  CCF0   00xx,xx00        //PCA 控制寄存器。
  518. sbit CCF0  = CCON^0;        //PCA 模块0中断标志,由硬件置位,必须由软件清0。
  519. sbit CCF1  = CCON^1;        //PCA 模块1中断标志,由硬件置位,必须由软件清0。
  520. sbit CCF2  = CCON^2;        //PCA 模块2中断标志,由硬件置位,必须由软件清0。
  521. sbit CR    = CCON^6;        //1: 允许PCA计数器计数,必须由软件清0。
  522. sbit CF    = CCON^7;        //PCA计数器溢出(CH,CL由FFFFH变为0000H)标志。PCA计数器溢出后由硬件置位,必须由软件清0。

  523. //                                         7     6     5     4     3     2     1     0    Reset Value
  524. //sfr CMOD  = 0xD9;        CIDL   -     -     -   CPS2   CPS1  CPS0  ECF   0xxx,0000        //PCA 工作模式寄存器。
  525. #define PCA_IDLE_OFF()                CMOD |=  (1<<7)                                //IDLE状态PCA停止计数。
  526. #define PCA_IDLE_ON()                CMOD &= ~(1<<7)                                //IDLE状态PCA继续计数。
  527. #define PCA_CLK_12T()                CMOD &= ~0x0E                                //PCA计数脉冲选择外部晶振/12。        fosc/12
  528. #define PCA_CLK_2T()                CMOD = (CMOD & ~0x0E) + 2        //PCA计数脉冲选择外部晶振/2。        fosc/2
  529. #define PCA_CLK_T0()                CMOD = (CMOD & ~0x0E) + 4        //PCA计数脉冲选择Timer0中断,Timer0可通过AUXR寄存器设置成工作在12T或1T模式。
  530. #define PCA_CLK_ECI()                CMOD = (CMOD & ~0x0E) + 6        //PCA计数脉冲选择从ECI/P3.4脚输入的外部时钟,最大 fosc/2。
  531. #define PCA_CLK_1T()                CMOD = (CMOD & ~0x0E) + 8        //PCA计数脉冲选择外部晶振。                Fosc/1
  532. #define PCA_CLK_4T()                CMOD = (CMOD & ~0x0E) + 10        //PCA计数脉冲选择外部晶振/4。        Fosc/4
  533. #define PCA_CLK_6T()                CMOD = (CMOD & ~0x0E) + 12        //PCA计数脉冲选择外部晶振/6。        Fosc/6
  534. #define PCA_CLK_8T()                CMOD = (CMOD & ~0x0E) + 14        //PCA计数脉冲选择外部晶振/8。        Fosc/8
  535. #define PCA_INT_ENABLE()        CMOD |=  1                                        //PCA计数器溢出中断允许位,1---允许CF(CCON.7)产生中断。
  536. #define PCA_INT_DISABLE()        CMOD &= ~1                                        //PCA计数器溢出中断禁止。

  537. //                                            7      6       5        4       3       2       1      0    Reset Value
  538. //sfr AUXR1 = 0xA2;          S1_S1  S1_S0  CCP_S1   CCP_S0  SPI_S1   SPI_S0    -     DPS   0100,0000        //Auxiliary Register 1

  539. #define                PCA_USE_P12P11P10P37()        AUXR1 &= ~0x30                //将PCA/PWM切换到P12(ECI) P11(CCP0) P10(CCP1) P37(CCP2)(上电默认)。
  540. #define                PCA_USE_P34P35P36P37()        AUXR1 = (AUXR1 & ~0x30) | 0x10        //将PCA/PWM切换到P34(ECI) P35(CCP0) P36(CCP1) P37(CCP2)。
  541. #define                PCA_USE_P24P25P26P27()        AUXR1 = (AUXR1 & ~0x30) | 0x20        //将PCA/PWM切换到P24(ECI) P25(CCP0) P26(CCP1) P27(CCP2)。

  542. #define                DPS_SEL1()                AUXR1 |=  1                //1:选择DPTR1。
  543. #define                DPS_SEL0()                AUXR1 &= ~1                //0:选择DPTR0(上电默认)。


  544. /*                                                                        7     6      5      4     3     2     1     0     Reset Value
  545. //sfr CCAPM0 = 0xDA;        PWM 寄存器  -   ECOM0  CAPP0  CAPN0  MAT0  TOG0  PWM0  ECCF0   x000,0000        //PCA 模块0
  546. //sfr CCAPM1 = 0xDB;        PWM 寄存器  -   ECOM1  CAPP1  CAPN1  MAT1  TOG1  PWM1  ECCF1   x000,0000        //PCA 模块1
  547. //sfr CCAPM2 = 0xDC;        PWM 寄存器  -   ECOM2  CAPP2  CAPN2  MAT2  TOG2  PWM2  ECCF2   x000,0000        //PCA 模块2
  548. ;ECOMn = 1:        允许比较功能。
  549. ;CAPPn = 1:        允许上升沿触发捕捉功能。
  550. ;CAPNn = 1:        允许下降沿触发捕捉功能。
  551. ;MATn  = 1:        当匹配情况发生时,允许CCON中的CCFn置位。
  552. ;TOGn  = 1:        当匹配情况发生时,CEXn将翻转。(CEX0/PCA0/PWM0/P3.7,CEX1/PCA1/PWM1/P3.5)
  553. ;PWMn  = 1:        将CEXn设置为PWM输出。
  554. ;ECCFn = 1:        允许CCON中的CCFn触发中断。
  555. ;ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn
  556. ;  0     0     0    0    0    0     0                00H        未启用任何功能。
  557. ;  x     1     0    0    0    0     x                 20H        16位CEXn上升沿触发捕捉功能。
  558. ;  x     0     1    0    0    0     x                 10H        16位CEXn下降沿触发捕捉功能。
  559. ;  x     1     1    0    0    0     x                 30H        16位CEXn/PCAn边沿(上、下沿)触发捕捉功能。
  560. ;  1     0     0    1    0    0     x                 48H        16位软件定时器。
  561. ;  1     0     0    1    1    0     x                 4CH        16位高速脉冲输出。
  562. ;  1     0     0    0    0    1     0                42H        8位PWM。无中断
  563. ;  1     1     0    0    0    1     1                63H        8位PWM。低变高可产生中断
  564. ;  1     0     1    0    0    1     1                53H        8位PWM。高变低可产生中断
  565. ;  1     1     1    0    0    1     1                73H        8位PWM。低变高或高变低均可产生中断
  566. ;*******************************************************************
  567. ;*******************************************************************/
  568. #define                PCA0_none()                                CCAPM0 = 0
  569. #define                PCA0_PWM(nbit)                        CCAPM0 = 0x42,PCA_PWM0 = (PCA_PWM0 & 0x0c) | ((8-nbit)<<6)
  570. #define                PCA0_PWM_rise_int(nbit) CCAPM0 = 0x63,PCA_PWM0 = (PCA_PWM0 & 0x0c) | ((8-nbit)<<6)
  571. #define                PCA0_PWM_fall_int(nbit) CCAPM0 = 0x53,PCA_PWM0 = (PCA_PWM0 & 0x0c) | ((8-nbit)<<6)
  572. #define                PCA0_PWM_edge_int(nbit) CCAPM0 = 0x73,PCA_PWM0 = (PCA_PWM0 & 0x0c) | ((8-nbit)<<6)
  573. #define                PCA0_capture_rise()                CCAPM0 = (0x20 + 1)
  574. #define                PCA0_capture_fall()                CCAPM0 = (0x10 + 1)
  575. #define                PCA0_capture_edge()                CCAPM0 = (0x30 + 1)
  576. #define                PCA0_16bit_Timer()                CCAPM0 = (0x48 + 1)
  577. #define                PCA0_High_Pulse()                CCAPM0 = (0x4C + 1)

  578. #define                PCA1_none()                                CCAPM1 = 0
  579. #define                PCA1_PWM(nbit)                        CCAPM1 = 0x42,PCA_PWM1 = (PCA_PWM1 & 0x0c) | ((8-nbit)<<6)
  580. #define                PCA1_PWM_rise_int(nbit) CCAPM1 = 0x63,PCA_PWM1 = (PCA_PWM1 & 0x0c) | ((8-nbit)<<6)
  581. #define                PCA1_PWM_fall_int(nbit) CCAPM1 = 0x53,PCA_PWM1 = (PCA_PWM1 & 0x0c) | ((8-nbit)<<6)
  582. #define                PCA1_PWM_edge_int(nbit) CCAPM1 = 0x73,PCA_PWM1 = (PCA_PWM1 & 0x0c) | ((8-nbit)<<6)
  583. #define                PCA1_capture_rise()                CCAPM1 = (0x20 + 1)
  584. #define                PCA1_capture_fall()                CCAPM1 = (0x10 + 1)
  585. #define                PCA1_capture_edge()                CCAPM1 = (0x30 + 1)
  586. #define                PCA1_16bit_Timer()                CCAPM1 = (0x48 + 1)
  587. #define                PCA1_High_Pulse()                CCAPM1 = (0x4C + 1)

  588. #define                PCA2_none()                                CCAPM2 = 0
  589. #define                PCA2_PWM(nbit)                        CCAPM2 = 0x42,PCA_PWM2 = (PCA_PWM2 & 0x0c) | ((8-nbit)<<6)
  590. #define                PCA2_PWM_rise_int(nbit) CCAPM2 = 0x63,PCA_PWM2 = (PCA_PWM2 & 0x0c) | ((8-nbit)<<6)
  591. #define                PCA2_PWM_fall_int(nbit) CCAPM2 = 0x53,PCA_PWM2 = (PCA_PWM2 & 0x0c) | ((8-nbit)<<6)
  592. #define                PCA2_PWM_edge_int(nbit) CCAPM2 = 0x73,PCA_PWM2 = (PCA_PWM2 & 0x0c) | ((8-nbit)<<6)
  593. #define                PCA2_capture_rise()                CCAPM2 = (0x20 + 1)
  594. #define                PCA2_capture_fall()                CCAPM2 = (0x10 + 1)
  595. #define                PCA2_capture_edge()                CCAPM2 = (0x30 + 1)
  596. #define                PCA2_16bit_Timer()                CCAPM2 = (0x48 + 1)
  597. #define                PCA2_High_Pulse()                CCAPM2 = (0x4C + 1)

  598. /* Above is STC additional SFR or change */




  599. /**********************************************************/
  600. typedef         unsigned char        u8;
  601. typedef         unsigned int        u16;
  602. typedef         unsigned long        u32;

  603. /**********************************************************/
  604. #define NOP1()  _nop_()
  605. #define NOP2()  NOP1(),NOP1()
  606. #define NOP3()  NOP2(),NOP1()
  607. #define NOP4()  NOP3(),NOP1()
  608. #define NOP5()  NOP4(),NOP1()
  609. #define NOP6()  NOP5(),NOP1()
  610. #define NOP7()  NOP6(),NOP1()
  611. #define NOP8()  NOP7(),NOP1()
  612. #define NOP9()  NOP8(),NOP1()
  613. #define NOP10() NOP9(),NOP1()
  614. #define NOP11() NOP10(),NOP1()
  615. #define NOP12() NOP11(),NOP1()
  616. #define NOP13() NOP12(),NOP1()
  617. #define NOP14() NOP13(),NOP1()
  618. #define NOP15() NOP14(),NOP1()
  619. #define NOP16() NOP15(),NOP1()
  620. #define NOP17() NOP16(),NOP1()
  621. #define NOP18() NOP17(),NOP1()
  622. #define NOP19() NOP18(),NOP1()
  623. #define NOP20() NOP19(),NOP1()
  624. #define NOP21() NOP20(),NOP1()
  625. #define NOP22() NOP21(),NOP1()
  626. #define NOP23() NOP22(),NOP1()
  627. #define NOP24() NOP23(),NOP1()
  628. #define NOP25() NOP24(),NOP1()
  629. #define NOP26() NOP25(),NOP1()
  630. #define NOP27() NOP26(),NOP1()
  631. #define NOP28() NOP27(),NOP1()
  632. #define NOP29() NOP28(),NOP1()
  633. #define NOP30() NOP29(),NOP1()
  634. #define NOP31() NOP30(),NOP1()
  635. #define NOP32() NOP31(),NOP1()
  636. #define NOP33() NOP32(),NOP1()
  637. #define NOP34() NOP33(),NOP1()
  638. #define NOP35() NOP34(),NOP1()
  639. #define NOP36() NOP35(),NOP1()
  640. #define NOP37() NOP36(),NOP1()
  641. #define NOP38() NOP37(),NOP1()
  642. #define NOP39() NOP38(),NOP1()
  643. #define NOP40() NOP39(),NOP1()
  644. #define NOP(N)  NOP##N()


  645. /**********************************************/


  646. /****************************************************************/


  647. //sfr INT_CLKO = 0x8F;        //附加的 SFR WAKE_CLKO (地址:0x8F)
  648. /*
  649.     7   6    5    4   3     2        1       0         Reset Value
  650.     -  EX4  EX3  EX2  -   T2CLKO   T1CLKO  T0CLKO      0000,0000B
  651. b6 -  EX4      : 外中断INT4允许
  652. b5 -  EX3      : 外中断INT3允许
  653. b4 -  EX2      : 外中断INT2允许
  654. b2 - T1CLKO    : 允许 T2 溢出脉冲在P3.0脚输出,Fck1 = 1/2 T1 溢出率
  655. b1 - T1CLKO    : 允许 T1 溢出脉冲在P3.4脚输出,Fck1 = 1/2 T1 溢出率
  656. b0 - T0CLKO    : 允许 T0 溢出脉冲在P3.5脚输出,Fck0 = 1/2 T0 溢出率
  657. */

  658. #define                LVD_InterruptEnable()                ELVD = 1
  659. #define                LVD_InterruptDisable()                ELVD = 0


  660. //sfr WKTCL = 0xAA;        //STC11F\10和STC15系列 唤醒定时器低字节
  661. //sfr WKTCH = 0xAB;        //STC11F\10和STC15系列 唤醒定时器高字节
  662. //        B7                B6        B5        B4        B3        B2        B1        B0                B7        B6        B5        B4        B3        B2        B1        B0
  663. //        WKTEN                                S11        S10        S9        S8                S7        S6        S5        S4        S3        S2        S1        S0        n * 560us
  664. #define                WakeTimerDisable()                WKTCH &= 0x7f        //WKTEN = 0                禁止睡眠唤醒定时器
  665. #define                WakeTimerSet(scale)                WKTCL = (scale) % 256,WKTCH = (scale) / 256 | 0x80        //WKTEN = 1        允许睡眠唤醒定时器


  666. //sfr CLK_DIV = 0x97; //Clock Divder 系统时钟分频  -     -      -       -     -  CLKS2 CLKS1 CLKS0 xxxx,x000
  667. #define                SYSTEM_CLK_1T()                CLK_DIV &= ~0x07        //default
  668. #define                SYSTEM_CLK_2T()                CLK_DIV = (CLK_DIV & ~0x07) | 1
  669. #define                SYSTEM_CLK_4T()                CLK_DIV = (CLK_DIV & ~0x07) | 2
  670. #define                SYSTEM_CLK_8T()                CLK_DIV = (CLK_DIV & ~0x07) | 3
  671. #define                SYSTEM_CLK_16T()        CLK_DIV = (CLK_DIV & ~0x07) | 4
  672. #define                SYSTEM_CLK_32T()        CLK_DIV = (CLK_DIV & ~0x07) | 5
  673. #define                SYSTEM_CLK_64T()        CLK_DIV = (CLK_DIV & ~0x07) | 6
  674. #define                SYSTEM_CLK_128T()        CLK_DIV =  CLK_DIV          | 7

  675. #define                MCLKO_P54_None()        CLK_DIV &= ~0xc0                                        //主时钟不输出
  676. #define                MCLKO_P54_DIV1()        CLK_DIV  = (CLK_DIV & ~0xc0) | 0x40        //主时钟不分频输出
  677. #define                MCLKO_P54_DIV2()        CLK_DIV  = (CLK_DIV & ~0xc0) | 0x80        //主时钟2分频输出
  678. #define                MCLKO_P54_DIV4()        CLK_DIV  =  CLK_DIV | 0xc0                        //主时钟4分频输出

  679. #define                MCLKO_P34_None()        CLK_DIV &= ~0xc0                                        //主时钟不输出
  680. #define                MCLKO_P34_DIV1()        CLK_DIV  = (CLK_DIV & ~0xc0) | 0x40        //主时钟不分频输出
  681. #define                MCLKO_P34_DIV2()        CLK_DIV  = (CLK_DIV & ~0xc0) | 0x80        //主时钟2分频输出
  682. #define                MCLKO_P34_DIV4()        CLK_DIV  =  CLK_DIV | 0xc0                        //主时钟4分频输出

  683. //sfr BUS_SPEED = 0xA1; //Stretch register      -   -  -  -   -   -  EXRTS1  EXRTSS0 xxxx,xx10
  684. #define                BUS_SPEED_1T()        BUS_SPEED = 0
  685. #define                BUS_SPEED_2T()        BUS_SPEED = 1
  686. #define                BUS_SPEED_4T()        BUS_SPEED = 2
  687. #define                BUS_SPEED_8T()        BUS_SPEED = 3

  688. /*   interrupt vector */
  689. #define                INT0_VECTOR                0
  690. #define                TIMER0_VECTOR        1
  691. #define                INT1_VECTOR                2
  692. #define                TIMER1_VECTOR        3
  693. #define                UART1_VECTOR        4
  694. #define                ADC_VECTOR                5
  695. #define                LVD_VECTOR                6
  696. #define                PCA_VECTOR                7
  697. #define                UART2_VECTOR        8
  698. #define                SPI_VECTOR                9
  699. #define                INT2_VECTOR                10
  700. #define                INT3_VECTOR                11
  701. #define                TIMER2_VECTOR        12
  702. #define                INT4_VECTOR                16
  703. #define                UART3_VECTOR        17
  704. #define                UART4_VECTOR        18
  705. #define                TIMER3_VECTOR        19
  706. #define                TIMER4_VECTOR        20


  707. #define        TRUE        1
  708. #define        FALSE        0

  709. //=============================================================

  710. //========================================

  711. #define        PolityLow                        0        //低优先级中断
  712. #define        PolityHigh                        1        //高优先级中断

  713. //========================================

  714. #define                MCLKO_None        0
  715. #define                MCLKO_DIV1        1
  716. #define                MCLKO_DIV2        2
  717. #define                MCLKO_DIV4        3

  718. #define                ENABLE                1
  719. #define                DISABLE                0

  720. #define                STC15F_L2K08S2        8
  721. #define                STC15F_L2K16S2        16
  722. #define                STC15F_L2K24S2        24
  723. #define                STC15F_L2K32S2        32
  724. #define                STC15F_L2K40S2        40
  725. #define                STC15F_L2K48S2        48
  726. #define                STC15F_L2K56S2        56
  727. #define                STC15F_L2K60S2        60
  728. #define                IAP15F_L2K61S2        61

  729. #endif
复制代码

STC15Fxxxx.zip

8.54 KB, 下载次数: 17

回复

使用道具 举报

板凳
ID:213173 发表于 2018-8-7 07:41 | 只看该作者
把这个头文件放在你的工程文件中试试。
STC15F2K60S2.zip (3.02 KB, 下载次数: 42)
回复

使用道具 举报

地板
ID:202598 发表于 2018-8-7 11:21 | 只看该作者
wulin 发表于 2018-8-7 07:41
把这个头文件放在你的工程文件中试试。

你好我用的是51单片机,加入这个头文件之后出现
MIAN.C(108): error C202: 'S2TI': undefined identifier
MIAN.C(109): error C202: 'S2TI': undefined identifier
MIAN.C(128): error C202: 'S2RI': undefined identifier
MIAN.C(130): error C202: 'S2RI': undefined identifier
MIAN.C(135): error C202: 'S2TI': undefined identifier
MIAN.C(137): error C202: 'S2TI': undefined identifier
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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