Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Routine Convertitore da Binario a BCD ASSEMBLER

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto Utentecarlomusumeci » 19 ago 2015, 16:34

Salve,Qualcuno potrebbe spiegarmi passo passo come scrivere una routine in ASSEMBLER,che converta un numero binario in codifica BCD,in modo da trovarmi la codifica in 3 differenti registri, centinaia decine e unita...
ho fatto uno schemino per spiegarmi meglio...


Ho scritto un listato che effettivamente funziona...ma vorrei usare il metodo giusto...
DATEMI PURE DEL MATTO... :D Perche è davvero fuori dal normale il metodo che ho utilizzato...

Codice: Seleziona tutto
        PROCESSOR       16F877
        RADIX           DEC
        INCLUDE         "P16F877A.INC"
        ERRORLEVEL      -302

        __CONFIG        3FF5H
SCRIVI_N   macro P1,P2,P3
      MOVLW P3
      MOVWF   UNITA
      MOVLW P2
      MOVWF   DECINE
      MOVLW P1
      MOVWF   UNITA3
      endm

      ORG     0x20
      
d1      RES      1
d2      RES      1
UNITA   RES      1
DECINE   RES      1
S1      RES      1
S2      RES      1
S3      RES      1
CONT_INT RES     1 ;registro che conta se sono avvenute 61 o 62 interrupt
DECINE4 RES   1  ;registro che conta le volte che ha inizializzato il contatore di interrupt a 61
UNITA3  RES   1
SECONDI   RES   1
;definizione numeri
ZERO      EQU      B'11000000'
UNO      EQU      B'11111001'
DUE      EQU      B'10100100'   
TRE      EQU      B'10110000'
QUATTRO   EQU      B'10011001'
CINQUE      EQU      B'10010010'
SEI      EQU      B'10000010'
SETTE      EQU      B'11111000'
OTTO      EQU      B'10000000'
NOVE      EQU      B'10010000'

;DEFINIZIONE CATODI DISPLAY
DISP_UNIT   EQU      0
DISP_DECINE   EQU      1
DISP_UNITA3   EQU      2
DISP_DECINE4   EQU      3
   
   

      ORG 0X00

      BSF      STATUS,RP0 ;ACCEDI AL BANCO 1
      MOVLW   B'00010000';IMPOSTA TUTTI OUT
      MOVWF   TRISA      ;A PORTA A
      MOVLW   B'10000000';IMPOSTA TUTTI OUT TRANNE BIT 7 IN INPUT
      MOVWF   TRISB      ;A PORTA B
      MOVLW   B'11111111';IMPOSTA TUTTI OUT TRANNE BIT 7 IN INPUT
      MOVWF   TRISC      ;A PORTA C
      MOVLW   B'00000000';IMPOSTA TUTTI OUT TRANNE BIT 7 IN INPUT
      MOVWF   TRISD      ;A PORTA D
      BCF      STATUS,RP0 ;ACCEDI A BANCO 0
      GOTO   MAIN
;SUBROUTINES
VISUALIZZA
        BSF      PORTA,DISP_UNIT
      MOVF   UNITA,0   ;legge il valore di unità e lo copia in W
   
      MOVWF   PORTB
      BCF      PORTA,DISP_UNIT
      CALL   Delay5

      BSF      PORTA,DISP_DECINE
        MOVF   DECINE,0  ;legge il valore di unità e lo copia in W
      
      MOVWF   PORTB
       BCF      PORTA,DISP_DECINE
      CALL   Delay5

      BSF      PORTA,DISP_UNITA3
        MOVF   UNITA3,0  ;legge il valore di unità e lo copia in W
      
      MOVWF   PORTB
       BCF      PORTA,DISP_UNITA3
      CALL   Delay5

       RETURN

;__________________________________________RITARDO MULTIPLEXER_________________________________
      
Delay5
         ;4993 cycles
        movlw   0xE6
         movwf   d1
         movlw   0x04
         movwf   d2
Delay_0
         decfsz   d1, f
         goto   $+2
         decfsz   d2, f
         goto   Delay_0

         ;3 cycles
         goto   $+1
         nop

         ;4 cycles (including call)
         return
;_________________________________________________________________________________________________
Delay1s
         ;999997 cycles
      movlw   0x08
      movwf   S1
      movlw   0x2F
      movwf   S2
      movlw   0x03
      movwf   S3
Delay1_0
      decfsz   S1, f
      goto   $+2
      decfsz   S2, f
      goto   $+2
      decfsz   S3, f
      goto   Delay1_0

         ;3 cycles
      goto   $+1
      nop
      return
;________________________________________________________________________________________________________________________________
   
MAIN
      CALL   VISUALIZZA
      MOVFW   PORTC
      MOVWF   PORTD

CTRL_0
      MOVLW 0
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_1
      SCRIVI_N ZERO,ZERO,ZERO
      
CTRL_1
      MOVLW 1
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_2
      SCRIVI_N ZERO,ZERO,UNO
      
CTRL_2
      MOVLW 2
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_3
      SCRIVI_N ZERO,ZERO,DUE
      
CTRL_3
      MOVLW 3
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_4           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,ZERO,TRE
      
CTRL_4
      MOVLW 4
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_5
      SCRIVI_N ZERO,ZERO,QUATTRO
      
CTRL_5
      MOVLW 5
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_6
      SCRIVI_N ZERO,ZERO,CINQUE
      
CTRL_6
      MOVLW 6
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_7
      SCRIVI_N ZERO,ZERO,SEI
      
CTRL_7
      MOVLW 7
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_8         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,ZERO,SETTE

CTRL_8
      MOVLW 8
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_9        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,ZERO,OTTO

CTRL_9
      MOVLW 9
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_10        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,ZERO,NOVE

CTRL_10
      MOVLW 10
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_11        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,UNO,ZERO

CTRL_11
      MOVLW 11
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_12          ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,UNO,UNO

CTRL_12
      MOVLW 12
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_13
      SCRIVI_N ZERO,UNO,DUE
      
CTRL_13
      MOVLW 13
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_14           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,UNO,TRE
      
CTRL_14
      MOVLW 14
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_15
      SCRIVI_N ZERO,UNO,QUATTRO
      
CTRL_15
      MOVLW 15
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_16
      SCRIVI_N ZERO,UNO,CINQUE
      
CTRL_16
      MOVLW 16
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_17
      SCRIVI_N ZERO,UNO,SEI
      
CTRL_17
      MOVLW 17
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_18         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,UNO,SETTE

CTRL_18
      MOVLW 18
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_19        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,UNO,OTTO

CTRL_19
      MOVLW 19
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_20        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,UNO,NOVE

CTRL_20
      MOVLW 20
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_21        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,DUE,ZERO

CTRL_21
      MOVLW 21
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_22          ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,DUE,UNO

CTRL_22
      MOVLW 22
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_23
      SCRIVI_N ZERO,DUE,DUE
      
CTRL_23
      MOVLW 23
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_24           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,DUE,TRE
      
CTRL_24
      MOVLW 24
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_25
      SCRIVI_N ZERO,DUE,QUATTRO
      
CTRL_25
      MOVLW 25
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_26
      SCRIVI_N ZERO,DUE,CINQUE
      
CTRL_26
      MOVLW 26
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_27
      SCRIVI_N ZERO,DUE,SEI
      
CTRL_27
      MOVLW 27
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_28         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,DUE,SETTE

CTRL_28
      MOVLW 28
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_29        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,DUE,OTTO

CTRL_29
      MOVLW 29
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_30        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,DUE,NOVE

CTRL_30
      MOVLW 30
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_31        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,TRE,ZERO

CTRL_31
      MOVLW 31
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_32          ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,TRE,UNO

CTRL_32
      MOVLW 32
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_33
      SCRIVI_N ZERO,TRE,DUE
      
CTRL_33
      MOVLW 33
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_34           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,TRE,TRE
      
CTRL_34
      MOVLW 34
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_35
      SCRIVI_N ZERO,TRE,QUATTRO
      
CTRL_35
      MOVLW 35
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_36
      SCRIVI_N ZERO,TRE,CINQUE
      
CTRL_36
      MOVLW 36
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_37
      SCRIVI_N ZERO,TRE,SEI
      
CTRL_37
      MOVLW 37
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_38         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,TRE,SETTE

CTRL_38
      MOVLW 38
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_39        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,TRE,OTTO

CTRL_39
      MOVLW 39
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_40        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,TRE,NOVE

CTRL_40
      MOVLW 40
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_41        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,QUATTRO,ZERO

CTRL_41
      MOVLW 41
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_42          ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,QUATTRO,UNO

CTRL_42
      MOVLW 42
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_43
      SCRIVI_N ZERO,QUATTRO,DUE
      
CTRL_43
      MOVLW 43
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_44           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,QUATTRO,TRE
      
CTRL_44
      MOVLW 44
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_45
      SCRIVI_N ZERO,QUATTRO,QUATTRO
      
CTRL_45
      MOVLW 45
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_46
      SCRIVI_N ZERO,QUATTRO,CINQUE
      
CTRL_46
      MOVLW 46
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_47
      SCRIVI_N ZERO,QUATTRO,SEI
      
CTRL_47
      MOVLW 47
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_48         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,QUATTRO,SETTE

CTRL_48
      MOVLW 48
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_49        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,QUATTRO,OTTO

CTRL_49
      MOVLW 49
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_50        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,QUATTRO,NOVE
      
CTRL_50
      MOVLW 50
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_51
      SCRIVI_N ZERO,CINQUE,ZERO
      
CTRL_51
      MOVLW 51
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_52
      SCRIVI_N ZERO,CINQUE,UNO
      
CTRL_52
      MOVLW 52
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_53
      SCRIVI_N ZERO,CINQUE,DUE
      
CTRL_53
      MOVLW 53
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_54           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,CINQUE,TRE
      
CTRL_54
      MOVLW 54
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_55
      SCRIVI_N ZERO,CINQUE,QUATTRO
      
CTRL_55
      MOVLW 55
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_56
      SCRIVI_N ZERO,CINQUE,CINQUE
      
CTRL_56
      MOVLW 56
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_57
      SCRIVI_N ZERO,CINQUE,SEI
      
CTRL_57
      MOVLW 57
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_58         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,CINQUE,SETTE

CTRL_58
      MOVLW 58
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_59        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,CINQUE,OTTO

CTRL_59
      MOVLW 59
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_60        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,CINQUE,NOVE

CTRL_60
      MOVLW 60
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_61        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SEI,ZERO

CTRL_61
      MOVLW 61
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_62          ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SEI,UNO

CTRL_62
      MOVLW 62
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_63
      SCRIVI_N ZERO,SEI,DUE
      
CTRL_63
      MOVLW 63
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_64           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SEI,TRE
      
CTRL_64
      MOVLW 64
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_65
      SCRIVI_N ZERO,SEI,QUATTRO
      
CTRL_65
      MOVLW 65
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_66
      SCRIVI_N ZERO,SEI,CINQUE
      
CTRL_66
      MOVLW 66
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_67
      SCRIVI_N ZERO,SEI,SEI
      
CTRL_67
      MOVLW 67
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_68         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SEI,SETTE

CTRL_68
      MOVLW 68
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_69        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SEI,OTTO

CTRL_69
      MOVLW 69
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_70        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SEI,NOVE

CTRL_70
      MOVLW 70
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_71        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SETTE,ZERO

CTRL_71
      MOVLW 71
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_72          ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SETTE,UNO

CTRL_72
      MOVLW 72
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_73
      SCRIVI_N ZERO,SETTE,DUE
      
CTRL_73
      MOVLW 73
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_74           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SETTE,TRE
      
CTRL_74
      MOVLW 74
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_75
      SCRIVI_N ZERO,SETTE,QUATTRO
      
CTRL_75
      MOVLW 75
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_76
      SCRIVI_N ZERO,SETTE,CINQUE
      
CTRL_76
      MOVLW 76
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_77
      SCRIVI_N ZERO,SETTE,SEI
      
CTRL_77
      MOVLW 77
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_78         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SETTE,SETTE

CTRL_78
      MOVLW 78
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_79        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SETTE,OTTO

CTRL_79
      MOVLW 79
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_80        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,SETTE,NOVE

CTRL_80
      MOVLW 80
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_81        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,OTTO,ZERO

CTRL_81
      MOVLW 81
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_82          ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,OTTO,UNO

CTRL_82
      MOVLW 82
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_83
      SCRIVI_N ZERO,OTTO,DUE
      
CTRL_83
      MOVLW 83
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_84           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,OTTO,TRE
      
CTRL_84
      MOVLW 84
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_85
      SCRIVI_N ZERO,OTTO,QUATTRO
      
CTRL_85
      MOVLW 85
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_86
      SCRIVI_N ZERO,OTTO,CINQUE
      
CTRL_86
      MOVLW 86
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_87
      SCRIVI_N ZERO,OTTO,SEI
      
CTRL_87
      MOVLW 87
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_88         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,OTTO,SETTE

CTRL_88
      MOVLW 88
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_89        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,OTTO,OTTO

CTRL_89
      MOVLW 89
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_90        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,OTTO,NOVE

CTRL_90
      MOVLW 90
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_91        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,NOVE,ZERO

CTRL_91
      MOVLW 91
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_92          ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,NOVE,UNO

CTRL_92
      MOVLW 92
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_93
      SCRIVI_N ZERO,NOVE,DUE
      
CTRL_93
      MOVLW 93
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_94           ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,NOVE,TRE
      
CTRL_94
      MOVLW 94
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_95
      SCRIVI_N ZERO,NOVE,QUATTRO
      
CTRL_95
      MOVLW 95
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_96
      SCRIVI_N ZERO,NOVE,CINQUE
      
CTRL_96
      MOVLW 96
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_97
      SCRIVI_N ZERO,NOVE,SEI
      
CTRL_97
      MOVLW 97
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_98         ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,NOVE,SETTE

CTRL_98
      MOVLW 98
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_99        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,NOVE,OTTO

CTRL_99
      MOVLW 99
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_100        ;PROSSIMO CONTROLLO
      SCRIVI_N ZERO,NOVE,NOVE

CTRL_100
      MOVLW 100
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_101
      SCRIVI_N UNO,ZERO,ZERO
      
CTRL_101
      MOVLW 101
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_102
      SCRIVI_N UNO,ZERO,UNO

CTRL_102
      MOVLW 102
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_103
      SCRIVI_N UNO,ZERO,DUE
      
CTRL_103
      MOVLW 103
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_104           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,ZERO,TRE
      
CTRL_104
      MOVLW 104
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_105           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,ZERO,QUATTRO

CTRL_105
      MOVLW 105
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_106          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,ZERO,CINQUE
      
CTRL_106
      MOVLW 106
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_107           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,ZERO,SEI
      
CTRL_107
      MOVLW 107
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_108           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,ZERO,SETTE
      
CTRL_108
      MOVLW 108
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_109          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,ZERO,OTTO
      
CTRL_109
      MOVLW 109
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_110           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,ZERO,NOVE
      
CTRL_110
      MOVLW 110
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_111           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,ZERO

CTRL_111
      MOVLW 111
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_112           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,UNO
CTRL_112
      MOVLW 112
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_113           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,DUE
CTRL_113
      MOVLW 113
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_114           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,TRE
CTRL_114
      MOVLW 114
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_115          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,QUATTRO
CTRL_115
      MOVLW 115
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_116           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,CINQUE
CTRL_116
      MOVLW 116
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_117          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,SEI
CTRL_117
      MOVLW 117
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_118           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,SETTE
CTRL_118
      MOVLW 118
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_119          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,OTTO
CTRL_119
      MOVLW 119
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_120          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,UNO,NOVE
CTRL_120
      MOVLW 120
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_121           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,ZERO
CTRL_121
      MOVLW 121
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_122           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,UNO
CTRL_122
      MOVLW 122
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_123           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,DUE
CTRL_123
      MOVLW 123
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_124           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,TRE
CTRL_124
      MOVLW 124
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_125           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,QUATTRO
CTRL_125
      MOVLW 125
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_126           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,CINQUE
CTRL_126
      MOVLW 126
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_127           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,SEI
CTRL_127
      MOVLW 127
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_128           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,SETTE
CTRL_128
      MOVLW 128
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_129           ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,OTTO
CTRL_129
      MOVLW 129
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_130          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,DUE,NOVE
CTRL_130
      MOVLW 130
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_131          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,ZERO
CTRL_131
      MOVLW 131
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_132          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,UNO
CTRL_132
      MOVLW 132
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_133          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,DUE
CTRL_133
      MOVLW 133
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_134          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,TRE
CTRL_134
      MOVLW 134
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_135         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,QUATTRO
CTRL_135
      MOVLW 135
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_136          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,CINQUE
CTRL_136
      MOVLW 136
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_137          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,SEI
CTRL_137
      MOVLW 137
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_138          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,SETTE
CTRL_138
      MOVLW 138
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_139          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,OTTO
CTRL_139
      MOVLW 139
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_140         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,TRE,NOVE
CTRL_140
      MOVLW 140
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_141          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,ZERO
CTRL_141
      MOVLW 141
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_142          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,UNO
CTRL_142
      MOVLW 142
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_143          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,DUE
CTRL_143
      MOVLW 143
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_144          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,TRE
CTRL_144
      MOVLW 144
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_145          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,QUATTRO
CTRL_145
      MOVLW 145
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_146          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,CINQUE
CTRL_146
      MOVLW 146
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_147          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,SEI
CTRL_147
      MOVLW 147
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_148          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,SETTE
CTRL_148
      MOVLW 148
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_149          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,OTTO
CTRL_149
      MOVLW 149
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_150         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,QUATTRO,NOVE
CTRL_150
      MOVLW 150
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_151          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,ZERO
CTRL_151
      MOVLW 151
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_152          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,UNO
CTRL_152
      MOVLW 152
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_153          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,DUE
CTRL_153
      MOVLW 153
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_154         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,TRE
CTRL_154
      MOVLW 154
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_155          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,QUATTRO
CTRL_155
      MOVLW 155
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_156          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,CINQUE
CTRL_156
      MOVLW 156
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_157          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,SEI
CTRL_157
      MOVLW 157
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_158          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,SETTE
CTRL_158
      MOVLW 158
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_159          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,OTTO
CTRL_159
      MOVLW 159
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_160          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,CINQUE,NOVE
CTRL_160
      MOVLW 160
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_161          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,ZERO
CTRL_161
      MOVLW 161
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_162          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,UNO
CTRL_162
      MOVLW 162
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_163          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,DUE
CTRL_163
      MOVLW 163
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_164          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,TRE
CTRL_164
      MOVLW 164
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_165          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,QUATTRO
CTRL_165
      MOVLW 165
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_166          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,CINQUE
CTRL_166
      MOVLW 166
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_167          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,SEI
CTRL_167
      MOVLW 167
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_168          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,SETTE
CTRL_168
      MOVLW 168
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_169         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,OTTO
CTRL_169
      MOVLW 169
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_170          ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SEI,NOVE
CTRL_170
      MOVLW 170
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_171         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,ZERO
CTRL_171
      MOVLW 171
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_172         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,UNO
CTRL_172
      MOVLW 172
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_173         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,DUE
CTRL_173
      MOVLW 173
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_174         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,TRE
CTRL_174
      MOVLW 174
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_175         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,QUATTRO
CTRL_175
      MOVLW 175
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_176         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,CINQUE
CTRL_176
      MOVLW 176
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_177        ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,SEI
CTRL_177
      MOVLW 177
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_178       ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,SETTE
CTRL_178
      MOVLW 178
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_179         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,OTTO
CTRL_179
      MOVLW 179
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_180         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,SETTE,NOVE
CTRL_180
      MOVLW 180
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_181         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,ZERO
CTRL_181
      MOVLW 181
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_182         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,UNO
CTRL_182
      MOVLW 182
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_183         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,DUE
CTRL_183
      MOVLW 183
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_184         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,TRE
CTRL_184
      MOVLW 184
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_185         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,QUATTRO
CTRL_185
      MOVLW 185
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_186        ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,CINQUE
CTRL_186
      MOVLW 186
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_187         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,SEI
CTRL_187
      MOVLW 187
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_188         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,SETTE
CTRL_188
      MOVLW 188
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_189         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,OTTO
CTRL_189
      MOVLW 189
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_190         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,OTTO,NOVE
CTRL_190
      MOVLW 190
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_191         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,ZERO
CTRL_191
      MOVLW 191
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_192         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,UNO
CTRL_192
      MOVLW 192
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_193         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,DUE
CTRL_193
      MOVLW 193
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_194         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,TRE
CTRL_194
      MOVLW 194
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_195         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,QUATTRO
CTRL_195
      MOVLW 195
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_196        ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,CINQUE
CTRL_196
      MOVLW 196
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_197         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,SEI
CTRL_197
      MOVLW 197
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_198P        ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,SETTE
CTRL_198P
      PAGESEL CTRL_198
      GOTO CTRL_198

      ORG   0X800
CTRL_198
      MOVLW 198
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_199         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,OTTO
CTRL_199
      MOVLW 199
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_200         ;PROSSIMO CONTROLLO
      SCRIVI_N UNO,NOVE,NOVE   ;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_200
      MOVLW 200
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_201         ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,ZERO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_201
      MOVLW 201
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_202        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,UNO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_202
      MOVLW 202
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_203        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,DUE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_203
      MOVLW 203
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_204        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,TRE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_204
      MOVLW 204
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_205        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,QUATTRO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_205
      MOVLW 205
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_206        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,CINQUE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_206
      MOVLW 206
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_207        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,SEI   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_207
      MOVLW 207
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_208        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,SETTE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_208
      MOVLW 208
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_209       ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,OTTO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_209
      MOVLW 209
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_210        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,ZERO,NOVE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_210
      MOVLW 210
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_211        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,ZERO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_211
      MOVLW 211
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_212        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,UNO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_212
      MOVLW 212
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_213        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,DUE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_213
      MOVLW 213
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_214        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,TRE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_214
      MOVLW 214
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_215       ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,QUATTRO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_215
      MOVLW 215
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_216        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,CINQUE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_216
      MOVLW 216
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_217        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,SEI   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_217
      MOVLW 217
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_218        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,SETTE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_218
      MOVLW 218
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_219        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,OTTO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_219
      MOVLW 219
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_220        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,UNO,NOVE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_220
      MOVLW 220
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_221        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,ZERO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_221
            MOVLW 221
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_222       ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,UNO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_222
      MOVLW 222
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_223        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,DUE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_223
      MOVLW 223
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_224        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,TRE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_224
      MOVLW 224
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_225       ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,QUATTRO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_225
      MOVLW 225
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_226        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,CINQUE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_226
      MOVLW 226
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_227        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,SEI   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_227
      MOVLW 227
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_228        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,SETTE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_228
      MOVLW 228
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_229        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,OTTO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_229
      MOVLW 229
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_230        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,DUE,NOVE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_230
      MOVLW 230
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_231        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,ZERO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_231
            MOVLW 231
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_232        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,UNO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_232
      MOVLW 232
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_233        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,DUE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_233
      MOVLW 233
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_234        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,TRE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_234
      MOVLW 234
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_235       ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,QUATTRO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_235
      MOVLW 235
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_236        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,CINQUE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_236
      MOVLW 236
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_237        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,SEI   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_237
      MOVLW 237
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_238        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,SETTE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_238
      MOVLW 238
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_239        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,OTTO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_239
      MOVLW 239
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_240        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,TRE,NOVE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_240
      MOVLW 240
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_241        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,ZERO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_241
            MOVLW 241
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_242        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,UNO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_242
      MOVLW 242
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_243        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,DUE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_243
      MOVLW 243
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_244        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,TRE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_244
      MOVLW 244
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_245       ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,QUATTRO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_245
      MOVLW 245
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_246        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,CINQUE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_246
      MOVLW 246
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_247        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,SEI   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_247
      MOVLW 247
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_248        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,SETTE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_248
      MOVLW 248
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_249        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,OTTO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_249
      MOVLW 249
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_250        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,QUATTRO,NOVE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_250
      MOVLW 250
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_251        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,CINQUE,ZERO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_251
            MOVLW 251
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_252        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,CINQUE,UNO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_252
      MOVLW 252
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_253        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,CINQUE,DUE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_253
      MOVLW 253
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_254        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,CINQUE,TRE  ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_254
      MOVLW 254
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   CTRL_255       ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,CINQUE,QUATTRO   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY
CTRL_255
      MOVLW 255
      XORWF PORTC,W
      BTFSS   STATUS,Z
      GOTO   FINE        ;PROSSIMO CONTROLLO
      SCRIVI_N DUE,CINQUE,CINQUE   ;;MACRO PER VISUALIZZARE NUMERO SU DISPLAY








FINE
      PAGESEL MAIN
      GOTO   MAIN
END

      


bindec.rar
(3.67 KiB) Scaricato 180 volte
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[2] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto Utentesimo85 » 19 ago 2015, 19:38

Dividi il numero in ingresso per 100. Il risultato (se maggiore di 0) rappresenta le centinaia, e quindi basta multiplicarlo per 100 e sottrarla al numero in ingresso ed hai le decine + unità.

Dividi le decine + unità per 10 e fai come prima, separando decine ed unità.

Non ho letto con attenzione tutto il tuo codice ma mi sembra che non meno righe si fa tutto.
Se cominci a scrivere la funzione si può dare una occhiata passo per passo.

PS: si chiama Assembly. L'assembler è il compilatore.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[3] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto UtenteMarcoD » 19 ago 2015, 20:23

Concordo con simo85.
Aggiungo:
La tua routine converte un numero contenuto in un byte (256 valori differenti) nelle tre cifre corrispondenti. Come l'hai implementata è velocissima: a ognuno dei 256 valori associ le tre cifre BCD corrispondenti. A cosa ti serve la routine di conversione? Dove vengono visualizzati i risultati?

Se il numero fosse compreso fra 0 e 999 avresti dovuto assegnare 1000 valori, cosa che richiederebbe troppa memoria per il programma. E se dovessi convertire umn numero fra 0 e 9999 ??

L'algoritmo classico di simo85 è più lento ma più flessibile.

O_/
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[4] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto Utentecarlomusumeci » 19 ago 2015, 22:01

Grazie Ragazzi,credo di aver capito come fare Foto Utentesimo85Scrivo una bozza e la vediamo insieme...effettivamente per come ho scritto il firmware,diventerebbe un po troppo lungo...Nel caso dovrei decodificare numeri superiori a 8 Bit...ma allo stesso tempo vedo che mi decodifica il numero allistante...Foto UtenteMarcoDquindi pensi che se devo convertire solo numeri a 8 bit é un buon firware? La conversione la vedo tramite display 7 segmenti...
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[5] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto Utentesimo85 » 19 ago 2015, 22:37

Per andare avanti un passo per volta, scrivi il codice per la divisione, in modo da verificarlo con il display.

Una volta risolto il problema della divisione il grosso dovrebbe essere fatto.

Dato che per le centinaia si tratta solo di verificare se il numero è maggiore o minore di 100 o 200, per semplificare puoi usare due sottrazioni e controlli il bit di Borrow del registro di STATUS (non ho osservato il datashset).

Ciao,
Simo
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[6] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto Utenteboiler » 19 ago 2015, 22:40

Piccolo OT...
Mi chiedo che senso abbia programmare queste strutture in assembler.

Siamo nel 2015 e i compiler hanno un'"intelligenza" tale che trovano ottimizzazioni nemmeno pensabili da un essere umano.

Ho avuto modo di parlare con uno degli sviluppatori di Axivion, un tool di analisi per software che serve a rilevare diversi tipi di artefatto (code duplications, dead code,...). Per la natura dell'applicazione è gente che conosce fino all'osso il comportamento dei compilers. Ci sono ottimizzazioni che non ci si immagina nemmeno. Si parla di modellizzazione matematica del comportamentento per generare del codice ASM che poco ha che fare con il codice in high language. Operazioni complesse vengono in parte scomposte a livello di RTL (operazioni logiche elementari) e poi ricombinate con altre operazioni concorrenti in modo da sfruttare un'istruzione presente nel set del processore.

Siamo a livelli di fantascienza e a questo punto non c'è da meravigliarsi che chi sviluppa applicazioni medicali usi un compiler di IAR certificato per non fare nessuna di queste ottimizzazioni.

Per ottenere un risultato migliore in termini di velocità o memoria bisogna essere dei geni dell'assembler e forse non basta. Non prenderla sul piano personale, ma se devi chiedere queste cose, non fai parte di questa categoria e otterresti senza dubbio un risultato migliore affidandoti ad un compiler commerciale. Come detto, nulla di personale, anche io non mi ritengo degno di programmare in assembler, quindi non è una predica dal pulpito ;-)

D'altra parte, se prendiamo un'applicazione molto complessa e molto limitata in memoria, un apparecchio acustico, posso garantirti che il piú grande produttore mondiale scrive il firmware in C++ e lo compila con IAR.

Boiler

P.S.: simo85, è accettato anche assembler, come abbreviazione di "assembler code" che è appunto il programma a cui ti riferisci tu
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5600
Iscritto il: 9 nov 2011, 12:27

0
voti

[7] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto Utentesimo85 » 20 ago 2015, 1:03

Foto Utenteboiler, io sono d'accordo com te sul fatto che usare l'Assembly per queste cose non è assolutamente necessario. Se non ricordo male Foto Utentecarlomusumeci non conosce il C e lui programma i PIC solo in MPASM.

Nulla da obiettare. :mrgreen:
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[8] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto UtenteMarcoD » 20 ago 2015, 8:00

Sono in vacanza, questa mattina, ho scritto come esempio la routine nel simil C++ dell'ambiente Arduino, non l'ho potuta provare, spero di non aver commesso errori; può essere ottimizzata e scritta meglio, dipende dal processore usato.!!
Rispetto all'assembler è una cosa da nulla. ;-)

Codice: Seleziona tutto
//20/8/2015 programma esempio di conversione da numero intero a BCD
// programma compilato ma non provato
// ambiente Arduino 1.0.4
int num;
int cent,decin,unit; //valori in BCD
int dec_unit; //variabile di servizio

void setup() {
num = 0;
}

void loop()
{
num = num +1;//incrementa per provare i valori
conv_BIN_BCD;
Serial.print(cent); 
Serial.print(decin); 
Serial.println(unit);   
}

void conv_BIN_BCD()
{
if (num > 999){num=999;}//limita al valore massimo
cent = num/100;
dec_unit = num - cent * 100;
decin = dec_unit/10;
unit = dec_unit - decin * 10;
}
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[9] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto UtenteMarcoD » 20 ago 2015, 8:33

carlomusumeci ha scritto:Foto UtenteMarcoDquindi pensi che se devo convertire solo numeri a 8 bit é un buon firware? La conversione la vedo tramite display 7 segmenti...

Ho esaminato meglio il tuo firmware, anche se non lo ho capito bene perché non conosco l'assembler PIC: mi pare che provi in successione i valori prima di trovare quello corretto, non è il modo velocissimo che avevo inteso prima.
Potresti, ma io non lo so fare in assembler, definire tre vettori di 256 valori (0- 255), centinaia, decine, unità.
il valore del numero è l'indice dei vettori da cui ricavi istantaneamente i valori. Ma credo che non il controllore AVR ATMega168 dell'arduino non si possa fare perché non possiede sufficiente memoria RAM, e forse non è possibile inserire i vettori nella memoria codice. Forse nei PIC è differente... non sono certo..ho solo vaghe conoscenze...spero che qualcuno più esperto di me ci chiarisca le varie problematiche. ;-)

riguardo l'uso dei display 7 segmenti: risalgono a inizio anni 70, è una modalità rudimentale.
Se potessi pilotare un display LCD 2*16 caratteri (costano sui 5 Euro, sui pilotano con 8 uscite digitali)
(come quelli dei distributori di bevande) avresti una maggiore flessibilità (ovviamente devi usufruire delle librerie già sviluppate)..
O_/
Avatar utente
Foto UtenteMarcoD
12,2k 5 9 13
Master EY
Master EY
 
Messaggi: 6696
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[10] Re: Routine Convertitore da Binario a BCD ASSEMBLER

Messaggioda Foto Utentecarlomusumeci » 20 ago 2015, 13:59

Foto UtenteMarcoDti ringrazio ma non capisco quel linguaggio :roll:
ho provato in questo modo...fino a cifre sotto 100... le converte per bene...ma se ad esempio voglio convertire il numero binario 255...visualizzo nei display 525...

Codice: Seleziona tutto
Main

   movlw   d'255'                ;numero da scombinare (successivamente abbinato a portb)

BINARIO_BCD 
   movwf   CENTINAIA
   clrf   DECINE
   clrf   UNITA

_cnt 
   movlw   d'100'
   subwf   CENTINAIA,W
   btfss   STATUS,C
   goto   _dec
   incf   DECINE,F
   movwf   CENTINAIA
   goto   _cnt

_dec
   movlw   d'10'
   subwf     CENTINAIA,W
   btfss   STATUS,C
   goto    Visual
   movwf   CENTINAIA
   incf    UNITA,F
   goto    _dec

Visual
   CALL   VISUALIZZA ;mostra i 3 registri su Display
   goto   Visual         ;blocca il programma  sulla visualizzazione

END
Ultima modifica di Foto Utentecarlomusumeci il 20 ago 2015, 14:16, modificato 1 volta in totale.
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti