mars01 Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 (editat) Puteai sa postezi codul direct pe pagina. Din cate vad este in assembler iar aici nu cunosc sintaxa. Am presupus (gresit) ca folosesti un limbaj de nivel inalt. Dar ca si algoritm este simplu: incrementezi o variabila de tip unsigned char (ia valori de la 0 la 255) si dupa fiecare incrementare scrie valoarea direct in registrul PORTC. Daca vrei sa faca numaratoarea la nesfarsit (intr-o bucla infinita) pur si simplu aduni in continuare pentru ca atunci cand ajunge la 255 cu adunarea va face rollover si o ia de la capat. Daca vrei ca numaratoarea sa se faca o singura data folosesti o bucla tip while(x<256). Daca ce ai nevoie este de ajutor ca sa inveti asamblare va trebui sa te ajute cineva mai adecvat. De ex. avem un coleg @Mifty care se pare ca este familiarizat cu programarea in asamblare ... poate te ajuta el. LE: vezi ca ai in directiva config setarea LVP = ON. Nu cred ca vrei sa faci programarea in low voltage ... Editat Ianuarie 6, 2016 de mars01 Link spre comentariu
Liviu M Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 o singura data folosesti o bucla tip while(x<256).Pentru o singura data conditia e gresita. Link spre comentariu
Bandi Szasz Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 Este while(x<255) findca la 255 o sa faca rollover si incepe din nou de la 0 rezultand o bucla infinita neajungand la 256. Link spre comentariu
mars01 Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 (editat) while(x<255) in loc de while(1) sau for(;;) etc. Corect, intr-un unsigned char nu poti stoca valoarea 256. LE: Postat simultan cu @bandi12. LLE: x<255, corect. shame on me. (justificare: sunt mort de somn si bagat deja in pat. scuze). Editat Ianuarie 6, 2016 de mars01 Link spre comentariu
Liviu M Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 Nici < 255 nu e bine, se pierde 255. Trebuie lasat sa ia toate valorile posibile (0-255) si facut un test suplimentar de depasire. Link spre comentariu
Elef Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 Pentru incrementat un registru sunt 2 instructiuni: -incf -> increment f -incfsz -> increment f skip if zero(adica face si un test pt overflow) Codul poate sa fie ceva de genul: incf numarator,1 movf numarator movwf PORTC call DELAY_ROUTINE Oricum citeste mai intai : http://ww1.microchip.com/downloads/en/DeviceDoc/30292D.pdf de la pagina 135 .E prezentat setul de instructiuni al uC-ului - sunt 35 de instructiuni extrem de simple. Link spre comentariu
Liviu M Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 Si daca documentatia aia nu e suficienta, mpasm are propria documentatie... Link spre comentariu
Vizitator mAgneTic3RaNgEr Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 Va multumesc mult la toti! Informatia o gasesc utila! Acuma voi incerca sa o aplic si sper sa revin ceva mai tirziu cu ce ceea ce voi obtine! Merci ,inca o data! Sa aveti o seara placuta! Link spre comentariu
Vizitator mAgneTic3RaNgEr Postat Ianuarie 13, 2016 Partajează Postat Ianuarie 13, 2016 (editat) Revin cu solutia la subiectul deschis anterior : list p=16f877A ; list directive to define processor #include <p16f877A.inc> ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_ON & _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 CBLOCK 0x20 ; declaratia de variabile TIMER x necesare subrutinei ;de intarziere, RAM starts at address 20h TIMER1 TIMER2 TIMER3 ENDC ;********************************************************************** ORG 0x000 ; processor reset vector main ; Initializarea porturilor microcontrolului movlw b'00000000' ; toti pini porturilor = low movwf PORTA movlw b'00000000' movwf PORTB movlw b'00000000' movwf PORTC movlw b'00000000' movwf PORTD movlw b'00000000' movwf PORTE bsf STATUS,RP0 ; saltul in bankul 1 de memorie RAM, ;necesar setarii registrilor TRISx movlw b'00000000' ; toti pinii portului PORTA = de intrare movwf TRISA movlw b'00000000' ; toti pinii portului PORTx = de iesire movwf TRISB movlw b'00000000' movwf TRISC movlw b'00000000' movwf TRISD movlw b'00000000' movwf TRISE movlw b'00000110' ; prin setarea registrului ADCON1 cu valoarea binara ;se seteaza pinii portului A ca pini I/O digitali movwf ADCON1 bcf STATUS,RP0 ; saltul in bankul 0 de memorie RAM CLRF PORTB ;stergerea registrului GOTO START START INCF PORTB CALL DELAY_ROUTINE CALL DELAY_ROUTINE GOTO START DELAY_ROUTINE MOVLW 0x0B ;subrutina de intarziere MOVWF TIMER3 DEL_LOOP1 MOVLW 0xE7 MOVWF TIMER2 DEL_LOOP2 MOVLW 0x2D MOVWF TIMER1 DEL_LOOP3 DECFSZ TIMER1,F GOTO DEL_LOOP3 DECFSZ TIMER2,F GOTO DEL_LOOP2 DECFSZ TIMER3,F GOTO DEL_LOOP1 RETLW 0 END Editat Ianuarie 13, 2016 de mAgneTic3RaNgEr Link spre comentariu
ionpat Postat Ianuarie 20, 2016 Partajează Postat Ianuarie 20, 2016 buna ziua am achizitionat un programator pic-kit2, si la unul dintre cele doua pic-uri,nu-l vede programatorul, posibil sa fie ars ? Link spre comentariu
MifTy Postat Ianuarie 22, 2016 Partajează Postat Ianuarie 22, 2016 nu ştim! nu avem idee pe ce plăcuţă sunt puse cele două picuri, şi nu ne-ai spus şi ce tip anume de picuri sunt. singurul lucru pe care-l pot (putem) spune e că unul dintre ele nu este recunoscut, şi cum pickit2 are un număr de picuri "necunoscute", poate fi perfect normală eroarea... Link spre comentariu
ionpat Postat Ianuarie 22, 2016 Partajează Postat Ianuarie 22, 2016 pic-ul,e 12f675, iar placuta ,atasez foto, Link spre comentariu
MifTy Postat Ianuarie 22, 2016 Partajează Postat Ianuarie 22, 2016 ... e cumva clona de pickit2 pe care o făcuse nel64?dacă da, el ar fi în măsură să spună dacă e corect pus în soclu 675 ăla...asta pentru că, deşi pagina lui pickit2 de pe situl microchip e dusă în neant, mai există nişte pagini care au păstrat lista de "supported devices", şi 675 figurează printre ele... Link spre comentariu
adicontakt Postat Ianuarie 23, 2016 Partajează Postat Ianuarie 23, 2016 INcearca sa selectezi manual componenta si nu prin autodetect,e optiune in softul pickit2 Link spre comentariu
Mircea Postat Ianuarie 23, 2016 Partajează Postat Ianuarie 23, 2016 Nu e clar: avem 2 pic-uri 12F675 dar numai unul e recunoscut? Sau sunt 2 cip-uri de modele diferite? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum