title "Power" list R=DEC, p=18f4320, w=2 include "p18f4320.inc" ;Конфигурация __CONFIG _CONFIG1H, 0xc2 ;Постоянные #DEFINE _TMR0L 0x6a ;переменная таймера №0 1сек #DEFINE _TMR0H 0xbf ;65535-(16930000/4/256) #define _FANON 50 ;температура вкл. куллера #define _Toff 80 ;температура ограничения #define _corr_tem 21 ;коррекция датчика температуры #define _corr_i1 0 ;корекция датчика тока #define _corr_i2 2 #DEFINE _MPow1 0xc0 ;максимальная мощность #DEFINE _MPow2 0x5d #define _Umax1 0xfa ;ограничение напряжения #define _Umax2 0x0 #define _Imax1 0xfa ;ограничение тока #define _Imax2 0x0 ;Переменные idata pause01 RES 1 ;задержка pause02 RES 1 LITERA RES 1 ;отображаемый символ DDRAM RES 1 ;адрес отображения ACP0H RES 1 ;Переменная АЦП 1 ACP0L RES 1 ACP1H RES 1 ;Переменная АЦП 2 ACP1L RES 1 Uhex1 RES 1 ;Напряжение U1 Uhex2 RES 1 Ihex1 RES 1 ;Ток Ihex2 RES 1 Temper1 RES 1 ;Температура Temper2 res 1 Power1 res 1 ;мощность Power2 res 1 Imax1 res 1 ;ограничение тока Imax2 res 1 Umax1 res 1 ;ограничение напряжения Umax2 res 1 mul01 RES 1 ;переменные умножения mul02 RES 1 mul03 RES 1 mul04 RES 1 mul0H RES 1 mul0L RES 1 mul1H RES 1 mul1L RES 1 per_a RES 1 per_b RES 1 hex1 RES 1 ;переменные преобразования hex2dec hex2 RES 1 hex3 RES 1 hex4 RES 1 dec1 RES 1 dec2 RES 1 dec3 RES 1 dec4 RES 1 dec5 RES 1 dec6 RES 1 dec7 RES 1 dec8 RES 1 dec9 RES 1 dec10 RES 1 encode_loop res 1 encode_loop1 res 1 sec res 1 min1 res 1 min2 res 1 udata_acs ISR_WREG RES 1 ISR_BSR RES 1 ISR_STATUS RES 1 FLAG RES 1 ;7-гашение "0" hex2dec ;6-en LEFT ;5-en RIGHT ;4-en RUN ;3-гашение "0" hex2dec ;2-максимальная температура ;1-выбор меню ;0-максимальная мощность FLAG2 res 1 ;6-ограничение тока I_per_a RES 1 I_per_b RES 1 bl1:CODE 0x00 bra START bl2:CODE 0x08 goto ISR_HIGH bl3:CODE 0x18 goto ISR_LOW START: ;-----Инициализация прерываний----- clrf INTCON CLRF INTCON2 CLRF INTCON3 clrf PIR1 clrf PIR2 CLRF PIE1 clrf PIE2 CLRF IPR1 clrf IPR2 movlw b'10000000' movwf RCON ;-----Инициализация портов----- clrf PORTA clrf LATA movlw 7 movwf TRISA clrf PORTB clrf LATB clrf TRISB clrf PORTC clrf LATC movlw b'11001000' movwf TRISC clrf PORTD clrf LATD clrf TRISD clrf PORTE clrf LATE clrf TRISE ;-----Инициализация таймера TMR0----- movlw b'10000111' movwf T0CON movlw _TMR0L movwf TMR0L movlw _TMR0H movwf TMR0H bsf INTCON,TMR0IE BCF INTCON,TMR0IF ;-----Инициализация АЦП----- movlw b'10011110' movwf ADCON2 movlw b'00001100' movwf ADCON1 clrf ADCON0 bsf ADCON0,0 bsf ADCON0,1 BSF PIE1,ADIE ;-----Инициализация дисплея----- call Pause call Pause call Pause movlw b'00111100' movwf PORTD call Strobe call Pause call Strobe call Pause call Strobe call Pause movlw b'00001111' movwf PORTD call Strobe movlw b'00000001' movwf PORTD call Strobe call Pause ;-----Инициализация ШИМ----- movlw b'00001100' movwf CCP1CON movlw 0 movwf CCPR1L movlw b'011111111' movwf T2CON movlw 255 movwf PR2 movlw b'10000000' movwf PWM1CON ;-----Инициализация переменных----- clrf sec clrf min1 clrf min2 CLRF EECON1 movlw 0 CALL EE_RD BTFSS STATUS,Z GOTO INICIALIS movlw 1 CALL EE_RD movwf Umax1 movlw 2 CALL EE_RD movwf Umax2 movlw 3 CALL EE_RD movwf Imax1 movlw 4 CALL EE_RD movwf Imax2 RUN: BSF INTCON,PEIE BSF INTCON,GIE ST_LOOP: ;-----Вывод экрана №1----- call OUT movff Umax1,hex1 movff Umax2,hex2 clrf hex3 clrf hex4 BSF FLAG,3 call hex2dec movlw 0x10 ;отображение тока movwf DDRAM movlw 'S' movwf LITERA call PRINT_A movlw 'e' call PRINT_C movlw 't' call PRINT_C movlw ':' call PRINT_C movf dec3,w call PRINT_C movf dec2,w call PRINT_C movlw '.' call PRINT_C movf dec1,w call PRINT_C movlw 'V' call PRINT_C movlw '/' call PRINT_C movff Imax1,hex1 movff Imax2,hex2 clrf hex3 clrf hex4 BSF FLAG,3 call hex2dec movf dec3,w call PRINT_C movf dec2,w call PRINT_C movlw '.' call PRINT_C movf dec1,w call PRINT_C movlw 'A' call PRINT_C ;--------Обработка максимальной мощности-------- movlw _MPow1 movwf per_a movlw _MPow2 movwf per_b movf Power1,w subwf per_a,f movf Power2,w subwfb per_b,f bc Pow_exit BSF FLAG,0 bra Pow_go Pow_exit: BCF FLAG,0 Pow_go: movff Temper1,hex1 movff Temper2,hex2 clrf hex3 clrf hex4 call hex2dec movlw 0x50 ;отображение температуры movwf DDRAM movlw 't' movwf LITERA call PRINT_A movlw '=' call PRINT_C movf dec3,w call PRINT_C movf dec2,w call PRINT_C movf dec1,w call PRINT_C movlw 'C' call PRINT_C btfsc FLAG,2 bra COOL_MAX BTFSS PORTE,0 ;надпись работы куллера BRA COOL_OFF movlw ' ' call PRINT_C movlw 'F' call PRINT_C movlw 'a' call PRINT_C movlw 'n' call PRINT_C movlw 'O' call PRINT_C movlw 'N' call PRINT_C movlw ' ' call PRINT_C bra cool_exit COOL_MAX: movlw ' ' call PRINT_C movlw 'M' call PRINT_C movlw 'a' call PRINT_C movlw 'x' call PRINT_C movlw 'i' call PRINT_C movlw 'T' call PRINT_C movlw 'M' call PRINT_C bra cool_exit COOL_OFF: movlw ' ' call PRINT_C movlw 'F' call PRINT_C movlw 'a' call PRINT_C movlw 'n' call PRINT_C movlw 'O' call PRINT_C movlw 'F' call PRINT_C movlw 'F' call PRINT_C cool_exit: ;-----Обработка клавиатуры----- call Pause call Pause call Pause btfss PORTC,3 bra meny bra ST_LOOP ;поехали по кругу ;-----Первичная запись данных----- INICIALIS: movlw 50 movwf Umax1 clrf Umax2 movlw 50 movwf Imax1 clrf Imax2 MOVLW 0 MOVWF EEADR MOVLW 0X00 MOVWF EEDATA CALL EESAVE CALL SAVE_P BRA RUN ;-----Обработка прерываний HIGH----- ISR_HIGH: retfie 1 ;-----Обработка прерываний LOW----- ISR_LOW: movwf ISR_WREG ;сохранение регистров movff BSR,ISR_BSR movff STATUS,ISR_STATUS btfsc INTCON,TMR0IF ;проверка прерывания TMR0 bra ISR_TMR0 ISR_LOW_RET_TMR0: btfsc PIR1,ADIF ;проверка прерывания ADC bra ISR_ADC ISR_LOW_RET_ADC: btfsc FLAG,2 bra ogran btfsc FLAG,0 bra ogran btfsc FLAG2,6 bra ogran movff Umax1,CCPR1L bra ISR_CONTI ogran: clrf CCPR1L ISR_CONTI: movf ISR_WREG,w ;запись регистров movff ISR_BSR,BSR movff ISR_STATUS,STATUS retfie 1 ;-----Прерывание TMR0----- ISR_TMR0: incf sec,f movlw 60 cpfslt sec bra inc_min inc_exit: movf encode_loop bz ISR_TMR0_1 movff encode_loop,encode_loop1 ISR_TMR0_1: clrf encode_loop movlw _TMR0L ;установка ВРЕМЕНИ ТАЙМЕРА movwf TMR0L movlw _TMR0H movwf TMR0H BCF INTCON,TMR0IF ;сброс прерывания таймера bra ISR_LOW_RET_TMR0 inc_min: clrf sec incf min1,f bnc inc_exit incf min2,f bra inc_exit ;-----Прерывание ADC----- ISR_ADC: ;НАПРЯЖЕНИЕ btfsc ADCON0,2 bra ISR_ADC_1 btfsc ADCON0,3 bra ISR_ADC_1 bsf ADCON0,2 ;переключение канала bcf ADCON0,3 movff ADRESL,ACP0L ;Сохраняем значение АЦП 1 movff ADRESH,ACP0H movff ACP0L,Uhex1 ;перекидка релультатов ацп movff ACP0H,Uhex2 bra ISR_ADC_Exit ISR_ADC_1: ;TOK btfss ADCON0,2 bra ISR_ADC_2 btfsc ADCON0,3 bra ISR_ADC_2 bcf ADCON0,2 bsf ADCON0,3 movff ADRESL,ACP1L ;Сохраняем значение АЦП 2 movff ADRESH,ACP1H movlw _corr_i1 subwf ACP1L,f movlw _corr_i2 subwfb ACP1H,f bc loopo clrf ACP1L clrf ACP1H loopo: BCF STATUS,C RLCF ACP1L RLCF ACP1H movlw UPPER(TABLE) MOVWF TBLPTRU MOVLW HIGH(TABLE) MOVWF TBLPTRH MOVF ACP1H,W ADDWF TBLPTRH BNC AS1 INCF TBLPTRU AS1: MOVLW LOW(TABLE) MOVWF TBLPTRL MOVF ACP1L,W ADDWF TBLPTRL BNC AS2 INCF TBLPTRH AS2: TBLRD*+ MOVFF TABLAT,ACP1L TBLRD*+ MOVFF TABLAT,ACP1H movff ACP1L,Ihex1 movff ACP1H,Ihex2 movf Imax1,w ;Проверка на завышенный ток movwf I_per_a movf Imax2,w movwf I_per_b movf Ihex1,w subwf I_per_a,f movf Ihex2,w subwfb I_per_b,f bc i2_exit BSF FLAG2,6 bra i2_go i2_exit: BCF FLAG2,6 i2_go: bra ISR_ADC_Exit ISR_ADC_2: ;ТЕМПЕРАТУРА!!!!! btfsc ADCON0,2 bra ISR_ADC_Exit btfss ADCON0,3 bra ISR_ADC_Exit bcf ADCON0,2 bcf ADCON0,3 BCF STATUS,C rrcf ADRESH,F RRCF ADRESL,F movlw 50 addwf ADRESL,f comf ADRESL,f movlw _corr_tem subwf ADRESL,f AS3: movff ADRESL,Temper1 ;Сохраняем значение АЦП 3 movff ADRESH,Temper2 ;-----обработка работы куллера----- movlw _FANON cpfslt Temper1 bra ISR_ADC_# BCF PORTE,0 bra ISR_ADC_#1 ISR_ADC_#: bsf PORTE,0 ISR_ADC_#1: ;-----обработка превышения температуры----- movlw _Toff cpfslt Temper1 bra ISR_ADC_#2 BCF FLAG,2 bra ISR_ADC_#3 ISR_ADC_#2: bsf FLAG,2 ISR_ADC_#3: bra ISR_ADC_Exit ISR_ADC_Exit: bcf PIR1,ADIF ;сброс прерывания АЦП bsf ADCON0,GO ;включение АЦП bra ISR_LOW_RET_ADC ;-----Программа задержки----- Pause: clrf pause01 clrf pause02 Pause_1: nop incf pause02 bnz Pause_1 incf pause01 bnz Pause_1 return Pause_2: movlw 254 movwf pause01 pau_loop: incf pause01 bnz pau_loop return ;-----Программа стробирующего импульса----- Strobe: bsf PORTB,2 bcf PORTB,2 movlw 254 movwf pause01 movwf pause02 call Pause_1 return ;-----Программа отображения символа по адресу----- PRINT_A: movf DDRAM,w bsf WREG,7 movwf PORTD call Strobe ;-----Программа отображения символа из памяти----- PRINT_B: movf LITERA,w ;-----Программа отображения символа из WREG----- PRINT_C: movwf PORTD bsf PORTB,3 call Strobe bcf PORTB,3 return ;-----Программа умножения 2х байтового числа----- mul2bait: clrf mul01 clrf mul02 clrf mul03 clrf mul04 movf mul0L,W mulwf mul1L movff PRODL,mul04 movff PRODH,mul03 movf mul0H,W mulwf mul1L movf PRODL,w addwf mul03,f btfsc STATUS,C incf mul02,f movf PRODH,w addwf mul02,f movf mul0L,W mulwf mul1H movf PRODL,w addwfc mul03,f btfsc STATUS,C incf mul02,f movf PRODH,w addwfc mul02,f btfsc STATUS,C incf mul01,f movf mul0H,W mulwf mul1H movf PRODL,w addwfc mul02,f btfsc STATUS,C incf mul01,f movf PRODH,w addwf mul01,f return ;-----Программа HEX2DEC----- hex2dec: clrf dec1 ;преобразование hex2bcd clrf dec2 clrf dec3 clrf dec4 clrf dec5 clrf dec6 clrf dec7 clrf dec8 clrf dec9 clrf dec10 movlw 32 movwf per_a bra hex2dec_02 hex2dec_01: movf dec1,w call hex2dec_03 movwf dec1 movf dec2,w call hex2dec_03 movwf dec2 movf dec3,w call hex2dec_03 movwf dec3 movf dec4,w call hex2dec_03 movwf dec4 movf dec5,w call hex2dec_03 movwf dec5 hex2dec_02: rlcf hex1 rlcf hex2 rlcf hex3 rlcf hex4 rlcf dec1 rlcf dec2 rlcf dec3 rlcf dec4 rlcf dec5 decfsz per_a,f bra hex2dec_01 movlw b'11110000' ;преобразование bcd2dec andwf dec5,w swapf WREG movwf dec10 movlw b'00001111' andwf dec5,w movwf dec9 movlw b'11110000' andwf dec4,w swapf WREG movwf dec8 movlw b'00001111' andwf dec4,w movwf dec7 movlw b'11110000' andwf dec3,w swapf WREG movwf dec6 movlw b'00001111' andwf dec3,w movwf dec5 movlw b'11110000' andwf dec2,w swapf WREG movwf dec4 movlw b'00001111' andwf dec2,w movwf dec3 movlw b'11110000' andwf dec1,w swapf WREG movwf dec2 movlw b'00001111' andwf dec1,w movwf dec1 movf dec10,w ;гашение незначащих 0-ей iorwf dec10,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec10 movf dec9,w iorwf dec9,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec9 movf dec8,w iorwf dec8,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec8 movf dec7,w iorwf dec7,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec7 movf dec6,w iorwf dec6,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec6 movf dec5,w iorwf dec5,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec5 movf dec4,w iorwf dec4,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec4 btfsc FLAG,7 ;переход гашения 0.00 bra hex2dec_04 movf dec3,w iorwf dec3,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec3 btfsc FLAG,3 ;переход гашения 0.0 bra hex2dec_04 movf dec2,w iorwf dec2,w btfss STATUS,Z bra hex2dec_04 movlw b'00100000'-0x30 movwf dec2 hex2dec_04: bcf FLAG,7 ;сброс флага гашения bcf FLAG,3 movlw 0x30 ;преобразование dec2ASCII addwf dec1 addwf dec2 addwf dec3 addwf dec4 addwf dec5 addwf dec6 addwf dec7 addwf dec8 addwf dec9 addwf dec10 return hex2dec_03: movwf per_b movlw 3 addwf per_b,f btfss per_b,3 subwf per_b,f movlw 0x30 addwf per_b,f btfss per_b,7 subwf per_b,f movf per_b,w return ;-----Программа обработки энкодера----- Encoder: call OUT ; отслеживание вращения вала энкодера btfss PORTC,6 bra Encoder btfss PORTC,7 bra Encoder btfss PORTC,3 bra Encoder En btfsc PORTC,6 ; старт от исходного значения (0 или 1) goto en1 goto en2 en1 btfss PORTC,3 bra esset btfsc PORTC,6 ; выход на единицу goto en1 goto en3 en2 btfss PORTC,3 bra esset btfss PORTC,6 ; выход на ноль goto en2 goto en4 en3 btfss PORTC,6 ; проверка на единицу goto en5 en4 call Pause_2 ; задержка (антидребезг) btfsc PORTC,6 ; проверка на ноль goto En goto en5 en5 btfsc PORTC,7 ; отслеживание направления вращения goto en6 goto en7 en6: goto min ; уменьшение goto En en7: goto max ; увеличение goto En min incf encode_loop,f bsf FLAG,6 return max incf encode_loop,f bsf FLAG,5 return esset bsf FLAG,4 return ;-----Программа редактора напряжения----- U_CHANGE: CALL Pause bcf FLAG,4 bcf FLAG,5 bcf FLAG,6 Freq_loop_001: movff Umax1,CCPR1L movff Umax1,hex1 movff Umax2,hex2 clrf hex3 clrf hex4 bsf FLAG,3 call hex2dec movlw 0x50 movwf DDRAM movlw 'U' movwf LITERA call PRINT_A movlw '=' call PRINT_C movf dec3,w call PRINT_C movf dec2,w call PRINT_C movlw '.' call PRINT_C movf dec1,w call PRINT_C movlw 'V' call PRINT_C call Encoder btfss FLAG,6 bra Freq_loop_002 movf encode_loop1,w subwf Umax1,f bc Freq_loop_002 decf Umax2,f bc Freq_loop_003 clrf Umax1 clrf Umax2 bra Freq_loop_003 Freq_loop_002: btfss FLAG,5 bra Freq_loop_003 movf encode_loop1,w addwf Umax1,f bnc Freq_loop_003 incf Umax2,f Freq_loop_003: btfsc FLAG,4 bra Pause bcf FLAG,4 bcf FLAG,5 bcf FLAG,6 movlw _Umax1 movwf per_a movlw _Umax2 movwf per_b movf Umax1,w subwf per_a,f movf Umax2,w subwfb per_b,f bc U_exit movlw _Umax1 movwf Umax1 movlw _Umax2 movwf Umax2 U_exit: bra Freq_loop_001 ;-----Программа редактора тока----- I_CHANGE: call Pause bcf FLAG,4 bcf FLAG,5 bcf FLAG,6 shim_loop_001: movff Imax1,hex1 movff Imax2,hex2 clrf hex3 clrf hex4 bsf FLAG,3 call hex2dec movlw 0x50 ;отображение тока movwf DDRAM movlw 'I' movwf LITERA call PRINT_A movlw '=' call PRINT_C movf dec3,w call PRINT_C movf dec2,w call PRINT_C movlw '.' call PRINT_C movf dec1,w call PRINT_C movlw 'A' call PRINT_C call Encoder btfss FLAG,6 bra shim_loop_002 movf encode_loop1,w subwf Imax1,f bc shim_loop_002 decf Imax2,f bc shim_loop_003 clrf Imax1 clrf Imax2 bra shim_loop_003 shim_loop_002: btfss FLAG,5 bra shim_loop_003 movf encode_loop1,w addwf Imax1,f bnc shim_loop_003 incf Imax2,f shim_loop_003: btfsc FLAG,4 bra Pause bcf FLAG,4 bcf FLAG,5 bcf FLAG,6 movlw _Imax1 movwf per_a movlw _Imax2 movwf per_b movf Imax1,w subwf per_a,f movf Imax2,w subwfb per_b,f bc I_exit movlw _Imax1 movwf Imax1 movlw _Imax2 movwf Imax2 I_exit: bra shim_loop_001 return ;------- МЕНЮ -------- meny: movlw 0x10 ;меню movwf DDRAM movlw ' ' movwf LITERA call PRINT_A movlw 'S' call PRINT_C movlw 'e' call PRINT_C movlw 'l' call PRINT_C movlw 'e' call PRINT_C movlw 'c' call PRINT_C movlw 't' call PRINT_C movlw 'i' call PRINT_C movlw 'o' call PRINT_C movlw 'n' call PRINT_C movlw ':' call PRINT_C movlw ' ' call PRINT_C movlw ' ' call PRINT_C movlw ' ' call PRINT_C movlw ' ' call PRINT_C MENY_LOOP: btfsc FLAG,1 ;редактор напряжения call I_CH btfss FLAG,1 ;редактор тока call U_CH bcf FLAG,4 bcf FLAG,5 bcf FLAG,6 call Encoder clrf STATUS,C btfsc FLAG,6 BTG FLAG,1 btfsc FLAG,5 BTG FLAG,1 btfsc FLAG,4 bra meny_goto bra MENY_LOOP meny_goto: btfss FLAG,1 call U_CHANGE btfsc FLAG,1 call I_CHANGE call SAVE_P call Pause call Pause call Pause bra ST_LOOP I_CH: movlw 0x50 movwf DDRAM movlw '>' movwf LITERA call PRINT_A movlw 'C' call PRINT_C movlw 'h' call PRINT_C movlw 'a' call PRINT_C movlw 'n' call PRINT_C movlw 'g' call PRINT_C movlw 'e' call PRINT_C movlw ' ' call PRINT_C movlw 'I' call PRINT_C movlw 'm' call PRINT_C movlw 'a' call PRINT_C movlw 'x' call PRINT_C movlw ' ' call PRINT_C return U_CH: movlw 0x50 movwf DDRAM movlw '>' movwf LITERA call PRINT_A movlw 'C' call PRINT_C movlw 'h' call PRINT_C movlw 'a' call PRINT_C movlw 'n' call PRINT_C movlw 'g' call PRINT_C movlw 'e' call PRINT_C movlw ' ' call PRINT_C movlw 'U' call PRINT_C movlw 'o' call PRINT_C movlw 'u' call PRINT_C movlw 't' call PRINT_C movlw ' ' call PRINT_C return OUT: movff Uhex2,hex2 movff Uhex1,hex1 clrf hex3 clrf hex4 bsf FLAG,3 call hex2dec movlw 0 ;отображение АЦП№1 U,V movwf DDRAM movlw 'U' movwf LITERA call PRINT_A movlw '=' call PRINT_C movf dec3,w call PRINT_C movf dec2,w call PRINT_C movlw '.' call PRINT_C movf dec1,w call PRINT_C movlw 'V' call PRINT_C movff Ihex2,hex2 movff Ihex1,hex1 clrf hex3 clrf hex4 BSF FLAG,3 call hex2dec movlw 8 ;отображение АЦП№2 I,A movwf DDRAM movlw 'I' movwf LITERA call PRINT_A movlw '=' call PRINT_C movf dec3,w call PRINT_C movf dec2,w call PRINT_C movlw '.' call PRINT_C movf dec1,w call PRINT_C movlw 'A' call PRINT_C movff Ihex1,mul0L movff Ihex2,mul0H movff Uhex1,mul1L movff Uhex2,mul1H call mul2bait movff mul04,Power1 movff mul03,Power2 movff Power1,hex1 movff Power2,hex2 clrf hex3 clrf hex4 BSF FLAG,7 call hex2dec movlw 0x40 ;отображение мощности movwf DDRAM movlw 'P' movwf LITERA call PRINT_A movlw '=' call PRINT_C movf dec5,w call PRINT_C movf dec4,w call PRINT_C movf dec3,w call PRINT_C movlw '.' call PRINT_C movf dec2,w call PRINT_C movf dec1,w call PRINT_C movlw 'W' call PRINT_C movlw ' ' call PRINT_C movff min1,hex1 movff min2,hex2 clrf hex3 clrf hex4 call hex2dec movf dec3,w call PRINT_C movf dec2,w call PRINT_C movf dec1,w call PRINT_C movlw '.' call PRINT_C movff sec,hex1 clrf hex2 clrf hex3 clrf hex4 bsf FLAG,7 call hex2dec movf dec2,w call PRINT_C movf dec1,w call PRINT_C return SAVE_P: MOVLW 1 MOVWF EEADR MOVF Umax1,w MOVWF EEDATA CALL EESAVE MOVLW 2 MOVWF EEADR MOVF Umax2,w MOVWF EEDATA CALL EESAVE MOVLW 3 MOVWF EEADR MOVF Imax1,w MOVWF EEDATA CALL EESAVE MOVLW 4 MOVWF EEADR MOVF Imax2,w MOVWF EEDATA CALL EESAVE RETURN EESAVE: BCF EECON1,CFGS BCF EECON1,EEPGD BCF INTCON,GIE BSF EECON1,WREN MOVLW 0X55 MOVWF EECON2 MOVLW 0XAA MOVWF EECON2 BSF EECON1,WR EE_WR1: BTFSC EECON1,WR BRA EE_WR1 BCF EECON1,WREN BSF INTCON,GIE RETURN EE_RD: movwf EEADR bcf EECON1,EEPGD BSF EECON1,RD EE_READ1: BTFSC EECON1,RD BRA EE_READ1 MOVF EEDATA,W RETURN TABLE: DATA 0 DATA 1 DATA 2 DATA 3 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7 DATA 8 DATA 8 DATA 9 DATA 10 DATA 11 DATA 12 DATA 13 DATA 13 DATA 14 DATA 15 DATA 16 DATA 17 DATA 18 DATA 18 DATA 19 DATA 20 DATA 21 DATA 22 DATA 23 DATA 23 DATA 24 DATA 25 DATA 26 DATA 27 DATA 28 DATA 28 DATA 29 DATA 30 DATA 31 DATA 32 DATA 33 DATA 33 DATA 34 DATA 35 DATA 36 DATA 37 DATA 38 DATA 38 DATA 39 DATA 40 DATA 41 DATA 42 DATA 43 DATA 43 DATA 44 DATA 45 DATA 46 DATA 47 DATA 48 DATA 48 DATA 49 DATA 50 DATA 51 DATA 52 DATA 53 DATA 53 DATA 54 DATA 55 DATA 56 DATA 57 DATA 58 DATA 58 DATA 59 DATA 60 DATA 61 DATA 62 DATA 63 DATA 63 DATA 64 DATA 65 DATA 66 DATA 67 DATA 68 DATA 68 DATA 69 DATA 70 DATA 71 DATA 72 DATA 73 DATA 73 DATA 74 DATA 75 DATA 76 DATA 77 DATA 78 DATA 78 DATA 79 DATA 80 DATA 81 DATA 82 DATA 83 DATA 83 DATA 84 DATA 85 DATA 86 DATA 87 DATA 88 DATA 88 DATA 89 DATA 90 DATA 91 DATA 92 DATA 93 DATA 93 DATA 94 DATA 95 DATA 96 DATA 97 DATA 98 DATA 98 DATA 99 DATA 100 DATA 101 DATA 102 DATA 103 DATA 103 DATA 104 DATA 105 DATA 106 DATA 107 DATA 108 DATA 108 DATA 109 DATA 110 DATA 111 DATA 112 DATA 113 DATA 113 DATA 114 DATA 115 DATA 116 DATA 117 DATA 118 DATA 118 DATA 119 DATA 120 DATA 121 DATA 122 DATA 123 DATA 123 DATA 124 DATA 125 DATA 126 DATA 127 DATA 128 DATA 128 DATA 129 DATA 130 DATA 131 DATA 132 DATA 133 DATA 133 DATA 134 DATA 135 DATA 136 DATA 137 DATA 138 DATA 138 DATA 139 DATA 140 DATA 141 DATA 142 DATA 143 DATA 143 DATA 144 DATA 145 DATA 146 DATA 147 DATA 148 DATA 148 DATA 149 DATA 150 DATA 151 DATA 152 DATA 153 DATA 153 DATA 154 DATA 155 DATA 156 DATA 157 DATA 158 DATA 158 DATA 159 DATA 160 DATA 161 DATA 162 DATA 163 DATA 163 DATA 164 DATA 165 DATA 166 DATA 167 DATA 168 DATA 168 DATA 169 DATA 170 DATA 171 DATA 172 DATA 173 DATA 173 DATA 174 DATA 175 DATA 176 DATA 177 DATA 178 DATA 178 DATA 179 DATA 180 DATA 181 DATA 182 DATA 183 DATA 183 DATA 184 DATA 185 DATA 186 DATA 187 DATA 188 DATA 188 DATA 189 DATA 190 DATA 191 DATA 192 DATA 193 DATA 193 DATA 194 DATA 195 DATA 196 DATA 197 DATA 198 DATA 198 DATA 199 DATA 200 DATA 201 DATA 202 DATA 203 DATA 203 DATA 204 DATA 205 DATA 206 DATA 207 DATA 208 DATA 208 DATA 209 DATA 210 DATA 211 DATA 212 DATA 213 DATA 213 DATA 214 DATA 215 DATA 216 DATA 217 DATA 218 DATA 218 DATA 219 DATA 220 DATA 221 DATA 222 DATA 223 DATA 223 DATA 224 DATA 225 DATA 226 DATA 227 DATA 228 DATA 228 DATA 229 DATA 230 DATA 231 DATA 232 DATA 233 DATA 233 DATA 234 DATA 235 DATA 236 DATA 237 DATA 238 DATA 238 DATA 239 DATA 240 DATA 241 DATA 242 DATA 243 DATA 243 DATA 244 DATA 245 DATA 246 DATA 247 DATA 248 DATA 248 DATA 249 DATA 250 end