Home > MiKroBasic (MikroElecktronika) > Esercizio di programmazione in MiKroBasic

Esercizio di programmazione in MiKroBasic


Didasknol – Lab. Sistemi

Authors

Laboratorio di
sistemi
ISTITUTO TECNICO INDUSTRIALE
“………………………”
……………..
Allievo:_________________
Classe:________________
data:  _________________
ESERCIZIO  N° 4
Implementare un programma che rispetti le seguenti condizioni:

Creare un contatore avanti – indietro ad una cifra, il programma deve visualizzare su un display a 7 segmenti i numeri da 0 a 9 quando viene premuto il pulsante 1 e da 9 a 0 quando viene premuto il pulsante 2. Le porte per i pulsanti 1 e 2 verranno scelti a piacere dal candidato.

 

Listato in assembly:

 

; ADDRESS   OPCODE      ASM

; ———————————————-
$0000 $2804             GOTO  _main
$0075 $     table__display:
;settesegupdown.pbas,2 ::          const display as byte [10] =(63,6,91,79,102,109,125,7,127,111)
$0075 $343F             RETLW 63
$0076 $3406             RETLW 6
$0077 $345B             RETLW 91
$0078 $344F             RETLW 79
$0079 $3466             RETLW 102
$007A $346D             RETLW 109
$007B $347D             RETLW 125
$007C $3407             RETLW 7
$007D $347F             RETLW 127
$007E $346F             RETLW 111
$007F $0008             RETURN
$0080 $     _____doicp:
;system.ppas,20 ::
;system.ppas,23 ::
$0080 $1303             BCF   STATUS, RP1
$0081 $1283             BCF   STATUS, RP0
$0082 $0822             MOVF  ___DoICPHiAddr, 0
$0083 $008A             MOVWF PCLATH
;system.ppas,24 ::
$0084 $0820             MOVF  ___DoICPLoAddr, 0
$0085 $0082             MOVWF PCL
$0086 $     system_L_0:
;system.ppas,26 ::
$0086 $0008             RETURN
$0004 $     _main:
;settesegupdown.pbas,4 ::          main:
$0004 $     _main_main:
;settesegupdown.pbas,5 ::          trisa=0
$0004 $1303             BCF   STATUS, RP1
$0005 $1683             BSF   STATUS, RP0
$0006 $0185             CLRF  TRISA, 1
;settesegupdown.pbas,6 ::          porta=1
$0007 $3001             MOVLW 1
$0008 $1283             BCF   STATUS, RP0
$0009 $0085             MOVWF PORTA
;settesegupdown.pbas,7 ::          portc=0
$000A $0187             CLRF  PORTC, 1
;settesegupdown.pbas,8 ::          portb=0
$000B $0186             CLRF  PORTB, 1
;settesegupdown.pbas,9 ::          trisc=%11111  ‘imposta RA0 – RA5 come ingessi
$000C $301F             MOVLW 31
$000D $1683             BSF   STATUS, RP0
$000E $0087             MOVWF TRISC
;settesegupdown.pbas,10 ::         trisb=0      ‘imposta la porta b come uscita
$000F $0186             CLRF  TRISB, 1
;settesegupdown.pbas,11 ::         k=0          ‘azzera la variabile k
$0010 $1283             BCF   STATUS, RP0
$0011 $01A3             CLRF  _k, 1
;settesegupdown.pbas,12 ::         while true
$0012 $     settesegupdown_L_2:
;settesegupdown.pbas,14 ::         if (portc.0=1)and (K<9) then  ‘se il pulsante 1 è premuto
$0012 $3001             MOVLW 1
$0013 $0507             ANDWF PORTC, 0
$0014 $00F4             MOVWF STACK_4
$0015 $0874             MOVF  STACK_4, 0
$0016 $3A01             XORLW 1
$0017 $30FF             MOVLW 255
$0018 $1D03             BTFSS STATUS, Z
$0019 $3000             MOVLW 0
$001A $00F2             MOVWF STACK_2
$001B $3009             MOVLW 9
$001C $0223             SUBWF _k, 0
$001D $30FF             MOVLW 255
$001E $1803             BTFSC STATUS, C
$001F $3000             MOVLW 0
$0020 $00F0             MOVWF STACK_0
$0021 $0872             MOVF  STACK_2, 0
$0022 $05F0             ANDWF STACK_0, 1
$0023 $1903             BTFSC STATUS, Z
$0024 $282E             GOTO  settesegupdown_L_7
$0025 $     settesegupdown_L_6:
;settesegupdown.pbas,15 ::         k=k+1                      ‘incrementa il contatore
$0025 $0AA3             INCF  _k, 1
;settesegupdown.pbas,16 ::         while porta.2=1            ‘ciclo anti ripetizione
$0026 $     settesegupdown_L_10:
$0026 $3000             MOVLW 0
$0027 $1905             BTFSC PORTA, 2
$0028 $3001             MOVLW 1
$0029 $00F2             MOVWF STACK_2
$002A $0872             MOVF  STACK_2, 0
$002B $3A01             XORLW 1
$002C $1903             BTFSC STATUS, Z
$002D $2826             GOTO  settesegupdown_L_10
$002E $     settesegupdown_L_11:
;settesegupdown.pbas,17 ::         wend
$002E $     settesegupdown_L_7:
;settesegupdown.pbas,18 ::         end if
$002E $     settesegupdown_L_8:
;settesegupdown.pbas,20 ::         if (portc.1=1)and (k>0) then  ‘se il pulsante 2 è premuto
$002E $3000             MOVLW 0
$002F $1887             BTFSC PORTC, 1
$0030 $3001             MOVLW 1
$0031 $00F4             MOVWF STACK_4
$0032 $0874             MOVF  STACK_4, 0
$0033 $3A01             XORLW 1
$0034 $30FF             MOVLW 255
$0035 $1D03             BTFSS STATUS, Z
$0036 $3000             MOVLW 0
$0037 $00F2             MOVWF STACK_2
$0038 $0823             MOVF  _k, 0
$0039 $3C00             SUBLW 0
$003A $30FF             MOVLW 255
$003B $1803             BTFSC STATUS, C
$003C $3000             MOVLW 0
$003D $00F0             MOVWF STACK_0
$003E $0872             MOVF  STACK_2, 0
$003F $05F0             ANDWF STACK_0, 1
$0040 $1903             BTFSC STATUS, Z
$0041 $284B             GOTO  settesegupdown_L_15
$0042 $     settesegupdown_L_14:
;settesegupdown.pbas,21 ::         k=k-1                     ‘decrementa il contatore
$0042 $03A3             DECF  _k, 1
;settesegupdown.pbas,22 ::         while porta.3=1           ‘ciclo anti ripetizione
$0043 $     settesegupdown_L_18:
$0043 $3000             MOVLW 0
$0044 $1985             BTFSC PORTA, 3
$0045 $3001             MOVLW 1
$0046 $00F2             MOVWF STACK_2
$0047 $0872             MOVF  STACK_2, 0
$0048 $3A01             XORLW 1
$0049 $1903             BTFSC STATUS, Z
$004A $2843             GOTO  settesegupdown_L_18
$004B $     settesegupdown_L_19:
;settesegupdown.pbas,23 ::         wend
$004B $     settesegupdown_L_15:
;settesegupdown.pbas,24 ::         end if
$004B $     settesegupdown_L_16:
;settesegupdown.pbas,26 ::         portb=display[k]                ‘visualizza i numeri
$004B $3075             MOVLW #display
$004C $00F2             MOVWF STACK_2
$004D $3000             MOVLW @#display
$004E $00F3             MOVWF STACK_2+1
$004F $0823             MOVF  _k, 0
$0050 $00F0             MOVWF STACK_0
$0051 $01F1             CLRF  STACK_0+1
$0052 $0872             MOVF  STACK_2, 0
$0053 $07F0             ADDWF STACK_0, 1
$0054 $0873             MOVF  STACK_2+1, 0
$0055 $1803             BTFSC STATUS, C
$0056 $3F01             ADDLW 1
$0057 $07F1             ADDWF STACK_0+1, 1
$0058 $0870             MOVF  STACK_0, 0
$0059 $00A0             MOVWF ___DoICPLoAddr
$005A $0871             MOVF  STACK_0+1, 0
$005B $00A2             MOVWF ___DoICPHiAddr
$005C $080A             MOVF  PCLATH, 0
$005D $00A1             MOVWF ___DoICPSavePCLATH
$005E $2080             CALL  _____DoICP
$005F $00F0             MOVWF STACK_0
$0060 $0821             MOVF  ___DoICPSavePCLATH, 0
$0061 $008A             MOVWF PCLATH
$0062 $0870             MOVF  STACK_0, 0
$0063 $0086             MOVWF PORTB
;settesegupdown.pbas,27 ::         delay_ms(100)                   ‘pausa antirinbalzo
$0064 $3082             MOVLW 130
$0065 $00FB             MOVWF STACK_11
$0066 $30FF             MOVLW 255
$0067 $00FA             MOVWF STACK_10
$0068 $0BFB             DECFSZ      STACK_11, F
$0069 $286B             GOTO  $+2
$006A $286E             GOTO  $+4
$006B $0BFA             DECFSZ      STACK_10, F
$006C $286B             GOTO  $-1
$006D $2868             GOTO  $-5
$006E $3087             MOVLW 135
$006F $00FA             MOVWF STACK_10
$0070 $0BFA             DECFSZ      STACK_10, F
$0071 $2870             GOTO  $-1
$0072 $0000             NOP
$0073 $2812             GOTO  settesegupdown_L_2
;settesegupdown.pbas,28 ::         wend
$0074 $2874             GOTO  $

 Listato in MiKroBasic

Inserisci quì il listato:

Diagramma di flusso

  1. 17 gennaio 2022 alle 04:44

    Thanks for ones marvelous posting! I quite enjoyed reading it,
    you can be a great author.I will make certain to bookmark
    your blog and will come back from now on. I want to encourage you to ultimately continue your
    great writing, have a nice morning!

    Also visit my webpage: rdiet

  1. No trackbacks yet.

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.