Bilaga V

Assemblerkod till styrkretsen

;************************************************************************************

;Program som initierar en LCD-display och styr digitaldelen i projektet DITAMA2    *

;************************************************************************************

                                                          LIST                     P=16F84

                                                          include P16F84.INC

TMP                                                  EQU                     D'12'                     ; temporär lagring av tecken i CMPI-macro

TEMP                                               EQU                     D'14'                     ; temporär lagring av tecken i write subrutin

FLAG                                                 EQU                     D'18'                     ; Bit 0 i flag håller reda på om vi är på med1/med2

                                                                                                                    ; Bit 1 kollar om det finns meddelande eller ej på med1

                                                                                                                    ; Bit 2 kollar om det finns meddelande eller ej på med2

                                                                                                                    ; Bit 3 kollar stdby på/av

N                                                       EQU                     D'20'                     ; tidsvariabel 1 i delay

N2                                                     EQU                     D'21'                     ; tidsvariabel 2 i delay

TEMP2                                             EQU                     D'22'                     ; temporär lagring av knapptryckning

SAMPL                                              EQU                     D'23'                     ; tidsvariabel för 8 kHz

;**********************************

; variabeltilldelning slut                        *

;**********************************

;**********************************

;Lite olika MAKRON                           *

;**********************************

CMPI                                                 MACRO                a,b                         ; CMPI                  a,b (b-a)

                                                          MOVFW               b                           ; flyttar b till W-reg

                                                          MOVWF               TMP                     ; flyttar W-reg till TMP

                                                          MOVLW               a                           ; flyttar a till W-reg

                                                          SUBWF                 TMP,F                  ; b-a görs, resultat i TMP, b ändras ej

                                                          ENDM                                               ; END MACRO

 

BNE                                                   MACRO                label                      ; BNE                    label

                                                          BTFSS                   STATUS,Z            ; hoppa förbi nästa instruktion

                                                          GOTO                   label                      ; om Z=1

                                                          ENDM

 

BEQ                                                   MACRO                label                      ; BNE                    label

                                                          BTFSC                  STATUS,Z            ; hoppa förbi nästa instruktion

                                                          GOTO                   label                      ; om Z=1

                                                          ENDM

 

WRITEM                                          MACRO                TEXT

                                                          MOVLW               TEXT-H'2100'

                                                          CALL                   WRITE

                                                          ENDM

 

;************************

; Här börjar adress 0              *

;************************

                                                          ORG                      0                          

                                                          GOTO                   MAIN                   ; hoppar över interruptrutin

;**********************************

; Här börjar INTERRUPT subrutinen       *

;**********************************

                                                          ORG                      4

INTERPT            

                                                          MOVLW               H'01'

                                                          CALL                   DELAY                ; delay i ca 260us

                                                                                                                    ; för ev kontaktstudsar

                                                          MOVFW               PORTB

                                                          MOVWF               TEMP2

                                                          MOVLW               B'00001111'        

                                                          ANDWF               TEMP2,F             ; maskar ut de 4 lägsta bitarna

 

                                                          BTFSC                  FLAG,3                 ; testar bit 3 på FLAG (standby på/av)

                                                          GOTO                   VIDARE4             ; om standby är på, hopp till VIDARE4

 

                                                          CMPI                    B'0000',TEMP2    ; knappen bläddra nedtryckt

                                                          BNE                      VIDARE               ; om ej nedtryckt gå vidare

                                                          MOVLW               B'00000001'

                                                          XORWF                FLAG,F                 ; inverterar bit 0 på FLAG, medd1/medd2

                                                          CALL                   BLÄDDRA           ; om nedtryckt gå till BLÄDDRA

                                                          GOTO                   FIN                       ; avsluta avbrottsrutin

 

VIDARE                                            CMPI                    B'0010',TEMP2    ; knappen PLAY nedtryckt

                                                          BNE                      VIDARE2             ; om ej nedtryckt gå vidare

                                                          CALL                   PLAY                   ; om nedtryckt gå till PLAY

                                                          GOTO                   FIN                       ; avsluta avbrottsrutin

                            

VIDARE2                                          CMPI                    B'0100',TEMP2    ; knappen REC nedtryckt

                                                          BNE                      VIDARE3             ; om ej nedtryckt gå vidare

                                                          CALL                   REC                      ; om nedtryckt gå till REC

                                                          GOTO                   FIN                       ; avsluta avbrottsrutin

 

VIDARE3                                          CMPI                    B'0110',TEMP2    ; knappen RADERA nedtryckt

                                                          BNE                      VIDARE4             ; om ej nedtryckt gå vidare

                                                          CALL                   ERASE                  ; om nedtryckt gå till ERASE

                                                          GOTO                   FIN                       ; avsluta avbrottsrutin

 

VIDARE4                                          CMPI                    B'1000',TEMP2    ; knappen STANDBY nedtryckt

                                                          BNE                      FIN                       ; om ej nedtryckt gå vidare

                                                          CALL                   STANDBY            ; om nedtryckt gå till STANDBY      

                                                         

FIN                                                    BTFSS                   PORTB,0              ; väntar tills knapp släpps

                                                          GOTO                   FIN

                                                         

                                                          RETFIE                                            

;***********interrupt slut***************

 

;******************

; Här börjar MAIN    *

;******************

MAIN                                                MOVLW               H'3F'                     ; delay i ca 256*260 us ~ 67ms

                                                          CALL                   DELAY                ; för att alla kretsar ska få tid på sig

                                                         

                                                          CALL                   INIT

                                                         

                                                          CALL                   INITDISP             ; initiering av display

                                                                                      

                                                          CALL                   BLÄDDRA

                                                                                      

                                                          BSF                       STATUS,RP0       ; BANK 1, ty OPTION_REG ligger där                          

                                                          BCF                      OPTION_REG,INTEDG; interrupt på negativ flank

                                                          BCF                      STATUS,RP0       ; BANK 0 igen

                                                          BCF                      INTCON,INTF     ; Clear flag

                                                          BSF                       INTCON,GIE        ; Global interrupt enable

                                                          BSF                       INTCON,INTE     ; RB0/INT interrupt enable

 

HIT                                                   SLEEP                                               ; Sleep-mode tills avbrott kommer

                                                          NOP                                                  ; gör ingenting före avbrottsrutin

 

                                                          GOTO                   HIT                      ; fortsätter här efter avbrottsrutin

;*******************MAIN SLUT*******************************

 

;********************************

; Subrutinen BLÄDDRA                     *

;********************************

BLÄDDRA                                        CALL                   CLS                       ; clear screen

                                                         

                                                          CMPI                    D'0',FLAG             ; jämför FLAG med 0

                                                          BNE                      CARRY_ON         ; om ej 0 fortsätt

                                                          CALL                   PIL                       ; ritar en pil på skärmen

                                                          CALL                   MEDDELANDE1 ; skriver "MEDDELANDE 1" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK               

                                                          CALL                   INGETMEDD       ; skriver "INGET MEDDELANDE" på LCD

                                                          CALL                   NYRAD                ; nästa rad

                                                          WRITEM             BLANK

                                                          CALL                   MEDDELANDE2 ; skriver "MEDDELANDE 2" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK

                                                          CALL                   INGETMEDD       ; skriver "INGET MEDDELANDE" på LCD

                                                          GOTO                   FINITO                ; slut på subrutin                                

                                                         

CARRY_ON                                      CMPI                    D'1',FLAG

                                                          BNE                      CARRY_ON1       ; om ej 0 fortsätt

                                                          WRITEM             BLANK

                                                          CALL                   MEDDELANDE1 ; skriver "MEDDELANDE 1" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK               

                                                          CALL                   INGETMEDD       ; skriver "INGET MEDDELANDE" på LCD

                                                          CALL                   NYRAD                ; nästa rad

                                                          CALL                   PIL                       ; ritar en pil på skärmen

                                                          CALL                   MEDDELANDE2 ; skriver "MEDDELANDE 2" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK

                                                          CALL                   INGETMEDD       ; skriver "INGET MEDDELANDE" på LCD

                                                          GOTO                   FINITO                ; slut på subrutin

                                                         

CARRY_ON1                                    CMPI                    D'2',FLAG

                                                          BNE                      CARRY_ON2       ; om ej 0 fortsätt

                                                          CALL                   PIL                       ; ritar en pil på skärmen

                                                          CALL                   MEDDELANDE1 ; skriver "MEDDELANDE 1" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK               

                                                          CALL                   MEDDFINNS        ; skriver "MEDDELANDE FINNS" på LCD

                                                          CALL                   NYRAD                ; nästa rad

                                                          WRITEM             BLANK

                                                          CALL                   MEDDELANDE2 ; skriver "MEDDELANDE 2" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK

                                                          CALL                   INGETMEDD       ; skriver "INGET MEDDELANDE" på LCD

                                                          GOTO                   FINITO                ; slut på subrutin

 

CARRY_ON2                                    CMPI                    D'3',FLAG

                                                          BNE                      CARRY_ON3       ; om ej 0 fortsätt

                                                          WRITEM             BLANK

                                                          CALL                   MEDDELANDE1 ; skriver "MEDDELANDE 1" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK               

                                                          CALL                   INGETMEDD       ; skriver "INGET MEDDELANDE" på LCD

                                                          CALL                   NYRAD                ; nästa rad

                                                          CALL                   PIL                       ; ritar en pil på skärmen

                                                          CALL                   MEDDELANDE2 ; skriver "MEDDELANDE 2" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK

                                                          CALL                   MEDDFINNS        ; skriver "MEDDELANDE FINNS" på LCD

                                                          GOTO                   FINITO                ; slut på subrutin

 

CARRY_ON3                                    CMPI                    D'4',FLAG

                                                          BNE                      CARRY_ON4       ; om ej 0 fortsätt

                                                          CALL                   PIL

                                                          CALL                   MEDDELANDE1 ; skriver "MEDDELANDE 1" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK               

                                                          CALL                   INGETMEDD       ; skriver "INGET MEDDELANDE" på LCD

                                                          CALL                   NYRAD                ; nästa rad

                                                          WRITEM             BLANK

                                                          CALL                   MEDDELANDE2 ; skriver "MEDDELANDE 2" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK

                                                          CALL                   MEDDFINNS        ; skriver "MEDDELANDE FINNS" på LCD

                                                          GOTO                   FINITO                ; slut på subrutin

 

CARRY_ON4                                    CMPI                    D'5',FLAG

                                                          BNE                      CARRY_ON5       ; om ej 0 fortsätt

                                                          WRITEM             BLANK

                                                          CALL                   MEDDELANDE1 ; skriver "MEDDELANDE 1" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK               

                                                          CALL                   MEDDFINNS        ; skriver "MEDDELANDE FINNS" på LCD

                                                          CALL                   NYRAD                ; nästa rad

                                                          CALL                   PIL                       ; ritar en pil på skärmen

                                                          CALL                   MEDDELANDE2 ; skriver "MEDDELANDE 2" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK

                                                          CALL                   INGETMEDD       ; skriver "INGET MEDDELANDE" på LCD

                                                          GOTO                   FINITO                ; slut på subrutin

 

CARRY_ON5                                    CMPI                    D'6',FLAG

                                                          BNE                      CARRY_ON6       ; om ej 0 fortsätt

                                                          CALL                   PIL                       ; ritar en pil på skärmen

                                                          CALL                   MEDDELANDE1 ; skriver "MEDDELANDE 1" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK               

                                                          CALL                   MEDDFINNS        ; skriver "MEDDELANDE FINNS" på LCD

                                                          CALL                   NYRAD                ; nästa rad

                                                          WRITEM             BLANK

                                                          CALL                   MEDDELANDE2 ; skriver "MEDDELANDE 2" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK

                                                          CALL                   MEDDFINNS        ; skriver "MEDDELANDE FINNS" på LCD

                                                          GOTO                   FINITO                ; slut på subrutin

 

CARRY_ON6                                    CMPI                    D'7',FLAG

                                                          BNE                      FINITO                ; om ej 0 SLUT

                                                          WRITEM             BLANK

                                                          CALL                   MEDDELANDE1 ; skriver "MEDDELANDE 1" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK               

                                                          CALL                   MEDDFINNS        ; skriver "MEDDELANDE FINNS" på LCD

                                                          CALL                   NYRAD                ; nästa rad

                                                          CALL                   PIL                       ; ritar en pil på skärmen

                                                          CALL                   MEDDELANDE2 ; skriver "MEDDELANDE 2" på LCD

                                                          WRITEM             KOLON

                                                          WRITEM             BLANK

                                                          CALL                   MEDDFINNS        ; skriver "MEDDELANDE FINNS" på LCD

 

FINITO               

                                                          RETURN

 

;********************************

; Subrutinen PLAY                                                          *

;********************************

PLAY                                                CALL                   CLS

                                                          BTFSS                   FLAG,0                 ; testar bit 0 på FLAG (medd1/medd2)

                                                          GOTO                   MEDDETT

                                                          GOTO                   MEDDTVÅ                                      

 

MEDDETT                                       BTFSS                   FLAG,1                 ; testar bit 1 på FLAG (medd1: finns/finns ej)

                                                          GOTO                   MEDDETT_EJ

                                                          GOTO                   MEDDETT_JA

                                                         

MEDDETT_EJ                                  WRITEM             FINNS

                                                          WRITEM             BLANK

                                                          WRITEM             INGET

                                                          WRITEM             KOLON

                                                          CALL                   NYRAD

                                                          CALL                   MEDDELANDE1

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge                                                        

 

                                                          GOTO                   NEXT3

 

MEDDETT_JA                                 WRITEM             SPELAR_UPP

                                                          WRITEM             BLANK

                                                          WRITEM             KOLON

                                                          CALL                   NYRAD

                                                          CALL                   MEDDELANDE1

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

 

                                                          ; Meddelande spelas upp:

                                                          MOVLW               B'1000'; medd1, Chip Select-D/A, Write Enable-minne, sp. reg analogdel på

                                                          MOVWF               PORTA

                                                          MOVLW               H'01'

                                                          CALL                   DELAY                ; delay i ca 260µs så att analogdelen hinner startas upp   

                                                          MOVLW               B'01110000'         ; Master Reset-räknarna

                                                          MOVWF               PORTB

                                                         

PLAYLOOP1                                    BSF                       PORTA,0             ; /Chip Select-minne

                                                          MOVLW               B'00000000'

                                                          MOVWF               PORTB                 ; räknar upp räknarna ett steg

                                                          MOVLW               B'01000000'         ; ovan och nedan gör en slags klockpuls

                                                          MOVWF               PORTB                 ; ställer tillbaka räknare

                                                          BTFSC                  PORTA,4             ; testar bit 4 på PORTA

                                                          GOTO                   NEXT3                 ; Om den är 1 är meddelandet slut, dvs MSB räknare=1

                                                          CALL                   SAMPLDELAY    ; delay så att det blir ca 8kHz totalt

                                                          BCF                      PORTA,0             ; /Chip Select-minne disable

                                                          CALL                   SAMPLDELAY    ; delay så att det blir ca 8kHz totalt

                                                          GOTO                   PLAYLOOP1       ; LOOP

 

MEDDTVÅ                                       BTFSS                   FLAG,2                 ; testar bit 2 på FLAG (medd2: finns/finns ej)

                                                          GOTO                   MEDDTVÅ_EJ

                                                          GOTO                   MEDDTVÅ_JA

 

MEDDTVÅ_EJ                                  WRITEM             FINNS

                                                          WRITEM             BLANK

                                                          WRITEM             INGET

                                                          WRITEM             KOLON

                                                          CALL                   NYRAD

                                                          CALL                   MEDDELANDE2

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                         

                                                          GOTO                   NEXT3

 

MEDDTVÅ_JA                                 WRITEM             SPELAR_UPP

                                                          WRITEM             BLANK

                                                          WRITEM             KOLON

                                                          CALL                   NYRAD

                                                          CALL                   MEDDELANDE2

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

 

                                                          ; Meddelande spelas upp:

                                                          MOVLW               B'1010'; medd2, Chip Select-D/A, Write Enable-minne, sp. reg analogdel på

                                                          MOVWF               PORTA

                                                          MOVLW               H'01'

                                                          CALL                   DELAY                ; delay i ca 260µs så att analogdelen hinner startas upp   

                                                          MOVLW               B'01110000'         ; Master Reset-räknarna

                                                          MOVWF               PORTB

                                                         

PLAYLOOP2                                    BSF                       PORTA,0                                          ; /Chip Select-minne

                                                          MOVLW               B'00000000'

                                                          MOVWF               PORTB                 ; räknar upp räknarna ett steg

                                                          MOVLW               B'01000000'         ; ovan och nedan gör en slags klockpuls

                                                          MOVWF               PORTB                 ; ställer tillbaka räknare

                                                          BTFSC                  PORTA,4             ; testar bit 4 på PORTA

                                                          GOTO                   NEXT3                 ; Om den är 1 är meddelandet slut, dvs MSB räknare=1

                                                          CALL                   SAMPLDELAY    ; delay så att det blir ca 8kHz totalt

                                                          BCF                      PORTA,0             ; /Chip Select-minne disable

                                                          CALL                   SAMPLDELAY    ; delay så att det blir ca 8kHz totalt

                                                          GOTO                   PLAYLOOP2       ; LOOP

                                                                                                                                                

NEXT3                                              CLRF                    PORTA                ; nollställer PORTA, dvs inget enablat

                                                          CALL                   BLÄDDRA

RETURN

 

;********************************

; Subrutinen REC                                *

;********************************

REC                                                   CALL                   CLS

                                                          BTFSS                   FLAG,0                 ; testar bit 0 på FLAG (medd1/medd2)

                                                          GOTO                   MEDETT

                                                          GOTO                   MEDTVÅ                                         

 

MEDETT                                          BSF                       FLAG,1                 ; sätter bit 1 på FLAG till 1

                                                          WRITEM             SPELAR_IN

                                                          WRITEM             BLANK

                                                          WRITEM             KOLON

                                                          CALL                   NYRAD

                                                          CALL                   MEDDELANDE1

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

 

                                                          ; Meddelande spelas in:

                                                          MOVLW               B'0100'; medd1, Chip Select-A/D, Output Enable-minne, sp. reg analogdel på

                                                          MOVWF               PORTA

                                                          MOVLW               H'01'

                                                          CALL                   DELAY                ; delay i ca 260µs så att analogdelen hinner startas upp   

                                                          MOVLW               B'01110000'         ; Master Reset-räknarna

                                                          MOVWF               PORTB

                                                         

RECLOOP1                                       BSF                       PORTA,0                                          ; /Chip Select-minne

                                                          MOVLW               B'00000000'

                                                          MOVWF               PORTB                 ; räknar upp räknarna ett steg

                                                          MOVLW               B'01000000'         ; ovan och nedan gör en slags klockpuls

                                                          MOVWF               PORTB                 ; ställer tillbaka räknare

                                                          BTFSC                  PORTA,4             ; testar bit 4 på PORTA

                                                          GOTO                   NEXT                   ; Om den är 1 är meddelandet slut, dvs MSB räknare=1

                                                          CALL                   SAMPLDELAY    ; delay så att det blir ca 8kHz totalt

                                                          BCF                      PORTA,0             ; /Chip Select-minne disable

                                                          CALL                   SAMPLDELAY    ; delay så att det blir ca 8kHz totalt

                                                          GOTO                   RECLOOP1          ; LOOP                

                                                         

                                                          GOTO                   NEXT                   ; dvs meddelande 1 finns

 

MEDTVÅ                                          BSF                       FLAG,2                 ; annars är vi på meddelande 2

                                                                                                                    ; och meddelande finns där

                                                          WRITEM             SPELAR_IN

                                                          WRITEM             BLANK

                                                          WRITEM             KOLON

                                                          CALL                   NYRAD

                                                          CALL                   MEDDELANDE2

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

 

                                                          ; Meddelande spelas in:

                                                          MOVLW               B'0110' ; medd2, Chip Select-A/D, Output Enable-minne, sp. reg analogdel på

                                                          MOVWF               PORTA

                                                          MOVLW               H'01'

                                                          CALL                   DELAY                ; delay i ca 260µs så att analogdelen hinner startas upp   

                                                          MOVLW               B'01110000'         ; Master Reset-räknarna

                                                          MOVWF               PORTB

                                                         

RECLOOP2                                       BSF                       PORTA,0                                          ; /Chip Select-minne

                                                          MOVLW               B'00000000'

                                                          MOVWF               PORTB                 ; räknar upp räknarna ett steg

                                                          MOVLW               B'01000000'         ; ovan och nedan gör en slags klockpuls

                                                          MOVWF               PORTB                 ; ställer tillbaka räknare

                                                          BTFSC                  PORTA,4             ; testar bit 4 på PORTA

                                                          GOTO                   NEXT                   ; Om den är 1 är meddelandet slut, dvs MSB räknare=1

                                                          CALL                   SAMPLDELAY    ; delay så att det blir ca 8kHz totalt

                                                          BCF                      PORTA,0             ; /Chip Select-minne disable

                                                          CALL                   SAMPLDELAY    ; delay så att det blir ca 8kHz totalt

                                                          GOTO                   RECLOOP2          ; LOOP                 1

                                                                                                                                                

NEXT                                                CLRF                    PORTA                ; nollställer PORTA, dvs inget enablat

                                                          CALL                   BLÄDDRA

                                                         

                                                          RETURN

 

;********************************

; Subrutinen ERASE                              *

;********************************

ERASE                                               CALL                   CLS

                                                          BTFSS                   FLAG,0                 ; testar bit 0 på FLAG (medd1/medd2)

                                                          GOTO                   MED1

                                                          GOTO                   MED2

 

MED1                                                BTFSS                   FLAG,1                 ; testar bit 1 på FLAG (medd1: finns/finns ej)

                                                          GOTO                   MED1_EJ

                                                          GOTO                   MED1_JA

                                                         

MED1_EJ                                          WRITEM             FINNS

                                                          WRITEM             BLANK

                                                          WRITEM             INGET

                                                          WRITEM             KOLON

                                                          CALL                   NYRAD

                                                          CALL                   MEDDELANDE1

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

 

                                                          GOTO                   NEXT2

                                                                                                                   

MED1_JA                                          BCF                      FLAG,1                 ; sätter bit 1 på FLAG till 0

                                                          CALL                   MEDDELANDE1 ; dvs meddelande 1 "raderas"

                                                          WRITEM             BLANK

                                                          WRITEM             KOLON

                                                          WRITEM             RADERAT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

 

                                                          GOTO                   NEXT2                                             

 

MED2                                                BTFSS                   FLAG,2                 ; testar bit 2 på FLAG (medd2: finns/finns ej)

                                                          GOTO                   MED2_EJ

                                                          GOTO                   MED2_JA

                                                         

MED2_EJ                                          WRITEM             FINNS

                                                          WRITEM             BLANK

                                                          WRITEM             INGET

                                                          WRITEM             KOLON

                                                          CALL                   NYRAD

                                                          CALL                   MEDDELANDE2

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

 

                                                          GOTO                   NEXT2

                                                         

MED2_JA                                          BCF                      FLAG,2                 ; annars är vi på meddelande 2

                                                                                                                    ; och meddelande 2 "raderas"

                                                          CALL                   MEDDELANDE2

                                                          WRITEM             BLANK

                                                          WRITEM             KOLON

                                                          WRITEM             RADERAT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          WRITEM             PUNKT

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

                                                          MOVLW               H'00'

                                                          CALL                   DELAY                ; delay ganska länge

 

NEXT2                                              CALL                   BLÄDDRA

 

FINISH                                              RETURN

 

;********************************

; Subrutinen STANDBY                        *

;********************************

STANDBY                                        

                                                          MOVLW               B'00001000'

                                                          XORWF                FLAG,F                 ; inverterar bit 3 på FLAG (standby på/av)

                                                         

                                                          BTFSS                   FLAG,3

                                                          GOTO                   HOPP                   ; om flag = 0 dvs STANDBY av, gå till HOPP

                                                                                                                    ; om STANDBY är på görs nedanstående

                                                          BCF                      PORTA,1             ; RS=0

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00000000'

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               B'10000000'         ; display OFF

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          ;MOVLW              H'02'                     ; delay i ca 260 us

                                                          ;CALL                  DELAY

                                                          BSF                       PORTA,1             ; RS=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY                                                                                                      

                                                          GOTO                   RETUR                 ; gå till slutet

                                                         

HOPP                                                BCF                      PORTA,1             ; RS=0

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00000000'

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               B'11000000'         ; display ON

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          BSF                       PORTA,1             ; RS=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          CALL                   CLS

                                                          CALL                   BLÄDDRA

 

RETUR                                              RETURN

 

;******************************

; Subrutin som ritar en pil                  *

;******************************

PIL                                                    MOVLW               B'01110000'                                     

                                                          MOVWF               PORTB                 ; ritar en pil på displayen

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                         

                                                          MOVLW               B'11100000'        

                                                          MOVWF               PORTB                 ; ritar en pil på displayen

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          RETURN

;******************************

; WRITE-subrutin                           *

;******************************

WRITE                

                                                          MOVWF               EEADR                 ; flyttar W-reg till EEADR

 

IGEN                                                 BSF                       STATUS,RP0       ; BANK 1, ty EECON1 ligger där

                                                          BSF                       EECON1,0            ; read

                                                          BCF                      STATUS,RP0       ; BANK 0 igen

                                                          MOVFW               EEDATA              ; flyttar tecken till W-reg

                                                         

                                                          MOVWF               TEMP                  ; flyttar tecknet till TEMP

                                                          XORLW               H'00'                     ; XORar W-reg med 0

                                                          BTFSC                  STATUS,2            ; kollar om Z-flaggan är 0

                                                          GOTO                   SLUT                    ; om Z-flaggan är 1 hoppar till SLUT

                                                          MOVFW               TEMP                                              

                                                          MOVWF               PORTB                 ; skickar övre nibble till display

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          SWAPF                 TEMP,F               ; swappar TEMP

                                                          MOVLW               H'02'

                                                          CALL                   DELAY

                                                          MOVFW               TEMP

                                                          MOVWF               PORTB                 ; skickar nästa nibble till display

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          INCF                     EEADR,F              ; ökar N med 1, nästa tecken

                                                          GOTO                   IGEN                   

                                                         

SLUT                                                 CLRF                    EEADR                 ; nollställer EEADR

                                                          RETURN

 

;************************************

; Subrutiner som skriver lite olika                 *

; texter på displayen                                                             *

;************************************

MEDDELANDE1                              WRITEM             MEDDELANDE

                                                          WRITEM             BLANK

                                                          WRITEM             ETT

                                                          RETURN

MEDDELANDE2                              WRITEM             MEDDELANDE

                                                          WRITEM             BLANK

                                                          WRITEM             TVÅ

                                                          RETURN

INGETMEDD                                    WRITEM             INGET

                                                          WRITEM             BLANK

                                                          WRITEM             MEDDELANDE

                                                          RETURN

MEDDFINNS                                     WRITEM             MEDDELANDE

                                                          WRITEM             BLANK

                                                          WRITEM             FINNS

                                                          RETURN

FINNSINGET                                    WRITEM             FINNS

                                                          WRITEM             BLANK

                                                          WRITEM             INGET

                                                          RETURN

 

;******************************

; Clear screen subrutin                       *

;******************************

CLS                                                   

                                                          BCF                      PORTA,1             ; RS=0

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00000000'

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY                                            

BCF                      PORTA,0             ; E=0

                                                          MOVLW               B'00010000'         ; clear screen

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          BSF                       PORTA,1             ; RS=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                         

                                                          RETURN

 

;******************************

; Nästa rad subrutin                                                       *

;******************************

NYRAD

                                                          BCF                      PORTA,1             ; RS=0

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'11000000'

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               B'00000000'         ; Nästa rad adress $40

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          BSF                       PORTA,1             ; RS=1

                                                          MOVLW               H'02'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          RETURN

 

;************************************************************

; VÄNTERUTIN - TIDEN I N2 VID ANROP                                      *

; INRE LOOPEN KÖRS 256*N2 GGR  ( VID 4MHZ CA 260*N2 US  )   *

;************************************************************

DELAY                                             MOVWF               N2                        ; N2= W-reg dvs det man skickade in i W-reg innan

                                                                                                                    ; anrop av subrutinen

                                                                                                                    ; N = 0 NÄR VI KOMMER IN -> 256 VARV I INRE LOOP

PLOOP                                              DECFSZ                N,F                       ; STEGA NED N , HOPPA ÖVER OM NOLL

                                                          GOTO                   PLOOP

                                                          DECFSZ                N2,F

                                                          GOTO                   PLOOP

                                                          RETURN

 

;************************************************************

; SAMPLINGSVÄNTERUTIN                                                             *

; Tillsammans med PLAY/REC-loop samt anrop av denna rutin                 *

; och denna rutins loop skall 8kHz genereras dvs 125 clkp                          *

; vid 1MHz                                                                                           *

;************************************************************

SAMPLDELAY                                 MOVLW               D'18'                     ; lägger in konstant i SAMPL

                                                          MOVWF               SAMPL                 ; detta kommer ge totalt ca 8kHz samplfrekv

                                                         

SLOOP                                              DECFSZ                SAMPL,F              ; stega ned SAMPL, hoppa över om 0

                                                          GOTO                   SLOOP                                             

 

                                                          RETURN             

 

;**************************************

; Initiering av PICens portar                        *

; samt initiering av TIMERinterrupt                  *

;**************************************

INIT                                                 

                                                          BSF                       STATUS,RP0       ; page 1

                                                          MOVLW               B'00001111'         ; PORTB output-input, data resp knappar

                                                          MOVWF               TRISB                                                ; datariktningsregister

                                                          MOVLW               B'00010000'         ; PORT A -output, bit 4 input: räknare färdig

                                                          MOVWF               TRISA

                                                          BCF                      STATUS,RP0       ; page 0

                                                          CLRF                    PORTB

                                                          CLRF                    PORTA

                                                          CLRF                    FLAG

                                                          RETURN

 

;********************************

; Initiering av Displayen                        *

;********************************

INITDISP            

                                                          MOVLW               H'1F'                     ; delay i ca 21*260 us ~ 5,5ms

                                                          CALL                   DELAY

                                                          MOVLW               B'00110000'         ; FUNCTION SET

                                                          MOVWF               PORTB                 ; skickar iväg

                                                          BSF                       PORTA,0             ; E=1                                                 

                                                          MOVLW               H'1F'                     ; delay i ca 21*260 us ~ 5,5ms

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 21*260 us ~ 5,5ms

                                                          CALL                   DELAY

                                                          MOVLW               B'00110000'         ; FUNCTION SET

                                                          MOVWF               PORTB                 ; skickar iväg

                                                          BSF                       PORTA,0             ; E=1                                                 

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00110000'         ; FUNCTION SET

                                                          MOVWF               PORTB                 ; skickar iväg

                                                          BSF                       PORTA,0             ; E=1                                                 

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00100000'         ; 4-bit mode

                                                          MOVWF               PORTB                 ; skickar iväg

                                                          BSF                       PORTA,0             ; E=1                                                 

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00100000'         ; 4-bit mode

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1                                                 

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'10000000'         ; 2-display lines

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY                                            

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00000000'        

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1                                                 

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'11000000'         ; display on, cursor off, blink off

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY                                            

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00000000'        

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1                                                 

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00010000'         ; Clear display

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY                                            

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'3F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'00000000'        

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1                                                 

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          MOVLW               B'01100000'         ; Increment character adress

                                                          MOVWF               PORTB

                                                          BSF                       PORTA,0             ; E=1

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY                                            

                                                          BCF                      PORTA,0             ; E=0

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          BSF                       PORTA,1             ; RS=1

                                                          MOVLW               H'1F'                     ; delay i ca 260 us

                                                          CALL                   DELAY

                                                          RETURN                                          

                                                         

                                                          ORG                      2100H

MEDDELANDE                                DE                        "MEDDELANDE",0

SPELAR_UPP                                   DE                        "SPELAR UPP",0

SPELAR_IN                                      DE                        "SPELAR IN",0

INGET                                               DE                        "INGET",0

FINNS                                                DE                        "FINNS",0

RADERAT                                        DE                        "RADERAT",0

ETT                                                  DE                        "1",0

TVÅ                                                  DE                        "2",0

PUNKT                                             DE                        ".",0

KOLON                                             DE                        ":",0

BLANK                                             DE                        " ",0

 

                                                          END