Home
> MiKroBasic (MikroElecktronika) > Esercizio di programmazione in MiKroBasic
Esercizio di programmazione in MiKroBasic
Didasknol – Lab. Sistemi
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
Categorie:MiKroBasic (MikroElecktronika)
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