Zdravím,
pracuji na maturitní práci kde programuji LED kostku 5x5x5 s PIC16f877 a vnějším oscilátorem o frekvenci 4MHz.
Bohužel programuju to poprvé a poprvé se ocitám v MPLAB a docela se ztrácim, proto bych chtěl požádat o pomoc.
Potřebuju to nějak přepsat, aby mi to stíhalo se zobrazovat na kostce, mam tam zadané adresy na postupne zvetseni a zmenseni kostky, akorat mi to vubec nestiha a je to na to moc rychle, proto zadam o pomoct, jak to predelat, aby se mi to stihalo zobrazovat.
Tady je můj program:
list p=16f877 ; list directive to define processor
#include <p16f877.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x7E ; variable used for context saving
status_temp EQU 0x7F ; variable used for context saving
PROGRAM EQU 0x20
#define opakovani 0x04 ;pocet opakovani
;**********************************************************************
ORG 0x000 ; processor reset vector
clrf PCLATH ; ensure page bits are cleared
goto nastaveni ; go to beginning of program
ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move status register into W register
movwf status_temp ; save off contents of STATUS register
; isr code can go here or be located as a call subroutine elsewhere
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie ; return from interrupt
;***************************************************************************
nastaveni
movlw 0xFF ; Nastaveni jednicek na PORTY
movwf PORTA ; -//-
movwf PORTB ; -//-
movwf PORTC ; -//-
movwf PORTD ; -//-
movwf PORTE ; -//-
BANKSEL TRISA ;prepnuti do banky 1
movlw 0x07 ;nastaveni portu na digital
movwf ADCON1 ;-//-
clrf TRISA ;nastaveni portu na vystupy
clrf TRISB ;-//-
clrf TRISC ;-//-
clrf TRISD ;-//-
clrf TRISE ;-//-
movlw 0xD8 ;nastaveni TMR0 Fosc, nepridelena preddelicka
movwf OPTION_REG
BANKSEL PIR1 ;prepnuti do banky 0
movlw 0x01 ;nastav preddel 1:8, vnitrni osc a povoleni
movwf T1CON ;-//-
clrf TMR1L ;vynulovani TMR1
clrf TMR1H ;-//-
clrf PIR1 ;vynulovani priznaku od TMR1
clrf TMR0
;*********************************************************************************
program
movlw 0x05
movwf PROGRAM
program_1
call kostka1
call kostka2
call kostka3
call kostka2
decfsz PROGRAM,f
goto program_1
movlw opakovani
movwf PROGRAM
goto program
;*********************************************************************************
kostka1
bsf PORTA,0
bcf PORTD,4
bcf PORTA,2
clrf TMR1L ; vynulovani TMR1
clrf TMR1H ; vynulovani TMR1
clrf PIR1 ; vynulovani priznaku od TMR1
btfss PIR1,0 ; dotas na přetečení TMR1
goto $-1 ; nepřetekl TMR1
bsf PORTA,2 ; vypnutí patra 3
bsf PORTD,4 ; vypnutí D13
clrf PIR1 ; vynulovani priznaku od TMR1
return
kostka2
movlw b'11111000'
movwf PORTB
movlw b'01101111'
movwf PORTC
movlw b'11000011'
movwf PORTD
bcf PORTA,1 ; zapnutí patra 4
bcf PORTA,3 ; zapnutí patra 2
call svit
bsf PORTA,2 ; vypnutí patra 4
bsf PORTA,3 ; vypnutí patra 2
movlw b'11010011'
movwf PORTD
bcf PORTA,2 ; zapnutí patra 3
call svit
bsf PORTA,2 ; vypnutí patra 3
btfss PIR1,0 ; dotas na přetečení TMR1
goto kostka2 ; nepřetekl TMR1
clrf PIR1 ; vynulovani priznaku od TMR1
kostka3
movlw b'00000111'
movwf PORTB
movlw b'10010000'
movwf PORTC
movlw b'00111100'
movwf PORTD
bcf PORTE,0
bcf PORTA,1 ; zapnutí patra 4
bcf PORTA,2 ; zapnutí patra 3
bcf PORTA,3 ; zapnutí patra 2
call svit
bsf PORTA,1 ; vypnutí patra 4
bsf PORTA,2 ; vypnutí patra 3
bsf PORTE,3 ; vypnutí patra 2
clrf PORTB
clrf PORTC
clrf PORTD
bcf PORTA,0 ; zapnutí patra 5
bcf PORTA,5 ; zapnutí patra 1
call svit
bsf PORTA,0 ; vypnutí patra 5
bsf PORTA,5 ; vypnutí patra 1
btfss PIR1,0 ; dotas na přetečení TMR1
goto kostka3 ; nepřetekl TMR1
clrf PIR1 ; vynulovani priznaku od TMR1
movlw 0xFF ; zapisem na vystupy jednicky aby nic nesvitilo
movwf PORTA ; -//-
movwf PORTB ; -//-
movwf PORTC ; -//-
movwf PORTD ; -//-
movwf PORTE ; -//-
return
svit
clrf TMR0
bcf INTCON,2
btfss INTCON,2
goto $-1
return
movlw b'11111111'
END