|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
31.5.2012, 22:29 | #1 |
Starosedelac
Član od: 5.12.2005.
Lokacija: Niš
Poruke: 1.259
Zahvalnice: 49
Zahvaljeno 154 puta na 115 poruka
|
Assembly PIC programiranje
Ima li nekog ko je dobar sa ovim? Imam jedan zadatak sa kojim imam problem, pa ako ima iskusnih, da ga postavim ovde da ga neko "debuguje" i objasni mi u čemu je problem, s obzirom na to da ga nisam ja pisao (ali razumem većinu kodu) i da ne radi kako treba.
|
1.6.2012, 7:45 | #2 |
Starosedelac
|
Re: Assembly PIC programiranje
Postavi, što da ne...
P.S. Koji PIC je u pitanju? |
3.6.2012, 6:10 | #3 |
Starosedelac
Član od: 5.12.2005.
Lokacija: Niš
Poruke: 1.259
Zahvalnice: 49
Zahvaljeno 154 puta na 115 poruka
|
Re: Assembly PIC programiranje
16F872
Evo koda: Kod:
;============================================================================= ; Filename: labVezba3.asm ; list p=16f872 ;list directive to define processor #include <p16f872.inc> ;processor specific definitions errorlevel -302 ;suppress "not in bank 0" message ; #include <makro.asm> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC & _BODEN_ON & _WRT_ENABLE_ON & _LVP_OFF & _CPD_OFF ;---------------------------------------------------------------------------- ;Constants org 0x2100 de b'01111101',b'00110000',b'01101110',b'01111010', b'00110011', b'01011011', b'01011111', b'01110000', b'01111111',b'01111011'; vrednosti za cifre u EEPROM-u ;---------------------------------------------------------------------------- ;Variables CBLOCK 0x30 WREG_TEMP ;storage for WREG during interrupt STATUS_TEMP ;storage for STATUS during interrupt PCLATH_TEMP ;storage for PCLATH during interrupt FSR_TEMP ;storage for FSR during interrupt C1 C2 BROJ BROJAC TASTER X ENDC ;---------------------------------------------------------------------------- ;This code executes when a reset occurs. ORG 0x00 goto Main ORG 0x0004 ;place code at interrupt vector goto InterruptCode ResetCode: clrf PCLATH ;select program memory page 0 goto Main ;go to beginning of program Main: bsf STATUS,5 clrf TRISC movlw 0xff movwf TRISB movlw 0x06 movwf ADCON1 movlw 0x03 ; preskaler - 1:8 movwf OPTION_REG bcf STATUS,5 clrf PORTC clrf C1 clrf C2 clrf X movlw .4 movwf BROJAC clrf TASTER movlw .23 movwf BROJ clrf TMR0 bcf INTCON,2 bsf INTCON,5 bsf INTCON,7 Loop: goto Loop ;---------------------------------------------------------------------------- ;This code executes when an interrupt occurs. InterruptCode: movwf WREG_TEMP ;save WREG swapf STATUS,W ;store STATUS in WREG clrf STATUS ;select file register bank0 movwf STATUS_TEMP ;save STATUS value movf PCLATH,W ;store PCLATH in WREG movwf PCLATH_TEMP ;save PCLATH value clrf PCLATH ;select program memory page0 movf FSR,W ;store FSR in WREG movwf FSR_TEMP ;save FSR value ;test interrupt flags here bcf STATUS,5 btfss INTCON,2 goto Kraj bcf INTCON,7 bcf INTCON,2 ;--CIFRE-- clrf C1 movfw BROJ movwf X movlw .10 Cifra1: subwf X,1 btfss STATUS,0 goto Cifra2 incf C1,1 goto Cifra1 Cifra2: movfw X addlw .10 movwf C2 ;--CITANJE IZ EEPROMA movf C1,0 btfss BROJAC,0 movf C2,0 banksel EEADR movwf EEADR banksel EECON1 bsf EECON1, RD banksel EEDATA movf EEDATA, 0 ;W = EEDATA ;--PRIKAZ NA DISPLEJU banksel PORTC movwf PORTC bsf PORTC,7 btfss BROJAC,0 bcf PORTC,7 ;--TASTER decfsz BROJAC,1 goto Kraj btfsc TASTER,0 ;TASTER - flag koji oznacava da li je taster bio pritisnut goto Obradi btfss PORTB,1 clrf TASTER btfsc PORTB,1 incf TASTER, 1 goto Kraj2 Obradi: btfss PORTB,1 goto Kraj2 incf BROJ,1 movf BROJ,0 sublw .99 ; W = 99 - BROJ btfsc STATUS,0 clrw btfss STATUS,0 sublw .99 movwf BROJ ;incf TASTER,1 Kraj2: movlw .4 movwf BROJAC ;============================================================================= Kraj: ; movlw .250 ; movwf TMR0 ;------------------------------------ ;End of interrupt routine restores context EndInt: bcf 3,5 ;select bank 0 movf FSR_TEMP,W ;get saved FSR value movwf FSR ;restore FSR movf PCLATH_TEMP,W ;get saved PCLATH value movwf PCLATH ;restore PCLATH swapf STATUS_TEMP,W ;get saved STATUS value movwf STATUS ;restore STATUS swapf WREG_TEMP,F ;prepare WREG to be restored swapf WREG_TEMP,W ;restore WREG without affecting STATUS retfie ;return from interrupt end ;---------------------------------------------------------------------------- |
3.6.2012, 9:38 | #4 |
Starosedelac
|
Re: Assembly PIC programiranje
Koji oscilator si koristio, to nisi naveo?
Pretpostavljam da su displeji 7-segmentni? Sta uopste ne radi? |
3.6.2012, 14:37 | #5 |
Starosedelac
Član od: 5.12.2005.
Lokacija: Niš
Poruke: 1.259
Zahvalnice: 49
Zahvaljeno 154 puta na 115 poruka
|
Re: Assembly PIC programiranje
Frekvencija oscilatora je 3.2768 MHz, displejevi jesu sedmosegmentni, a ne radi ništa. U zavisnosti od malih izmena koje napravim u kodu, dešava se ili da ispiše na displeju na kratko broj, pa (pretpostavljam nakon 20ms) sam pređe na 00, da ispiše 1 na prvom displeju i ništa na drugom, a jednom sam uspeo čak (ne znam ni sam kako) da napravim da stoji zadati broj na displeju, ali pritiskom na taster (inače ovde postavljen kao RB1) umesto da se broj poveća za 1 resetuje se na 00. A da, i zaboravio sam da napomenem da broj treba da se čita iz EEPROMA.
|
3.6.2012, 19:17 | #6 |
Član
Član od: 1.12.2005.
Lokacija: Batajnica
Poruke: 184
Zahvalnice: 9
Zahvaljeno 42 puta na 32 poruka
|
Re: Assembly PIC programiranje
Zašto ne pokreneš debugger pa vidiš šta se dešava sa kodom instrukciju po instrukciju
|
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Starcraft II | Predrag Stankovic | Strateške igre | 2641 | 4.11.2017 6:07 |
Programiranje u ET racunara | KecmaNedjo | Programiranje | 10 | 11.9.2010 8:20 |
Najbolji program za programiranje igara, sugestije | Mish | Pravljenje igara | 16 | 27.11.2009 21:48 |
Pomozite mi da još više zavolim programiranje! | Nikola92 | Programiranje | 19 | 19.9.2008 23:34 |
Programiranje na HTC Touch Cruise-u | Sol-Badguy | Programi za mobilne telefone | 1 | 19.9.2008 18:12 |