16f873.h
上传用户:sanfwan_06
上传日期:2007-12-18
资源大小:190k
文件大小:8k
源码类别:

串口编程

开发平台:

C/C++

  1. //////// Standard Header file for the PIC16F873 device ////////////////
  2. //#device PIC16F873
  3. #nolist
  4. //////// Program memory: 4096x14  Data RAM: 192  Stack: 8
  5. //////// I/O: 22   Analog Pins: 5
  6. //////// Data EEPROM: 256
  7. //////// C Scratch area: 20   ID Location: 2000
  8. //////// Fuses: LP,XT,HS,RC,NOWDT,WDT,NOPUT,PUT,PROTECT,PROTECT_5%
  9. //////// Fuses: PROTECT_50%,NOPROTECT,BROWNOUT,NOBROWNOUT,LVP,NOLVP,CPD
  10. //////// Fuses: NOCPD,WRT,NOWRT
  11. ////////
  12. ////////////////////////////////////////////////////////////////// I/O
  13. // Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(),
  14. //                         PORT_B_PULLUPS(), INPUT(),
  15. //                         OUTPUT_LOW(), OUTPUT_HIGH(),
  16. //                         OUTPUT_FLOAT(), OUTPUT_BIT()
  17. // Constants used to identify pins in the above are:
  18. #define PIN_A0  40
  19. #define PIN_A1  41
  20. #define PIN_A2  42
  21. #define PIN_A3  43
  22. #define PIN_A4  44
  23. #define PIN_A5  45
  24. #define PIN_B0  48
  25. #define PIN_B1  49
  26. #define PIN_B2  50
  27. #define PIN_B3  51
  28. #define PIN_B4  52
  29. #define PIN_B5  53
  30. #define PIN_B6  54
  31. #define PIN_B7  55
  32. #define PIN_C0  56
  33. #define PIN_C1  57
  34. #define PIN_C2  58
  35. #define PIN_C3  59
  36. #define PIN_C4  60
  37. #define PIN_C5  61
  38. #define PIN_C6  62
  39. #define PIN_C7  63
  40. ////////////////////////////////////////////////////////////////// Useful defines
  41. #define FALSE 0
  42. #define TRUE 1
  43. #define BYTE int
  44. #define BOOLEAN short int
  45. #define getc getch
  46. #define getchar getch
  47. #define putc putchar
  48. ////////////////////////////////////////////////////////////////// Control
  49. // Control Functions:  RESET_CPU(), SLEEP(), RESTART_CAUSE()
  50. // Constants returned from RESTART_CAUSE() are:
  51. #define WDT_FROM_SLEEP  0
  52. #define WDT_TIMEOUT     8
  53. #define MCLR_FROM_SLEEP 16
  54. #define NORMAL_POWER_UP 24
  55. ////////////////////////////////////////////////////////////////// Timer 0
  56. // Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER0(),
  57. //                              SET_TIMER0() or SET_RTCC(),
  58. //                              GET_TIMER0() or GET_RTCC()
  59. // Constants used for SETUP_TIMER0() are:
  60. #define RTCC_INTERNAL   0
  61. #define RTCC_EXT_L_TO_H 32
  62. #define RTCC_EXT_H_TO_L 48
  63. #define RTCC_DIV_2      0
  64. #define RTCC_DIV_4      1
  65. #define RTCC_DIV_8      2
  66. #define RTCC_DIV_16     3
  67. #define RTCC_DIV_32     4
  68. #define RTCC_DIV_64     5
  69. #define RTCC_DIV_128    6
  70. #define RTCC_DIV_256    7
  71. // Constants used for SETUP_COUNTERS() are the above
  72. // constants for the 1st param and the following for
  73. // the 2nd param:
  74. ////////////////////////////////////////////////////////////////// WDT
  75. // Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above)
  76. //                            RESTART_WDT()
  77. //
  78. #define WDT_18MS        8
  79. #define WDT_36MS        9
  80. #define WDT_72MS       10
  81. #define WDT_144MS      11
  82. #define WDT_288MS      12
  83. #define WDT_576MS      13
  84. #define WDT_1152MS     14
  85. #define WDT_2304MS     15
  86. ////////////////////////////////////////////////////////////////// Timer 1
  87. // Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1
  88. // Constants used for SETUP_TIMER_1() are:
  89. //      (or (via |) together constants from each group)
  90. #define T1_DISABLED         0
  91. #define T1_INTERNAL         0x85
  92. #define T1_EXTERNAL         0x87
  93. #define T1_EXTERNAL_SYNC    0x83
  94. #define T1_CLK_OUT          8
  95. #define T1_DIV_BY_1         0
  96. #define T1_DIV_BY_2         0x10
  97. #define T1_DIV_BY_4         0x20
  98. #define T1_DIV_BY_8         0x30
  99. ////////////////////////////////////////////////////////////////// Timer 2
  100. // Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2
  101. // Constants used for SETUP_TIMER_2() are:
  102. #define T2_DISABLED         0
  103. #define T2_DIV_BY_1         4
  104. #define T2_DIV_BY_4         5
  105. #define T2_DIV_BY_16        6
  106. ////////////////////////////////////////////////////////////////// CCP
  107. // CCP Functions: SETUP_CCPx, SET_PWMx_DUTY
  108. // CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH
  109. // Constants used for SETUP_CCPx() are:
  110. #define CCP_OFF                         0
  111. #define CCP_CAPTURE_FE                  4
  112. #define CCP_CAPTURE_RE                  5
  113. #define CCP_CAPTURE_DIV_4               6
  114. #define CCP_CAPTURE_DIV_16              7
  115. #define CCP_COMPARE_SET_ON_MATCH        8
  116. #define CCP_COMPARE_CLR_ON_MATCH        9
  117. #define CCP_COMPARE_INT                 0xA
  118. #define CCP_COMPARE_RESET_TIMER         0xB
  119. #define CCP_PWM                         0xC
  120. #define CCP_PWM_PLUS_1                  0x1c
  121. #define CCP_PWM_PLUS_2                  0x2c
  122. #define CCP_PWM_PLUS_3                  0x3c
  123. long CCP_1;
  124. #byte   CCP_1    =                      0x15
  125. #byte   CCP_1_LOW=                      0x15
  126. #byte   CCP_1_HIGH=                     0x16
  127. long CCP_2;
  128. #byte   CCP_2    =                      0x1B
  129. #byte   CCP_2_LOW=                      0x1B
  130. #byte   CCP_2_HIGH=                     0x1C
  131. ////////////////////////////////////////////////////////////////// SPI
  132. // SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN
  133. // Constants used in SETUP_SSP() are:
  134. #define SPI_MASTER       0x20
  135. #define SPI_SLAVE        0x24
  136. #define SPI_L_TO_H       0
  137. #define SPI_H_TO_L       0x10
  138. #define SPI_CLK_DIV_4    0
  139. #define SPI_CLK_DIV_16   1
  140. #define SPI_CLK_DIV_64   2
  141. #define SPI_CLK_T2       3
  142. #define SPI_SS_DISABLED  1
  143. #define SPI_SAMPLE_AT_END 0x8000
  144. #define SPI_XMIT_L_TO_H  0x4000
  145. ////////////////////////////////////////////////////////////////// ADC
  146. // ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A),
  147. //                SET_ADC_CHANNEL(), READ_ADC()
  148. // Constants used in SETUP_ADC_PORTS() are:
  149. #define NO_ANALOGS             0x86         // None
  150. #define ALL_ANALOG             0x80         // RA0 RA1 RA2 RA3 RA5 RE0 RE1 RE2 Ref=Vdd
  151. #define ANALOG_RA3_REF         0x81         // RA0 RA1 RA2 RA5 RE0 RE1 RE2 Ref=RA3
  152. #define A_ANALOG               0x82         // RA0 RA1 RA2 RA3 RA5 Ref=Vdd
  153. #define A_ANALOG_RA3_REF       0x83         // RA0 RA1 RA2 RA5 Ref=RA3
  154. #define RA0_RA1_RA3_ANALOG     0x84         // RA0 RA1 RA3 Ref=Vdd
  155. #define RA0_RA1_ANALOG_RA3_REF 0x85         // RA0 RA1 Ref=RA3
  156. #define ANALOG_RA3_RA2_REF              0x88   // RA0 RA1 RA5 RE0 RE1 RE2 Ref=RA2,RA3
  157. #define ANALOG_NOT_RE1_RE2              0x89   // RA0 RA1 RA2 RA3 RA5 RE0 Ref=Vdd
  158. #define ANALOG_NOT_RE1_RE2_REF_RA3      0x8A   // RA0 RA1 RA2 RA5 RE0 Ref=RA3
  159. #define ANALOG_NOT_RE1_RE2_REF_RA3_RA2  0x8B   // RA0 RA1 RA5 RE0 Ref=RA2,RA3
  160. #define A_ANALOG_RA3_RA2_REF            0x8C   // RA0 RA1 RA5 Ref=RA2,RA3
  161. #define RA0_RA1_ANALOG_RA3_RA2_REF      0x8D   // RA0 RA1 Ref=RA2,RA3
  162. #define RA0_ANALOG                      0x8E   // RA0
  163. #define RA0_ANALOG_RA3_RA2_REF          0x8F   // RA0 Ref=RA2,RA3
  164. // Constants used for SETUP_ADC() are:
  165. #define ADC_OFF                0
  166. #define ADC_CLOCK_DIV_2        1
  167. #define ADC_CLOCK_DIV_8     0x41
  168. #define ADC_CLOCK_DIV_32    0x81
  169. #define ADC_CLOCK_INTERNAL  0xc1
  170. ////////////////////////////////////////////////////////////////// INT
  171. // Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
  172. //                      EXT_INT_EDGE()
  173. //
  174. // Constants used in EXT_INT_EDGE() are:
  175. #define L_TO_H              0x40
  176. #define H_TO_L                 0
  177. // Constants used in ENABLE/DISABLE_INTERRUPTS() are:
  178. #define GLOBAL                    0x0BC0
  179. #define INT_RTCC                  0x0B20
  180. #define INT_RB                    0x0B08
  181. #define INT_EXT                   0x0B10
  182. #define INT_AD                    0x8C40
  183. #define INT_TBE                   0x8C10
  184. #define INT_RDA                   0x8C20
  185. #define INT_TIMER1                0x8C01
  186. #define INT_TIMER2                0x8C02
  187. #define INT_CCP1                  0x8C04
  188. #define INT_CCP2                  0x8D01
  189. #define INT_SSP                   0x8C08
  190. #define INT_BUSCOL                0x8D08
  191. #define INT_LOWVOLT               0x8D80
  192. #define INT_EEPROM                0x8D10
  193. #list