找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4401|回复: 6
收起左侧

STC15F104W单片机的头文件哪里下载?

[复制链接]
ID:431607 发表于 2018-11-23 09:31 | 显示全部楼层 |阅读模式
STC15F104W头文件哪里下。
回复

使用道具 举报

ID:23606 发表于 2018-11-23 15:41 | 显示全部楼层
STC的下载软件里面就有
回复

使用道具 举报

ID:111517 发表于 2018-11-23 21:21 | 显示全部楼层
在stc-isp这里
捕获.PNG


回复

使用道具 举报

ID:313421 发表于 2018-11-23 22:45 | 显示全部楼层
楼上正解
回复

使用道具 举报

ID:155507 发表于 2018-11-24 10:28 | 显示全部楼层

  1. /*------------------------------------------------------------------*/
  2. /* --- STC MCU International Limited -------------------------------*/
  3. /* --- STC 1T Series MCU RC Demo -----------------------------------*/
  4. /* --- Mobile: (86)13922805190 -------------------------------------*/
  5. /* --- Fax: 86-0513-55012956,55012947,55012969 ---------------------*/
  6. /* --- Tel: 86-0513-55012928,55012929,55012966 ---------------------*/
  7. /* --- Web: www.GXWMCU.com -----------------------------------------*/
  8. /* --- QQ:  800003751 ----------------------------------------------*/
  9. /* If you want to use the program or the program referenced in the  */
  10. /* article, please specify in which data and procedures from STC    */
  11. /*------------------------------------------------------------------*/



  12. #ifndef        _STC15Fxxxx_H
  13. #define        _STC15Fxxxx_H

  14. #include <intrins.h>

  15. /*  BYTE Registers  */
  16. sfr P0   = 0x80;
  17. sfr SP   = 0x81;
  18. sfr DPL  = 0x82;
  19. sfr DPH  = 0x83;
  20. sfr        S4CON = 0x84;
  21. sfr        S4BUF = 0x85;
  22. sfr PCON = 0x87;

  23. sfr TCON = 0x88;
  24. sfr TMOD = 0x89;
  25. sfr TL0  = 0x8A;
  26. sfr TL1  = 0x8B;
  27. sfr TH0  = 0x8C;
  28. sfr TH1  = 0x8D;
  29. sfr        AUXR = 0x8E;
  30. sfr WAKE_CLKO = 0x8F;
  31. sfr INT_CLKO = 0x8F;
  32. sfr        AUXR2    = 0x8F;

  33. sfr RL_TL0  = 0x8A;
  34. sfr RL_TL1  = 0x8B;
  35. sfr RL_TH0  = 0x8C;
  36. sfr RL_TH1  = 0x8D;


  37. sfr P1   = 0x90;
  38. sfr P1M1 = 0x91;        //P1M1.n,P1M0.n         =00--->Standard,        01--->push-pull                实际上1T的都一样
  39. sfr P1M0 = 0x92;        //                                        =10--->pure input,        11--->open drain
  40. sfr P0M1 = 0x93;        //P0M1.n,P0M0.n         =00--->Standard,        01--->push-pull
  41. sfr P0M0 = 0x94;        //                                        =10--->pure input,        11--->open drain
  42. sfr P2M1 = 0x95;        //P2M1.n,P2M0.n         =00--->Standard,        01--->push-pull
  43. sfr P2M0 = 0x96;        //                                        =10--->pure input,        11--->open drain
  44. sfr CLK_DIV = 0x97;
  45. sfr PCON2   = 0x97;

  46. sfr SCON  = 0x98;
  47. sfr SBUF  = 0x99;
  48. sfr S2CON = 0x9A;        //
  49. sfr S2BUF = 0x9B;        //
  50. sfr P1ASF = 0x9D;        //只写,模拟输入(AD或LVD)选择

  51. sfr P2    = 0xA0;
  52. sfr BUS_SPEED = 0xA1;
  53. sfr AUXR1 = 0xA2;
  54. sfr P_SW1 = 0xA2;

  55. sfr IE    = 0xA8;
  56. sfr SADDR = 0xA9;
  57. sfr WKTCL = 0xAA;        //唤醒定时器低字节
  58. sfr WKTCH = 0xAB;        //唤醒定时器高字节
  59. sfr        S3CON = 0xAC;
  60. sfr S3BUF = 0xAD;
  61. sfr IE2   = 0xAF;        //STC12C5A60S2系列

  62. sfr P3    = 0xB0;
  63. sfr P3M1  = 0xB1;        //P3M1.n,P3M0.n         =00--->Standard,        01--->push-pull
  64. sfr P3M0  = 0xB2;        //                                        =10--->pure input,        11--->open drain
  65. sfr P4M1  = 0xB3;        //P4M1.n,P4M0.n         =00--->Standard,        01--->push-pull
  66. sfr P4M0  = 0xB4;        //                                        =10--->pure input,        11--->open drain
  67. sfr IP2   = 0xB5;        //STC12C5A60S2系列
  68. sfr IPH2  = 0xB6;        //STC12C5A60S2系列
  69. sfr IPH   = 0xB7;

  70. sfr IP        = 0xB8;
  71. sfr SADEN     = 0xB9;
  72. sfr        P_SW2     = 0xBA;
  73. sfr ADC_CONTR = 0xBC;        //带AD系列
  74. sfr ADC_RES   = 0xBD;        //带AD系列
  75. sfr ADC_RESL  = 0xBE;        //带AD系列

  76. sfr P4        = 0xC0;
  77. sfr WDT_CONTR = 0xC1;
  78. sfr IAP_DATA  = 0xC2;
  79. sfr IAP_ADDRH = 0xC3;
  80. sfr IAP_ADDRL = 0xC4;
  81. sfr IAP_CMD   = 0xC5;
  82. sfr IAP_TRIG  = 0xC6;
  83. sfr IAP_CONTR = 0xC7;

  84. sfr ISP_DATA  = 0xC2;
  85. sfr ISP_ADDRH = 0xC3;
  86. sfr ISP_ADDRL = 0xC4;
  87. sfr ISP_CMD   = 0xC5;
  88. sfr ISP_TRIG  = 0xC6;
  89. sfr ISP_CONTR = 0xC7;

  90. sfr P5     = 0xC8;        //
  91. sfr P5M1   = 0xC9;        //        P5M1.n,P5M0.n         =00--->Standard,        01--->push-pull
  92. sfr P5M0   = 0xCA;        //                                        =10--->pure input,        11--->open drain
  93. sfr P6M1   = 0xCB;        //        P5M1.n,P5M0.n         =00--->Standard,        01--->push-pull
  94. sfr P6M0   = 0xCC;        //                                        =10--->pure input,        11--->open drain
  95. sfr SPSTAT = 0xCD;        //
  96. sfr SPCTL  = 0xCE;        //
  97. sfr SPDAT  = 0xCF;        //

  98. sfr PSW  = 0xD0;
  99. sfr        T4T3M = 0xD1;
  100. sfr        T4H  = 0xD2;
  101. sfr        T4L  = 0xD3;
  102. sfr        T3H  = 0xD4;
  103. sfr        T3L  = 0xD5;
  104. sfr        T2H  = 0xD6;
  105. sfr        T2L  = 0xD7;

  106. sfr        TH4  = 0xD2;
  107. sfr        TL4  = 0xD3;
  108. sfr        TH3  = 0xD4;
  109. sfr        TL3  = 0xD5;
  110. sfr        TH2  = 0xD6;
  111. sfr        TL2  = 0xD7;

  112. sfr        RL_T4H  = 0xD2;
  113. sfr        RL_T4L  = 0xD3;
  114. sfr        RL_T3H  = 0xD4;
  115. sfr        RL_T3L  = 0xD5;
  116. sfr        RL_T2H  = 0xD6;
  117. sfr        RL_T2L  = 0xD7;

  118. sfr CCON = 0xD8;        //
  119. sfr CMOD = 0xD9;        //
  120. sfr CCAPM0 = 0xDA;        //PCA模块0的工作模式寄存器。
  121. sfr CCAPM1 = 0xDB;        //PCA模块1的工作模式寄存器。
  122. sfr CCAPM2 = 0xDC;        //PCA模块2的工作模式寄存器。

  123. sfr ACC    = 0xE0;
  124. sfr        P7M1   = 0xE1;
  125. sfr        P7M0   = 0xE2;
  126. sfr        CMPCR1 = 0xE6;
  127. sfr        CMPCR2 = 0xE7;

  128. sfr        P6     = 0xE8;
  129. sfr CL     = 0xE9;        //
  130. sfr CCAP0L = 0xEA;        //PCA模块0的捕捉/比较寄存器低8位。
  131. sfr CCAP1L = 0xEB;        //PCA模块1的捕捉/比较寄存器低8位。
  132. sfr CCAP2L = 0xEC;        //PCA模块2的捕捉/比较寄存器低8位。

  133. sfr B      = 0xF0;
  134. sfr        PWMCFG   = 0xF1;        //PWM配置寄存器
  135. sfr PCA_PWM0 = 0xF2;        //PCA模块0 PWM寄存器。
  136. sfr PCA_PWM1 = 0xF3;        //PCA模块1 PWM寄存器。
  137. sfr PCA_PWM2 = 0xF4;        //PCA模块2 PWM寄存器。
  138. sfr        PWMCR    = 0xF5;        //PWM控制寄存器
  139. sfr        PWMIF    = 0xF6;        //PWM中断标志寄存器
  140. sfr        PWMFDCR  = 0xF7;        //PWM外部异常控制寄存器

  141. sfr        P7     = 0xF8;
  142. sfr CH     = 0xF9;
  143. sfr CCAP0H = 0xFA;                //PCA模块0的捕捉/比较寄存器高8位。
  144. sfr CCAP1H = 0xFB;                //PCA模块1的捕捉/比较寄存器高8位。
  145. sfr CCAP2H = 0xFC;                //PCA模块2的捕捉/比较寄存器高8位。

  146. #define        PWMCH        0xFFF0        /* PWM计数器高字节  */
  147. #define        PWMCL        0xFFF1        /* PWM计数器低字节  */
  148. #define        PWMCKS        0xFFF2        /* PWM时钟选择      */

  149. #define        PWM2T1H        0xFF00        /* PWM2T1计数高字节 */
  150. #define        PWM2T1L        0xFF01        /* PWM2T1计数低字节 */
  151. #define        PWM2T2H        0xFF02        /* PWM2T2计数高字节 */
  152. #define        PWM2T2L        0xFF03        /* PWM2T2计数低字节 */
  153. #define        PWM2CR        0xFF04        /* PWM2控制         */

  154. #define        PWM3T1H        0xFF10        /* PWM3T1计数高字节 */
  155. #define        PWM3T1L        0xFF11        /* PWM3T1计数低字节 */
  156. #define        PWM3T2H        0xFF12        /* PWM3T2计数高字节 */
  157. #define        PWM3T2L        0xFF13        /* PWM3T2计数低字节 */
  158. #define        PWM3CR        0xFF14        /* PWM3控制         */

  159. #define        PWM4T1H        0xFF20        /* PWM4T1计数高字节 */
  160. #define        PWM4T1L        0xFF21        /* PWM4T1计数低字节 */
  161. #define        PWM4T2H        0xFF22        /* PWM4T2计数高字节 */
  162. #define        PWM4T2L        0xFF23        /* PWM4T2计数低字节 */
  163. #define        PWM4CR        0xFF24        /* PWM4控制         */

  164. #define        PWM5T1H        0xFF30        /* PWM5T1计数高字节 */
  165. #define        PWM5T1L        0xFF31        /* PWM5T1计数低字节 */
  166. #define        PWM5T2H        0xFF32        /* PWM5T2计数高字节 */
  167. #define        PWM5T2L        0xFF33        /* PWM5T2计数低字节 */
  168. #define        PWM5CR        0xFF34        /* PWM5控制         */

  169. #define        PWM6T1H        0xFF40        /* PWM6T1计数高字节 */
  170. #define        PWM6T1L        0xFF41        /* PWM6T1计数低字节 */
  171. #define        PWM6T2H        0xFF42        /* PWM6T2计数高字节 */
  172. #define        PWM6T2L        0xFF43        /* PWM6T2计数低字节 */
  173. #define        PWM6CR        0xFF44        /* PWM6控制         */

  174. #define        PWM7T1H        0xFF50        /* PWM7T1计数高字节 */
  175. #define        PWM7T1L        0xFF51        /* PWM7T1计数低字节 */
  176. #define        PWM7T2H        0xFF52        /* PWM7T2计数高字节 */
  177. #define        PWM7T2L        0xFF53        /* PWM7T2计数低字节 */
  178. #define        PWM7CR        0xFF54        /* PWM7控制         */

  179. #define        PWM2_ID                0
  180. #define        PWM3_ID                1
  181. #define        PWM4_ID                2
  182. #define        PWM5_ID                3
  183. #define        PWM6_ID                4
  184. #define        PWM7_ID                5

  185. #define        PwmClk_1T        0
  186. #define        PwmClk_2T        1
  187. #define        PwmClk_3T        2
  188. #define        PwmClk_4T        3
  189. #define        PwmClk_5T        4
  190. #define        PwmClk_6T        5
  191. #define        PwmClk_7T        6
  192. #define        PwmClk_8T        7
  193. #define        PwmClk_9T        8
  194. #define        PwmClk_10T        9
  195. #define        PwmClk_11T        10
  196. #define        PwmClk_12T        11
  197. #define        PwmClk_13T        12
  198. #define        PwmClk_14T        13
  199. #define        PwmClk_15T        14
  200. #define        PwmClk_16T        15
  201. #define        PwmClk_T2        16

  202. //                    7   6   5   4     3        2       1        0      Reset Value
  203. //PWMnCR:  PWMn控制   -   -   -   -   PWMn_PS  EPWMnI  ECnT2SI  ECnT1SI   0000,0000
  204. #define        PWMn_PS_1                0x00        /* PWM管脚选择位 */
  205. #define        PWMn_PS_2                0x08        /* PWM管脚选择位 */
  206. #define        EPWMnI_Enable        0x04        /* 允许PWM中断   */
  207. #define        ECnT2SI_Enable        0x02        /* 允许T2翻转时中断 */
  208. #define        ECnT1SI_Enable        0x01        /* 允许T1翻转时中断 */

  209. #define        PWM2_P37        0x00
  210. #define        PWM2_P27        0x08
  211. #define        PWM3_P21        0x00
  212. #define        PWM3_P45        0x08
  213. #define        PWM4_P22        0x00
  214. #define        PWM4_P44        0x08
  215. #define        PWM5_P23        0x00
  216. #define        PWM5_P42        0x08
  217. #define        PWM6_P16        0x00
  218. #define        PWM6_P07        0x08
  219. #define        PWM7_P17        0x00
  220. #define        PWM7_P06        0x08

  221. #define        EAXSFR()                P_SW2 |=  0x80        /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
  222. #define        EAXRAM()                P_SW2 &= ~0x80        /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */
  223. #define        C2INI        0x01        /* PWM输出端口的初始电平为高电平 */
  224. #define        C3INI        0x02
  225. #define        C4INI        0x04
  226. #define        C5INI        0x08
  227. #define        C6INI        0x10
  228. #define        C7INI        0x20
  229. #define        CBTADC        0x40        /* PWM计数器归零时自动触发ADC转换。(注:前提条件是PWM和ADC必须被使能,即ENPWM==1,且ADCON==1) */

  230. #define        ENPWM        0x80        /* 使能PWM波形发生器,PWM计数器开始计数 */
  231. #define        ECBI        0x40        /* 使能PWM计数器归零中断 */
  232. #define        ENC7O        0x20        /* 相应PWM通道的端口设置为PWM输出口,受PWM波形发生器控制 */
  233. #define        ENC6O        0x10
  234. #define        ENC5O        0x08
  235. #define        ENC4O        0x04
  236. #define        ENC3O        0x02
  237. #define        ENC2O        0x01
  238. #define        PWM_Enable()        PWMCR |=  0x80        /* 使能PWM波形发生器,PWM计数器开始计数 */
  239. #define        PWM_Disable()        PWMCR &= ~0x80        /* 关闭PWM波形发生器 */

  240. #define        CBIF        0x40        /* PWM计数器归零中断标志位 */
  241. #define        C7IF        0x20
  242. #define        C6IF        0x10        /* 第n通道的PWM中断标志位 */
  243. #define        C5IF        0x08
  244. #define        C4IF        0x04
  245. #define        C3IF        0x02
  246. #define        C2IF        0x01

  247. #define        ENFD                0x20        /* 使能PWM的外部异常检测功 */
  248. #define        FLTFLIO                0x10        /* 发生WM外部异常时,PWM的输出口立即被设置为高阻输入模式。(注:只有ENCnO==1所对应的端口才会被强制悬空) */
  249. #define        EFDI                0x08        /* 使能PWM异常检测中断 */
  250. #define        FDCMP                0x04        /* 当比较器的输出由低变高时,触发PWM异常 */
  251. #define        FDIO                0x02        /* 当P2.4的电平由低变高时,触发PWM异常 */
  252. #define        FDIF                0x01        /* 当发生PWM异常(比较器的输出由低变高或者P2.4的电平由低变高)时,硬件自动将此位置1, 并置位中断标志.需要软件清零 */
  253. #define        PWM_FaultDetect_Enable()        PWMFDCR |=  0x20                /* 使能PWM的外部异常检测功能 */
  254. #define        PWM_FaultDetect_Disable()        PWMFDCR &= ~0x20                /* 禁止PWM的外部异常检测功能 */


  255. /*  BIT Registers  */
  256. /*  PSW   */
  257. sbit CY   = PSW^7;
  258. sbit AC   = PSW^6;
  259. sbit F0   = PSW^5;
  260. sbit RS1  = PSW^4;
  261. sbit RS0  = PSW^3;
  262. sbit OV   = PSW^2;
  263. sbit F1   = PSW^1;
  264. sbit P    = PSW^0;

  265. /*  TCON  */
  266. sbit TF1  = TCON^7;        //定时器1溢出中断标志位
  267. sbit TR1  = TCON^6;        //定时器1运行控制位
  268. sbit TF0  = TCON^5;        //定时器0溢出中断标志位
  269. sbit TR0  = TCON^4;        //定时器0运行控制位
  270. sbit IE1  = TCON^3;        //外中断1标志位
  271. sbit IT1  = TCON^2;        //外中断1信号方式控制位,1:下降沿中断,0:上升下降均中断。
  272. sbit IE0  = TCON^1;        //外中断0标志位
  273. sbit IT0  = TCON^0;        //外中断0信号方式控制位,1:下降沿中断,0:上升下降均中断。

  274. /*  P0  */
  275. sbit  P00 = P0^0;
  276. sbit  P01 = P0^1;
  277. sbit  P02 = P0^2;
  278. sbit  P03 = P0^3;
  279. sbit  P04 = P0^4;
  280. sbit  P05 = P0^5;
  281. sbit  P06 = P0^6;
  282. sbit  P07 = P0^7;

  283. /*  P1  */
  284. sbit  P10 = P1^0;
  285. sbit  P11 = P1^1;
  286. sbit  P12 = P1^2;
  287. sbit  P13 = P1^3;
  288. sbit  P14 = P1^4;
  289. sbit  P15 = P1^5;
  290. sbit  P16 = P1^6;
  291. sbit  P17 = P1^7;

  292. sbit  RXD2      = P1^0;
  293. sbit  TXD2      = P1^1;
  294. sbit  CCP1      = P1^0;
  295. sbit  CCP0      = P1^1;
  296. sbit  SPI_SS    = P1^2;
  297. sbit  SPI_MOSI  = P1^3;
  298. sbit  SPI_MISO  = P1^4;
  299. sbit  SPI_SCLK  = P1^5;

  300. sbit  SPI_SS_2    = P2^4;
  301. sbit  SPI_MOSI_2  = P2^3;
  302. sbit  SPI_MISO_2  = P2^2;
  303. sbit  SPI_SCLK_2  = P2^1;

  304. sbit  SPI_SS_3    = P5^4;
  305. sbit  SPI_MOSI_3  = P4^0;
  306. sbit  SPI_MISO_3  = P4^1;
  307. sbit  SPI_SCLK_3  = P4^3;

  308. /*  P2  */
  309. sbit  P20 = P2^0;
  310. sbit  P21 = P2^1;
  311. sbit  P22 = P2^2;
  312. sbit  P23 = P2^3;
  313. sbit  P24 = P2^4;
  314. sbit  P25 = P2^5;
  315. sbit  P26 = P2^6;
  316. sbit  P27 = P2^7;

  317. /*  P3  */
  318. sbit  P30 = P3^0;
  319. sbit  P31 = P3^1;
  320. sbit  P32 = P3^2;
  321. sbit  P33 = P3^3;
  322. sbit  P34 = P3^4;
  323. sbit  P35 = P3^5;
  324. sbit  P36 = P3^6;
  325. sbit  P37 = P3^7;

  326. sbit RXD  = P3^0;
  327. sbit TXD  = P3^1;
  328. sbit INT0 = P3^2;
  329. sbit INT1 = P3^3;
  330. sbit T0   = P3^4;
  331. sbit T1   = P3^5;
  332. sbit WR   = P3^6;
  333. sbit RD   = P3^7;
  334. sbit CCP2  = P3^7;

  335. sbit CLKOUT0   = P3^5;
  336. sbit CLKOUT1   = P3^4;

  337. /*  P4  */
  338. sbit  P40 = P4^0;
  339. sbit  P41 = P4^1;
  340. sbit  P42 = P4^2;
  341. sbit  P43 = P4^3;
  342. sbit  P44 = P4^4;
  343. sbit  P45 = P4^5;
  344. sbit  P46 = P4^6;
  345. sbit  P47 = P4^7;

  346. /*  P5  */
  347. sbit  P50 = P5^0;
  348. sbit  P51 = P5^1;
  349. sbit  P52 = P5^2;
  350. sbit  P53 = P5^3;
  351. sbit  P54 = P5^4;
  352. sbit  P55 = P5^5;
  353. sbit  P56 = P5^6;
  354. sbit  P57 = P5^7;

  355. /*  P6  */
  356. sbit  P60 = P6^0;
  357. sbit  P61 = P6^1;
  358. sbit  P62 = P6^2;
  359. sbit  P63 = P6^3;
  360. sbit  P64 = P6^4;
  361. sbit  P65 = P6^5;
  362. sbit  P66 = P6^6;
  363. sbit  P67 = P6^7;

  364. /*  P7  */
  365. sbit  P70 = P7^0;
  366. sbit  P71 = P7^1;
  367. sbit  P72 = P7^2;
  368. sbit  P73 = P7^3;
  369. sbit  P74 = P7^4;
  370. sbit  P75 = P7^5;
  371. sbit  P76 = P7^6;
  372. sbit  P77 = P7^7;


  373. /*  SCON  */
  374. sbit SM0  = SCON^7;        //SM0/FE                SM0 SM1 = 00 ~ 11: 方式0~3
  375. sbit SM1  = SCON^6;        //
  376. sbit SM2  = SCON^5;        //多机通讯
  377. sbit REN  = SCON^4;        //接收允许
  378. sbit TB8  = SCON^3;        //发送数据第8位
  379. sbit RB8  = SCON^2;        //接收数据第8位
  380. sbit TI   = SCON^1;        //发送中断标志位
  381. sbit RI   = SCON^0;        //接收中断标志位

  382. /*  IE   */
  383. sbit EA   = IE^7;        //中断允许总控制位
  384. sbit ELVD = IE^6;        //低压监测中断允许位
  385. sbit EADC = IE^5;        //ADC 中断 允许位
  386. sbit ES   = IE^4;        //串行中断 允许控制位
  387. sbit ET1  = IE^3;        //定时中断1允许控制位
  388. sbit EX1  = IE^2;        //外部中断1允许控制位
  389. sbit ET0  = IE^1;        //定时中断0允许控制位
  390. sbit EX0  = IE^0;        //外部中断0允许控制位

  391. sbit ACC0 = ACC^0;
  392. sbit ACC1 = ACC^1;
  393. sbit ACC2 = ACC^2;
  394. sbit ACC3 = ACC^3;
  395. sbit ACC4 = ACC^4;
  396. sbit ACC5 = ACC^5;
  397. sbit ACC6 = ACC^6;
  398. sbit ACC7 = ACC^7;

  399. sbit B0 = B^0;
  400. sbit B1 = B^1;
  401. sbit B2 = B^2;
  402. sbit B3 = B^3;
  403. sbit B4 = B^4;
  404. sbit B5 = B^5;
  405. sbit B6 = B^6;
  406. sbit B7 = B^7;


  407. //                                                        7     6     5    4    3    2    1     0    Reset Value
  408. //sfr IE2       = 0xAF;                -     -     -    -    -    -   ESPI  ES2   0000,0000B        //Auxiliary Interrupt   
  409. #define                SPI_INT_ENABLE()                IE2 |=  2        /* 允许SPI中断                */
  410. #define                SPI_INT_DISABLE()                IE2 &= ~2        /* 允许SPI中断                */
  411. #define                UART2_INT_ENABLE()                IE2 |=  1        /* 允许串口2中断        */
  412. #define                UART2_INT_DISABLE()                IE2 &= ~1        /* 允许串口2中断        */

  413. //                                          7     6     5    4    3    2    1    0    Reset Value
  414. //sfr IP      = 0xB8; //中断优先级低位      PPCA  PLVD  PADC  PS   PT1  PX1  PT0  PX0   0000,0000
  415. //--------
  416. sbit PPCA        = IP^7;        //PCA 模块中断优先级
  417. sbit PLVD        = IP^6;        //低压监测中断优先级
  418. sbit PADC        = IP^5;        //ADC 中断优先级
  419. sbit PS           = IP^4;        //串行中断0优先级设定位
  420. sbit PT1        = IP^3;        //定时中断1优先级设定位
  421. sbit PX1        = IP^2;        //外部中断1优先级设定位
  422. sbit PT0        = IP^1;        //定时中断0优先级设定位
  423. sbit PX0        = IP^0;        //外部中断0优先级设定位

  424. //                                           7      6      5     4     3     2    1     0        Reset Value
  425. //sfr IPH   = 0xB7; //中断优先级高位       PPCAH  PLVDH  PADCH  PSH  PT1H  PX1H  PT0H  PX0H   0000,0000
  426. //sfr IP2   = 0xB5; //                       -      -      -     -     -     -   PSPI   PS2   xxxx,xx00
  427. //sfr IPH2  = 0xB6; //                       -      -      -     -     -     -   PSPIH  PS2H  xxxx,xx00
  428. #define                PPCAH        0x80
  429. #define                PLVDH        0x40
  430. #define                PADCH        0x20
  431. #define                PSH                0x10
  432. #define                PT1H        0x08
  433. #define                PX1H        0x04
  434. #define                PT0H        0x02
  435. #define                PX0H        0x01

  436. #define                PCA_InterruptFirst()        PPCA = 1
  437. #define                LVD_InterruptFirst()        PLVD = 1
  438. #define                ADC_InterruptFirst()        PADC = 1
  439. #define                UART1_InterruptFirst()        PS   = 1
  440. #define                Timer1_InterruptFirst()        PT1  = 1
  441. #define                INT1_InterruptFirst()        PX1  = 1
  442. #define                Timer0_InterruptFirst()        PT0  = 1
  443. #define                INT0_InterruptFirst()        PX0  = 1


  444. /*************************************************************************************************/


  445. //                       7      6     5    4    3    2     1      0        Reset Value
  446. //sfr CMPCR1 = 0xE6;   CMPEN  CMPIF  PIE  NIE  PIS  NIS  CMPOE  CMPRES      00000000B
  447. #define        CMPEN        0x80        //1: 允许比较器, 0: 禁止,关闭比较器电源
  448. #define        CMPIF        0x40        //比较器中断标志, 包括上升沿或下降沿中断, 软件清0
  449. #define        PIE                0x20        //1: 比较结果由0变1, 产生上升沿中断
  450. #define        NIE                0x10        //1: 比较结果由1变0, 产生下降沿中断
  451. #define        PIS                0x08        //输入正极性选择, 0: 选择内部P5.5做正输入,           1: 由ADCIS[2:0]所选择的ADC输入端做正输入.
  452. #define        NIS                0x04        //输入负极性选择, 0: 选择内部BandGap电压BGv做负输入, 1: 选择外部P5.4做输入.
  453. #define        CMPOE        0x02        //1: 允许比较结果输出到P1.2, 0: 禁止.
  454. #define        CMPRES        0x01        //比较结果, 1: CMP+电平高于CMP-,  0: CMP+电平低于CMP-,  只读

  455. //                       7        6       5  4  3  2  1  0    Reset Value
  456. //sfr CMPCR2 = 0xE7;   INVCMPO  DISFLT       LCDTY[5:0]       00001001B
  457. #define        INVCMPO        0x80        //1: 比较器输出取反,  0: 不取反
  458. #define        DISFLT        0x40        //1: 关闭0.1uF滤波,   0: 允许
  459. #define        LCDTY        0x00        //0~63, 比较结果变化延时周期数


  460. /*************************************************************************************************/
  461. //                     7     6     5    4    3    2   1   0       Reset Value
  462. //sfr SCON  = 0x98;   SM0   SM1   SM2  REN  TB8  RB8  TI  RI      00000000B                 //S1 Control

  463. #define                S1_DoubleRate()                PCON  |=  0x80
  464. #define                S1_SHIFT()                        SCON  &=  0x3f

  465. #define                S1_8bit()                        SCON   =  (SCON & 0x3f) | 0x40
  466. #define                S1_9bit()                        SCON   =  (SCON & 0x3f) | 0xc0
  467. #define                S1_RX_Enable()                SCON  |=  0x10
  468. #define                S1_RX_Disable()                SCON  &= ~0x10
  469. #define                TI1                                        TI                                        /* 判断TI1是否发送完成                                                                 */
  470. #define                RI1                                        RI                                        /* 判断RI1是否接收完成                                                                 */
  471. #define                SET_TI1()                        TI = 1                                /* 设置TI1(引起中断)                                                                 */
  472. #define                CLR_TI1()                        TI = 0                                /* 清除TI1                                                                                         */
  473. #define                CLR_RI1()                        RI = 0                                /* 清除RI1                                                                                         */
  474. #define                S1TB8_SET()                        TB8 = 1                                /* 设置TB8                                                                                         */
  475. #define                S1TB8_CLR()                        TB8 = 0                                /* 清除TB8                                                                                         */
  476. #define                S1_Int_Enable()                ES     =  1                        /* 串口1允许中断                                                                         */
  477. #define                S1_Int_Disable()        ES     =  0                        /* 串口1禁止中断                                                                         */
  478. #define         S1_BRT_UseTimer1()        AUXR  &= ~1
  479. #define         S1_BRT_UseTimer2()        AUXR  |=  1
  480. #define                S1_USE_P30P31()                P_SW1 &= ~0xc0                                                //UART1 使用P30 P31口        默认
  481. #define                S1_USE_P36P37()                P_SW1  =  (P_SW1 & ~0xc0) | 0x40        //UART1 使用P36 P37口
  482. #define                S1_USE_P16P17()                P_SW1  =  (P_SW1 & ~0xc0) | 0x80        //UART1 使用P16 P17口
  483. #define                S1_TXD_RXD_SHORT()        PCON2 |=  (1<<4)        //将TXD与RXD连接中继输出
  484. #define                S1_TXD_RXD_OPEN()        PCON2 &= ~(1<<4)        //将TXD与RXD连接中继断开        默认

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

  487. #define                S2_MODE0()                        S2CON &= ~(1<<7)        /* 串口2模式0,8位UART,波特率 = 定时器2的溢出率 / 4 */
  488. #define                S2_MODE1()                        S2CON |=  (1<<7)        /* 串口2模式1,9位UART,波特率 = 定时器2的溢出率 / 4 */
  489. #define                S2_8bit()                        S2CON &= ~(1<<7)        /* 串口2模式0,8位UART,波特率 = 定时器2的溢出率 / 4 */
  490. #define                S2_9bit()                        S2CON |=  (1<<7)        /* 串口2模式1,9位UART,波特率 = 定时器2的溢出率 / 4 */
  491. #define                S2_RX_Enable()                S2CON |=  (1<<4)        /* 允许串2接收                                                                                 */
  492. #define                S2_RX_Disable()                S2CON &= ~(1<<4)        /* 禁止串2接收                                                                                 */
  493. #define                TI2                                        (S2CON & 2) != 0        /* 判断TI2是否发送完成                                                                 */
  494. #define                RI2                                        (S2CON & 1) != 0        /* 判断RI2是否接收完成                                                                 */
  495. #define                SET_TI2()                        S2CON |=  (1<<1)        /* 设置TI2(引起中断)                                                                 */
  496. #define                CLR_TI2()                        S2CON &= ~(1<<1)        /* 清除TI2                                                                                         */
  497. #define                CLR_RI2()                        S2CON &= ~1                        /* 清除RI2                                                                                         */
  498. #define                S2TB8_SET()                        S2CON |=  (1<<3)        /* 设置TB8                                                                                         */
  499. #define                S2TB8_CLR()                        S2CON &= ~(1<<3)        /* 清除TB8                                                                                         */
  500. #define                S2_Int_Enable()                IE2   |=  1                        /* 串口2允许中断                                                                         */
  501. #define                S2_Int_Disable()        IE2   &= ~1                        /* 串口2禁止中断                                                                         */
  502. #define                S2_USE_P10P11()                P_SW2 &= ~1                        /* UART2 使用P1口        默认                                                         */
  503. #define                S2_USE_P46P47()                P_SW2 |=  1                        /* UART2 使用P4口                                                                         */

  504. //                                                  7      6      5      4      3      2     1     0        Reset Value
  505. //sfr S3CON = 0xAC;                S3SM0  S3ST3  S3SM2  S3REN  S3TB8  S3RB8  S3TI  S3RI      00000000B                 //S3 Control

  506. #define                S3_MODE0()                        S3CON &= ~(1<<7)        /* 串口3模式0,8位UART,波特率 = 定时器的溢出率 / 4  */
  507. #define                S3_MODE1()                        S3CON |=  (1<<7)        /* 串口3模式1,9位UART,波特率 = 定时器的溢出率 / 4  */
  508. #define                S3_8bit()                        S3CON &= ~(1<<7)        /* 串口3模式0,8位UART,波特率 = 定时器的溢出率 / 4  */
  509. #define                S3_9bit()                        S3CON |=  (1<<7)        /* 串口3模式1,9位UART,波特率 = 定时器的溢出率 / 4  */
  510. #define                S3_RX_Enable()                S3CON |=  (1<<4)        /* 允许串3接收                                                                             */
  511. #define                S3_RX_Disable()                S3CON &= ~(1<<4)        /* 禁止串3接收                                                                             */
  512. #define                TI3                                        (S3CON & 2) != 0        /* 判断TI3是否发送完成                                                                 */
  513. #define                RI3                                        (S3CON & 1) != 0        /* 判断RI3是否接收完成                                                                 */
  514. #define                SET_TI3()                        S3CON |=  (1<<1)        /* 设置TI3(引起中断)                                                                 */
  515. #define                CLR_TI3()                        S3CON &= ~(1<<1)        /* 清除TI3                                                                                         */
  516. #define                CLR_RI3()                        S3CON &= ~1                        /* 清除RI3                                                                                         */
  517. #define                S3TB8_SET()                        S3CON |=  (1<<3)        /* 设置TB8                                                                                         */
  518. #define                S3TB8_CLR()                        S3CON &= ~(1<<3)        /* 清除TB8                                                                                         */
  519. #define                S3_Int_Enable()                IE2   |=  (1<<3)        /* 串口3允许中断                                                                     */
  520. #define                S3_Int_Disable()        IE2   &= ~(1<<3)        /* 串口3禁止中断                                                                     */
  521. #define         S3_BRT_UseTimer3()        S3CON |=  (1<<6)        /* BRT select Timer3                                                                 */
  522. #define         S3_BRT_UseTimer2()        S3CON &= ~(1<<6)        /* BRT select Timer2                                                                 */
  523. #define                S3_USE_P00P01()                P_SW2 &= ~2                        /* UART3 使用P0口        默认                                                     */
  524. #define                S3_USE_P50P51()                P_SW2 |=  2                        /* UART3 使用P5口                                                                     */

  525. //                                                  7      6      5      4      3      2     1     0        Reset Value
  526. //sfr S4CON = 0x84;                S4SM0  S4ST4  S4SM2  S4REN  S4TB8  S4RB8  S4TI  S4RI      00000000B                 //S4 Control

  527. #define                S4_MODE0()                        S4CON &= ~(1<<7)        /* 串口4模式0,8位UART,波特率 = 定时器的溢出率 / 4  */
  528. #define                S4_MODE1()                        S4CON |=  (1<<7)        /* 串口4模式1,9位UART,波特率 = 定时器的溢出率 / 4  */
  529. #define                S4_8bit()                        S4CON &= ~(1<<7)        /* 串口4模式0,8位UART,波特率 = 定时器的溢出率 / 4  */
  530. #define                S4_9bit()                        S4CON |=  (1<<7)        /* 串口4模式1,9位UART,波特率 = 定时器的溢出率 / 4  */
  531. #define                S4_RX_Enable()                S4CON |=  (1<<4)        /* 允许串4接收                                                                             */
  532. #define                S4_RX_Disable()                S4CON &= ~(1<<4)        /* 禁止串4接收                                                                             */
  533. #define                TI4                                        (S4CON & 2) != 0        /* 判断TI3是否发送完成                                                             */
  534. #define                RI4                                        (S4CON & 1) != 0        /* 判断RI3是否接收完成                                                             */
  535. #define                SET_TI4()                        S4CON |=  2                        /* 设置TI3(引起中断)                                                             */
  536. #define                CLR_TI4()                        S4CON &= ~2                        /* 清除TI3                                                                                     */
  537. #define                CLR_RI4()                        S4CON &= ~1                        /* 清除RI3                                                                                     */
  538. #define                S4TB8_SET()                        S4CON |=  8                        /* 设置TB8                                                                                     */
  539. #define                S4TB8_CLR()                        S4CON &= ~8                        /* 清除TB8                                                                                     */
  540. #define                S4_Int_Enable()                IE2   |=  (1<<4)        /* 串口4允许中断                                                                     */
  541. #define                S4_Int_Disable()        IE2   &= ~(1<<4)        /* 串口4禁止中断                                                                     */
  542. #define         S4_BRT_UseTimer4()        S4CON |=  (1<<6)        /* BRT select Timer4                                                                 */
  543. #define         S4_BRT_UseTimer2()        S4CON &= ~(1<<6)        /* BRT select Timer2                                                                 */
  544. #define                S4_USE_P02P03()                P_SW2 &= ~4                        /* UART4 使用P0口        默认                                                     */
  545. #define                S4_USE_P52P53()                P_SW2 |=  4                        /* UART4 使用P5口                                                                     */




  546. /**********************************************************/
  547. //                                                   7     6       5      4     3      2      1      0    Reset Value
  548. //sfr AUXR  = 0x8E;                T0x12 T1x12 UART_M0x6  T2R  T2_C/T T2x12 EXTRAM  S1ST2  0000,0000        //Auxiliary Register

  549. #define         ExternalRAM_enable()                AUXR |=  2                /* 允许外部XRAM,禁止使用内部1024RAM     */
  550. #define         InternalRAM_enable()                AUXR &= ~2                /* 禁止外部XRAM,允许使用内部1024RAM     */
  551. #define                S1_M0x6()                                        AUXR |=  (1<<5)        /* UART Mode0 Speed is 6x Standard       */
  552. #define                S1_M0x1()                                        AUXR &= ~(1<<5)        /* default,        UART Mode0 Speed is Standard */

  553. //====================================
  554. #define                Timer0_16bitAutoReload()        TMOD &= ~0x03                                        /* 16位自动重装        */
  555. #define                Timer0_16bit()                                TMOD  = (TMOD & ~0x03) | 0x01        /* 16位         */
  556. #define                Timer0_8bitAutoReload()                TMOD  = (TMOD & ~0x03) | 0x02        /* 8位自动重装        */
  557. #define                Timer0_16bitAutoRL_NoMask()        TMOD |=  0x03                /* 16位自动重装不可屏蔽中断        */
  558. #define         Timer0_Run()                                 TR0 = 1                                /* 允许定时器0计数                        */
  559. #define         Timer0_Stop()                                 TR0 = 0                                /* 禁止定时器0计数                        */
  560. #define                Timer0_Gate_INT0_P32()                TMOD |=  (1<<3)                /* 时器0由外部INT0高电平允许定时计数 */
  561. #define                Timer0_AsTimer()                        TMOD &= ~(1<<2)                /* 时器0用做定时器        */
  562. #define                Timer0_AsCounter()                        TMOD |=  (1<<2)                /* 时器0用做计数器        */
  563. #define                Timer0_AsCounterP34()                TMOD |=  (1<<2)                /* 时器0用做计数器        */
  564. #define         Timer0_1T()                                        AUXR |=  (1<<7)                /* Timer0 clodk = fo        */
  565. #define         Timer0_12T()                                AUXR &= ~(1<<7)                /* Timer0 clodk = fo/12        12分频,        default        */
  566. #define                Timer0_CLKO_Enable()                AUXR2 |=  1                        /* 允许 T0 溢出脉冲在T0(P3.5)脚输出,Fck0 = 1/2 T0 溢出率,T0可以1T或12T。        */
  567. #define                Timer0_CLKO_Disable()                AUXR2 &= ~1
  568. #define                Timer0_CLKO_Enable_P34()        AUXR2 |=  1                        /* 允许 T0 溢出脉冲在T0(P3.5)脚输出,Fck0 = 1/2 T0 溢出率,T0可以1T或12T。        */
  569. #define                Timer0_CLKO_Disable_P34()        AUXR2 &= ~1
  570. #define         Timer0_InterruptEnable()        ET0 = 1                                /* 允许Timer1中断.*/
  571. #define         Timer0_InterruptDisable()        ET0 = 0                                /* 禁止Timer1中断.*/

  572. #define                T0_Load(n)                                        TH0 = (n) / 256,        TL0 = (n) % 256
  573. #define                T0_Load_us_1T(n)                        Timer0_AsTimer(),Timer0_1T(), Timer0_16bitAutoReload(),TH0=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL0=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256
  574. #define                T0_Load_us_12T(n)                        Timer0_AsTimer(),Timer0_12T(),Timer0_16bitAutoReload(),TH0=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL0=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256
  575. #define                T0_Frequency_1T_P35(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 */
  576. #define                T0_Frequency_12T_P35(n)                ET0=0,Timer0_AsTimer(),Timer0_12T(),Timer0_16bitAutoReload(),TH0=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL0=(65536-(n/2+MAIN_Fosc/24)/(n))%256,AUXR2 |= bit0,TR0=1        /* fx=fosc/(2*M)/n,  M=1 or M=12 */

  577. //====================================
  578. #define                Timer1_16bitAutoReload()        TMOD &= ~0x30                                        /* 16位自动重装        */
  579. #define                Timer1_16bit()                                TMOD  = (TMOD & ~0x30) | 0x10        /* 16位                        */
  580. #define                Timer1_8bitAutoReload()                TMOD  = (TMOD & ~0x30) | 0x20        /* 8位自动重装        */
  581. #define         Timer1_Run()                                 TR1 = 1                                /* 允许定时器1计数                        */
  582. #define         Timer1_Stop()                                 TR1 = 0                                /* 禁止定时器1计数                        */
  583. #define                Timer1_Gate_INT1_P33()                TMOD |=  (1<<7)                /* 时器1由外部INT1高电平允许定时计数        */
  584. #define                Timer1_AsTimer()                        TMOD &= ~(1<<6)                /* 时器1用做定时器                        */
  585. #define                Timer1_AsCounter()                        TMOD |=  (1<<6)                /* 时器1用做计数器                        */
  586. #define                Timer1_AsCounterP35()                TMOD |=  (1<<6)                /* 时器1用做计数器                        */
  587. #define         Timer1_1T()                                        AUXR |=  (1<<6)                /* Timer1 clodk = fo                */
  588. #define         Timer1_12T()                                AUXR &= ~(1<<6)                /* Timer1 clodk = fo/12        12分频,        default        */
  589. #define                Timer1_CLKO_Enable()                AUXR2 |=  2                        /* 允许 T1 溢出脉冲在T1(P3.4)脚输出,Fck1 = 1/2 T1 溢出率,T1可以1T或12T。        */
  590. #define                Timer1_CLKO_Disable()                AUXR2 &= ~2
  591. #define                Timer1_CLKO_Enable_P35()        AUXR2 |=  2                        /* 允许 T1 溢出脉冲在T1(P3.4)脚输出,Fck1 = 1/2 T1 溢出率,T1可以1T或12T。        */
  592. #define                Timer1_CLKO_Disable_P35()        AUXR2 &= ~2
  593. #define         Timer1_InterruptEnable()        ET1 = 1                                /* 允许Timer1中断.        */
  594. #define         Timer1_InterruptDisable()        ET1 = 0                                /* 禁止Timer1中断.        */

  595. #define                T1_Load(n)                                        TH1 = (n) / 256,        TL1 = (n) % 256
  596. #define                T1_Load_us_1T(n)                        Timer1_AsTimer(),Timer1_1T(), Timer1_16bitAutoReload(),TH1=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL1=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256
  597. #define                T1_Load_us_12T(n)                        Timer1_AsTimer(),Timer1_12T(),Timer1_16bitAutoReload(),TH1=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL1=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256
  598. #define                T1_Frequency_1T_P34(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 */
  599. #define                T1_Frequency_12T_P34(n)                ET1=0,Timer1_AsTimer(),Timer1_12T(),Timer1_16bitAutoReload(),TH1=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL1=(65536-(n/2+MAIN_Fosc/24)/(n))%256,AUXR2 |= bit1,TR1=1        /* fx=fosc/(2*M)/n,  M=1 or M=12 */

  600. //====================================
  601. #define         Timer2_Run()                                 AUXR |=  (1<<4)        /* 允许定时器2计数        */
  602. #define         Timer2_Stop()                                 AUXR &= ~(1<<4)        /* 禁止定时器2计数        */
  603. #define                Timer2_AsTimer()                        AUXR &= ~(1<<3)        /* 时器2用做定时器        */
  604. #define                Timer2_AsCounter()                        AUXR |=  (1<<3)        /* 时器2用做计数器        */
  605. #define                Timer2_AsCounterP31()                AUXR |=  (1<<3)        /* 时器2用做计数器        */
  606. #define         Timer2_1T()                                        AUXR |=  (1<<2)        /* Timer0 clock = fo        */
  607. #define         Timer2_12T()                                AUXR &= ~(1<<2)        /* Timer0 clock = fo/12        12分频,        default        */
  608. #define                Timer2_CLKO_Enable()                AUXR2 |=  4                /* 允许 T2 溢出脉冲在T1(P3.0)脚输出,Fck2 = 1/2 T2 溢出率,T2可以1T或12T。        */
  609. #define                Timer2_CLKO_Disable()                AUXR2 &= ~4
  610. #define                Timer2_CLKO_Enable_P30()        AUXR2 |=  4                /* 允许 T2 溢出脉冲在T1(P3.0)脚输出,Fck2 = 1/2 T2 溢出率,T2可以1T或12T。        */
  611. #define                Timer2_CLKO_Disable_P30()        AUXR2 &= ~4
  612. #define         Timer2_InterruptEnable()        IE2  |=  (1<<2)        /* 允许Timer2中断.        */
  613. #define         Timer2_InterruptDisable()        IE2  &= ~(1<<2)        /* 禁止Timer2中断.        */

  614. #define                T2_Load(n)                                        TH2 = (n) / 256,        TL2 = (n) % 256
  615. #define                T2_Load_us_1T(n)                        Timer2_AsTimer(),Timer2_1T(), TH2=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL2=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256
  616. #define                T2_Load_us_12T(n)                        Timer2_AsTimer(),Timer2_12T(),TH2=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL2=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256
  617. #define                T2_Frequency_1T_P30(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, Timer2_CLKO_Enable_P30(),Timer2_Run()        /* fx=fosc/(2*M)/n,  M=1 or M=12 */
  618. #define                T2_Frequency_12T_P30(n)                Timer2_InterruptDisable(),Timer2_AsTimer(),Timer2_12T(),TH2=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL2=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer2_CLKO_Enable_P30(),Timer2_Run()        /* fx=fosc/(2*M)/n,  M=1 or M=12 */

  619. //====================================
  620. #define         Timer3_Run()                                 T4T3M |=  (1<<3)        /* 允许定时器3计数        */
  621. #define         Timer3_Stop()                                 T4T3M &= ~(1<<3)        /* 禁止定时器3计数        */
  622. #define                Timer3_AsTimer()                        T4T3M &= ~(1<<2)        /* 时器3用做定时器        */
  623. #define                Timer3_AsCounter()                        T4T3M |=  (1<<2)        /* 时器3用做计数器, P0.5为外部脉冲        */
  624. #define                Timer3_AsCounterP05()                T4T3M |=  (1<<2)        /* 时器3用做计数器, P0.5为外部脉冲        */
  625. #define         Timer3_1T()                                        T4T3M |=  (1<<1)        /* 1T模式        */
  626. #define         Timer3_12T()                                T4T3M &= ~(1<<1)        /* 12T模式,        default        */
  627. #define                Timer3_CLKO_Enable()                T4T3M |=  1                        /* 允许T3溢出脉冲在T3(P0.4)脚输出,Fck = 1/2 T2 溢出率,T2可以1T或12T。        */
  628. #define                Timer3_CLKO_Disable()                T4T3M &= ~1                        /* 禁止T3溢出脉冲在T3(P0.4)脚输出        */
  629. #define                Timer3_CLKO_Enable_P04()        T4T3M |=  1                        /* 允许T3溢出脉冲在T3(P0.4)脚输出,Fck = 1/2 T2 溢出率,T2可以1T或12T。        */
  630. #define                Timer3_CLKO_Disable_P04()        T4T3M &= ~1                        /* 禁止T3溢出脉冲在T3(P0.4)脚输出        */
  631. #define         Timer3_InterruptEnable()        IE2  |=  (1<<5)                /* 允许Timer3中断.        */
  632. #define         Timer3_InterruptDisable()        IE2  &= ~(1<<5)                /* 禁止Timer3中断.        */

  633. #define                T3_Load(n)                                        TH3 = (n) / 256,        TL3 = (n) % 256
  634. #define                T3_Load_us_1T(n)                        Timer3_AsTimer(),Timer3_1T(), TH3=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL3=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256
  635. #define                T3_Load_us_12T(n)                        Timer3_AsTimer(),Timer3_12T(),TH3=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL3=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256
  636. #define                T3_Frequency_1T_P04(n)                Timer3_InterruptDisable(),Timer3_AsTimer(),Timer3_1T(), TH3=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL3=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer3_CLKO_P04_Enable,Timer3_Run()        /* fx=fosc/(2*M)/n,  M=1 or M=12 */
  637. #define                T3_Frequency_12T_P04(n)                Timer3_InterruptDisable(),Timer3_AsTimer(),Timer3_12T(),TH3=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL3=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer3_CLKO_P04_Enable,Timer3_Run()        /* fx=fosc/(2*M)/n,  M=1 or M=12 */

  638. //====================================
  639. #define         Timer4_Run()                                 T4T3M |=  (1<<7)        /* 允许定时器4计数        */
  640. #define         Timer4_Stop()                                 T4T3M &= ~(1<<7)        /* 禁止定时器4计数        */
  641. #define                Timer4_AsTimer()                        T4T3M &= ~(1<<6)        /* 时器4用做定时器  */
  642. #define                Timer4_AsCounter()                        T4T3M |=  (1<<6)        /* 时器4用做计数器, P0.7为外部脉冲        */
  643. #define                Timer4_AsCounterP07()                T4T3M |=  (1<<6)        /* 时器4用做计数器, P0.7为外部脉冲        */
  644. #define         Timer4_1T()                                        T4T3M |=  (1<<5)        /* 1T模式        */
  645. #define         Timer4_12T()                                T4T3M &= ~(1<<5)        /* 12T模式,        default        */
  646. #define                Timer4_CLKO_Enable()                T4T3M |=  (1<<4)        /* 允许T4溢出脉冲在T4(P0.6)脚输出,Fck = 1/2 T2 溢出率,T2可以1T或12T。        */
  647. #define                Timer4_CLKO_Disable()                T4T3M &= ~(1<<4)        /* 禁止T4溢出脉冲在T4(P0.6)脚输出        */
  648. #define                Timer4_CLKO_Enable_P06()        T4T3M |=  (1<<4)        /* 允许T4溢出脉冲在T4(P0.6)脚输出,Fck = 1/2 T2 溢出率,T2可以1T或12T。        */
  649. #define                Timer4_CLKO_Disable_P06()        T4T3M &= ~(1<<4)        /* 禁止T4溢出脉冲在T4(P0.6)脚输出        */
  650. #define         Timer4_InterruptEnable()        IE2  |=  (1<<6)                /* 允许Timer4中断.        */
  651. #define         Timer4_InterruptDisable()        IE2  &= ~(1<<6)                /* 禁止Timer4中断.        */

  652. #define                T4_Load(n)                                        TH4 = (n) / 256,        TL4 = (n) % 256
  653. #define                T4_Load_us_1T(n)                        Timer4_AsTimer(),Timer4_1T(), TH4=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL4=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256
  654. #define                T4_Load_us_12T(n)                        Timer4_AsTimer(),Timer4_12T(),TH4=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL4=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256
  655. #define                T4_Frequency_1T_P06(n)                Timer4_InterruptDisable(),Timer4_AsTimer(),Timer4_1T(), TH4=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL4=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer4_CLKO_P06_Enable(),Timer4_Run()        /* fx=fosc/(2*M)/n,  M=1 or M=12 */
  656. #define                T4_Frequency_12T_P06(n)                Timer4_InterruptDisable(),Timer4_AsTimer(),Timer4_12T(),TH4=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL4=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer4_CLKO_P06_Enable(),Timer4_Run()        /* fx=fosc/(2*M)/n,  M=1 or M=12 */
  657. //====================================================================================================================

  658. //sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register
  659. //                                      7     6     5      4       3      2   1   0     Reset Value
  660. //                                  WDT_FLAG  -  EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0    xx00,0000
  661. #define D_WDT_FLAG                        (1<<7)
  662. #define D_EN_WDT                        (1<<5)
  663. #define D_CLR_WDT                        (1<<4)        /* auto clear        */
  664. #define D_IDLE_WDT                        (1<<3)        /* WDT counter when Idle        */
  665. #define D_WDT_SCALE_2                0
  666. #define D_WDT_SCALE_4                1
  667. #define D_WDT_SCALE_8                2                /* T=393216*N/fo        */
  668. #define D_WDT_SCALE_16                3
  669. #define D_WDT_SCALE_32                4
  670. #define D_WDT_SCALE_64                5
  671. #define D_WDT_SCALE_128                6
  672. #define D_WDT_SCALE_256                7

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


  674. //                                                  7     6      5    4     3      2    1     0     Reset Value
  675. //sfr PCON   = 0x87;        SMOD  SMOD0  LVDF  POF   GF1    GF0   PD   IDL    0001,0000         //Power Control
  676. //SMOD                //串口双倍速
  677. //SMOD0
  678. #define                LVDF                (1<<5)        /* P4.6低压检测标志 */
  679. //POF
  680. //GF1
  681. //GF0
  682. //#define         D_PD                2                /* set 1, power down mode */
  683. //#define         D_IDLE                1                /* set 1, idle mode */
  684. #define                MCU_IDLE()                        PCON |= 1        /* MCU 进入 IDLE 模式 */
  685. #define                MCU_POWER_DOWN()        PCON |= 2        /* MCU 进入 睡眠 模式 */


  686. //sfr ISP_CMD   = 0xC5;
  687. #define                ISP_STANDBY()        ISP_CMD = 0                /* ISP空闲命令(禁止)*/
  688. #define                ISP_READ()                ISP_CMD = 1                /* ISP读出命令                */
  689. #define                ISP_WRITE()                ISP_CMD = 2                /* ISP写入命令                */
  690. #define                ISP_ERASE()                ISP_CMD = 3                /* ISP擦除命令                */

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

  693. //                                                          7    6    5      4    3    2    1     0    Reset Value
  694. //sfr IAP_CONTR = 0xC7;                IAPEN SWBS SWRST CFAIL  -   WT2  WT1   WT0   0000,x000        //IAP Control Register
  695. #define ISP_EN                        (1<<7)
  696. #define ISP_SWBS                (1<<6)
  697. #define ISP_SWRST                (1<<5)
  698. #define ISP_CMD_FAIL        (1<<4)
  699. #define ISP_WAIT_1MHZ        7
  700. #define ISP_WAIT_2MHZ        6
  701. #define ISP_WAIT_3MHZ        5
  702. #define ISP_WAIT_6MHZ        4
  703. #define ISP_WAIT_12MHZ        3
  704. #define ISP_WAIT_20MHZ        2
  705. #define ISP_WAIT_24MHZ        1
  706. #define ISP_WAIT_30MHZ        0

  707. #if (MAIN_Fosc >= 24000000L)
  708.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_30MHZ
  709. #elif (MAIN_Fosc >= 20000000L)
  710.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_24MHZ
  711. #elif (MAIN_Fosc >= 12000000L)
  712.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_20MHZ
  713. #elif (MAIN_Fosc >= 6000000L)
  714.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_12MHZ
  715. #elif (MAIN_Fosc >= 3000000L)
  716.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_6MHZ
  717. #elif (MAIN_Fosc >= 2000000L)
  718.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_3MHZ
  719. #elif (MAIN_Fosc >= 1000000L)
  720.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_2MHZ
  721. #else
  722.         #define                ISP_WAIT_FREQUENCY        ISP_WAIT_1MHZ
  723. #endif



  724. /* ADC Register */
  725. //                                                                7       6      5       4         3      2    1    0   Reset Value
  726. //sfr ADC_CONTR = 0xBC;                ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000        /* AD 转换控制寄存器 */
  727. //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位 */
  728. //sfr ADC_RESL = 0xBE;                                                                                                  ADCV.1 ADCV.0          0000,0000        /* A/D 转换结果低2位 */
  729. //sfr ADC_CONTR  = 0xBC;        //直接用MOV操作,不要用与或


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

  733. #define        SPI_SSIG_None()                SPCTL |=  (1<<7)                /* 1: 忽略SS脚        */
  734. #define        SPI_SSIG_Enable()        SPCTL &= ~(1<<7)                /* 0: SS脚用于决定主从机        */
  735. #define        SPI_Enable()                SPCTL |=  (1<<6)                /* 1: 允许SPI        */
  736. #define        SPI_Disable()                SPCTL &= ~(1<<6)                /* 0: 禁止SPI        */
  737. #define        SPI_LSB_First()                SPCTL |=  (1<<5)                /* 1: LSB先发        */
  738. #define        SPI_MSB_First()                SPCTL &= ~(1<<5)                /* 0: MSB先发        */
  739. #define        SPI_Master()                SPCTL |=  (1<<4)                /* 1: 设为主机        */
  740. #define        SPI_Slave()                        SPCTL &= ~(1<<4)                /* 0: 设为从机        */
  741. #define        SPI_SCLK_NormalH()        SPCTL |=  (1<<3)                /* 1: 空闲时SCLK为高电平        */
  742. #define        SPI_SCLK_NormalL()        SPCTL &= ~(1<<3)                /* 0: 空闲时SCLK为低电平        */
  743. #define        SPI_PhaseH()                SPCTL |=  (1<<2)                /* 1:         */
  744. #define        SPI_PhaseL()                SPCTL &= ~(1<<2)                /* 0:         */
  745. #define        SPI_Speed(n)                SPCTL = (SPCTL & ~3) | (n)        /*设置速度, 0 -- fosc/4, 1 -- fosc/16, 2 -- fosc/64, 3 -- fosc/128        */

  746. //sfr SPDAT  = 0xCF; //SPI Data Register                                                     0000,0000
  747. //sfr SPSTAT  = 0xCD;        //SPI状态寄存器
  748. //   7       6      5   4   3   2   1   0            Reset Value
  749. //        SPIF        WCOL        -        -        -        -        -        -
  750. #define        SPIF        0x80                /* SPI传输完成标志。写入1清0。*/
  751. #define        WCOL        0x40                /* SPI写冲突标志。写入1清0。  */

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


  755. /*
  756. ;PCA_PWMn:    7       6     5   4   3   2     1       0
  757. ;                        EBSn_1        EBSn_0        -        -        -        -        EPCnH        EPCnL
  758. ;B5-B2:                保留
  759. ;B1(EPCnH):        在PWM模式下,与CCAPnH组成9位数。
  760. ;B0(EPCnL):        在PWM模式下,与CCAPnL组成9位数。
  761. */
  762. #define                PWM0_NORMAL()        PCA_PWM0 &= ~3                                /* PWM0正常输出(默认)        */
  763. #define                PWM0_OUT_0()        PCA_PWM0 |=  3                                /* PWM0一直输出0                */
  764. #define                PWM0_OUT_1()        PCA_PWM0 &= ~3, CCAP0H = 0        /* PWM0一直输出1                */

  765. #define                PWM1_NORMAL()        PCA_PWM1 &= ~3                                /* PWM1正常输出(默认)        */
  766. #define                PWM1_OUT_0()        PCA_PWM1 |=  3                                /* PWM1一直输出0                */
  767. #define                PWM1_OUT_1()        PCA_PWM1 &= ~3, CCAP1H = 0        /* PWM1一直输出1                */

  768. #define                PWM2_NORMAL()        PCA_PWM2 &= ~3                                /* PWM2正常输出(默认)        */
  769. #define                PWM2_OUT_0()        PCA_PWM2 |=  3                                /* PWM2一直输出0                */
  770. #define                PWM2_OUT_1()        PCA_PWM2 &= ~3, CCAP2H = 0        /* PWM2一直输出1                */


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

  778. //                                         7     6     5     4     3     2     1     0    Reset Value
  779. //sfr CMOD  = 0xD9;        CIDL   -     -     -   CPS2   CPS1  CPS0  ECF   0xxx,0000        //PCA 工作模式寄存器。
  780. #define PCA_IDLE_OFF()                CMOD |=  (1<<7)                                /* IDLE状态PCA停止计数。        */
  781. #define PCA_IDLE_ON()                CMOD &= ~(1<<7)                                /* IDLE状态PCA继续计数。        */
  782. #define PCA_CLK_12T()                CMOD &= ~0x0E                                /* PCA计数脉冲选择 fosc/12        */
  783. #define PCA_CLK_2T()                CMOD = (CMOD & ~0x0E) + 2        /* PCA计数脉冲选择 fosc/2        */
  784. #define PCA_CLK_T0()                CMOD = (CMOD & ~0x0E) + 4        /* PCA计数脉冲选择Timer0中断,Timer0可通过AUXR寄存器设置成工作在12T或1T模式。        */
  785. #define PCA_CLK_ECI()                CMOD = (CMOD & ~0x0E) + 6        /* PCA计数脉冲选择从ECI/P3.4脚输入的外部时钟,最大 fosc/2。        */
  786. #define PCA_CLK_1T()                CMOD = (CMOD & ~0x0E) + 8        /* PCA计数脉冲选择 Fosc        */
  787. #define PCA_CLK_4T()                CMOD = (CMOD & ~0x0E) + 10        /* PCA计数脉冲选择 Fosc/4        */
  788. #define PCA_CLK_6T()                CMOD = (CMOD & ~0x0E) + 12        /* PCA计数脉冲选择 Fosc/6        */
  789. #define PCA_CLK_8T()                CMOD = (CMOD & ~0x0E) + 14        /* PCA计数脉冲选择 Fosc/8        */
  790. #define PCA_INT_ENABLE()        CMOD |=  1                                        /* PCA计数器溢出中断允许位,1---允许CF(CCON.7)产生中断。        */
  791. #define PCA_INT_DISABLE()        CMOD &= ~1                                        /* PCA计数器溢出中断禁止。        */

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

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

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


  799. /*                                                                        7     6      5      4     3     2     1     0     Reset Value
  800. //sfr CCAPM0 = 0xDA;        PWM 寄存器  -   ECOM0  CAPP0  CAPN0  MAT0  TOG0  PWM0  ECCF0   x000,0000        //PCA 模块0
  801. //sfr CCAPM1 = 0xDB;        PWM 寄存器  -   ECOM1  CAPP1  CAPN1  MAT1  TOG1  PWM1  ECCF1   x000,0000        //PCA 模块1
  802. //sfr CCAPM2 = 0xDC;        PWM 寄存器  -   ECOM2  CAPP2  CAPN2  MAT2  TOG2  PWM2  ECCF2   x000,0000        //PCA 模块2
  803. ;ECOMn = 1:        允许比较功能。
  804. ;CAPPn = 1:        允许上升沿触发捕捉功能。
  805. ;CAPNn = 1:        允许下降沿触发捕捉功能。
  806. ;MATn  = 1:        当匹配情况发生时,允许CCON中的CCFn置位。
  807. ;TOGn  = 1:        当匹配情况发生时,CEXn将翻转。(CEX0/PCA0/PWM0/P3.7,CEX1/PCA1/PWM1/P3.5)
  808. ;PWMn  = 1:        将CEXn设置为PWM输出。
  809. ;ECCFn = 1:        允许CCON中的CCFn触发中断。
  810. ;ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn
  811. ;  0     0     0    0    0    0     0                00H        未启用任何功能。
  812. ;  x     1     0    0    0    0     x                 20H        16位CEXn上升沿触发捕捉功能。
  813. ;  x     0     1    0    0    0     x                 10H        16位CEXn下降沿触发捕捉功能。
  814. ;  x     1     1    0    0    0     x                 30H        16位CEXn/PCAn边沿(上、下沿)触发捕捉功能。
  815. ;  1     0     0    1    0    0     x                 48H        16位软件定时器。
  816. ;  1     0     0    1    1    0     x                 4CH        16位高速脉冲输出。
  817. ;  1     0     0    0    0    1     0                42H        8位PWM。无中断
  818. ;  1     1     0    0    0    1     1                63H        8位PWM。低变高可产生中断
  819. ;  1     0     1    0    0    1     1                53H        8位PWM。高变低可产生中断
  820. ;  1     1     1    0    0    1     1                73H        8位PWM。低变高或高变低均可产生中断
  821. ;*******************************************************************
  822. ;*******************************************************************/
  823. #define                PCA0_none()                                CCAPM0 = 0
  824. #define                PCA0_PWM(nbit)                        CCAPM0 = 0x42,PCA_PWM0 = (PCA_PWM0 & 0x0c) | ((8-nbit)<<6)
  825. #define                PCA0_PWM_rise_int(nbit) CCAPM0 = 0x63,PCA_PWM0 = (PCA_PWM0 & 0x0c) | ((8-nbit)<<6)
  826. #define                PCA0_PWM_fall_int(nbit) CCAPM0 = 0x53,PCA_PWM0 = (PCA_PWM0 & 0x0c) | ((8-nbit)<<6)
  827. #define                PCA0_PWM_edge_int(nbit) CCAPM0 = 0x73,PCA_PWM0 = (PCA_PWM0 & 0x0c) | ((8-nbit)<<6)
  828. #define                PCA0_capture_rise()                CCAPM0 = (0x20 + 1)
  829. #define                PCA0_capture_fall()                CCAPM0 = (0x10 + 1)
  830. #define                PCA0_capture_edge()                CCAPM0 = (0x30 + 1)
  831. #define                PCA0_16bit_Timer()                CCAPM0 = (0x48 + 1)
  832. #define                PCA0_High_Pulse()                CCAPM0 = (0x4C + 1)

  833. #define                PCA1_none()                                CCAPM1 = 0
  834. #define                PCA1_PWM(nbit)                        CCAPM1 = 0x42,PCA_PWM1 = (PCA_PWM1 & 0x0c) | ((8-nbit)<<6)
  835. #define                PCA1_PWM_rise_int(nbit) CCAPM1 = 0x63,PCA_PWM1 = (PCA_PWM1 & 0x0c) | ((8-nbit)<<6)
  836. #define                PCA1_PWM_fall_int(nbit) CCAPM1 = 0x53,PCA_PWM1 = (PCA_PWM1 & 0x0c) | ((8-nbit)<<6)
  837. #define                PCA1_PWM_edge_int(nbit) CCAPM1 = 0x73,PCA_PWM1 = (PCA_PWM1 & 0x0c) | ((8-nbit)<<6)
  838. #define                PCA1_capture_rise()                CCAPM1 = (0x20 + 1)
  839. #define                PCA1_capture_fall()                CCAPM1 = (0x10 + 1)
  840. #define                PCA1_capture_edge()                CCAPM1 = (0x30 + 1)
  841. #define                PCA1_16bit_Timer()                CCAPM1 = (0x48 + 1)
  842. #define                PCA1_High_Pulse()                CCAPM1 = (0x4C + 1)

  843. #define                PCA2_none()                                CCAPM2 = 0
  844. #define                PCA2_PWM(nbit)                        CCAPM2 = 0x42,PCA_PWM2 = (PCA_PWM2 & 0x0c) | ((8-nbit)<<6)
  845. #define                PCA2_PWM_rise_int(nbit) CCAPM2 = 0x63,PCA_PWM2 = (PCA_PWM2 & 0x0c) | ((8-nbit)<<6)
  846. #define                PCA2_PWM_fall_int(nbit) CCAPM2 = 0x53,PCA_PWM2 = (PCA_PWM2 & 0x0c) | ((8-nbit)<<6)
  847. #define                PCA2_PWM_edge_int(nbit) CCAPM2 = 0x73,PCA_PWM2 = (PCA_PWM2 & 0x0c) | ((8-nbit)<<6)
  848. #define                PCA2_capture_rise()                CCAPM2 = (0x20 + 1)
  849. #define                PCA2_capture_fall()                CCAPM2 = (0x10 + 1)
  850. #define                PCA2_capture_edge()                CCAPM2 = (0x30 + 1)
  851. #define                PCA2_16bit_Timer()                CCAPM2 = (0x48 + 1)
  852. #define                PCA2_High_Pulse()                CCAPM2 = (0x4C + 1)

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




  854. /**********************************************************/
  855. typedef         unsigned char        u8;
  856. typedef         unsigned int        u16;
  857. typedef         unsigned long        u32;

  858. /**********************************************************/
  859. #define NOP1()  _nop_()
  860. #define NOP2()  NOP1(),NOP1()
  861. #define NOP3()  NOP2(),NOP1()
  862. #define NOP4()  NOP3(),NOP1()
  863. #define NOP5()  NOP4(),NOP1()
  864. #define NOP6()  NOP5(),NOP1()
  865. #define NOP7()  NOP6(),NOP1()
  866. #define NOP8()  NOP7(),NOP1()
  867. #define NOP9()  NOP8(),NOP1()
  868. #define NOP10() NOP9(),NOP1()
  869. #define NOP11() NOP10(),NOP1()
  870. #define NOP12() NOP11(),NOP1()
  871. #define NOP13() NOP12(),NOP1()
  872. #define NOP14() NOP13(),NOP1()
  873. #define NOP15() NOP14(),NOP1()
  874. #define NOP16() NOP15(),NOP1()
  875. #define NOP17() NOP16(),NOP1()
  876. #define NOP18() NOP17(),NOP1()
  877. #define NOP19() NOP18(),NOP1()
  878. #define NOP20() NOP19(),NOP1()
  879. #define NOP21() NOP20(),NOP1()
  880. #define NOP22() NOP21(),NOP1()
  881. #define NOP23() NOP22(),NOP1()
  882. #define NOP24() NOP23(),NOP1()
  883. #define NOP25() NOP24(),NOP1()
  884. #define NOP26() NOP25(),NOP1()
  885. #define NOP27() NOP26(),NOP1()
  886. #define NOP28() NOP27(),NOP1()
  887. #define NOP29() NOP28(),NOP1()
  888. #define NOP30() NOP29(),NOP1()
  889. #define NOP31() NOP30(),NOP1()
  890. #define NOP32() NOP31(),NOP1()
  891. #define NOP33() NOP32(),NOP1()
  892. #define NOP34() NOP33(),NOP1()
  893. #define NOP35() NOP34(),NOP1()
  894. #define NOP36() NOP35(),NOP1()
  895. #define NOP37() NOP36(),NOP1()
  896. #define NOP38() NOP37(),NOP1()
  897. #define NOP39() NOP38(),NOP1()
  898. #define NOP40() NOP39(),NOP1()
  899. #define NOP(N)  NOP##N()


  900. /**********************************************/
  901. #define P0n_standard(bitn)                        P0M1 &= ~(bitn),        P0M0 &= ~(bitn)        /* 00  */
  902. #define P0n_push_pull(bitn)                        P0M1 &= ~(bitn),        P0M0 |=  (bitn)        /* 01  */
  903. #define P0n_pure_input(bitn)                P0M1 |=  (bitn),        P0M0 &= ~(bitn)        /* 10  */
  904. #define P0n_open_drain(bitn)                P0M1 |=  (bitn),        P0M0 |=  (bitn)        /* 11  */

  905. #define P1n_standard(bitn)                        P1M1 &= ~(bitn),        P1M0 &= ~(bitn)
  906. #define P1n_push_pull(bitn)                        P1M1 &= ~(bitn),        P1M0 |=  (bitn)
  907. #define P1n_pure_input(bitn)                P1M1 |=  (bitn),        P1M0 &= ~(bitn)
  908. #define P1n_open_drain(bitn)                P1M1 |=  (bitn),        P1M0 |=  (bitn)

  909. #define P2n_standard(bitn)                        P2M1 &= ~(bitn),        P2M0 &= ~(bitn)
  910. #define P2n_push_pull(bitn)                        P2M1 &= ~(bitn),        P2M0 |=  (bitn)
  911. #define P2n_pure_input(bitn)                P2M1 |=  (bitn),        P2M0 &= ~(bitn)
  912. #define P2n_open_drain(bitn)                P2M1 |=  (bitn),        P2M0 |=  (bitn)

  913. #define P3n_standard(bitn)                        P3M1 &= ~(bitn),        P3M0 &= ~(bitn)
  914. #define P3n_push_pull(bitn)                        P3M1 &= ~(bitn),        P3M0 |=  (bitn)
  915. #define P3n_pure_input(bitn)                P3M1 |=  (bitn),        P3M0 &= ~(bitn)
  916. #define P3n_open_drain(bitn)                P3M1 |=  (bitn),        P3M0 |=  (bitn)

  917. #define P4n_standard(bitn)                        P4M1 &= ~(bitn),        P4M0 &= ~(bitn)
  918. #define P4n_push_pull(bitn)                        P4M1 &= ~(bitn),        P4M0 |=  (bitn)
  919. #define P4n_pure_input(bitn)                P4M1 |=  (bitn),        P4M0 &= ~(bitn)
  920. #define P4n_open_drain(bitn)                P4M1 |=  (bitn),        P4M0 |=  (bitn)

  921. #define P5n_standard(bitn)                        P5M1 &= ~(bitn),        P5M0 &= ~(bitn)
  922. #define P5n_push_pull(bitn)                        P5M1 &= ~(bitn),        P5M0 |=  (bitn)
  923. #define P5n_pure_input(bitn)                P5M1 |=  (bitn),        P5M0 &= ~(bitn)
  924. #define P5n_open_drain(bitn)                P5M1 |=  (bitn),        P5M0 |=  (bitn)

  925. #define P6n_standard(bitn)                        P6M1 &= ~(bitn),        P6M0 &= ~(bitn)
  926. #define P6n_push_pull(bitn)                        P6M1 &= ~(bitn),        P6M0 |=  (bitn)
  927. #define P6n_pure_input(bitn)                P6M1 |=  (bitn),        P6M0 &= ~(bitn)
  928. #define P6n_open_drain(bitn)                P6M1 |=  (bitn),        P6M0 |=  (bitn)

  929. #define P7n_standard(bitn)                        P7M1 &= ~(bitn),        P7M0 &= ~(bitn)
  930. #define P7n_push_pull(bitn)                        P7M1 &= ~(bitn),        P7M0 |=  (bitn)
  931. #define P7n_pure_input(bitn)                P7M1 |=  (bitn),        P7M0 &= ~(bitn)
  932. #define P7n_open_drain(bitn)                P7M1 |=  (bitn),        P7M0 |=  (bitn)


  933. /****************************************************************/


  934. //sfr INT_CLKO = 0x8F;        //附加的 SFR WAKE_CLKO (地址:0x8F)
  935. /*
  936.     7   6    5    4   3     2        1       0         Reset Value
  937.     -  EX4  EX3  EX2  -   T2CLKO   T1CLKO  T0CLKO      0000,0000B
  938. b6 -  EX4      : 外中断INT4允许
  939. b5 -  EX3      : 外中断INT3允许
  940. b4 -  EX2      : 外中断INT2允许
  941. b2 - T1CLKO    : 允许 T2 溢出脉冲在P3.0脚输出,Fck1 = 1/2 T1 溢出率
  942. b1 - T1CLKO    : 允许 T1 溢出脉冲在P3.4脚输出,Fck1 = 1/2 T1 溢出率
  943. b0 - T0CLKO    : 允许 T0 溢出脉冲在P3.5脚输出,Fck0 = 1/2 T0 溢出率
  944. */

  945. #define                LVD_InterruptEnable()                ELVD = 1
  946. #define                LVD_InterruptDisable()                ELVD = 0


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


  953. //sfr CLK_DIV = 0x97; //Clock Divder 系统时钟分频  -     -      -       -     -  CLKS2 CLKS1 CLKS0 xxxx,x000
  954. #define                SYSTEM_CLK_1T()                CLK_DIV &= ~0x07        //default
  955. #define                SYSTEM_CLK_2T()                CLK_DIV = (CLK_DIV & ~0x07) | 1
  956. #define                SYSTEM_CLK_4T()                CLK_DIV = (CLK_DIV & ~0x07) | 2
  957. #define                SYSTEM_CLK_8T()                CLK_DIV = (CLK_DIV & ~0x07) | 3
  958. #define                SYSTEM_CLK_16T()        CLK_DIV = (CLK_DIV & ~0x07) | 4
  959. #define                SYSTEM_CLK_32T()        CLK_DIV = (CLK_DIV & ~0x07) | 5
  960. #define                SYSTEM_CLK_64T()        CLK_DIV = (CLK_DIV & ~0x07) | 6
  961. #define                SYSTEM_CLK_128T()        CLK_DIV =  CLK_DIV          | 7

  962. #define                MCLKO_P54_None()        CLK_DIV &= ~0xc0                                        /* 主时钟不输出         */
  963. #define                MCLKO_P54_DIV1()        CLK_DIV  = (CLK_DIV & ~0xc0) | 0x40        /* 主时钟不分频输出 */
  964. #define                MCLKO_P54_DIV2()        CLK_DIV  = (CLK_DIV & ~0xc0) | 0x80        /* 主时钟2分频输出  */
  965. #define                MCLKO_P54_DIV4()        CLK_DIV  =  CLK_DIV | 0xc0                        /* 主时钟4分频输出  */

  966. #define                MCLKO_P34_None()        CLK_DIV &= ~0xc0                                        /* 主时钟不输出         */
  967. #define                MCLKO_P34_DIV1()        CLK_DIV  = (CLK_DIV & ~0xc0) | 0x40        /* 主时钟不分频输出 */
  968. #define                MCLKO_P34_DIV2()        CLK_DIV  = (CLK_DIV & ~0xc0) | 0x80        /* 主时钟2分频输出  */
  969. #define                MCLKO_P34_DIV4()        CLK_DIV  =  CLK_DIV | 0xc0                        /* 主时钟4分频输出  */

  970. //sfr BUS_SPEED = 0xA1; //Stretch register      -   -  -  -   -   -  EXRTS1  EXRTSS0 xxxx,xx10
  971. #define                BUS_SPEED_1T()        BUS_SPEED = 0
  972. #define                BUS_SPEED_2T()        BUS_SPEED = 1
  973. #define                BUS_SPEED_4T()        BUS_SPEED = 2
  974. #define                BUS_SPEED_8T()        BUS_SPEED = 3

  975. /*   interrupt vector */
  976. #define                INT0_VECTOR                0
  977. #define                TIMER0_VECTOR        1
  978. #define                INT1_VECTOR                2
  979. #define                TIMER1_VECTOR        3
  980. #define                UART1_VECTOR        4
  981. #define                ADC_VECTOR                5
  982. #define                LVD_VECTOR                6
  983. #define                PCA_VECTOR                7
  984. #define                UART2_VECTOR        8
  985. #define                SPI_VECTOR                9
  986. #define                INT2_VECTOR                10
  987. #define                INT3_VECTOR                11
  988. #define                TIMER2_VECTOR        12
  989. #define                INT4_VECTOR                16
  990. #define                UART3_VECTOR        17
  991. #define                UART4_VECTOR        18
  992. #define                TIMER3_VECTOR        19
  993. #define                TIMER4_VECTOR        20
  994. #define                CMP_VECTOR                21
  995. #define                PWM_VECTOR                22
  996. #define                PWMFD_VECTOR        23


  997. #define        TRUE        1
  998. #define        FALSE        0

  999. //=============================================================

  1000. //========================================

  1001. #define        PolityLow                        0        //低优先级中断
  1002. #define        PolityHigh                        1        //高优先级中断

  1003. //========================================

  1004. #define                MCLKO_None        0
  1005. #define                MCLKO_DIV1        1
  1006. #define                MCLKO_DIV2        2
  1007. #define                MCLKO_DIV4        3

  1008. #define                ENABLE                1
  1009. #define                DISABLE                0

  1010. #define                STC15F_L2K08S2        8
  1011. #define                STC15F_L2K16S2        16
  1012. #define                STC15F_L2K24S2        24
  1013. #define                STC15F_L2K32S2        32
  1014. #define                STC15F_L2K40S2        40
  1015. #define                STC15F_L2K48S2        48
  1016. #define                STC15F_L2K56S2        56
  1017. #define                STC15F_L2K60S2        60
  1018. #define                IAP15F_L2K61S2        61

  1019. #endif
复制代码
回复

使用道具 举报

ID:962941 发表于 2021-8-30 17:19 | 显示全部楼层
不用下载,在里边添加   #include <reg52.h>    然后编译就就有了。
回复

使用道具 举报

ID:57657 发表于 2021-8-30 18:33 | 显示全部楼层
Admin-51 发表于 2021-8-30 17:19
不用下载,在里边添加   #include     然后编译就就有了。

STC头文件,比 reg52.h 多一些特殊功能寄存器。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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