Пиша на тайнствения и магически асемблер,щото Hi-Tech религията не ми позволява да пиша на С за 16 серия (немам компилатор)
Ей го на парчето код:
list p=16F874
Clock_Freq EQU d'18000000'
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
#include <P16F874.INC>
errorlevel 1
w_temp equ 20h
status_temp equ 21h
LCD_DATA equ 22h
LCD_POZ equ 23h
TEMP equ 24h
TEMP_KEY equ 25h
temp EQU 26h
binh_reg equ 27h
binl_reg equ 28h
tenk_reg equ 29h
thous_reg equ 2Ah
hund_reg equ 2Bh
tens_reg equ 2Ch
ones_reg equ 2Dh
LCD11 equ 30h ; LCD буфер ред 1, символ 1
LCD12 equ 31h ; LCD буфер ред 1, символ 2
LCD13 equ 32h ; LCD буфер ред 1, символ 3
LCD14 equ 33h ; LCD буфер ред 1, символ 4
LCD15 equ 34h ; LCD буфер ред 1, символ 5
LCD16 equ 35h ; LCD буфер ред 1, символ 6
LCD17 equ 36h ; LCD буфер ред 1, символ 7
LCD18 equ 37h ; LCD буфер ред 1, символ 8
LCD21 equ 38h ; LCD буфер ред 2, символ 1
LCD22 equ 39h ; LCD буфер ред 2, символ 2
LCD23 equ 3Ah ; LCD буфер ред 2, символ 3
LCD24 equ 3Bh ; LCD буфер ред 2, символ 4
LCD25 equ 3Ch ; LCD буфер ред 2, символ 5
LCD26 equ 3Dh ; LCD буфер ред 2, символ 6
LCD27 equ 3Eh ; LCD буфер ред 2, символ 7
LCD28 equ 3Fh ; LCD буфер ред 2, символ 8;
;*****************************************************************************
RA EQU 3 ;RED ANODE
GA EQU 7 ;GREEN ANODE
;*****************************************************************************
;LCD related
E EQU 2 ;LCD enable signal
RW EQU 1 ;LCD R/W signal
RS EQU 0 ;LCD register select
;*****************************************************************************
org 00h ; set reset vector
goto MAIN
;*****************************************************************************
org 04h
IRQ
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
bcf STATUS,RP0 ; ensure file register bank set to 0
movwf status_temp ; save off contents of STATUS register
bcf INTCON,GIE
;------------------------------------------------------------------------------
goto ISR
ISR_RETURN
nop
;-------------------------------------------------------------------------------
bcf STATUS,RP0 ; ensure file register bank set to 0
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register content
bsf INTCON,1
retfie ; return from interrupt
;*********************************************************************************
MAIN
clrf PCLATH
CLRF w_temp
CLRF status_temp
CLRF LCD_DATA
CLRF LCD_POZ
CLRF binh_reg
CLRF binl_reg
CLRF tenk_reg
CLRF thous_reg
CLRF hund_reg
CLRF tens_reg
CLRF ones_reg
;*******************************************************************************
INIT_F874
BANKSEL INTCON
CLRF INTCON
BANKSEL PIE1
CLRF PIE1
BANKSEL PIR1
BCF PIR1,TMR1IF ;CLEAR FLAG
BANKSEL T1CON
MOVLW B'00110100' ;00110100
MOVWF T1CON ;1:8 Prescaler
BANKSEL PIE2
CLRF PIE2
;*************************************************************************
banksel PORTA
clrf PORTA
banksel ADCON1
movlw B'10000010' ;all ia ANALOG on PORTA !!!
movwf ADCON1 ;all DIGITAL on PORTE
banksel ADCON0
movlw B'10000100' ;Fos/32,CH0,OFF ADC
movwf ADCON0
banksel TRISA
movlw B'00011111'
movwf TRISA ;all input
;**************************************************************************
banksel PORTB
clrf PORTB
banksel TRISB
movlw B'01100001'
movwf TRISB
banksel OPTION_REG
movlw B'01000110' ;1:128 Prescaler
movlw OPTION_REG ;enable PB0 IRQ !
banksel PORTB
clrf PORTB
;***************************************************************************
banksel PORTC
clrf PORTC
banksel TRISC
movlw 0x00
movwf TRISC ;all outputs
;***************************************************************************
banksel PORTD
clrf PORTD
banksel TRISD
movlw 0x00
movwf TRISD ; all OUTPUT
;***************************************************************************
banksel PORTE
clrf PORTE
BANKSEL TRISE
movlw 0x00
movwf TRISE ; all OUTPUT
clrf PORTE
;***************************************************************************
movlw 0x00
movwf TMR0
;***************************************************************************
banksel INTCON
movlw B'11100100' ;Disable PORTB IRQ EN TMR1 IRQ
movwf INTCON
;***************************************************************************
bsf FLAG,RA
CALL DELAY_10
CALL DELAY_10
CALL DELAY_10
CALL DELAY_10
CALL LCDInit
call DISPLAY_1ROW
call DISPLAY_2ROW
banksel ADCON1
movlw B'10000010' ;all ia ANALOG on PORTA !!!
movwf ADCON1 ;all DIGITAL on PORTE
BANKSEL ADCON0
MOVLW B'10000001' ;ADC on,CH0
MOVWF ADCON0
again
CALL DELAY_10
BANKSEL ADCON0
MOVLW B'10000001' ;ADC on,CH0
MOVWF ADCON0
CALL DELAY_10
CALL DELAY_10
bsf ADCON0,GO_DONE ;start conversion
noptest
BTFSC ADCON0,GO_DONE
GOTO test
MOVLW 0x1E
MOVWF FSR
MOVF INDF,0
MOVWF binh_reg
MOVLW 0x9E
MOVWF FSR
MOVF INDF,0
MOVWF binl_reg
call conv_16bin_bcd
movf thous_reg,0
addlw H'30'
movwf LCD14
movf hund_reg,0
addlw H'30'
movwf LCD15
movf tens_reg,0
addlw H'30'
movwf LCD16
movf ones_reg,0
addlw H'30'
movwf LCD17
call DISPLAY_1ROW
BANKSEL ADCON0
MOVLW B'10000000' ;ADC off
MOVWF ADCON0
CALL DELAY_10
BANKSEL ADCON0
MOVLW B'10001001' ;ADC on,CH1
MOVWF ADCON0
CALL DELAY_10
CALL DELAY_10
bsf ADCON0,GO_DONE ;start conversion nop
test_1
BTFSC ADCON0,GO_DONE
GOTO test_1
MOVLW 0x1E
MOVWF FSR
MOVF INDF,0
MOVWF binh_reg
MOVLW 0x9E
MOVWF FSR
MOVF INDF,0
MOVWF binl_reg
call conv_16bin_bcd
movf thous_reg,0
addlw H'30'
movwf LCD23
movf hund_reg,0
addlw H'30'
movwf LCD24
movf tens_reg,0
addlw H'30'
movwf LCD25
movf ones_reg,0
addlw H'30'
movwf LCD26
call DISPLAY_2ROW
BANKSEL ADCON0
MOVLW B'10000000' ;;ADC off
MOVWF ADCON0
goto again
;------------------------------------------------
ISR
btfss INTCON,T0IF
goto ISR_OUT
banksel FLAG
btfss FLAG,RA
goto set_RA
bcf FLAG,RA
banksel PORTD
bcf PORTD,RA
banksel TMR0
movlw 0x00
movwf TMR0
bcf INTCON,T0IF
goto ISR_OUT
set_RA
bsf FLAG,RA
banksel PORTD
bsf PORTD,RA
banksel TMR0
movlw 0x00
movwf TMR0
bcf INTCON,T0IF
ISR_OUT
nop
goto ISR_RETURN
;--------------------------------
DELAY_10 ;10mS
BANKSEL TMR1H
MOVLW 0xA7
MOVWF TMR1H
MOVLW 0x01
MOVWF TMR1L
BANKSEL PIR1
BCF PIR1,TMR1IF
BANKSEL T1CON
BSF T1CON,0
T1_WAIT
BTFSS PIR1,TMR1IF
GOTO T1_WAIT
NOP
RETURN
END
Това е без програмата за управление на LCD-то.Ако някой държи да тества- ще му зипна проекта и ще му го пратя - ама да каже.Ама си мисля че не бъркам в програмата
