Sari la conținut
ELFORUM - Forumul electronistilor

Cum sa programez un PIC


sofian

Postări Recomandate

acesta fiind codulnu inteleg cum trebuie organizata memoria aia...list p=16F627a ;definire tip PIC #include ;include definiti ptr Port-uri,status,biti,etc errorlevel -302 ;nu mai ma atentioneaza sa fiu atent la Ram daca este in bank-ul respectiv __CONFIG _BODEN_ON&_PWRTE_ON&_INTRC_OSC_NOCLKOUT cblock 0x20 BclL,BclH endc org 0x0000 ;Adresa de start a microntrollerului movlw 0x07 ;set Digital I/O movwf CMCON ; bsf STATUS,RP0 ;set Bank1 clrf TRISB ;set PORTB toate iesiri clrf STATUS ;Bank0 Bucla movlw b'00000000' ;incarc in registrul "W" valorile ptr PORTB movwf PORTB ;set PORTB (toate iesirile in nivel logic "0") call Wait500Ms ; apel subrutina de intirziere movlw b'11111111' ;incarc in registrul "W" valorile ptr PORTB movwf PORTB ;set PORTB call Wait500Ms ; apel subrutina de intirziere goto Bucla ;inca o data pina la infinitWait500Ms movlw HIGH(50000-1) ; movwf BclH ; movlw LOW(50000-1) ; movwf BclL ;WaitMs00 movlw 0x01 ;1 subwf BclL,f ;2 btfss STATUS,C ;3 decf BclH,f ;4 movfw BclL ;5 iorwf BclH,w ;6 nop ;7 btfss STATUS,Z ;8 goto WaitMs00 ;10 retlw 0x00 ; end

Link spre comentariu
  • Răspunsuri 604
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    54

  • Vlad Mihai

    28

  • bbogdanmircea

    27

  • seichter

    24

Top autori în acest subiect

Imagini postate

Incearaca si in felul urmator:

	org	0x0000	goto	initializari;============================	org	0x04intreruperi	;aici verifici ce fel de intrerupere ai (daca folosesti intreruperile)	.	bsf		INTCON,GIE	retfie;============================main	;bucla principala (main)	call unde_ai nevoie	.	goto main;============================initializari	;aici faci initializarea	goto main
Sper sa intelegi
Link spre comentariu

daca am inteles eu bine ai scris acolo cum trebuie organizat programul nou....sa mai exersez....vreau sa vad ce nu corespunde dintr un pic in altul daca modific cmcon si locatia memorii si inca nush ce daca merge.....in locurile astea imi da eroare __CONFIG _BODEN_ON&_PWRTE_ON&_INTRC_OSC_NOCLKOUT movwf CMCON ; movwf BclH daca le comentez pe primele 2 imi merge programul(build succeded) dar tot imi zice worning invalid RAM location si se refera la ultima linie cu movwf BclH.daca ma ajuta careva... :101

Link spre comentariu

De obicei, ca sa primesti un raspuns cat mai bun, trebuie sa dai cat mai multe informatii. In cazul de fata, posteaza mesajele de eroare pe care le primesti la __CONFIG si CMCON (copy/paste).

De asemenea, copiaza aici codul folosind tagurile

..
(butonul Code de mai sus), ca sa se pastreze formatarea (la mine se compileaza codul tau anterior "rearanjat in pagina", asa ca presupun ca erorile sunt de formatare).
Link spre comentariu

Pentru inceput doua aspecte.

1. La PIC16F631 nu are Brown-Out Detect (BODEN), In schimb are 2 biti de configurare la Brown-Out Reset (BOREN). __CONFIG_BODEN_ON trebuie schimbat, cred, cu __CONFIG_BOREN_ON.

2. CMCON este pentru un singur comparator (cazul 16F627/628(A)). La 16F631 sunt doua comparatoare care se seteaza cu CM1CON0 si CM2CON0. Asa ca codul urmator nu are sens la 631.

movlw 0x07 ;set Digital I/Omovwf CMCON ;

 

Dupa ce am sa testez programul tau voi reveni cu alte detalii. Insa nu strica ca citesti helpul de la MPASM si sa citesti comparativ cele doua pdf-uri.

Link spre comentariu

@ matyC nu vad care e diferenta la pct 1, si in legatura cu pct 2 ar trebui sa le setez pe amandoua CM1 si CM2?

sau.....nu stiu cum trebuie

Error[113]   C:\USERS\ALEXEI\DESKTOP\PRJ MATLAB\PROJECT 1\631.ASM 4 : Symbol not previously defined (_BODEN_ON)
asta fiind mesajul de eroare daca nu comentez linia cu _bode_on

Error[113]   C:\USERS\ALEXEI\DESKTOP\PRJ MATLAB\PROJECT 1\631.ASM 12 : Symbol not previously defined (CMCON)
si asta e mesajul de la CMCON

dar eu am facut o chestie si imi merge:

errorlevel  -302   ;nu mai ma atentioneaza sa fiu atent la Ram daca este in bank-ul respectiv  ; __CONFIG _BODEN_ON&_PWRTE_ON&_INTRC_OSC_NOCLKOUT    cblock 0x20    CMCON    BclL,BclH    endc

am declarat CMCON sus si merge codul......am doar cateva worning-uri cu invalid RAM location,pp ca isi alege singur locatia de memorie

...BUILD SUCCEEDED....

Link spre comentariu

si asta e mesajul de la CMCON

dar eu am facut o chestie si imi merge:

errorlevel  -302   ;nu mai ma atentioneaza sa fiu atent la Ram daca este in bank-ul respectiv  ; __CONFIG _BODEN_ON&_PWRTE_ON&_INTRC_OSC_NOCLKOUT    cblock 0x20    CMCON    BclL,BclH    endc

am declarat CMCON sus si merge codul......am doar cateva worning-uri cu invalid RAM location,pp ca isi alege singur locatia de memorie

...BUILD SUCCEEDED....

TOTAL GRESIT! ceea ce ai facut tu akolo , ai facut pe bajbaite... fara sa stii ce faci. Ai declarat CMCON ca fiind o variabila si de asta a mers compilarea.

La -->PIC16F631<-- (Datasheet):

*- registrul CMCON nu exista ,cum a spus si colegul MatyC sant 2 registri care controleaza comparatoarele si anume CM1CON0 si CM2CON0

*- adresa (0x20) unde ai declarat variabilele nu exista (din cauza asta ai Warning: Invalid RAM location specified.)

 

Ai mai jos codul modificat pentru PIC16f631

list p=16F631			;definire tip PIC#include <p16F631.inc>	;include definiti ptr Port-uri,status,biti,etcerrorlevel -302			;nu mai ma atentioneaza sa fiu atent la Ram daca este in bank-ul respectiv	__CONFIG _BOD_ON&_PWRTE_ON&_INTRC_OSC_NOCLKOUT&_WDT_OFF;///////////////////////////////////////;	cblock 0x20  <-- Adresa 0x20 nu exista in PIC16F631	cblock 0x40		BclL,BclH	endc;----------------------------	org 0x0000			;Adresa de start a microntrollerului		banksel CM1CON0	clrf ANSEL			;turn digital I/O	movlw 0x40			;set comparator off	movwf CM1CON0		;	movwf CM2CON0		;;	movlw 0x07			;set Digital I/O;	movwf CMCON			;	banksel TRISB		;set Bank1	clrf TRISB			;set PORTB toate iesiri	clrf STATUS			;Bank0Bucla	banksel PORTB	movlw b'00000000'	;incarc in registrul "W" valorile ptr PORTB	movwf PORTB			;set PORTB (toate iesirile in nivel logic "0")	call Wait500Ms		;apel subrutina de intirziere	movlw b'11111111'	;incarc in registrul "W" valorile ptr PORTB	movwf PORTB			;set PORTB	call Wait500Ms		;apel subrutina de intirziere	goto Bucla			;inca o data pina la infinitWait500Ms	movlw HIGH(50000-1)	;	movwf BclH			;	movlw LOW(50000-1)	;	movwf BclL			;WaitMs00	movlw 0x01			;1	subwf BclL,f		;2	btfss STATUS,C		;3	decf BclH,f			;4	movfw BclL			;5	iorwf BclH,w		;6	nop					;7	btfss STATUS,Z		;8	goto WaitMs00		;10	retlw 0x00 ;	end

forum.zip

Link spre comentariu

super :da mege perfect programul multumesc mult...am vazut si in pdf ul la pic despre cm1consi acum...cum fac sa vad daca nu e scris ceva pe pic cu pickit2 clona...sa sterg si sa scriu programul asta?? :freaza:

Link spre comentariu

La __CONFIG _BOD_ON ma mira faptul ca nu da eroare. PIC16F631 nu stie de _BOD_ON insa stie de _BOR_ON.Ai noroc ca la initializare 631 se seteaza default pe frecventa interna de 4 MHz si corespunde cu frecventa de la 627 si in felul asta nu sunt afectate rutinele Wait500Ms si WaitMs00. Este vorba de starea registrului OSCCON.

si acum...cum fac sa vad daca nu e scris ceva pe pic cu pickit2 clona...sa sterg si sa scriu programul asta??

poti folosi utilitarul pentru Pickit2 unde ai o optiunea "Blank Check" si te informeaza softul daca e gol picul sau nu. Oricum ai face sa stii ca utilitarul sterge tot din microcontroler si abia pe urma programeaza. Ai si in MPLAB un plugin pentru Pickit2 insa eu prefer utilitarul dedicat oferit de Microchip.
Link spre comentariu
  • 3 săptămâni mai târziu...
  • 1 lună mai târziu...
Vizitator Gibson

hey am nevoie de putin ajutor....vreau sa programez un Pic 16F54 si vreau sa comande un motor pas cu pas...cum ar trebui sa fac?pot sa scriu programul in mplab si apoi sa il incarc in picProg?ca nu inteleg deloc ce inseamna toate valorile alea in hexa...

Link spre comentariu
  • 2 săptămâni mai târziu...
Vizitator Gibson

help va rog...acuma ma confrunt cu programarea in mplab..si nu stiu cum sa fac sa scriu programl in C sau in /asm ca la amandoua imi da erorideci am pic 16F54 si vreau sa comande un motor paas cu pas..in assembler codu ii urmatorul:main: mov stepper, #08H acall delay mov stepper, #0CH acall delay mov stepper, #04H acall delay mov stepper, #06H acall delay mov stepper, #02H acall delay mov stepper, #03H acall delay mov stepper, #01H acall delay mov stepper, #09H acall delay sjmp mainimi da erori ca nu sunt definite unele (??)ma poate ajuta va rog cine cunoaste programarea si mplab?apreciez

Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări