Advertisement
mike2545

Web thermostat .asm

Aug 31st, 2014
576
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. ; PICBASIC PRO(TM) Compiler 2.60A, (c) 1998, 2010 microEngineering Labs, Inc. All Rights Reserved.
  3. _USED           EQU 1
  4.  
  5.     INCLUDE "C:\PBP\18F1320.INC"
  6.  
  7.  
  8. ; Define statements.
  9. #define     INTHAND            INT_ENTRY_H  
  10. #define     INTLHAND              INT_ENTRY_L  
  11. #define     ReEnterHPused         1
  12. #define     PULSIN_MAX       1000
  13. #define     HSER_RCSTA       90h  
  14. #define     HSER_TXSTA       24h  
  15. #define     HSER_BAUD        9600  
  16. #define     HSER_SPBRG       25
  17. #define     HSER_CLROERR         1
  18. #define     DEBUG_REG        PORTA  
  19. #define     DEBUG_BIT        0
  20. #define     DEBUG_BAUD       9600
  21. #define     DEBUG_MODE       1
  22. #define     OSC      4
  23.  
  24. RAM_START               EQU 00000h
  25. RAM_END                 EQU 000FFh
  26. RAM_BANKS               EQU 00001h
  27. BANK0_START             EQU 00080h
  28. BANK0_END               EQU 000FFh
  29. BANKA_START             EQU 00000h
  30. BANKA_END               EQU 0007Fh
  31.  
  32. FLAGS                   EQU RAM_START + 000h
  33. R0                      EQU RAM_START + 001h
  34. R1                      EQU RAM_START + 003h
  35. R2                      EQU RAM_START + 005h
  36. R3                      EQU RAM_START + 007h
  37. R4                      EQU RAM_START + 009h
  38. R5                      EQU RAM_START + 00Bh
  39. R6                      EQU RAM_START + 00Dh
  40. R7                      EQU RAM_START + 00Fh
  41. R8                      EQU RAM_START + 011h
  42. T1                      EQU RAM_START + 013h
  43. T2                      EQU RAM_START + 015h
  44. GOP                     EQU RAM_START + 017h
  45. INT_Flags               EQU RAM_START + 018h
  46. RM1                     EQU RAM_START + 019h
  47. RM2                     EQU RAM_START + 01Ah
  48. RR1                     EQU RAM_START + 01Bh
  49. RR2                     EQU RAM_START + 01Ch
  50. RS1                     EQU RAM_START + 01Dh
  51. RS2                     EQU RAM_START + 01Eh
  52. wsave                   EQU RAM_START + 01Fh
  53. RetAddrH                EQU RAM_START + 020h
  54. RetAddrL                EQU RAM_START + 023h
  55. PB01                    EQU RAM_START + 026h
  56. _result                 EQU RAM_START + 027h
  57. _tC                     EQU RAM_START + 029h
  58. _temp                   EQU RAM_START + 02Bh
  59. _tempIn                 EQU RAM_START + 02Dh
  60. _tF                     EQU RAM_START + 02Fh
  61. _timelmt                EQU RAM_START + 031h
  62. _x                      EQU RAM_START + 033h
  63. _Attn                   EQU RAM_START + 035h
  64. _Day                    EQU RAM_START + 036h
  65. _hour                   EQU RAM_START + 037h
  66. _hyst                   EQU RAM_START + 038h
  67. _mem                    EQU RAM_START + 039h
  68. _mem1                   EQU RAM_START + 03Ah
  69. _mem2                   EQU RAM_START + 03Bh
  70. _mem3                   EQU RAM_START + 03Ch
  71. _mem4                   EQU RAM_START + 03Dh
  72. _mem5                   EQU RAM_START + 03Eh
  73. _mem6                   EQU RAM_START + 03Fh
  74. _Minute                 EQU RAM_START + 040h
  75. _mode                   EQU RAM_START + 041h
  76. _myTemp                 EQU RAM_START + 042h
  77. _Nb_var02               EQU RAM_START + 043h
  78. _Nb_var93               EQU RAM_START + 044h
  79. _program                EQU RAM_START + 045h
  80. _tempAdj_bit            EQU RAM_START + 046h
  81. _tempdown               EQU RAM_START + 047h
  82. _tempup                 EQU RAM_START + 048h
  83. fsave0H                 EQU RAM_START + 080h
  84. fsave0L                 EQU RAM_START + 082h
  85. fsave1H                 EQU RAM_START + 084h
  86. fsave1L                 EQU RAM_START + 086h
  87. fsave2H                 EQU RAM_START + 088h
  88. fsave2L                 EQU RAM_START + 08Ah
  89. bsave                   EQU RAM_START + 08Ch
  90. psaveH                  EQU RAM_START + 08Dh
  91. psaveL                  EQU RAM_START + 08Eh
  92. psaveUH                 EQU RAM_START + 08Fh
  93. psaveUL                 EQU RAM_START + 090h
  94. ssave                   EQU RAM_START + 091h
  95. _HP_Vars                EQU RAM_START + 092h
  96. _R0_SaveH               EQU _HP_Vars
  97. _R1_SaveH               EQU _HP_Vars + 004h
  98. _R2_SaveH               EQU _HP_Vars + 008h
  99. _R3_SaveH               EQU _HP_Vars + 00Ch
  100. _R4_SaveH               EQU _HP_Vars + 010h
  101. _R5_SaveH               EQU _HP_Vars + 012h
  102. _R6_SaveH               EQU _HP_Vars + 014h
  103. _R7_SaveH               EQU _HP_Vars + 016h
  104. _R8_SaveH               EQU _HP_Vars + 018h
  105. _Flag_GOP_H             EQU _HP_Vars + 01Ah
  106. _RM_H                   EQU _HP_Vars + 01Ch
  107. _RR_H                   EQU _HP_Vars + 01Eh
  108. _RS_H                   EQU _HP_Vars + 020h
  109. _T1_SaveH               EQU _HP_Vars + 022h
  110. _T2_SaveH               EQU _HP_Vars + 026h
  111. _T3_SaveH               EQU _HP_Vars + 02Ah
  112. _T4_SaveH               EQU _HP_Vars + 02Eh
  113. _T5_SaveH               EQU _HP_Vars + 032h
  114. _T6_SaveH               EQU _HP_Vars + 036h
  115. _T7_SaveH               EQU _HP_Vars + 03Ah
  116. _TBLPTRU_H              EQU _HP_Vars + 03Eh
  117. _TBLPTR_H               EQU _HP_Vars + 040h
  118. _Product_H              EQU _HP_Vars + 042h
  119. _PORTL                  EQU  PORTB
  120. _PORTH                  EQU  PORTA
  121. _TRISL                  EQU  TRISB
  122. _TRISH                  EQU  TRISA
  123. _Flags_SaveH            EQU _Flag_GOP_H
  124. _GOP_SaveH              EQU _Flag_GOP_H + 001h
  125. _RM1_SaveH              EQU _RM_H
  126. _RM2_SaveH              EQU _RM_H + 001h
  127. _RR1_SaveH              EQU _RR_H
  128. _RR2_SaveH              EQU _RR_H + 001h
  129. _RS1_SaveH              EQU _RS_H
  130. _RS2_SaveH              EQU _RS_H + 001h
  131. _TBLPTRU_SaveH          EQU _TBLPTRU_H
  132. _TBLPTRH_SaveH          EQU _TBLPTR_H + 001h
  133. _TBLPTRL_SaveH          EQU _TBLPTR_H
  134. _Flag_GOP_H??LOWBYTE        EQU _Flag_GOP_H
  135. _Flag_GOP_H??HIGHBYTE       EQU _Flag_GOP_H + 001h
  136. _RM_H??LOWBYTE          EQU _RM_H
  137. _RM_H??HIGHBYTE         EQU _RM_H + 001h
  138. _RR_H??LOWBYTE          EQU _RR_H
  139. _RR_H??HIGHBYTE         EQU _RR_H + 001h
  140. _RS_H??LOWBYTE          EQU _RS_H
  141. _RS_H??HIGHBYTE         EQU _RS_H + 001h
  142. _TBLPTRU_H??LOWBYTE     EQU _TBLPTRU_H
  143. _TBLPTR_H??HIGHBYTE     EQU _TBLPTR_H + 001h
  144. _TBLPTR_H??LOWBYTE      EQU _TBLPTR_H
  145. _tempIn??BYTE1          EQU _tempIn + 001h
  146. #define _Serviced_H         _INT_Flags??0
  147. #define _Serviced_L         _INT_Flags??1
  148. #define _InHPint            _INT_Flags??2
  149. #define _NoPriority         _INT_Flags??3
  150. #define _VarsSaved_H         PB01, 002h
  151. #define _lcd                _PORTA??6
  152. #define _DQ                 _PORTA??0
  153. #define _Clock              _PORTA??1
  154. #define _Reset              _PORTA??2
  155. #define _relay              _PORTB??2
  156. #define _up_button          _PORTA??3
  157. #define _Down_button        _PORTA??4
  158. #define _sign               _tempIn??BIT8
  159. #define _time_bit            PB01, 001h
  160. #define _backlight_bit       PB01, 000h
  161. #define _INT_Flags??0        INT_Flags, 000h
  162. #define _INT_Flags??1        INT_Flags, 001h
  163. #define _INT_Flags??2        INT_Flags, 002h
  164. #define _INT_Flags??3        INT_Flags, 003h
  165. #define _PORTA??6            PORTA, 006h
  166. #define _PORTA??0            PORTA, 000h
  167. #define _PORTA??1            PORTA, 001h
  168. #define _PORTA??2            PORTA, 002h
  169. #define _PORTB??2            PORTB, 002h
  170. #define _PORTA??3            PORTA, 003h
  171. #define _PORTA??4            PORTA, 004h
  172. #define _tempIn??BIT8       _tempIn + 001h, 000h
  173. #define _tC??BIT15          _tC + 001h, 007h
  174. #define _RCSTA??4            RCSTA, 004h
  175.  
  176. ; Constants.
  177. _T2400                  EQU 00000h
  178. _T1200                  EQU 00001h
  179. _T9600                  EQU 00002h
  180. _T300                   EQU 00003h
  181. _N2400                  EQU 00004h
  182. _N1200                  EQU 00005h
  183. _N9600                  EQU 00006h
  184. _N300                   EQU 00007h
  185. _OT2400                 EQU 00008h
  186. _OT1200                 EQU 00009h
  187. _OT9600                 EQU 0000Ah
  188. _OT300                  EQU 0000Bh
  189. _ON2400                 EQU 0000Ch
  190. _ON1200                 EQU 0000Dh
  191. _ON9600                 EQU 0000Eh
  192. _ON300                  EQU 0000Fh
  193. _MSBPRE                 EQU 00000h
  194. _LSBPRE                 EQU 00001h
  195. _MSBPOST                EQU 00002h
  196. _LSBPOST                EQU 00003h
  197. _LSBFIRST               EQU 00000h
  198. _MSBFIRST               EQU 00001h
  199. _CLS                    EQU 00000h
  200. _HOME                   EQU 00001h
  201. _BELL                   EQU 00007h
  202. _BKSP                   EQU 00008h
  203. _TAB                    EQU 00009h
  204. _CR                     EQU 0000Dh
  205. _UnitOn                 EQU 00012h
  206. _UnitOff                EQU 0001Ah
  207. _UnitsOff               EQU 0001Ch
  208. _LightsOn               EQU 00014h
  209. _LightsOff              EQU 00010h
  210. _Dim                    EQU 0001Eh
  211. _Bright                 EQU 00016h
  212. _Baud                   EQU 00054h
  213. _BaudMode               EQU 00054h
  214. _RdTmp                  EQU 000AAh
  215. _WrHi                   EQU 00001h
  216. _WrLo                   EQU 00002h
  217. _RdHi                   EQU 000A1h
  218. _RdLo                   EQU 000A2h
  219. _RdCntr                 EQU 000A0h
  220. _RdSlope                EQU 000A9h
  221. _StartC                 EQU 000EEh
  222. _StopC                  EQU 00022h
  223. _WrCfg                  EQU 0000Ch
  224. _RdCfg                  EQU 000ACh
  225. _DegSym                 EQU 000BAh
  226.  
  227. ; EEPROM data.
  228.  
  229.  
  230.     INCLUDE "WEBTHE~3.MAC"
  231.     INCLUDE "C:\PBP\PBPPIC18.LIB"
  232.  
  233.  
  234.     ASM?
  235.  
  236. ;----[Module defaults]------------------------------------------------------
  237.   #define SHOWDIGITALDEFAULT  0
  238.   ifdef SHOWDIGITAL
  239. SHOWDIGITALRESULT = SHOWDIGITAL
  240.   else
  241. SHOWDIGITALRESULT = SHOWDIGITALDEFAULT
  242.   endif
  243.   ifndef PM_USED
  244.     ifndef ADLISTALL
  245.       nolist
  246.     endif
  247.   endif
  248.  
  249. ;----[Attempt to Set a registers Value]-------------------------------------
  250. SetReg  macro RegOut, Cin
  251.     ifndef PM_USED
  252.       ifndef ADLISTALL
  253.         nolist
  254.       endif
  255.     endif
  256.    
  257.     ifdef RegOut
  258.       ifndef PM_USED
  259.         list
  260.       endif
  261.       MOVE?CB  Cin, RegOut
  262.       if (SHOWDIGITALRESULT == 1)
  263.         ifndef PM_USED
  264.           messg RegOut = Cin
  265.         endif
  266.       endif
  267.       ifndef PM_USED
  268.         ifndef ADLISTALL
  269.           nolist
  270.         endif
  271.       endif
  272.     endif
  273.   endm
  274.  
  275. ;----[A/D Converter registers]----------------------------------------------
  276.   ifdef ANSEL0
  277.     SetReg  ANSEL0, 0             ; if chip has ANSEL0, clear it
  278.   endif
  279.   ifdef ANSEL1
  280.     SetReg  ANSEL1, 0             ; if chip has ANSEL1, clear it
  281.   endif
  282.   ifdef ANSELA
  283.     SetReg  ANSELA, 0             ; if chip has ANSELA, clear it
  284.   endif
  285.   ifdef ANSELB
  286.     SetReg  ANSELB, 0             ; if chip has ANSELB, clear it
  287.   endif
  288.   ifdef ANSELD
  289.     SetReg  ANSELD, 0             ; if chip has ANSELD, clear it
  290.   endif
  291.   ifdef ANSELE
  292.     SetReg  ANSELE, 0             ; if chip has ANSELE, clear it
  293.   endif
  294.   ifdef ANSEL
  295.     SetReg  ANSEL, 0              ; if chip has ANSEL(s), clear them
  296.     SetReg  ANSELH, 0
  297.   else
  298.     ifdef ANCON0                  ; Several chips use ANCON0 and ANCON1
  299.       ifdef ADSHR                 ; if chip has shared address SFR's
  300.         MOVE?CT  1, WDTCON,ADSHR  ;   switch to shared address registers
  301.         if (SHOWDIGITALRESULT == 1)
  302.           messg WDTCON.4 = 1
  303.         endif
  304.       endif
  305.       SetReg  ANCON0, 0xFF        ;  
  306.       ifdef PCFG15                ;  0 = Analog with these bits
  307.         SetReg  ANCON1, 0xFF
  308.       else
  309.         SetReg  ANCON1, 0x7F
  310.       endif
  311.       ifdef ADSHR                 ; if chip has shared address SFR's
  312.         MOVE?CT  0, WDTCON,ADSHR  ;   put SFR's back to legacy
  313.         if (SHOWDIGITALRESULT == 1)
  314.           messg WDTCON.4 = 0
  315.         endif
  316.       endif
  317.     else
  318.       ifdef PCFG6                 ; Some chips use ADCON1 bits
  319.         SetReg ADCON1, 0x7F       ;  the same way as ANCONx
  320.       else
  321.         ifdef PCFG3               ; if there's a PCFG3 bit
  322.           ifdef ADCON2            ;  but has no ADCON2, more than 8 A/D's
  323.             SetReg  ADCON1, 0x0F  ;   A/D cfg from table = 0x0F
  324.           else
  325.             SetReg  ADCON1, 7     ; most common, 8 or less A/D ch's
  326.           endif
  327.         else
  328.           ifdef PCFG2
  329.             ifdef ADCON1
  330.               SetReg  ADCON1, 7   ; A/D is 8-bit, 5 ch's
  331.             endif
  332.           else
  333.             ifdef ADCON0          ; if there's an ADCON0
  334.               ifndef ADCON1       ;  but not an ADCON1
  335.                 SetReg  ADCON0, 0 ;  A/D is 8-bit and ADS bits are in ADCON0
  336.               endif
  337.             endif
  338.           endif
  339.         endif
  340.       endif
  341.     endif
  342.   endif
  343.    
  344. ;----[Comparators]----------------------------------------------------------
  345.   ifdef CMCON
  346.     ifdef CMEN0       ; 18F1230/1330
  347.       ;SetReg CMCON, 0 ; default already
  348.     else
  349.       ifdef CM2
  350.         SetReg CMCON, 7
  351.       else
  352.         ifdef PM_USED
  353.           "ALLDIGITAL: CMCON value not found"
  354.         else
  355.           messg "ALLDIGITAL: CMCON value not found"
  356.         endif
  357.       endif
  358.     endif
  359.   endif
  360.  
  361.   ifdef CMCON0
  362.     ifdef NOT_COUTEN            
  363.       SetReg CMCON0, 0xF1       ; 10F204/206
  364.     else
  365.       ifdef CMCH
  366.         SetReg CMCON0, 0        ; 12F609/615
  367.       else
  368.         ifdef CM2
  369.           SetReg CMCON0, 7      ; 12F635/683,
  370.         else                    ; 16F636/639/684/688/913/914/916/917/946
  371.           ifndef PM_USED
  372.             "ALLDIGITAL: CMCON0 value not found"
  373.           else  
  374.             messg "ALLDIGITAL: CMCON0 value not found"
  375.           endif  
  376.         endif
  377.       endif
  378.     endif
  379.   endif
  380.  
  381.   ifdef CM1CON0                 ; individual comparator controls
  382.     ifdef NOT_C1OUTEN          
  383.       SetReg CM1CON0, 0xF1      ; 12F510/506, 16F526
  384.     else
  385. ;      SetReg CM1CON0, 0         ; these already default to 0 --------------
  386.     endif                       ; 16F882/883/884/886/887/ 610/616
  387.   endif                         ; 16F631/677/685/687/689/690
  388.                                
  389.                                 ; these aren't 0, but default to OFF
  390.                                 ; 18F24J11/25J11/26J11/44J11/45J11/46J11
  391.                                 ; 18F24J50/25J50/26J50/44J50/45J50/46J50
  392.   ifdef CM2CON0
  393.     ifdef NOT_C2OUTEN            
  394.       SetReg CM2CON0, 0xF1
  395.     else
  396. ;      SetReg CM2CON0, 0         ; already default to 0 -----see above-
  397.     endif
  398.   endif
  399.    
  400. ; CM1CON                      ; these aren't 0, but default to OFF
  401.                               ; 18F65J50/66J50/66J55/67J50/66J11/66J16/67J11
  402. ; CM2CON                      ; 18F85J50/86J50/86J55/87J50/86J11/86J16/87J11
  403.  
  404.   ifndef PM_USED
  405.     list
  406.   endif
  407.  
  408.  
  409.     ENDASM?
  410.  
  411.     DDISABLE?  
  412.     MOVE?CB 000h, INT_Flags
  413.     GOTO?L  _OVER_DT_INTS_18
  414.  
  415.     ASM?
  416.  
  417. ;____ Check for PBPL (PBP ver. 2.50 and above only)__________________________
  418. PBPLongs_Used = 0
  419.   if (R1 - R0 == 4)
  420. PBPLongs_Used = 1
  421. ;    messg PBPL Used = 1
  422.   endif
  423.  
  424.   nolist
  425. ;____ DEFINE available interrupt sources_____________________________________
  426.  
  427.   #define INT_INT   INTCON, INT0IF  ;-- INT External, 16F compatible
  428.   #define INT0_INT  INTCON, INT0IF  ;-- INT0 External
  429.   #define INT1_INT  INTCON3,INT1IF  ;-- INT1 External
  430.   #define INT2_INT  INTCON3,INT2IF  ;-- INT2 External
  431.   #define INT3_INT  INTCON3,INT3IF  ;-- INT3 External
  432.   #define RBC_INT   INTCON, RBIF    ;-- RB Port Change
  433.   #define TMR0_INT  INTCON, TMR0IF  ;-- TMR0 Overflow  18F
  434.   #define TMR1_INT  PIR1, TMR1IF    ;-- TMR1 Overflow
  435.   #define TMR2_INT  PIR1, TMR2IF    ;-- TMR2 to PR2 Match
  436.   #define TMR3_INT  PIR2, TMR3IF    ;-- TMR3 Overflow
  437.   #define TMR4_INT  PIR3, TMR4IF    ;-- TMR4 Overflow
  438.   #define TX_INT    PIR1, TXIF      ;-- USART Transmit
  439.   #define TX1_INT   PIR1, TX1IF     ;-- USART1 Transmit
  440.   #define TX2_INT   PIR3, TX2IF     ;-- USART2 Transmit
  441.   #define RX_INT    PIR1, RCIF      ;-- USART Receive
  442.   #define RX1_INT   PIR1, RC1IF     ;-- USART1 Receive
  443.   #define RX2_INT   PIR3, RC2IF     ;-- USART2 Receive
  444.   #define CMP_INT   PIR2, CMIF      ;-- Comparator
  445.   #define EE_INT    PIR2, EEIF      ;-- EEPROM/FLASH Write Operation
  446.   #define BUS_INT   PIR2, BCLIF     ;-- Bus Collision
  447.   #define LVD_INT   PIR2, LVDIF     ;-- Low Voltage Detect
  448.   #define HLVD_INT  PIR2, HLVDIF    ;-- High/Low Voltage Detect
  449.   #define PSP_INT   PIR1, PSPIF     ;-- Parallel Slave Port Read/Write
  450.   #define AD_INT    PIR1, ADIF      ;-- A/D Converter
  451.   #define SSP_INT   PIR1, SSPIF     ;-- Master Synchronous Serial Port
  452.   #define CCP1_INT  PIR1, CCP1IF    ;-- CCP1
  453.   #define CCP2_INT  PIR2, CCP2IF    ;-- CCP2
  454.   #define CCP3_INT  PIR3, CCP3IF    ;-- CCP3
  455.   #define CCP4_INT  PIR3, CCP4IF    ;-- CCP4
  456.   #define CCP5_INT  PIR3, CCP5IF    ;-- CCP5
  457.   #define OSC_INT   PIR2, OSCFIF    ;-- Oscillator Fail
  458.  
  459. ; -- Added for ver. 3.2 --
  460.   #define SPP_INT   PIR1, SPPIF     ;-- Streaming Parallel Port Read/Write
  461.   #define BUS1_INT  PIR2, BCL1IF    ;-- Bus 1 Collision
  462.   #define BUS2_INT  PIR3, BCL2IF    ;-- Bus 2 Collision
  463.   #define ECCP1_INT PIR2, ECCP1IF   ;-- ECCP1
  464.   #define LCD_INT   PIR3, LCDIF     ;-- LCD Driver
  465.   #define PMP_INT   PIR1, PMPIF     ;-- Parallel Master Port
  466.   #define SSP1_INT  PIR1, SSP1IF    ;-- Synchronous Serial Port 1
  467.   #define SSP2_INT  PIR3, SSP2IF    ;-- Synchronous Serial Port 2
  468.   #define TMR5_INT  PIR3, TMR5IF    ;-- Timer 5
  469.   #define PT_INT    PIR3, PTIF      ;-- PWM Time Base
  470.   #define IC1IF_INT  PIR3, IC1IF    ;-- Motion Feedback
  471.   #define IC2QEIF_INT  PIR3, IC2QEIF  ;-- Motion Feedback
  472.   #define IC3DRIF_INT  PIR3, IC3DRIF  ;-- Motion Feedback
  473.  
  474. ;_____ Comparators __________________________________________________________
  475.   #define CMP0_INT  PIR1, CMP0IF    ;-- Comparator 0 - 1230/1330 only
  476.  
  477. CMPIFREG = PIR2                     ;-- Comparator 1
  478. CMPIEREG = PIE2
  479. CMPIPREG = IPR2
  480.     ifdef C1IF                      ;     18F24K20  18F25K20  18F26K20
  481. CM1IFBIT = C1IF                     ;     18F44K20  18F45K20  18F46K20
  482.     endif
  483.     ifdef CM1IF
  484. CM1IFBIT = CM1IF                    ;     several J PICs
  485.     endif
  486.     ifdef CMP1IF
  487. CMPIFREG = PIR1                     ;     1230/1330 only
  488. CM1IFBIT = CMP1IF
  489. CMPIEREG = PIE1
  490. CMPIPREG = IPR1
  491.     endif
  492.  
  493.     ifdef CM1IFBIT
  494.        #define CMP1_INT  CMPIFREG, CM1IFBIT    
  495.     endif
  496.  
  497.     ifdef C2IF                      ;-- Comparator 2
  498. CM2IFBIT = C2IF                     ;     18F24K20  18F25K20  18F26K20
  499.     endif                           ;     18F44K20  18F45K20  18F46K20
  500.     ifdef CM2IF
  501. CM2IFBIT = CM2IF                    ;     several J PICs
  502.     endif    
  503.     ifdef CMP2IF
  504. CM2IFBIT = CMP2IF                   ;     1230/1330 only
  505.     endif    
  506.  
  507.     ifdef CM2IFBIT
  508.       #define CMP2_INT  CMPIFREG, CM2IFBIT    
  509.     endif
  510.  
  511. ;_____ USB Module ___________________________________________________________
  512.  
  513.   #define USB_INT       PIR2, USBIF   ;-- USB Interrupt (funnel)
  514.   #define USB_ACTV_INT  UIR,  ACTVIF  ;-- Bus Activity Detect
  515.   #define USB_ERR_INT   UIR,  UERRIF  ;-- USB Error Condition INT (funnel)
  516.   #define USB_RST_INT   UIR,  URSTIF  ;-- USB Reset
  517.   #define USB_IDLE_INT  UIR,  IDLEIF  ;-- Idle Detect
  518.   #define USB_STALL_INT UIR,  STALLIF ;-- A STALL Handshake
  519.   #define USB_TRN_INT   UIR,  TRNIF   ;-- Transaction Complete
  520.   #define USB_SOF_INT   UIR,  SOFIF   ;-- START-OF-FRAME Token
  521.  
  522. ; -- USB Error Flags --
  523.   #define USB_BTO_INT   UEIR, BTOEF   ;-- Bus Turnaround Time-out Error
  524.   #define USB_BTS_INT   UEIR, BTSEF   ;-- Bit Stuff Error
  525.   #define USB_CRC16_INT UEIR, CRC16EF ;-- CRC16 Failure
  526.   #define USB_CRC5_INT  UEIR, CRC5EF  ;-- CRC5 Host Error
  527.   #define USB_DFN8_INT  UEIR, DFN8EF  ;-- Data Field Size Error
  528.   #define USB_PID_INT   UEIR, PIDEF   ;-- PID Check Failure
  529.    
  530. ;_____ Ethernet Module ______________________________________________________
  531.   #define ETH_INT       PIR2, ETHIF   ;-- Ethernet Module
  532.   #define ETH_DMA_INT    EIR, DMAIF   ;-- DMA Interrupt
  533.   #define ETH_LINK_INT   EIR, LINKIF  ;-- Link Status Change
  534.   #define ETH_PKT_INT    EIR, PKTIF   ;-- Receive Packet Pending
  535.   #define ETH_RXER_INT   EIR, RXERIF  ;-- Receive Error
  536.   #define ETH_TXER_INT   EIR, TXERIF  ;-- Transmit Error
  537.   #define ETH_TX_INT     EIR, TXIF    ;-- Transmit
  538.  
  539. ;_____ CAN Module ___________________________________________________________
  540.   #define CAN_ERR_INT    PIR3, ERRIF    ;-- CAN bus Error
  541.   #define CAN_IRX_INT    PIR3, IRXIF    ;-- Invalid Received Message
  542.   #define CAN_RXB0_INT   PIR3, RXB0IF   ;-* Receive Buffer 0      Mode 0
  543.   #define CAN_FIFOWM_INT PIR3, FIFOWMIF ;-- FIFO Watermark        Mode 1, 2
  544.   #define CAN_RXB1_INT   PIR3, RXB1IF   ;-* Receive Buffer 1      Mode 0
  545.   #define CAN_RXBn_INT   PIR3, RXBnIF   ;-- Any Receive Buffer    Mode 1, 2
  546.   #define CAN_TXB0_INT   PIR3, TXB0IF   ;-- Transmit Buffer 0
  547.   #define CAN_TXB1_INT   PIR3, TXB1IF   ;-- Transmit Buffer 1
  548.   #define CAN_TXB2_INT   PIR3, TXB2IF   ;-* Transmit Buffer 2     Mode 0
  549.   #define CAN_TXBn_INT   PIR3, TXBnIF   ;-- Any Transmit Buffer   Mode 1, 2
  550.   #define CAN_WAKE_INT   PIR3, WAKIF    ;-- CAN bus Activity Wake-up
  551.  
  552.  
  553.     ENDASM?
  554.  
  555.  
  556.     ASM?
  557.  
  558. ; -- macro --
  559. INT_Source  macro  IFR, IFB, IER, IEB, IPR, IPB
  560.     if (IflagReg == IFR) && (IflagBit == IFB)  
  561.   list  
  562. INT_Flag_Reg = IFR
  563. INT_Flag_Bit = IFB
  564. INT_Enable_Reg = IER
  565. INT_Enable_Bit = IEB
  566. INT_Priority_Reg = IPR
  567. INT_Priority_Bit = IPB
  568. Found = 1
  569.     endif
  570.   nolist  
  571.     endm
  572.  
  573.  
  574.     ENDASM?
  575.  
  576.  
  577.     ASM?
  578.  
  579. ;____________________________________________________________________________
  580. GetIntInfo  macro  IflagReg, IflagBit
  581.   nolist
  582. INT_Flag_Reg = -1
  583. INT_Flag_Bit = -1
  584. INT_Enable_Reg = -1
  585. INT_Enable_Bit = -1
  586.   ifdef  IPR1
  587. INT_Priority_Reg = -1
  588. INT_Priority_Bit = -1
  589.   endif
  590. Found = 0
  591.  
  592.   ifdef INT0IF  ;----{ INT0 External Interrupt }----------[INTCON, INT0IF]---
  593.       INT_Source  INTCON,INT0IF, INTCON,INT0IE, -1, -1
  594.   endif
  595.   ifdef INT1IF  ;----{ INT1 External Interrupt }---------[INTCON3, INT1IF]---
  596.       INT_Source  INTCON3,INT1IF, INTCON3,INT1IE, INTCON3,INT1IP
  597.   endif
  598.   ifdef INT2IF  ;----{ INT2 External Interrupt }---------[INTCON3, INT2IF]---
  599.       INT_Source  INTCON3,INT2IF, INTCON3,INT2IE, INTCON3,INT2IP
  600.   endif
  601.   ifdef INT3IF  ;----{ INT3 External Interrupt }---------[INTCON3, INT3IF]---
  602.       INT_Source  INTCON3,INT3IF, INTCON3,INT3IE, INTCON2,INT3IP
  603.   endif
  604.   ifdef RBIF    ;----{ RB Port Change Interrupt }-----------[INTCON, RBIF]---
  605.       INT_Source  INTCON,RBIF, INTCON, RBIE,INTCON2,RBIP
  606.   endif
  607.   ifdef TMR0IF  ;----{ TMR0 Overflow Interrupt }----------[INTCON, TMR0IF]---
  608.       INT_Source  INTCON,TMR0IF, INTCON,TMR0IE, INTCON2,TMR0IP
  609.   endif
  610.   ifdef TMR1IF  ;----{ TMR1 Overflow Interrupt }------------[PIR1, TMR1IF]---
  611.       INT_Source  PIR1,TMR1IF, PIE1,TMR1IE, IPR1,TMR1IP
  612.   endif
  613.   ifdef TMR2IF  ;----{ TMR2 to PR2 Match Interrupt }--------[PIR1, TMR2IF]---
  614.       INT_Source  PIR1,TMR2IF, PIE1,TMR2IE, IPR1,TMR2IP
  615.   endif
  616.   ifdef TMR3IF  ;----{ TMR3 Overflow Interrupt }------------[PIR2, TMR3IF]---
  617.       INT_Source  PIR2,TMR3IF, PIE2,TMR3IE, IPR2,TMR3IP
  618.   endif
  619.   ifdef TMR4IF  ;----{ TMR4 Overflow Interrupt }------------[PIR3, TMR4IF]---
  620.       INT_Source  PIR3,TMR4IF, PIE3,TMR4IE, IPR3,TMR4IP
  621.   endif
  622.   ifndef TX1IF  ;----{ USART Transmit Interrupt }-------------[PIR1, TXIF]---
  623.       ifdef TXIF
  624.           INT_Source  PIR1,TXIF, PIE1,TXIE, IPR1,TXIP
  625.       endif
  626.   endif
  627.   ifdef TX1IF   ;----{ USART1 Transmit Interrupt }-----------[PIR1, TX1IF]---
  628.       INT_Source  PIR1,TX1IF, PIE1,TX1IE, IPR1,TX1IP
  629.   endif
  630.   ifdef TX2IF   ;----{ USART2 Transmit Interrupt }-----------[PIR3, TX2IF]---
  631.       INT_Source  PIR3,TX2IF, PIE3,TX2IE, IPR3,TX2IP
  632.   endif
  633.   ifndef RC1IF  ;----{ USART Receive Interrupt }---------------[PIR1 RCIF]---  
  634.     ifdef RCIF
  635.         INT_Source  PIR1,RCIF, PIE1,RCIE, IPR1,RCIP
  636.     endif
  637.   endif
  638.   ifdef RC1IF   ;----{ USART1 Receive Interrupt }------------[PIR1, RC1IF]---
  639.       INT_Source  PIR1,RC1IF, PIE1,RC1IE, IPR1,RC1IP
  640.   endif
  641.   ifdef RC2IF   ;----{ USART2 Receive Interrupt }------------[PIR3, RC2IF]---
  642.       INT_Source  PIR3,RC2IF, PIE3,RC2IE, IPR3,RC2IP
  643.   endif
  644.   ifdef CMIF    ;----{ Comparator Interrupt }-----------------[PIR2, CMIF]---
  645.       INT_Source  PIR2,CMIF, PIE2,CMIE, IPR2,CMIP
  646.   endif
  647.   ifdef EEIF    ;----{ EEPROM/FLASH Write Operation Interrupt [PIR2, EEIF]---
  648.       INT_Source  PIR2,EEIF, PIE2,EEIE, IPR2,EEIP
  649.   endif
  650.   ifdef BCLIF   ;----{ Bus Collision Interrupt }-------------[PIR2, BCLIF]---
  651.       INT_Source  PIR2,BCLIF, PIE2,BCLIE, IPR2,BCLIP
  652.   endif
  653.   ifdef LVDIF   ;----{ Low Voltage Detect Interrupt }--------[PIR2, LVDIF]---
  654.       INT_Source  PIR2,LVDIF, PIE2,LVDIE, IPR2,LVDIP
  655.   endif
  656.   ifdef HLVDIF  ;----{ High/Low Voltage Detect Interrupt }--[PIR2, HLVDIF]---
  657.       INT_Source  PIR2,HLVDIF, PIE2,HLVDIE, IPR2,HLVDIP
  658.   endif
  659.   ifdef PSPIF   ;----{ Parallel Slave Port Interrupt }-------[PIR1, PSPIF]---
  660.       INT_Source  PIR1,PSPIF, PIE1,PSPIE, IPR1,PSPIP
  661.   endif
  662.   ifdef ADIF    ;----{ A/D Converter Interrupt }--------------[PIR1, ADIF]---
  663.       INT_Source  PIR1,ADIF, PIE1,ADIE, IPR1,ADIP
  664.   endif
  665.   ifdef SSPIF   ;----{ Synchronous Serial Port Interrupt }---[PIR1, SSPIF]---
  666.       INT_Source  PIR1,SSPIF, PIE1,SSPIE, IPR1,SSPIP
  667.   endif
  668.   ifdef CCP1IF  ;----{ CCP1 Interrupt }---------------------[PIR1, CCP1IF]---
  669.       INT_Source  PIR1,CCP1IF, PIE1,CCP1IE, IPR1,CCP1IP
  670.   endif
  671.   ifdef CCP2IF  ;----{ CCP2 Interrupt Flag }----------------[PIR2, CCP2IF]---
  672.       INT_Source  PIR2,CCP2IF, PIE2,CCP2IE, IPR2,CCP2IP
  673.   endif
  674.   ifdef CCP3IF  ;----{ CCP3 Interrupt Flag }----------------[PIR3, CCP3IF]---
  675.       INT_Source  PIR3,CCP3IF, PIE3,CCP3IE, IPR3,CCP3IP
  676.   endif
  677.   ifdef CCP4IF  ;----{ CCP4 Interrupt Flag }----------------[PIR3, CCP4IF]---
  678.       INT_Source  PIR3,CCP4IF, PIE3,CCP4IE, IPR3,CCP4IP
  679.   endif
  680.   ifdef CCP5IF  ;----{ CCP5 Interrupt Flag }----------------[PIR3, CCP5IF]---
  681.       INT_Source  PIR3,CCP5IF, PIE3,CCP5IE, IPR3,CCP5IP
  682.   endif
  683.   ifdef OSCFIF  ;----{ Osc Fail  Interrupt Flag }-----------[PIR2, OSCFIF]---
  684.       INT_Source  PIR2,OSCFIF, PIE2,OSCFIE, IPR2,OSCFIP
  685.   endif
  686.  
  687.  
  688.     ENDASM?
  689.  
  690.  
  691.     ASM?
  692.  
  693. ; -- Added for ver. 3.2 --
  694.   ifdef SPPIF   ;----{ Streaming Parallel Port Read/Write }--[PIR1, SPPIF]---
  695.       INT_Source  PIR1,SPPIF, PIE1,SPPIE, IPR1,SPPIP
  696.   endif
  697.   ifdef BCL1IF  ;----{ Bus 1 Collision }--------------------[PIR2, BCL1IF]---
  698.       INT_Source  BUS1_INT, PIE2,BCL1IE, IPR2,BCL1IP
  699.   endif
  700.   ifdef BCL2IF  ;----{ Bus 2 Collision }--------------------[PIR3, BCL2IF]---
  701.       INT_Source  BUS2_INT, PIE3,BCL2IE, IPR3,BCL2IP
  702.   endif
  703.   ifdef CMP0IF  ;----{ Comparator 0 }-----------------------[PIR1, CMP0IF]---
  704.       INT_Source  CMP0_INT, PIE1,CMP0IE, IPR1,CMP0IP
  705.   endif
  706.   ifdef CM1IFBIT  ;--{ Comparator 1 }-----------------------------[varies]---
  707.       INT_Source  CMP1_INT, CMPIEREG,CM1IFBIT, CMPIPREG,CM1IFBIT
  708.   endif
  709.   ifdef CM2IFBIT  ;--{ Comparator 2 }-----------------------------[varies]---
  710.       INT_Source  CMP2_INT, CMPIEREG,CM2IFBIT, CMPIPREG,CM2IFBIT
  711.   endif
  712.   ifdef ECCP1IF  ;---{ ECCP1 }-----------------------------[PIR2, ECCP1IF]---
  713.       INT_Source  ECCP1_INT, PIE2,ECCP1IE, IPR2,ECCP1IP
  714.   endif
  715.   ifdef LCDIF   ;----{ LCD Driver }--------------------------[PIR3, LCDIF]---
  716.       INT_Source  LCD_INT, PIE3,LCDIE, IPR3,LCDIP
  717.   endif
  718.   ifdef PMPIF   ;----{ Parallel Master Port }----------------[PIR1, PMPIF]---
  719.       INT_Source  PMP_INT, PIE1,PMPIE, IPR1,PMPIP
  720.   endif
  721.   ifdef SSP1IF  ;----{ Synchronous Serial Port 1 }----------[PIR1, SSP1IF]---
  722.       INT_Source  SSP1_INT, PIE1,SSP1IE, IPR1,SSP1IP
  723.   endif
  724.   ifdef SSP2IF  ;----{ Synchronous Serial Port 2 }----------[PIR3, SSP2IF]---
  725.       INT_Source  SSP2_INT, PIE3,SSP2IE, IPR3,SSP2IP
  726.   endif
  727.   ifdef TMR5IF  ;----{ Timer 5 }----------------------------[PIR3, TMR5IF]---
  728.       INT_Source  TMR5_INT, PIE3,TMR5IE, IPR3,TMR5IP
  729.   endif
  730.   ifdef PTIF    ;----{ PWM Time Base }------------------------[PIR3, PTIF]---
  731.       INT_Source  PT_INT, PIE3,PTIE, IPR3,PTIP
  732.   endif
  733.   ifdef IC1IF   ;----{ Motion Feedback IC1}------------------[PIR3, IC1IF]---
  734.       INT_Source  IC1IF_INT, PIE3,IC1IE, IPR3,IC1IP
  735.   endif
  736.   ifdef IC2QEIF ;----{ Motion Feedback IC2QE}--------------[PIR3, IC2QEIF]---
  737.       INT_Source  IC2QEIF_INT, PIE3,IC2QEIE, IPR3,IC2QEIP
  738.   endif
  739.   ifdef IC3DRIF ;----{ Motion Feedback IC3DR}--------------[PIR3, IC3DRIF]---
  740.       INT_Source  IC3DRIF_INT, PIE3,IC3DRIE, IPR3,IC3DRIP
  741.   endif
  742.  
  743. ;  ifdef   ;----{  }-------------[, ]---
  744. ;      INT_Source  , ,, ,
  745. ;  endif
  746.  
  747.  
  748.     ENDASM?
  749.  
  750.  
  751.     ASM?
  752.   ; -- USB sources --
  753.   ifdef USBIF   ;----{ USB  Interrupt funnel }---------------[PIR2, USBIF]---
  754.       INT_Source  PIR2,USBIF, PIE2,USBIE, IPR2,USBIP
  755.          
  756.                 ;----{ Bus Activity Detect }-----------------[UIR, ACTVIF]---
  757.       INT_Source  USB_ACTV_INT, UIE,ACTVIE, _NoPriority
  758.  
  759.                 ;----{ USB Reset }---------------------------[UIR, URSTIF]---
  760.       INT_Source  USB_RST_INT, UIE,URSTIE, _NoPriority
  761.  
  762.                 ;----{ Idle Detect }-------------------------[UIR, IDLEIF]---
  763.       INT_Source  USB_IDLE_INT, UIE,IDLEIE, _NoPriority
  764.  
  765.                 ;----{ A STALL Handshake }------------------[UIR, STALLIF]---
  766.       INT_Source  USB_STALL_INT, UIE,STALLIE, _NoPriority
  767.  
  768.                 ;----{ Transaction Complete }-----------------[UIR, TRNIF]---
  769.       INT_Source  USB_TRN_INT, UIE,TRNIE, _NoPriority
  770.  
  771.                 ;----{ START-OF-FRAME Token }-----------------[UIR, SOFIF]---
  772.       INT_Source  USB_SOF_INT, UIE,SOFIE, _NoPriority
  773.  
  774. ; -- USB Error Flags --
  775.                 ;----{ USB Error Condition Int funnel }------[UIR, UERRIF]---
  776.       INT_Source  USB_ERR_INT, UIE,UERRIE, _NoPriority
  777.    
  778.                 ;----{ Bus Turnaround Time-out Error }-------[UEIR, BTOEF]---
  779.       INT_Source  USB_BTO_INT, UEIE,BTOEE, _NoPriority
  780.    
  781.                 ;----{ Bit Stuff Error }---------------------[UEIR, BTSEF]---
  782.       INT_Source  USB_BTS_INT, UEIE,BTSEE, _NoPriority
  783.    
  784.                 ;--{ CRC16 Failure }-----------------------[UEIR, CRC16EF]---
  785.       INT_Source  USB_CRC16_INT, UEIE,CRC16EE, _NoPriority
  786.    
  787.                 ;---{ CRC5 Host Error }---------------------[UEIR, CRC5EF]---
  788.       INT_Source  USB_CRC5_INT, UEIE,CRC5EE, _NoPriority
  789.    
  790.                 ;---{ Data Field Size Error }---------------[UEIR, DFN8EF]---
  791.       INT_Source  USB_DFN8_INT, UEIE,DFN8EE, _NoPriority
  792.    
  793.                 ;----{ PID Check Failure }-------------------[UEIR, PIDEF]---
  794.       INT_Source  USB_PID_INT, UEIE,PIDEE, _NoPriority
  795.   endif
  796.  
  797.  
  798.     ENDASM?
  799.  
  800.  
  801.     ASM?
  802.   ; -- Ethernet sources --
  803.   ifdef ETHIF  ;----{ Ethernet Module }----------------------[PIR2, ETHIF]---
  804.       INT_Source  ETH_INT, PIE2,ETHIE, IPR2,ETHIP
  805.    
  806.                ;----{ DMA Interrupt }-------------------------[EIR, DMAIF]---
  807.       INT_Source  ETH_DMA_INT, EIE,DMAIE, _NoPriority
  808.    
  809.                ;----{ Link Status Change }-------------------[EIR, LINKIF]---
  810.       INT_Source  ETH_LINK_INT, EIE,LINKIE, _NoPriority
  811.    
  812.                ;----{ Receive Packet Pending }----------------[EIR, PKTIF]---
  813.       INT_Source  ETH_PKT_INT, EIE,PKTIE, _NoPriority
  814.    
  815.                ;----{ Receive Error }------------------------[EIR, RXERIF]---
  816.       INT_Source  ETH_RXER_INT, EIE,RXERIE, _NoPriority
  817.              
  818.                ;----{ Transmit Error }-----------------------[EIR, TXERIF]---
  819.       INT_Source  ETH_TXER_INT, EIE,TXERIE, _NoPriority
  820.    
  821.                ;----{ Transmit }-------------------------------[EIR, TXIF]---
  822.       INT_Source  ETH_TX_INT, EIE,TXIE, _NoPriority
  823.   endif
  824.  
  825.  
  826.     ENDASM?
  827.  
  828.  
  829.     ASM?
  830.   ; -- CAN Module --
  831.   ifdef WAKIF  
  832.                ;----{ CAN bus Error }------------------------[PIR3, ERRIF]---
  833.       INT_Source  CAN_ERR_INT, PIE3,ERRIE, IPR3,ERRIP
  834.  
  835.                ;----{ Invalid Received Message }-------------[PIR3, IRXIF]---
  836.       INT_Source  CAN_IRX_INT, PIE3,IRXIE, IPR3,IRXIP
  837.  
  838.                ;----{ Receive Buffer 0 }------Mode 0--------[PIR3, RXB0IF]---
  839.       INT_Source  CAN_RXB0_INT, PIE3,RXB0IE, IPR3,RXB0IP
  840.                ;----{ FIFO Watermark }--------Mode 1, 2---[PIR3, FIFOWMIF]---
  841.       INT_Source  CAN_FIFOWM_INT, PIE3,FIFOWMIE, IPR3,FIFOWMIP
  842.  
  843.                ;----{ Receive Buffer 1 }------Mode 0--------[PIR3, RXB1IF]---
  844.       INT_Source  CAN_RXB1_INT, PIE3,RXB1IE, IPR3,RXB1IP
  845.                ;----{ Any Receive Buffer }----Mode 1, 2-----[PIR3, RXBnIF]---
  846.       INT_Source  CAN_RXBn_INT, PIE3,RXBnIE, IPR3,RXBnIP
  847.  
  848.                ;----{ Transmit Buffer 0 }-------------------[PIR3, TXB0IF]---
  849.       INT_Source  CAN_TXB0_INT, PIE3,TXB0IE, IPR3,TXB0IP
  850.  
  851.                ;----{ Transmit Buffer 1 }-------------------[PIR3, TXB1IF]---
  852.       INT_Source  CAN_TXB1_INT, PIE3,TXB1IE, IPR3,TXB1IP
  853.  
  854.                ;----{ Transmit Buffer 2 }-----Mode 0=-------[PIR3, TXB2IF]---
  855.       INT_Source  CAN_TXB2_INT, PIE3,TXB2IE, IPR3,TXB2IP
  856.                ;----{ Any Transmit Buffer }---Mode 1, 2-----[PIR3, TXBnIF]---
  857.       INT_Source  CAN_TXBn_INT, PIE3,TXBnIE, IPR3,TXBnIP
  858.  
  859.                ;----{ CAN bus Activity Wake-up }-------------[PIR3, WAKIF]---
  860.       INT_Source  CAN_WAKE_INT, PIE3,WAKIE, IPR3,WAKIP
  861.   endif
  862.  
  863.   list
  864.     endm
  865.   list  
  866.  
  867.  
  868.     ENDASM?
  869.  
  870.  
  871.     ASM?
  872.  
  873.     ifndef  USE_LOWPRIORITY
  874. INT_ENTRY_L
  875.         retfie
  876.     else
  877.         if (USE_LOWPRIORITY != 1)
  878. INT_ENTRY_L
  879.             retfie
  880.         endif
  881.     endif        
  882.  
  883.  
  884.     ENDASM?
  885.  
  886.  
  887.     ASM?
  888.  
  889. asm = 0    ; Assembly language Interrupts
  890. ASM = 0
  891. Asm = 0
  892. pbp = 1    ; Basic language interrupts
  893. PBP = 1
  894. Pbp = 1
  895. YES = 1
  896. yes = 1
  897. Yes = 1
  898. NO = 0
  899. no = 0
  900. No = 0
  901. H equ 'H'  ; High Priority
  902. h equ 'H'
  903. L equ 'L'  ; Low Priority
  904. l equ 'L'
  905.  
  906.   nolist
  907.  
  908. ;_____________________________________________________________________________
  909. SaveFSR  macro  F, Pr
  910.   list
  911.     if (F >= 0) && (F <= 2)
  912.         if (Pr == H) || (Pr == L)
  913.             movff    FSR#v(F)L, fsave#v(F)Pr
  914.             movff    FSR#v(F)H, fsave#v(F)Pr + 1
  915.           nolist
  916.         else
  917.             ERROR "SaveFSR - Invalid Priority"
  918.         endif
  919.     else
  920.         ERROR "SaveFSR - Invalid FSR number"
  921.     endif
  922.     list
  923.   endm
  924.  
  925.  
  926.     ENDASM?
  927.  
  928.  
  929.     ASM?
  930.  
  931. RestFSR  macro  F, Pr
  932.   list
  933.     if (F >= 0) && (F <= 2)
  934.         if (Pr == H) || (Pr == L)
  935.             movff    fsave#v(F)Pr , FSR#v(F)L
  936.             movff    fsave#v(F)Pr + 1 , FSR#v(F)H
  937.           nolist
  938.         else
  939.             ERROR "RestFSR - Invalid Priority"
  940.         endif
  941.     else
  942.         ERROR "RestFSR - Invalid FSR number"
  943.     endif
  944.     list
  945.   endm
  946.  
  947.  
  948.     ENDASM?
  949.  
  950.  
  951.     ASM?
  952.  
  953. INT_FINISH_H   macro
  954.   endm
  955.  
  956.  
  957.     ENDASM?
  958.  
  959.  
  960.     ASM?
  961.  
  962. INT_CREATE_H  macro
  963.   local OverCREATE
  964.     goto OverCREATE
  965. Priority = H    
  966. INT_ENTRY_H  
  967.     movff   PCLATU, psaveUH
  968.     movff   PCLATH, psaveH
  969.     SaveFSR  0, H
  970.     SaveFSR  1, H
  971.     SaveFSR  2, H
  972.     bsf      _InHPint, 0
  973. List_Start_H
  974.     bcf      _Serviced_H, 0         ; Clear Serviced flag
  975.     clrf  BSR
  976. PREV_BANK = 0
  977.     ifdef INT_LIST_H
  978.         INT_LIST_H                  ; Expand the users list of HP INT handlers
  979.     else
  980.         ifdef INT_LIST
  981.             INT_LIST                ; Expand the 16F Compatible List
  982.         else
  983.             error "INT_CREATE_H - INT_LIST or INT_LIST_H not found"
  984.         endif
  985.     endif
  986.     btfsc    _Serviced_H,0          ; if anything was serviced
  987.     goto     List_Start_H           ; go around, and check again
  988.  
  989.     ifdef ReEnterHPused             ; was ReEnterPBP-18.bas included
  990.         GetAddress21  INT_EXIT_H, RetAddrH
  991.         L?GOTO   _RestorePBP_H      ; Restore PBP system Vars
  992.     endif
  993.  
  994. INT_EXIT_H
  995. PREV_BANK = 0
  996.     bcf      _InHPint, 0
  997.     RestFSR  0, H                   ; Restore FSR0, if it was saved?
  998.     RestFSR  1, H                   ; Restore FSR1, if it was saved?
  999.     RestFSR  2, H                   ; Restore FSR2, if it was saved?
  1000.     movff    psaveH, PCLATH
  1001.     movff    psaveUH, PCLATU
  1002.     retfie    FAST                  ; Return from Interrupt
  1003. OverCREATE
  1004.     bsf   INTCON,GIE, 0             ; Enable High Priority Interrupts
  1005.     bsf   INTCON,PEIE, 0            ; Enable Peripheral Interrupts
  1006.   endm
  1007.  
  1008. ;---[Stay compatible with the 14-bit version]---------------------------------
  1009. INT_CREATE  macro
  1010.     INT_CREATE_H
  1011.   endm
  1012.  
  1013.  
  1014.     ENDASM?
  1015.  
  1016.  
  1017.     ASM?
  1018.  
  1019. INT_CREATE_L  macro
  1020.   local OverCREATE
  1021.     goto OverCREATE
  1022.     ifdef USE_LOWPRIORITY
  1023.         if (USE_LOWPRIORITY != 1)
  1024.        error "'DEFINE USE_LOWPRIORITY 1' required for Low Priority Interrupts"
  1025.         endif
  1026.     else
  1027.        error "'DEFINE USE_LOWPRIORITY 1' required for Low Priority Interrupts"
  1028.     endif
  1029. Priority = L
  1030. INT_ENTRY_L  
  1031.     movff   WREG, wsave             ; Wreg
  1032.     movff   STATUS, ssave           ; STATUS
  1033.     movff   BSR, bsave              ; BSR
  1034.     movff   PCLATU, psaveUL
  1035.     movff   PCLATH, psaveL
  1036.     SaveFSR  0, L                   ; FSR0
  1037.     SaveFSR  1, L                   ; FSR1
  1038.     SaveFSR  2, L                   ; FSR2
  1039.     bcf      _InHPint, 0    
  1040. List_Start_L
  1041.   clrf  BSR
  1042. PREV_BANK = 0
  1043.     bcf      _Serviced_L, 0
  1044.     ifdef INT_LIST_L
  1045.         INT_LIST_L                  ; Expand the users list of HP INT handlers
  1046.     else
  1047.         error "INT_CREATE_L - INT_LIST_L not defined, can not create"
  1048.     endif
  1049.     btfsc    _Serviced_L, 0         ; if anything was serviced
  1050.     goto     List_Start_L           ; go around, and check again
  1051.  
  1052.     ifdef ReEnterLPused             ; was ReEnterPBP-18LP.bas included
  1053.         GetAddress21  INT_EXIT_L, RetAddrL
  1054.         L?GOTO   _RestorePBP_L      ; Restore PBP system Vars
  1055.     endif
  1056.  
  1057. INT_EXIT_L
  1058. PREV_BANK = 0
  1059.     RestFSR  0, L                   ; Restore saved vars
  1060.     RestFSR  1, L
  1061.     RestFSR  2, L                
  1062.     movff   psaveUL, PCLATU
  1063.     movff   psaveL, PCLATH
  1064.     movff   bsave, BSR              ; BSR
  1065.     movff   wsave, WREG             ; WREG
  1066.     movff   ssave, STATUS           ; STATUS
  1067.     retfie                          ; Return from Interrupt
  1068. OverCREATE
  1069.     bsf   RCON,IPEN, 0              ; Enable Interrupt Priorities
  1070.     bsf   INTCON,GIEL, 0            ; Enable Low Priority Interrupts
  1071.   endm
  1072.  
  1073.  
  1074.     ENDASM?
  1075.  
  1076.  
  1077.     ASM?
  1078.  
  1079. ;---[Returns the Address of a Label as a Word]--(under 64K)------------------
  1080. GetAddress macro Label, Wout
  1081.     CHK?RP Wout
  1082.     movlw low Label          ; get low byte
  1083.     movwf Wout
  1084.     movlw High Label         ; get high byte
  1085.     movwf Wout + 1
  1086.     endm
  1087.  
  1088. ;---[Returns the Address of a Label as a 3 byte array]---(under/over 64k)-----
  1089. GetAddress21 macro Label, Aout
  1090.     CHK?RP Aout
  1091.     movlw low Label          ; get low byte
  1092.     movwf Aout
  1093.     movlw high Label         ; get high byte
  1094.     movwf Aout + 1
  1095.     movlw upper Label        ; get upper byte
  1096.     movwf Aout + 2
  1097.     endm
  1098.  
  1099. ;---[find correct bank for a PBP BIT variable]-------------------------------
  1100. CHKRP?T  macro reg, bit
  1101.         CHK?RP  reg
  1102.     endm
  1103.    
  1104.  
  1105.  
  1106. ;---[find Assigned Priority for specified INT Source]------------------------
  1107. INT_Count = 0
  1108.  
  1109. FindIntPriority  macro IntFlagReg, IntFlagBit
  1110.   local LoopCount
  1111.     nolist
  1112. Pfound = 0
  1113. LoopCount = 1
  1114.       while LoopCount <= INT_Count
  1115.           if  (IntFlagReg == PrList#v(LoopCount)R)
  1116.              if (IntFlagBit == PrList#v(LoopCount)B)
  1117.   list
  1118. Priority =  PrList#v(LoopCount)Priority
  1119. Pfound = 1
  1120.              endif
  1121.           endif
  1122. LoopCount += 1
  1123.       endw
  1124.   endm  
  1125.  
  1126.  
  1127.     ENDASM?
  1128.  
  1129.  
  1130.     ASM?
  1131.  
  1132.  
  1133. ;---[Add an Interrupt Source to the user's list of INT Handlers]--------------
  1134. INT_Handler  macro  IntFlagReg, IntFlagBit, Label, Type, Reset
  1135.   list
  1136.     local AfterSave, AfterUser, NoInt
  1137. INT_Count += 1
  1138. PrList#v(INT_Count)R = IntFlagReg
  1139. PrList#v(INT_Count)B = IntFlagBit
  1140. PrList#v(INT_Count)Priority = Priority
  1141.         GetIntInfo   IntFlagReg, IntFlagBit
  1142.         if (Found == YES)
  1143.             btfss    INT_Enable_Reg, INT_Enable_Bit, 0  ; if INT is enabled
  1144.             goto   NoInt
  1145.             btfss    INT_Flag_Reg, INT_Flag_Bit, 0      ; and the Flag set?
  1146.             goto     NoInt
  1147.             if (Priority == H)
  1148.                 bsf      _Serviced_H, 0
  1149.             else
  1150.                 bsf      _Serviced_L, 0
  1151.             endif
  1152.             ifdef NO_CLRWDT
  1153.                 if  (NO_CLRWDT != 1)
  1154.                     CLRWDT
  1155.                 endif
  1156.             else
  1157.                 CLRWDT
  1158.             endif
  1159.                
  1160.             if (Type == PBP)                         ; If INT handler is PBP
  1161.               if (Priority == H)
  1162.                 ifdef ReEnterHPused
  1163.                     GetAddress21  AfterSave, RetAddrH  
  1164.                     L?GOTO  _SavePBP_H        ; Save PBP system Vars in HP INT
  1165.                 else
  1166.     error "ReEnterPBP-18 must be INCLUDEd to use High Priority PBP interrupts"
  1167.                 endif
  1168.               else ; Priority = L
  1169.                 ifdef ReEnterLPused
  1170.                     GetAddress21  AfterSave, RetAddrL  
  1171.                     L?GOTO  _SavePBP_L        ; Save PBP system Vars in LP INT
  1172.                 else
  1173.    error "ReEnterPBP-18LP must be INCLUDEd to use Low Priority PBP interrupts"
  1174.                 endif
  1175.               endif
  1176.             endif
  1177. AfterSave
  1178. PREV_BANK = 0
  1179.             if (Priority == H)
  1180.                   GetAddress21  AfterUser, RetAddrH  
  1181.             else ; Priority = L
  1182.                   GetAddress21  AfterUser, RetAddrL
  1183.             endif  
  1184.             L?GOTO   Label                        ; goto the users INT handler
  1185.                    
  1186. AfterUser
  1187. PREV_BANK = 0
  1188.             if (Reset == YES)                      ; reset flag (if specified)
  1189.                 bcf      INT_Flag_Reg, INT_Flag_Bit, 0
  1190.             endif
  1191.         else
  1192.             error Interrupt Source (IntFlagReg,IntFlagBit) not found
  1193.         endif
  1194. NoInt
  1195.     clrf  BSR
  1196. PREV_BANK = 0
  1197.     endm
  1198.  
  1199.  
  1200.     ENDASM?
  1201.  
  1202.  
  1203.     ASM?
  1204.  
  1205. ;---[Returns from a "goto" subroutine]--(21-bit RetAddr? must be set first)---
  1206. INT_RETURN  macro
  1207.   local Ret2LP, Ret2HP
  1208.       btfsc   _InHPint, 0
  1209.       goto    Ret2HP
  1210. Ret2LP
  1211.       movff   RetAddrL + 2, PCLATU  ; Load PC buffers with return address
  1212.       movff   RetAddrL + 1, PCLATH
  1213.       movf    RetAddrL, W, 0
  1214.     clrf  BSR                    ; Set to BANK0 before returning
  1215. PREV_BANK = 0                    ; Tell PBP about the BANK change
  1216.       movwf   PCL, 0             ; Go back to where we were
  1217.      
  1218. Ret2HP      
  1219.       movff   RetAddrH + 2, PCLATU ; Load PC buffers with return address
  1220.       movff   RetAddrH + 1, PCLATH
  1221.       movf    RetAddrH, W, 0
  1222.     clrf  BSR                    ; Set to BANK0 before returning
  1223. PREV_BANK = 0                    ; Tell PBP about the BANK change
  1224.       movwf   PCL, 0             ; Go back to where we were
  1225.     endm    
  1226.    
  1227. ;---[Enable an interrupt source]----------------------------------------------
  1228. INT_ENABLE  macro  IntFlagReg, IntFlagBit
  1229.       GetIntInfo   IntFlagReg, IntFlagBit
  1230.       if (Found == YES)
  1231.           FindIntPriority  IntFlagReg, IntFlagBit
  1232.           if (Pfound == 1)
  1233.               if (INT_Priority_Reg != -1)
  1234.                   if (Priority == H)
  1235.                       bsf  INT_Priority_Reg, INT_Priority_Bit, 0
  1236.                   else
  1237.                       if (Priority == L)
  1238.                           bcf  INT_Priority_Reg, INT_Priority_Bit, 0
  1239.                       else
  1240.                           error "INT_ENABLE - Invalid Priority Specified"
  1241.                       endif
  1242.                   endif
  1243.               else
  1244.                   if (Priority == L)
  1245.                       error "INT0_INT can NOT be assigned to Low Priority"
  1246.                   endif
  1247.               endif
  1248.           else
  1249.               error "INT_ENABLE - Priority State Not Found"
  1250.           endif
  1251. ;          bcf     INT_Flag_Reg, INT_Flag_Bit, 0        ; clear the flag first
  1252.           bsf     INT_Enable_Reg, INT_Enable_Bit, 0    ; enable the INT source  
  1253.       else
  1254.           error  "INT_ENABLE - Interrupt Source not found!"
  1255.       endif
  1256.     endm    
  1257.  
  1258. ;---[Disable an interrupt source]---------------------------------------------
  1259. INT_DISABLE  macro  IntFlagReg, IntFlagBit
  1260.       GetIntInfo   IntFlagReg, IntFlagBit
  1261.       if (Found == YES)
  1262.           bcf     INT_Enable_Reg, INT_Enable_Bit, 0   ; disable the INT source  
  1263.       else
  1264.           error "INT_DISABLE - Interrupt Source not found!"
  1265.       endif
  1266.     endm    
  1267.  
  1268. ;---[Clear an interrupt Flag]-------------------------------------------------
  1269. INT_CLEAR  macro  IntFlagReg, IntFlagBit
  1270.       GetIntInfo   IntFlagReg, IntFlagBit
  1271.       if (Found == YES)
  1272.           bcf     INT_Flag_Reg, INT_Flag_Bit, 0       ; clear the INT flag
  1273.       else
  1274.           error "INT_CLEAR -  Interrupt Source not found!"
  1275.       endif
  1276.     endm
  1277.  
  1278.  
  1279.  
  1280.     ENDASM?
  1281.  
  1282.  
  1283.     ASM?
  1284.  
  1285. Save_TBLPTR = 0
  1286.  
  1287.     ifdef SIN_USED
  1288. Save_TBLPTR = 1
  1289.     endif
  1290.     ifdef DTMFOUT_USED
  1291. Save_TBLPTR = 1
  1292.     endif
  1293.     ifdef SERDELAY_USED
  1294. Save_TBLPTR = 1
  1295.     endif
  1296.     ifdef CONVBIT_USED
  1297. Save_TBLPTR = 1
  1298.     endif
  1299.     ifdef ERASECODE_USED
  1300. Save_TBLPTR = 1
  1301.     endif
  1302.     ifdef READCODE_USED
  1303. Save_TBLPTR = 1
  1304.     endif
  1305.     ifdef WRITECODE_USED
  1306. Save_TBLPTR = 1
  1307.     endif
  1308.     ifdef LOOKDOWN?BCLB
  1309. Save_TBLPTR = 1
  1310.     endif
  1311.     ifdef LOOKDOWN?BCLT
  1312. Save_TBLPTR = 1
  1313.     endif
  1314.     ifdef LOOKDOWN?BCLW
  1315. Save_TBLPTR = 1
  1316.     endif
  1317.     ifdef LOOKDOWN?CCLB
  1318. Save_TBLPTR = 1
  1319.     endif
  1320.     ifdef LOOKDOWN?CCLT
  1321. Save_TBLPTR = 1
  1322.     endif
  1323.     ifdef LOOKDOWN?CCLW
  1324. Save_TBLPTR = 1
  1325.     endif
  1326.     ifdef LOOKDOWN?WCLB
  1327. Save_TBLPTR = 1
  1328.     endif
  1329.     ifdef LOOKDOWN?WCLT
  1330. Save_TBLPTR = 1
  1331.     endif
  1332.     ifdef LOOKDOWN?WCLW
  1333. Save_TBLPTR = 1
  1334.     endif
  1335.     ifdef LOOK2_USED
  1336. Save_TBLPTR = 1
  1337.     endif
  1338.     ifdef LOOKUP?BCLB
  1339. Save_TBLPTR = 1
  1340.     endif
  1341.     ifdef LOOKUP?BCLT
  1342. Save_TBLPTR = 1
  1343.     endif
  1344.     ifdef LOOKUP?BCLW
  1345. Save_TBLPTR = 1
  1346.     endif
  1347.     ifdef LOOKUP?CCLB
  1348. Save_TBLPTR = 1
  1349.     endif
  1350.     ifdef LOOKUP?CCLT
  1351. Save_TBLPTR = 1
  1352.     endif
  1353.     ifdef LOOKUP?CCLW
  1354. Save_TBLPTR = 1
  1355.     endif
  1356.     ifdef LOOKUP?TCLB
  1357. Save_TBLPTR = 1
  1358.     endif
  1359.     ifdef LOOKUP?TCLT
  1360. Save_TBLPTR = 1
  1361.     endif
  1362.     ifdef LOOKUP?TCLW
  1363. Save_TBLPTR = 1
  1364.     endif
  1365.     ifdef LOOKUP?WCLB
  1366. Save_TBLPTR = 1
  1367.     endif
  1368.     ifdef LOOKUP?WCLT
  1369. Save_TBLPTR = 1
  1370.     endif
  1371.     ifdef LOOKUP?WCLW
  1372. Save_TBLPTR = 1
  1373.     endif
  1374.  
  1375.  
  1376.     ENDASM?
  1377.  
  1378.  
  1379.     LABEL?L _OVER_DT_INTS_18   
  1380.     DENABLE?   
  1381.     DDISABLE?  
  1382.     MOVE?CT 000h, _VarsSaved_H
  1383.     GOTO?L  _OverReEnterH
  1384.  
  1385.     LABEL?L _SavePBP_H 
  1386.     CMPNE?TCL   _VarsSaved_H, 000h, L00002
  1387.     MOVE?WW R0, _R0_SaveH
  1388.     MOVE?WW R1, _R1_SaveH
  1389.     MOVE?WW R2, _R2_SaveH
  1390.     MOVE?WW R3, _R3_SaveH
  1391.  
  1392.     ASM?
  1393.  
  1394.         if (PBPLongs_Used == 1)
  1395.             MOVE?WW  R0+2, _R0_SaveH+2
  1396.             MOVE?WW  R1+2, _R1_SaveH+2
  1397.             MOVE?WW  R2+2, _R2_SaveH+2
  1398.             MOVE?WW  R3+2, _R3_SaveH+2
  1399.         endif
  1400.    
  1401.  
  1402.     ENDASM?
  1403.  
  1404.     MOVE?WW R4, _R4_SaveH
  1405.     MOVE?WW R5, _R5_SaveH
  1406.     MOVE?WW R6, _R6_SaveH
  1407.     MOVE?WW R7, _R7_SaveH
  1408.     MOVE?WW R8, _R8_SaveH
  1409.     MOVE?BB FLAGS, _Flags_SaveH
  1410.     MOVE?BB GOP, _GOP_SaveH
  1411.     MOVE?BB RM1, _RM1_SaveH
  1412.     MOVE?BB RM2, _RM2_SaveH
  1413.     MOVE?BB RR1, _RR1_SaveH
  1414.     MOVE?BB RR2, _RR2_SaveH
  1415.  
  1416.     ASM?
  1417.  if Save_TBLPTR == 1
  1418.  
  1419.     ENDASM?
  1420.  
  1421.     MOVE?BB TBLPTRU, _TBLPTRU_SaveH
  1422.     MOVE?BB TBLPTRH, _TBLPTRH_SaveH
  1423.     MOVE?BB TBLPTRL, _TBLPTRL_SaveH
  1424.  
  1425.     ASM?
  1426.  endif
  1427.  
  1428.     ENDASM?
  1429.  
  1430.  
  1431.     ASM?
  1432.  
  1433.         ifdef RS1
  1434.             MOVE?BB    RS1, _RS1_SaveH
  1435.         endif
  1436.         ifdef RS2
  1437.             MOVE?BB    RS2, _RS2_SaveH
  1438.         endif
  1439.         ifdef MUL_USED
  1440.             MOVE?WW    PRODL, _Product_H
  1441.         endif
  1442.         ifdef T1
  1443.             MOVE?WW    T1, _T1_SaveH
  1444.             if (PBPLongs_Used == 1)
  1445.                 MOVE?WW  T1+2, _T1_SaveH+2
  1446.             endif
  1447.         endif
  1448.         ifdef T2
  1449.             MOVE?WW    T2, _T2_SaveH
  1450.             if (PBPLongs_Used == 1)
  1451.                 MOVE?WW  T2+2, _T2_SaveH+2
  1452.             endif
  1453.         endif
  1454.         ifdef T3
  1455.             MOVE?WW    T3, _T3_SaveH
  1456.             if (PBPLongs_Used == 1)
  1457.                 MOVE?WW  T3+2, _T3_SaveH+2
  1458.             endif
  1459.         endif
  1460.         ifdef T4
  1461.             MOVE?WW    T4, _T4_SaveH
  1462.             if (PBPLongs_Used == 1)
  1463.                 MOVE?WW  T4+2, _T4_SaveH+2
  1464.             endif
  1465.         endif
  1466.         ifdef T5
  1467.             MOVE?WW    T5, _T5_SaveH
  1468.             if (PBPLongs_Used == 1)
  1469.                 MOVE?WW  T5+2, _T5_SaveH+2
  1470.             endif
  1471.         endif
  1472.         ifdef T6
  1473.             MOVE?WW    T6, _T6_SaveH
  1474.             if (PBPLongs_Used == 1)
  1475.                 MOVE?WW  T6+2, _T6_SaveH+2
  1476.             endif
  1477.         endif
  1478.         ifdef T7
  1479.             MOVE?WW    T7, _T7_SaveH
  1480.             if (PBPLongs_Used == 1)
  1481.                 MOVE?WW  T7+2, _T7_SaveH+2
  1482.             endif
  1483.         endif
  1484.    
  1485.  
  1486.     ENDASM?
  1487.  
  1488.     MOVE?CT 001h, _VarsSaved_H
  1489.     LABEL?L L00002 
  1490.  
  1491.     ASM?
  1492.  INT_RETURN
  1493.  
  1494.     ENDASM?
  1495.  
  1496.  
  1497.     LABEL?L _RestorePBP_H  
  1498.     CMPNE?TCL   _VarsSaved_H, 001h, L00004
  1499.     MOVE?WW _R0_SaveH, R0
  1500.     MOVE?WW _R1_SaveH, R1
  1501.     MOVE?WW _R2_SaveH, R2
  1502.     MOVE?WW _R3_SaveH, R3
  1503.  
  1504.     ASM?
  1505.  
  1506.         if (PBPLongs_Used == 1)
  1507.             MOVE?WW  _R0_SaveH+2, R0+2
  1508.             MOVE?WW  _R1_SaveH+2, R1+2
  1509.             MOVE?WW  _R2_SaveH+2, R2+2
  1510.             MOVE?WW  _R3_SaveH+2, R3+2
  1511.         endif
  1512.    
  1513.  
  1514.     ENDASM?
  1515.  
  1516.     MOVE?WW _R4_SaveH, R4
  1517.     MOVE?WW _R5_SaveH, R5
  1518.     MOVE?WW _R6_SaveH, R6
  1519.     MOVE?WW _R7_SaveH, R7
  1520.     MOVE?WW _R8_SaveH, R8
  1521.     MOVE?BB _Flags_SaveH, FLAGS
  1522.     MOVE?BB _GOP_SaveH, GOP
  1523.     MOVE?BB _RM1_SaveH, RM1
  1524.     MOVE?BB _RM2_SaveH, RM2
  1525.     MOVE?BB _RR1_SaveH, RR1
  1526.     MOVE?BB _RR2_SaveH, RR2
  1527.  
  1528.     ASM?
  1529.  if Save_TBLPTR == 1
  1530.  
  1531.     ENDASM?
  1532.  
  1533.     MOVE?BB _TBLPTRU_SaveH, TBLPTRU
  1534.     MOVE?BB _TBLPTRH_SaveH, TBLPTRH
  1535.     MOVE?BB _TBLPTRL_SaveH, TBLPTRL
  1536.  
  1537.     ASM?
  1538.  endif
  1539.  
  1540.     ENDASM?
  1541.  
  1542.  
  1543.     ASM?
  1544.  
  1545.         ifdef RS1
  1546.             MOVE?BB    _RS1_SaveH, RS1
  1547.         endif
  1548.         ifdef RS2
  1549.             MOVE?BB    _RS2_SaveH, RS2
  1550.         endif
  1551.         ifdef MUL
  1552.             MOVE?WW    _Product_H, PRODL
  1553.         endif
  1554.         ifdef T1
  1555.             MOVE?WW    _T1_SaveH, T1
  1556.             if (PBPLongs_Used == 1)
  1557.                 MOVE?WW  _T1_SaveH+2, T1+2
  1558.             endif
  1559.         endif
  1560.         ifdef T2
  1561.             MOVE?WW    _T2_SaveH, T2
  1562.             if (PBPLongs_Used == 1)
  1563.                 MOVE?WW  _T2_SaveH+2, T2+2
  1564.             endif
  1565.         endif
  1566.         ifdef T3
  1567.             MOVE?WW    _T3_SaveH, T3
  1568.             if (PBPLongs_Used == 1)
  1569.                 MOVE?WW  _T3_SaveH+2, T3+2
  1570.             endif
  1571.         endif
  1572.         ifdef T4
  1573.             MOVE?WW    _T4_SaveH, T4
  1574.             if (PBPLongs_Used == 1)
  1575.                 MOVE?WW  _T4_SaveH+2, T4+2
  1576.             endif
  1577.         endif
  1578.         ifdef T5
  1579.             MOVE?WW    _T5_SaveH, T5
  1580.             if (PBPLongs_Used == 1)
  1581.                 MOVE?WW  _T5_SaveH+2, T5+2
  1582.             endif
  1583.         endif
  1584.         ifdef T6
  1585.             MOVE?WW    _T6_SaveH, T6
  1586.             if (PBPLongs_Used == 1)
  1587.                 MOVE?WW  _T6_SaveH+2, T6+2
  1588.             endif
  1589.         endif
  1590.         ifdef T7
  1591.             MOVE?WW    _T7_SaveH, T7
  1592.             if (PBPLongs_Used == 1)
  1593.                 MOVE?WW  _T7_SaveH+2, T7+2
  1594.             endif
  1595.         endif
  1596.         ifdef T8
  1597.             ifndef NO_T7_WARNING
  1598.                 messg "Temp variables exceeding T7"
  1599.             endif
  1600.         endif
  1601.    
  1602.  
  1603.     ENDASM?
  1604.  
  1605.     MOVE?CT 000h, _VarsSaved_H
  1606.     LABEL?L L00004 
  1607.  
  1608.     ASM?
  1609.  INT_RETURN
  1610.  
  1611.     ENDASM?
  1612.  
  1613.  
  1614.     LABEL?L _OverReEnterH  
  1615.     DENABLE?   
  1616.     MOVE?CB 060h, OSCCON
  1617.     MOVE?CB 000h, _tempAdj_bit
  1618.     MOVE?CB 008h, _hyst
  1619.     MOVE?CB 046h, _myTemp
  1620.  
  1621.     ASM?
  1622.  
  1623. INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
  1624.         INT_Handler    RX_INT,    _read_serial,   PBP,  yes
  1625.        
  1626.  
  1627.    endm
  1628.     INT_CREATE             ; Creates the interrupt processor
  1629.  
  1630.  
  1631.     ENDASM?
  1632.  
  1633.     MOVE?CB 092h, T0CON
  1634.  
  1635.     ASM?
  1636.    INT_ENABLE   RX_INT     ; enable external (RX) interrupts
  1637.  
  1638.     ENDASM?
  1639.  
  1640.  
  1641.     LABEL?L _Setup 
  1642.     PAUSE?C 003E8h
  1643.     SEROUT2DPIN?T   _lcd
  1644.     SEROUT2MODE?C   _Baud
  1645.     SEROUT2PACE?C   000h
  1646.     SEROUT2?C   03Fh
  1647.     SEROUT2?C   042h
  1648.     SEROUT2?C   036h
  1649.     SEROUT2?C   034h
  1650.     PAUSE?C 001F4h
  1651.     SEROUT2DPIN?T   _lcd
  1652.     SEROUT2MODE?C   _Baud
  1653.     SEROUT2PACE?C   000h
  1654.     SEROUT2?C   03Fh
  1655.     SEROUT2?C   066h
  1656.     PAUSE?C 0C8h
  1657.     SEROUT2DPIN?T   _lcd
  1658.     SEROUT2MODE?C   _Baud
  1659.     SEROUT2PACE?C   000h
  1660.     SEROUT2?C   03Fh
  1661.     SEROUT2?C   063h
  1662.     SEROUT2?C   030h
  1663.     SEROUT2DPIN?T   _lcd
  1664.     SEROUT2MODE?C   _Baud
  1665.     SEROUT2PACE?C   000h
  1666.     SEROUT2?C   03Fh
  1667.     SEROUT2?C   047h
  1668.     SEROUT2?C   034h
  1669.     SEROUT2?C   032h
  1670.     SEROUT2?C   030h
  1671.     HIGH?T  _Reset
  1672.     SHIFTDATA?T _DQ
  1673.     SHIFTCLOCK?T    _Clock
  1674.     SHIFTMODE?C _LSBFIRST
  1675.     SHIFTOUT?CC _WrCfg, 008h
  1676.     SHIFTOUT?CC 002h, 008h
  1677.     LOW?T   _Reset
  1678.     PAUSE?C 00Ah
  1679.     HIGH?T  _Reset
  1680.     SHIFTDATA?T _DQ
  1681.     SHIFTCLOCK?T    _Clock
  1682.     SHIFTMODE?C _LSBFIRST
  1683.     SHIFTOUT?CC _StartC, 008h
  1684.     LOW?T   _Reset
  1685.     PAUSE?C 0C8h
  1686.     SEROUT2DPIN?T   _lcd
  1687.     SEROUT2MODE?C   _Baud
  1688.     SEROUT2PACE?C   000h
  1689.     SEROUT2?C   03Fh
  1690.     SEROUT2?C   066h
  1691.  
  1692.     LABEL?L _Main  
  1693.     DEBUG?C 068h
  1694.     DEBUG?C 065h
  1695.     DEBUG?C 072h
  1696.     DEBUG?C 065h
  1697.     DEBUG?C _CR
  1698.     CMPNE?BCL   _mem, 001h, L00006
  1699.     CMPEQ?BTL   _mem, _backlight_bit, L00008
  1700.     MOVE?BT _mem, _backlight_bit
  1701.     SEROUT2DPIN?T   _lcd
  1702.     SEROUT2MODE?C   _Baud
  1703.     SEROUT2PACE?C   000h
  1704.     SEROUT2?C   03Fh
  1705.     SEROUT2?C   042h
  1706.     SEROUT2?C   039h
  1707.     SEROUT2?C   036h
  1708.     LABEL?L L00008 
  1709.     LABEL?L L00006 
  1710.     CMPNE?BCL   _mem, 000h, L00010
  1711.     CMPEQ?BTL   _mem, _backlight_bit, L00012
  1712.     MOVE?BT _mem, _backlight_bit
  1713.     SEROUT2DPIN?T   _lcd
  1714.     SEROUT2MODE?C   _Baud
  1715.     SEROUT2PACE?C   000h
  1716.     SEROUT2?C   03Fh
  1717.     SEROUT2?C   042h
  1718.     SEROUT2?C   031h
  1719.     SEROUT2?C   031h
  1720.     LABEL?L L00012 
  1721.     LABEL?L L00010 
  1722.     MOVE?CW 000h, _timelmt
  1723.     MOVE?CW 001h, _x
  1724.     LABEL?L L00014 
  1725.     CMPGT?WCL   _x, 00974h, L00015
  1726.     PAUSE?C 001h
  1727.     NEXT?WCL    _x, 001h, L00014
  1728.     LABEL?L L00015 
  1729.     GOSUB?L _Read_DS1620
  1730.     DEBUGCOUNT?C    000h
  1731.     DEBUGNUM?T  _backlight_bit
  1732.     DEBUGDEC?  
  1733.     DEBUG?C _CR
  1734.     CMPNE?BCL   _Nb_var93, 000h, L00016
  1735.     LOW?T   _relay
  1736.     LABEL?L L00016 
  1737.     CMPNE?BCL   _Nb_var93, 001h, L00018
  1738.     GOSUB?L _Check_temp
  1739.     LABEL?L L00018 
  1740.  
  1741.     ASM?
  1742.    INT_DISABLE   RX_INT
  1743.  
  1744.     ENDASM?
  1745.  
  1746.     CMPEQ?TCB   _Down_button, 000h, T1
  1747.     CMPEQ?TCB   _up_button, 000h, T2
  1748.     LOR?BBW T1, T2, T2
  1749.     CMPF?WL T2, L00020
  1750.     GOSUB?L _inpress
  1751.     LABEL?L L00020 
  1752.     CMPNE?TCL   _time_bit, 001h, L00022
  1753.     CMPNE?BCL   _mode, 001h, L00024
  1754.     SEROUT2DPIN?T   _lcd
  1755.     SEROUT2MODE?C   _Baud
  1756.     SEROUT2PACE?C   000h
  1757.     SEROUT2?C   03Fh
  1758.     SEROUT2?C   078h
  1759.     SEROUT2?C   031h
  1760.     SEROUT2?C   034h
  1761.     SEROUT2?C   03Fh
  1762.     SEROUT2?C   079h
  1763.     SEROUT2?C   030h
  1764.     SEROUT2?C   057h
  1765.     SEROUT2?C   061h
  1766.     SEROUT2?C   06Bh
  1767.     SEROUT2?C   065h
  1768.     SEROUT2?C   020h
  1769.     SEROUT2?C   020h
  1770.     LABEL?L L00024 
  1771.     CMPNE?BCL   _mode, 002h, L00026
  1772.     SEROUT2DPIN?T   _lcd
  1773.     SEROUT2MODE?C   _Baud
  1774.     SEROUT2PACE?C   000h
  1775.     SEROUT2?C   03Fh
  1776.     SEROUT2?C   078h
  1777.     SEROUT2?C   031h
  1778.     SEROUT2?C   034h
  1779.     SEROUT2?C   03Fh
  1780.     SEROUT2?C   079h
  1781.     SEROUT2?C   030h
  1782.     SEROUT2?C   04Ch
  1783.     SEROUT2?C   065h
  1784.     SEROUT2?C   061h
  1785.     SEROUT2?C   076h
  1786.     SEROUT2?C   065h
  1787.     SEROUT2?C   020h
  1788.     LABEL?L L00026 
  1789.     CMPNE?BCL   _mode, 003h, L00028
  1790.     SEROUT2DPIN?T   _lcd
  1791.     SEROUT2MODE?C   _Baud
  1792.     SEROUT2PACE?C   000h
  1793.     SEROUT2?C   03Fh
  1794.     SEROUT2?C   078h
  1795.     SEROUT2?C   031h
  1796.     SEROUT2?C   034h
  1797.     SEROUT2?C   03Fh
  1798.     SEROUT2?C   079h
  1799.     SEROUT2?C   030h
  1800.     SEROUT2?C   052h
  1801.     SEROUT2?C   065h
  1802.     SEROUT2?C   074h
  1803.     SEROUT2?C   075h
  1804.     SEROUT2?C   072h
  1805.     SEROUT2?C   06Eh
  1806.     LABEL?L L00028 
  1807.     CMPNE?BCL   _mode, 004h, L00030
  1808.     SEROUT2DPIN?T   _lcd
  1809.     SEROUT2MODE?C   _Baud
  1810.     SEROUT2PACE?C   000h
  1811.     SEROUT2?C   03Fh
  1812.     SEROUT2?C   078h
  1813.     SEROUT2?C   031h
  1814.     SEROUT2?C   034h
  1815.     SEROUT2?C   03Fh
  1816.     SEROUT2?C   079h
  1817.     SEROUT2?C   030h
  1818.     SEROUT2?C   053h
  1819.     SEROUT2?C   06Ch
  1820.     SEROUT2?C   065h
  1821.     SEROUT2?C   065h
  1822.     SEROUT2?C   070h
  1823.     SEROUT2?C   020h
  1824.     LABEL?L L00030 
  1825.     CMPGE?BCL   _hour, 00Ch, L00032
  1826.     SEROUT2DPIN?T   _lcd
  1827.     SEROUT2MODE?C   _Baud
  1828.     SEROUT2PACE?C   000h
  1829.     SEROUT2?C   03Fh
  1830.     SEROUT2?C   078h
  1831.     SEROUT2?C   031h
  1832.     SEROUT2?C   038h
  1833.     SEROUT2?C   03Fh
  1834.     SEROUT2?C   079h
  1835.     SEROUT2?C   033h
  1836.     SEROUT2?C   041h
  1837.     SEROUT2?C   04Dh
  1838.     LABEL?L L00032 
  1839.     CMPNE?BCL   _hour, 00Ch, L00034
  1840.     SEROUT2DPIN?T   _lcd
  1841.     SEROUT2MODE?C   _Baud
  1842.     SEROUT2PACE?C   000h
  1843.     SEROUT2?C   03Fh
  1844.     SEROUT2?C   078h
  1845.     SEROUT2?C   031h
  1846.     SEROUT2?C   038h
  1847.     SEROUT2?C   03Fh
  1848.     SEROUT2?C   079h
  1849.     SEROUT2?C   033h
  1850.     SEROUT2?C   050h
  1851.     SEROUT2?C   04Dh
  1852.     LABEL?L L00034 
  1853.     CMPLE?BCL   _hour, 00Ch, L00036
  1854.     SUB?BCB _hour, 00Ch, _hour
  1855.     SEROUT2DPIN?T   _lcd
  1856.     SEROUT2MODE?C   _Baud
  1857.     SEROUT2PACE?C   000h
  1858.     SEROUT2?C   03Fh
  1859.     SEROUT2?C   078h
  1860.     SEROUT2?C   031h
  1861.     SEROUT2?C   038h
  1862.     SEROUT2?C   03Fh
  1863.     SEROUT2?C   079h
  1864.     SEROUT2?C   033h
  1865.     SEROUT2?C   050h
  1866.     SEROUT2?C   04Dh
  1867.     LABEL?L L00036 
  1868.     CMPNE?BCL   _hour, 000h, L00038
  1869.     MOVE?CB 00Ch, _hour
  1870.     SEROUT2DPIN?T   _lcd
  1871.     SEROUT2MODE?C   _Baud
  1872.     SEROUT2PACE?C   000h
  1873.     SEROUT2?C   03Fh
  1874.     SEROUT2?C   078h
  1875.     SEROUT2?C   031h
  1876.     SEROUT2?C   038h
  1877.     SEROUT2?C   03Fh
  1878.     SEROUT2?C   079h
  1879.     SEROUT2?C   033h
  1880.     SEROUT2?C   041h
  1881.     SEROUT2?C   04Dh
  1882.     LABEL?L L00038 
  1883.     CMPNE?BCL   _Day, 001h, L00040
  1884.     SEROUT2DPIN?T   _lcd
  1885.     SEROUT2MODE?C   _Baud
  1886.     SEROUT2PACE?C   000h
  1887.     SEROUT2?C   03Fh
  1888.     SEROUT2?C   078h
  1889.     SEROUT2?C   031h
  1890.     SEROUT2?C   032h
  1891.     SEROUT2?C   03Fh
  1892.     SEROUT2?C   079h
  1893.     SEROUT2?C   032h
  1894.     SEROUT2?C   04Dh
  1895.     SEROUT2?C   06Fh
  1896.     SEROUT2?C   06Eh
  1897.     SEROUT2?C   020h
  1898.     LABEL?L L00040 
  1899.     CMPNE?BCL   _Day, 002h, L00042
  1900.     SEROUT2DPIN?T   _lcd
  1901.     SEROUT2MODE?C   _Baud
  1902.     SEROUT2PACE?C   000h
  1903.     SEROUT2?C   03Fh
  1904.     SEROUT2?C   078h
  1905.     SEROUT2?C   031h
  1906.     SEROUT2?C   032h
  1907.     SEROUT2?C   03Fh
  1908.     SEROUT2?C   079h
  1909.     SEROUT2?C   032h
  1910.     SEROUT2?C   054h
  1911.     SEROUT2?C   075h
  1912.     SEROUT2?C   065h
  1913.     SEROUT2?C   073h
  1914.     LABEL?L L00042 
  1915.     CMPNE?BCL   _Day, 003h, L00044
  1916.     SEROUT2DPIN?T   _lcd
  1917.     SEROUT2MODE?C   _Baud
  1918.     SEROUT2PACE?C   000h
  1919.     SEROUT2?C   03Fh
  1920.     SEROUT2?C   078h
  1921.     SEROUT2?C   031h
  1922.     SEROUT2?C   032h
  1923.     SEROUT2?C   03Fh
  1924.     SEROUT2?C   079h
  1925.     SEROUT2?C   032h
  1926.     SEROUT2?C   057h
  1927.     SEROUT2?C   065h
  1928.     SEROUT2?C   064h
  1929.     SEROUT2?C   020h
  1930.     LABEL?L L00044 
  1931.     CMPNE?BCL   _Day, 004h, L00046
  1932.     SEROUT2DPIN?T   _lcd
  1933.     SEROUT2MODE?C   _Baud
  1934.     SEROUT2PACE?C   000h
  1935.     SEROUT2?C   03Fh
  1936.     SEROUT2?C   078h
  1937.     SEROUT2?C   031h
  1938.     SEROUT2?C   032h
  1939.     SEROUT2?C   03Fh
  1940.     SEROUT2?C   079h
  1941.     SEROUT2?C   032h
  1942.     SEROUT2?C   054h
  1943.     SEROUT2?C   068h
  1944.     SEROUT2?C   072h
  1945.     SEROUT2?C   073h
  1946.     LABEL?L L00046 
  1947.     CMPNE?BCL   _Day, 005h, L00048
  1948.     SEROUT2DPIN?T   _lcd
  1949.     SEROUT2MODE?C   _Baud
  1950.     SEROUT2PACE?C   000h
  1951.     SEROUT2?C   03Fh
  1952.     SEROUT2?C   078h
  1953.     SEROUT2?C   031h
  1954.     SEROUT2?C   032h
  1955.     SEROUT2?C   03Fh
  1956.     SEROUT2?C   079h
  1957.     SEROUT2?C   032h
  1958.     SEROUT2?C   046h
  1959.     SEROUT2?C   072h
  1960.     SEROUT2?C   069h
  1961.     SEROUT2?C   020h
  1962.     LABEL?L L00048 
  1963.     CMPNE?BCL   _Day, 006h, L00050
  1964.     SEROUT2DPIN?T   _lcd
  1965.     SEROUT2MODE?C   _Baud
  1966.     SEROUT2PACE?C   000h
  1967.     SEROUT2?C   03Fh
  1968.     SEROUT2?C   078h
  1969.     SEROUT2?C   031h
  1970.     SEROUT2?C   032h
  1971.     SEROUT2?C   03Fh
  1972.     SEROUT2?C   079h
  1973.     SEROUT2?C   032h
  1974.     SEROUT2?C   053h
  1975.     SEROUT2?C   061h
  1976.     SEROUT2?C   074h
  1977.     SEROUT2?C   020h
  1978.     LABEL?L L00050 
  1979.     CMPNE?BCL   _Day, 007h, L00052
  1980.     SEROUT2DPIN?T   _lcd
  1981.     SEROUT2MODE?C   _Baud
  1982.     SEROUT2PACE?C   000h
  1983.     SEROUT2?C   03Fh
  1984.     SEROUT2?C   078h
  1985.     SEROUT2?C   031h
  1986.     SEROUT2?C   032h
  1987.     SEROUT2?C   03Fh
  1988.     SEROUT2?C   079h
  1989.     SEROUT2?C   032h
  1990.     SEROUT2?C   053h
  1991.     SEROUT2?C   075h
  1992.     SEROUT2?C   06Eh
  1993.     SEROUT2?C   020h
  1994.     LABEL?L L00052 
  1995.     MOVE?CT 000h, _time_bit
  1996.     LABEL?L L00022 
  1997.     SEROUT2DPIN?T   _lcd
  1998.     SEROUT2MODE?C   _Baud
  1999.     SEROUT2PACE?C   000h
  2000.     SEROUT2?C   03Fh
  2001.     SEROUT2?C   078h
  2002.     SEROUT2?C   031h
  2003.     SEROUT2?C   032h
  2004.     SEROUT2?C   03Fh
  2005.     SEROUT2?C   079h
  2006.     SEROUT2?C   033h
  2007.     SEROUT2COUNT?C  002h
  2008.     SEROUT2NUM?B    _hour
  2009.     SEROUT2DEC?
  2010.     SEROUT2?C   03Ah
  2011.     SEROUT2COUNT?C  002h
  2012.     SEROUT2NUM?B    _Minute
  2013.     SEROUT2DEC?
  2014.     SEROUT2?C   03Fh
  2015.     SEROUT2?C   078h
  2016.     SEROUT2?C   031h
  2017.     SEROUT2?C   031h
  2018.     SEROUT2?C   03Fh
  2019.     SEROUT2?C   079h
  2020.     SEROUT2?C   030h
  2021.     SEROUT2COUNT?C  000h
  2022.     SEROUT2NUM?B    _myTemp
  2023.     SEROUT2DEC?
  2024.     SEROUT2?C   03Fh
  2025.     SEROUT2?C   078h
  2026.     SEROUT2?C   031h
  2027.     SEROUT2?C   031h
  2028.     SEROUT2?C   03Fh
  2029.     SEROUT2?C   079h
  2030.     SEROUT2?C   031h
  2031.  
  2032.     ASM?
  2033.    INT_ENABLE   RX_INT
  2034.  
  2035.     ENDASM?
  2036.  
  2037.     GOTO?L  _Main
  2038.  
  2039.     LABEL?L _Read_DS1620   
  2040.     HIGH?T  _Reset
  2041.     SHIFTDATA?T _DQ
  2042.     SHIFTCLOCK?T    _Clock
  2043.     SHIFTMODE?C _LSBFIRST
  2044.     SHIFTOUT?CC _RdTmp, 008h
  2045.     SHIFTDATA?T _DQ
  2046.     SHIFTCLOCK?T    _Clock
  2047.     SHIFTMODE?C _LSBPRE
  2048.     SHIFTIN?WC  _tempIn, 009h
  2049.     LOW?T   _Reset
  2050.     UMINUS?TB   _sign, _tempIn??BYTE1
  2051.     MUL?WCW _tempIn, 005h, _tC
  2052.     CMPNE?TCL   _tC??BIT15, 000h, L00054
  2053.     MULMID?WCW  _tC, 001CCh, T1
  2054.     ADD?WCW T1, 00140h, _tF
  2055.     GOTO?L  L00055
  2056.     LABEL?L L00054 
  2057.     ABS?WW  _tC, T1
  2058.     MULMID?WCW  T1, 001CCh, T1
  2059.     SUB?CWW 00140h, T1, _tF
  2060.     LABEL?L L00055 
  2061.  
  2062.     ASM?
  2063.    INT_DISABLE   RX_INT
  2064.  
  2065.     ENDASM?
  2066.  
  2067.     SEROUT2DPIN?T   _lcd
  2068.     SEROUT2MODE?C   _Baud
  2069.     SEROUT2PACE?C   000h
  2070.     SEROUT2?C   03Fh
  2071.     SEROUT2?C   078h
  2072.     SEROUT2?C   030h
  2073.     SEROUT2?C   031h
  2074.     SEROUT2?C   03Fh
  2075.     SEROUT2?C   079h
  2076.     SEROUT2?C   031h
  2077.     SEROUT2?C   03Fh
  2078.     SEROUT2?C   03Eh
  2079.     SEROUT2?C   033h
  2080.  
  2081.     ASM?
  2082.    INT_ENABLE   RX_INT      
  2083.  
  2084.     ENDASM?
  2085.  
  2086.     MOVE?CW 001h, _x
  2087.     LABEL?L L00056 
  2088.     CMPGT?WCL   _x, 0DCh, L00057
  2089.     PAUSE?C 001h
  2090.     NEXT?WCL    _x, 001h, L00056
  2091.     LABEL?L L00057 
  2092.  
  2093.     ASM?
  2094.    INT_DISABLE   RX_INT      
  2095.  
  2096.     ENDASM?
  2097.  
  2098.     SEROUT2DPIN?T   _lcd
  2099.     SEROUT2MODE?C   _Baud
  2100.     SEROUT2PACE?C   000h
  2101.     SEROUT2COUNT?C  000h
  2102.     ABS?WW  _tF, T1
  2103.     DIV?WCW T1, 00Ah, T1
  2104.     SEROUT2NUM?W    T1
  2105.     SEROUT2DEC?
  2106.     SEROUT2?C   03Fh
  2107.     SEROUT2?C   03Ch
  2108.     PAUSE?C 04Bh
  2109.     MOVE?CT 000h, _RCSTA??4
  2110.     MOVE?CT 001h, _RCSTA??4
  2111.  
  2112.     ASM?
  2113.    INT_ENABLE   RX_INT                                        
  2114.  
  2115.     ENDASM?
  2116.  
  2117.     RETURN?
  2118.  
  2119.     LABEL?L _Check_temp
  2120.     ABS?WW  _tF, T1
  2121.     DIV?WCW T1, 00Ah, T1
  2122.     CMPLE?BWL   _myTemp, T1, L00058
  2123.     ADD?BCB _hyst, 001h, _hyst
  2124.     CMPGE?BCB   _hyst, 00Fh, T1
  2125.     CMPEQ?TCB   _relay, 000h, T2
  2126.     LAND?BBW    T1, T2, T2
  2127.     CMPF?WL T2, L00060
  2128.     HIGH?T  _relay
  2129.     LABEL?L L00060 
  2130.     CMPLE?BCL   _hyst, 00Fh, L00062
  2131.     MOVE?CB 00Fh, _hyst
  2132.     LABEL?L L00062 
  2133.     LABEL?L L00058 
  2134.     ABS?WW  _tF, T1
  2135.     DIV?WCW T1, 00Ah, T1
  2136.     CMPGE?BWL   _myTemp, T1, L00064
  2137.     SUB?BCB _hyst, 001h, _hyst
  2138.     CMPLE?BCB   _hyst, 005h, T1
  2139.     CMPEQ?TCB   _relay, 001h, T2
  2140.     LAND?BBW    T1, T2, T2
  2141.     CMPF?WL T2, L00066
  2142.     LOW?T   _relay
  2143.     LABEL?L L00066 
  2144.     CMPGE?BCL   _hyst, 005h, L00068
  2145.     MOVE?CB 005h, _hyst
  2146.     LABEL?L L00068 
  2147.     LABEL?L L00064 
  2148.     RETURN?
  2149.  
  2150.     LABEL?L _read_serial   
  2151.     HSERINTIME?C    0FAh
  2152.     HSERIN?WL   _x, _read_serial2
  2153.     DEBUGCOUNT?C    000h
  2154.     DEBUGNUM?W  _x
  2155.     DEBUGDEC?  
  2156.     DEBUG?C _CR
  2157.     CMPNE?WCL   _x, 0C1h, L00070
  2158.  
  2159.     ASM?
  2160.  reset
  2161.  
  2162.     ENDASM?
  2163.  
  2164.     LABEL?L L00070 
  2165.  
  2166.     LABEL?L _read_serial2  
  2167.     HSERINTIME?C    003E8h
  2168.  
  2169.     LABEL?L L00001 
  2170.     HSERINWAIT?CLL  03Ah, L00001, _No232
  2171.     HSERIN?BL   _Nb_var02, _No232
  2172.     HSERINCOUNT?C   002h
  2173.     HSERINDEC?BL    _hour, _No232
  2174.     HSERINCOUNT?C   002h
  2175.     HSERINDEC?BL    _Minute, _No232
  2176.     HSERIN?BL   _mode, _No232
  2177.     HSERIN?BL   _Day, _No232
  2178.     HSERIN?BL   _mem, _No232
  2179.     HSERIN?BL   _Nb_var93, _No232
  2180.     CMPNE?BCL   _tempAdj_bit, 000h, L00072
  2181.     MOVE?BB _Nb_var02, _myTemp
  2182.     LABEL?L L00072 
  2183.     CMPGT?BCB   _Nb_var02, 055h, T1
  2184.     CMPLT?BCB   _Nb_var02, 02Dh, T2
  2185.     LOR?BBW T1, T2, T2
  2186.     CMPF?WL T2, L00074
  2187.     MOVE?CB 03Ch, _myTemp
  2188.     LABEL?L L00074 
  2189.  
  2190.     LABEL?L _Send_serial   
  2191.     ABS?WW  _tF, T1
  2192.     DIV?WCW T1, 00Ah, T1
  2193.     HSEROUT?W   T1
  2194.     HSEROUT?B   _myTemp
  2195.     MOVE?CB 000h, _tempAdj_bit
  2196.     MOVE?CT 001h, _time_bit
  2197.  
  2198.     ASM?
  2199.  INT_RETURN    
  2200.  
  2201.     ENDASM?
  2202.  
  2203.  
  2204.     LABEL?L _No232 
  2205.     MOVE?CT 000h, _RCSTA??4
  2206.     MOVE?CT 001h, _RCSTA??4
  2207.     DEBUG?C 054h
  2208.     DEBUG?C 069h
  2209.     DEBUG?C 06Dh
  2210.     DEBUG?C 065h
  2211.     DEBUG?C 06Fh
  2212.     DEBUG?C 075h
  2213.     DEBUG?C 074h
  2214.     DEBUG?C _CR
  2215.  
  2216.     ASM?
  2217.  INT_RETURN  
  2218.  
  2219.     ENDASM?
  2220.  
  2221.  
  2222.     LABEL?L _inpress   
  2223.     ADD?WCW _timelmt, 001h, _timelmt
  2224.     CMPLE?WCL   _timelmt, 01388h, L00076
  2225.  
  2226.     ASM?
  2227.    INT_ENABLE   RX_INT  
  2228.  
  2229.     ENDASM?
  2230.  
  2231.     RETURN?
  2232.     LABEL?L L00076 
  2233.     CMPNE?TCL   _up_button, 000h, L00078
  2234.     GOTO?L  _plus
  2235.     LABEL?L L00078 
  2236.     CMPNE?TCL   _Down_button, 000h, L00080
  2237.     GOTO?L  _minus
  2238.     LABEL?L L00080 
  2239.     GOTO?L  _inpress
  2240.  
  2241.     LABEL?L _plus  
  2242.     ADD?BCB _myTemp, 001h, _myTemp
  2243.     CMPLE?BCL   _myTemp, 055h, L00082
  2244.     MOVE?CB 055h, _myTemp
  2245.     LABEL?L L00082 
  2246.     MOVE?CW 000h, _timelmt
  2247.     SEROUT2DPIN?T   _lcd
  2248.     SEROUT2MODE?C   _Baud
  2249.     SEROUT2PACE?C   000h
  2250.     SEROUT2?C   03Fh
  2251.     SEROUT2?C   078h
  2252.     SEROUT2?C   031h
  2253.     SEROUT2?C   031h
  2254.     SEROUT2?C   03Fh
  2255.     SEROUT2?C   079h
  2256.     SEROUT2?C   030h
  2257.     SEROUT2COUNT?C  000h
  2258.     SEROUT2NUM?B    _myTemp
  2259.     SEROUT2DEC?
  2260.     PAUSE?C 001F4h
  2261.     MOVE?CB 001h, _tempAdj_bit
  2262.     MOVE?CB 00Fh, _hyst
  2263.     GOTO?L  _inpress
  2264.  
  2265.     LABEL?L _minus 
  2266.     SUB?BCB _myTemp, 001h, _myTemp
  2267.     CMPGE?BCL   _myTemp, 028h, L00084
  2268.     MOVE?CB 028h, _myTemp
  2269.     LABEL?L L00084 
  2270.     MOVE?CW 000h, _timelmt
  2271.     SEROUT2DPIN?T   _lcd
  2272.     SEROUT2MODE?C   _Baud
  2273.     SEROUT2PACE?C   000h
  2274.     SEROUT2?C   03Fh
  2275.     SEROUT2?C   078h
  2276.     SEROUT2?C   031h
  2277.     SEROUT2?C   031h
  2278.     SEROUT2?C   03Fh
  2279.     SEROUT2?C   079h
  2280.     SEROUT2?C   030h
  2281.     SEROUT2COUNT?C  000h
  2282.     SEROUT2NUM?B    _myTemp
  2283.     SEROUT2DEC?
  2284.     PAUSE?C 001F4h
  2285.     MOVE?CB 001h, _tempAdj_bit
  2286.     MOVE?CB 005h, _hyst
  2287.     GOTO?L  _inpress
  2288.  
  2289.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement