Forum

Einloggen | Registrieren | RSS  

16f819 zeigt im Display nicht das Richtige an (Elektronik)

verfasst von hundbingo E-Mail, 16.07.2014, 16:18 Uhr

Guten Tag

Ich bin Neuling, 70 Jahre alt und möchte noch etwas bauen.
ich benutze den 16f819 mit Oshon-Software und kann nur Basic.
In der Simulation geht alles aufgebaut zeigt das Display
1602 nur Schrott an und taktet. beim 16f628 geht alles.
Frage wo ist der Fehler? Kann mir Jemand bitte helfen.

vielen Dank an alle
hundbingo

Das Programm :Basic

Define ADC_CLOCK = 3
Define ADC_SAMPLEUS = 20
Define LCD_BITS = 4
Define LCD_DREG = PORTB
Define LCD_DBIT = 4
Define LCD_RSREG = PORTB
Define LCD_RSBIT = 2
Define LCD_EREG = PORTB
Define LCD_EBIT = 0
Define LCD_RWREG = PORTB
Define LCD_RWBIT = 0
Dim an0 As Word
Dim alt As Long
Dim e1 As Long
Dim e2 As Long
TRISA = 0xff
TRISB = 0xff
ADCON0 = 0
Lcdinit 1
TRISA = %00000001

loop:
WaitMs 5
Adcin 0, an0
e1 = an0
e2 = e1

If alt = e2 Then Goto loop
If e2 > 0 And e2 < 499 Then Gosub anz1
If e2 > 498 And e2 < 1000 Then Gosub laden

Goto loop
End
anz1:
Lcdcmdout LcdClear
Lcdout #e2,
WaitMs 5
Lcdcmdout LcdLine2Home
Lcdout " ruhig"
WaitMs 5
alt = e2
Return
laden:

Lcdcmdout LcdClear
Lcdout #e2,
WaitUs 5
Lcdcmdout LcdLine2Home
Lcdout "laut "
alt = e2
Return

In asm:

; Compiled with: PIC Simulator IDE v7.19
; Microcontroller model: PIC16F819
; Clock frequency: 4.0MHz
;
R0L EQU 0x020
R0H EQU 0x021
R1L EQU 0x022
R1H EQU 0x023
R2L EQU 0x024
R2H EQU 0x025
R3L EQU 0x026
R3H EQU 0x027
R4L EQU 0x028
R4H EQU 0x029
R5L EQU 0x02A
R5H EQU 0x02B
R0HL EQU 0x020
R1HL EQU 0x022
R2HL EQU 0x024
R3HL EQU 0x026
R4HL EQU 0x028
R5HL EQU 0x02A
R1HL0HL EQU 0x020
R3HL2HL EQU 0x024
R5HL4HL EQU 0x028
LONG_0 EQU 0x02C
LONG_1 EQU 0x02D
LONG_2 EQU 0x02E
LONG_3 EQU 0x02F
LONG2_0 EQU 0x030
LONG2_1 EQU 0x031
LONG2_2 EQU 0x032
LONG2_3 EQU 0x033
LONG1 EQU 0x02C
LONG2 EQU 0x030
; The address of 'an0' (word) (global) is 0x049
; The address of 'alt' (long) (global) is 0x04B
; The address of 'e1' (long) (global) is 0x04F
; The address of 'e2' (long) (global) is 0x045
ORG 0x0000
BCF PCLATH,4
BCF PCLATH,3
GOTO L0004
ORG 0x0004
RETFIE
; User code start
L0004:
; 1: Define ADC_CLOCK = 3
; 2: Define ADC_SAMPLEUS = 20
; 3: Define LCD_BITS = 4
; 4: Define LCD_DREG = PORTB
; 5: Define LCD_DBIT = 4
; 6: Define LCD_RSREG = PORTB
; 7: Define LCD_RSBIT = 2
; 8: Define LCD_EREG = PORTB
; 9: Define LCD_EBIT = 0
; 10: Define LCD_RWREG = PORTB
; 11: Define LCD_RWBIT = 0
; 12: Dim an0 As Word
; 13: Dim alt As Long
; 14: Dim e1 As Long
; 15: Dim e2 As Long
; 16: TRISA = 0xff
MOVLW 0xFF
BSF STATUS,RP0
MOVWF TRISA
BCF STATUS,RP0
; 17: TRISB = 0xff
MOVLW 0xFF
BSF STATUS,RP0
MOVWF TRISB
BCF STATUS,RP0
; 18: ADCON0 = 0
CLRF ADCON0
; 19: Lcdinit 1
BCF PORTB,0
BCF PORTB,2
BCF PORTB,0
BSF STATUS,RP0
BCF TRISB,0
BCF TRISB,2
BCF TRISB,0
MOVLW 0x0F
ANDWF TRISB,F
BCF STATUS,RP0
MOVLW 0x64
MOVWF R0L
CLRF R0H
CALL W001
MOVLW 0x33
CALL LC00
MOVLW 0xE6
MOVWF R4L
MOVLW 0x03
MOVWF R4H
CALL DL02
MOVLW 0x33
CALL LC00
MOVLW 0x41
MOVWF R4L
CALL DL01
MOVLW 0x33
CALL LC00
MOVLW 0x41
MOVWF R4L
CALL DL01
MOVLW 0x22
CALL LC00
MOVLW 0x41
MOVWF R4L
CALL DL01
MOVLW 0x28
CALL LC02
MOVLW 0x0D
CALL LC02
MOVLW 0x01
CALL LC02
; 20: TRISA = %00000001
MOVLW 0x01
BSF STATUS,RP0
MOVWF TRISA
BCF STATUS,RP0
; 21:
; 22: loop:
L0001:
; 23: WaitMs 5
MOVLW 0xF2
MOVWF R4L
MOVLW 0x01
MOVWF R4H
CALL DL02
; 24: Adcin 0, an0
BSF STATUS,RP0
BSF ADCON1,ADFM
BCF ADCON1,ADCS2
BCF STATUS,RP0
CLRF R0L
CALL A001
BSF STATUS,RP0
MOVF ADRESL,W
BCF STATUS,RP0
MOVWF 0x049
MOVF ADRESH,W
MOVWF 0x04A
; 25: e1 = an0
MOVF 0x049,W
MOVWF 0x04F
MOVF 0x04A,W
MOVWF 0x050
CLRF 0x051
CLRF 0x052
; 26: e2 = e1
MOVF 0x04F,W
MOVWF 0x045
MOVF 0x050,W
MOVWF 0x046
MOVF 0x051,W
MOVWF 0x047
MOVF 0x052,W
MOVWF 0x048
; 27:
; 28: If alt = e2 Then Goto loop
MOVF 0x04B,W
MOVWF R0L
MOVF 0x04C,W
MOVWF R0H
MOVF 0x04D,W
MOVWF R1L
MOVF 0x04E,W
MOVWF R1H
MOVF 0x045,W
MOVWF R2L
MOVF 0x046,W
MOVWF R2H
MOVF 0x047,W
MOVWF R3L
MOVF 0x048,W
MOVWF R3H
CALL CL01
BTFSS STATUS,Z
GOTO L0005
GOTO L0001
L0005:
; 29: If e2 > 0 And e2 < 499 Then Gosub anz1
MOVF 0x045,W
MOVWF R0L
MOVF 0x046,W
MOVWF R0H
MOVF 0x047,W
MOVWF R1L
MOVF 0x048,W
MOVWF R1H
CLRF R2L
CLRF R2H
CLRF R3L
CLRF R3H
CALL CL03
BTFSC STATUS,C
GOTO L0006
MOVF 0x045,W
MOVWF R0L
MOVF 0x046,W
MOVWF R0H
MOVF 0x047,W
MOVWF R1L
MOVF 0x048,W
MOVWF R1H
MOVLW 0xF3
MOVWF R2L
MOVLW 0x01
MOVWF R2H
CLRF R3L
CLRF R3H
CALL CL01
BTFSC STATUS,C
GOTO L0006
CALL L0002
L0006:
; 30: If e2 > 498 And e2 < 1000 Then Gosub laden
MOVF 0x045,W
MOVWF R0L
MOVF 0x046,W
MOVWF R0H
MOVF 0x047,W
MOVWF R1L
MOVF 0x048,W
MOVWF R1H
MOVLW 0xF2
MOVWF R2L
MOVLW 0x01
MOVWF R2H
CLRF R3L
CLRF R3H
CALL CL03
BTFSC STATUS,C
GOTO L0007
MOVF 0x045,W
MOVWF R0L
MOVF 0x046,W
MOVWF R0H
MOVF 0x047,W
MOVWF R1L
MOVF 0x048,W
MOVWF R1H
MOVLW 0xE8
MOVWF R2L
MOVLW 0x03
MOVWF R2H
CLRF R3L
CLRF R3H
CALL CL01
BTFSC STATUS,C
GOTO L0007
CALL L0003
L0007:
; 31:
; 32: Goto loop
GOTO L0001
; 33: End
L0008: GOTO L0008
; 34: anz1:
L0002:
; 35: Lcdcmdout LcdClear
MOVLW 0x01
CALL LC02
; 36: Lcdout #e2,
MOVF 0x045,W
MOVWF 0x03F
MOVF 0x046,W
MOVWF 0x040
MOVF 0x047,W
MOVWF 0x041
MOVF 0x048,W
MOVWF 0x042
CALL _append_lab_0001
CALL LC21
; 37: WaitMs 5
MOVLW 0xF2
MOVWF R4L
MOVLW 0x01
MOVWF R4H
CALL DL02
; 38: Lcdcmdout LcdLine2Home
MOVLW 0xC0
CALL LC02
; 39: Lcdout " ruhig"
MOVLW 0x20
CALL LC01
MOVLW 0x72
CALL LC01
MOVLW 0x75
CALL LC01
MOVLW 0x68
CALL LC01
MOVLW 0x69
CALL LC01
MOVLW 0x67
CALL LC01
; 40: WaitMs 5
MOVLW 0xF2
MOVWF R4L
MOVLW 0x01
MOVWF R4H
CALL DL02
; 41: alt = e2
MOVF 0x045,W
MOVWF 0x04B
MOVF 0x046,W
MOVWF 0x04C
MOVF 0x047,W
MOVWF 0x04D
MOVF 0x048,W
MOVWF 0x04E
; 42: Return
RETURN
; 43: laden:
L0003:
; 44:
; 45: Lcdcmdout LcdClear
MOVLW 0x01
CALL LC02
; 46: Lcdout #e2,
MOVF 0x045,W
MOVWF 0x03F
MOVF 0x046,W
MOVWF 0x040
MOVF 0x047,W
MOVWF 0x041
MOVF 0x048,W
MOVWF 0x042
CALL _append_lab_0001
CALL LC21
; 47: WaitUs 5
NOP
NOP
NOP
NOP
NOP
; 48: Lcdcmdout LcdLine2Home
MOVLW 0xC0
CALL LC02
; 49: Lcdout "laut "
MOVLW 0x6C
CALL LC01
MOVLW 0x61
CALL LC01
MOVLW 0x75
CALL LC01
MOVLW 0x74
CALL LC01
MOVLW 0x20
CALL LC01
MOVLW 0x20
CALL LC01
; 50: alt = e2
MOVF 0x045,W
MOVWF 0x04B
MOVF 0x046,W
MOVWF 0x04C
MOVF 0x047,W
MOVWF 0x04D
MOVF 0x048,W
MOVWF 0x04E
; 51: Return
RETURN
; 52:
; 53:
; 54:
; End of user code
L0009: GOTO L0009
; Delay Routine Byte
; minimal routine execution time: 8µs
; routine execution time step: 3µs
; maximal routine execution time: 770µs
DL01:
DECFSZ R4L,F
GOTO DL01
RETURN
; Delay Routine Word
; minimal routine execution time: 15µs
; routine execution time step: 10µs
; maximal routine execution time: 655365µs
DL02:
MOVLW 0x01
SUBWF R4L,F
CLRW
BTFSS STATUS,C
ADDLW 0x01
SUBWF R4H,F
BTFSS STATUS,C
RETURN
GOTO DL02
; Waitms Routine
W001: MOVLW 0x01
SUBWF R0L,F
CLRW
BTFSS STATUS,C
ADDLW 0x01
SUBWF R0H,F
BTFSS STATUS,C
RETURN
MOVLW 0x61
MOVWF R4L
MOVLW 0x00
MOVWF R4H
CALL DL02
GOTO W001
; Lcdout Routine
LC01:
MOVWF R3L
BSF PORTB,2
BCF PORTB,0
MOVF PORTB,W
MOVWF R3H
CALL LCX6
MOVWF PORTB
CALL LCX1
MOVF PORTB,W
MOVWF R3H
SWAPF R3L,F
CALL LCX6
MOVWF PORTB
CALL LCX1
MOVLW 0x1F
MOVWF R4L
CALL DL01
RETURN
LCX6:
MOVLW 0x0F
ANDWF R3H,F
MOVF R3L,W
ANDLW 0xF0
IORWF R3H,W
RETURN
LCX1:
BSF PORTB,0
NOP
BCF PORTB,0
NOP
RETURN
; Lcdinit Routine
LC00:
BCF PORTB,2
BCF PORTB,0
MOVWF R3L
MOVF PORTB,W
MOVWF R3H
CALL LCX6
MOVWF PORTB
CALL LCX1
RETURN
; Lcdcmdout Routine
LC02:
MOVWF R3L
BCF PORTB,2
BCF PORTB,0
MOVF PORTB,W
MOVWF R3H
CALL LCX6
MOVWF PORTB
CALL LCX1
MOVF PORTB,W
MOVWF R3H
SWAPF R3L,F
CALL LCX6
MOVWF PORTB
CALL LCX1
MOVLW 0xF2
MOVWF R4L
MOVLW 0x01
MOVWF R4H
CALL DL02
RETURN
; Lcdout Decimal Conversion Routine
LC21:
BCF STATUS,IRP
MOVLW 0x34
MOVWF FSR
LC22:
MOVF INDF,W
BTFSC STATUS,Z
RETURN
INCF FSR,F
CALL LC01
GOTO LC22
; Long Addition Routine
LA01: MOVF R2L,W
ADDWF R0L,F
BTFSC STATUS,C
CALL LA02
MOVF R2H,W
ADDWF R0H,F
BTFSC STATUS,C
CALL LA03
MOVF R3L,W
ADDWF R1L,F
BTFSC STATUS,C
CALL LA04
MOVF R3H,W
ADDWF R1H,F
RETURN
LA02: INCF R0H,F
BTFSS STATUS,Z
RETURN
LA03: INCF R1L,F
BTFSS STATUS,Z
RETURN
LA04: INCF R1H,F
RETURN
; Long Subtraction Routine
LS01:
CALL LS02
CALL LA01
RETURN
LS02: COMF R2L,F
COMF R2H,F
COMF R3L,F
COMF R3H,F
INCF R2L,F
BTFSS STATUS,Z
RETURN
INCF R2H,F
BTFSS STATUS,Z
RETURN
INCF R3L,F
BTFSS STATUS,Z
RETURN
INCF R3H,F
RETURN
; Long Multiplication Routine
LM01: CLRF R0L
CLRF R0H
CLRF R1L
CLRF R1H
BCF STATUS,IRP
MOVLW LONG_0
MOVWF FSR
MOVLW 0x04
MOVWF R5L
GOTO LM03
usw



Gesamter Thread:

16f819 zeigt im Display nicht das Richtige an - hundbingo, 16.07.2014, 16:18 (Elektronik)
16f819 zeigt im Display nicht das Richtige an - hundgingo(R), 17.07.2014, 23:10