Sari la conținut
ELFORUM - Forumul electronistilor

12F508 la 12F629


aetius

Postări Recomandate

Salutare tuturor...

As dori un ajutor din partea voastra pentru portarea unui cod de la 12F508 la 12f629, precizez ca sunt incepator in ale picului(nivel hobby pe linga casa).

Este un rogerbeep, am instalat Mplab v.2.30 pt. acest cod ,dar ma depaseste.

Multumesc anticipat.

 title "Roger v.1.1 - created by OK1MPE"

 list P=12F508, F=INHX8M
INCLUDE <P12F508.INC>

__config 0FEAH ; _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF 
; ---------------------------------------------------------------------
;
; This software is free for private usage. It was created for HAM radio
; community members. Commercial exploatation is allowed only with
; permission of author.
;
; (C) Petr Bittnar, OK1MPE ([email protected]), CZ, www.qsl.net/ok1mpe
;
; ---------------------------------------------------------------------
;
; History:
; 27.07.10 procesor 12F508 add "K"
; 25.03.01 * v.1.1 - add on/off function	
; 19.03.99 * v.1.0 - first public version
;
; ---------------------------------------------------------------------
;
;**********************************************************************
;*  RC int., Tcpu=1us, 12F508 MPASM 2.30                     25.3.01 *
;**********************************************************************
;
;  Vdd  -| U |- Vss
;  ptti -|   |- D0
;  ptto -|   |- D1
;  D2   -|   |- mod

c          equ 0          ;def. c,dc,z - status
dc         equ 1
z          equ 2
d0         equ 0          ;def. GPIO
d1         equ 1
d2         equ 3
mod        equ 2
ptto       equ 4
ptti       equ 5

;definition RAM (registers):
rtcc       equ 1
pc         equ 2
status     equ 3
fsr        equ 4
osccal     equ 5
gpio       equ 6

freq       equ 10
delay      equ 11
temp       equ 12

;**********************************************************************
;*                        M A C R O                                   *
;**********************************************************************
ton macro freq_,delay_
   movlw   freq_          ;settings parameters (freq and delay)
   movwf   freq           ;
   movlw   delay_         ;
   movwf   delay          ;
   call    gen_ton        ;call subrutine for generation wave
   endm

   org     0              ;reset vector
   movwf   osccal         ;calibration value for RC osc.

;**********************************************************************
;* settings ports, prescaler ...                                      *
;**********************************************************************
;ports: 0-output, 1-input
start
   movlw   b'00101011'    ;settings GPIO
   tris    gpio           ;
   clrf    gpio
   movlw   b'10000111'    ;ps 1:256, pull-up
   option

; ------------------------ on/off function ----------------------------
   movlw   .80            ;timer 2s
   movwf   temp           ;(80 x 25)
onoff
   btfsc   gpio,ptti      ;release PTT key?
   goto    main           ;yes goto main
   call    wait           ;
   decfsz  temp           ;timer overflow?
   goto    onoff          ;no repeat

roger_off
   goto    roger_off      ;yes turn permanently off

; ------------------------ main rutine -------------------------------
main
   btfsc   gpio,ptti      ;wait for PTT key (press)
   goto    $-1            ;

   call    wait           ;wait a moment

   btfss   gpio,ptti      ;wait for PTT key (release)
   goto    $-1            ;

   bsf     gpio,ptto      ;PTT output = H (TX on)
   call    wait           ;
   call    wait           ;wait 100ms
   call    wait           ;
   call    wait           ;

   clrf    temp
   btfss   gpio,d0        ;read input pins D0-D2
   bsf     temp,0         ;
   btfss   gpio,d1        ;
   bsf     temp,1         ;
   btfss   gpio,d2        ;
   bsf     temp,2         ;

   movfw   temp
   addwf   pc
   goto    typ1           ;typ 1
   goto    typ2           ;typ 2
   goto    typ3           ;typ 3
   goto    typ4           ;typ 4
   goto    typ5           ;typ 5
   goto    typ6           ;typ 6
   goto    typ7           ;typ 7
   goto    typ8           ;typ 8

typ1
   ton     .208,.56       ;800Hz, 70ms
   goto    quit

typ2
   ton     .119,.98       ;1400Hz, 70ms
   goto    quit

typ3		; "K"
   ton     .167,.90       ;1000Hz, 90ms
   call    wait           	  ;
    
   ton     .167,.40    	 ;1000Hz, 40ms
   call    wait           	 ;
  
   ton     .167,.90       ;1000Hz, 90ms
   goto    quit

typ4
   ton     .100,.60       	;1200Hz, 50ms
      ton     .228,.37     ;700Hz, 50ms
     ton     .167,.50      ;1000Hz, 50ms
   goto    quit

typ5
   ton     .167,.70       ;1000Hz, 70ms
   ton     .83,.141       ;2000Hz, 70ms
   goto    quit

typ6
   ton     .83,.141       ;2000Hz, 70ms
   ton     .167,.70       ;1000Hz, 70ms
   goto    quit

typ7
   ton     .208,.40       ;800Hz, 50ms
   ton     .167,.50       ;1000Hz, 50ms
   ton     .139,.60       ;1200Hz, 50ms
   goto    quit

typ8
   ton     .139,.60       ;1200Hz, 50ms
   ton     .167,.50       ;1000Hz, 50ms
   ton     .208,.40       ;800Hz, 50ms
   goto    quit

quit
   call    wait           ;wait a moment
   bcf     gpio,ptto      ;PTT output L (TX off)
   call    wait           ;
   goto    main

;**********************************************************************
;*                        S U B R U T I N E S                         *
;**********************************************************************
;subrutine: generation wave
gen_ton
   movfw   freq           ;set temp from freq
   movwf   temp           ;
   bsf     gpio,mod       ;modulation = H
loop_hi
   decfsz  temp           ;repeat while temp>0
   goto    loop_hi        ;

   movfw   freq           ;set temp from freq
   movwf   temp           ;
   bcf     gpio,mod       ;modulation = L
loop_lo
   decfsz  temp           ;repeat while temp>0
   goto    loop_lo        ;

   decfsz  delay          ;repeat while delay>0
   goto    gen_ton        ;
   retlw   0

;----------------------------------------------------------------------
;subrutine: wait 25ms
wait
   movlw   .158           ;(256-158)x256us
   movwf   rtcc           ;rtcc=25ms

   movfw   rtcc           ;read rtcc
   btfss   status,z       ;overflow?
   goto    $-2            ;no repeat
   retlw   0              ;

   end

 

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

Top autori în acest subiect

  • aetius

    4

  • UDAR

    3

  • darius_bv

    3

  • Bandi Szasz

    1

Top autori în acest subiect

Imagini postate

Pentru portare trebuie să pui alături cele două foi de catalog - de la 508 și de la 629 .

Ai să observi că :

1. Cuvintele de configurare sunt diferite deci directiva  __CONFIG trebuie modificată în consecință. Atenție la biții de calibrare. 

2. Registrul GPIO are adresa 5 la 629 nu 6 ca la 508.

3. Registrul OSCCAL este în bancul 1 ( la 508 exista un singur banc - 0 ) . Trebuie urmate indicatiile din DS. 

4. Registrul OPTION este usor diferit si se află tot în bancul 1

5. Instrucțiunile TRIS și OPTION nu mai există la 629 , trebuie înlocuite cu MOVF, MOVWF

6. Poate mi-a scăpat ceva 

În concluzie portarea se poate face dar cu ceva muncă și cu multă atenție. 

 

Link spre comentariu
     list P=12F629, F=INHX8M
    INCLUDE <P12F629.INC>

    __config _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF

Atia am reusit s-a inteleg si unde s-a fac modificarea...(sau atit am inteles).

In rest ori mai citesc, ori ma dau batut...

Multumesc.

Editat de aetius
Link spre comentariu

N-am vrut să spun din prima postare dar ...

 - Dacă vrei să înveți să programezi microcontrolere cred că nu are rost să muncești cu limbajul de asamblare . E greoi, consumator de timp, există diferențe de la un microcontroler la altul, pot fi probleme de compatibilitate cu bibliotecile de funcții pe care - inevitabil - va trebui să le ”împrumuți” . Orientează-te mai bine spre un limbaj de nivel înalt . O idee pentru PIC - MikroC Pro for PIC de la Mikroelectronica , gratuit pentru până la 2048 linii cod. Și mai sunt multe alte variante atât pentru PIC cât și pentru ATMEL.

- Dacă vrei doar să faci proiectul cumpără pur și simplu un PIC12F508 - e câțiva lei . 

Link spre comentariu
  • 2 luni mai târziu...
La 23.03.2021 la 20:22, UDAR a spus:

N-am vrut să spun din prima postare dar ...

 - Dacă vrei să înveți să programezi microcontrolere cred că nu are rost să muncești cu limbajul de asamblare . E greoi, consumator de timp, există diferențe de la un microcontroler la altul, pot fi probleme de compatibilitate cu bibliotecile de funcții pe care - inevitabil - va trebui să le ”împrumuți” . Orientează-te mai bine spre un limbaj de nivel înalt . O idee pentru PIC - MikroC Pro for PIC de la Mikroelectronica , gratuit pentru până la 2048 linii cod. Și mai sunt multe alte variante atât pentru PIC cât și pentru ATMEL.

- Dacă vrei doar să faci proiectul cumpără pur și simplu un PIC12F508 - e câțiva lei . 

Ma bucur ca mai sunt oameni care au invatat si sunt dispusi sa ajute, ca dumneavoastra. 

Eu lucrez numai in limbaj de asamblare, pentru ca imi ofera controlul totoal asupra dispozitivului: alocarea memoriei, controlul perifericelor, flag-urilor, etc. 

Am lucrat si in C, dar din curiozitate am dezasamblat niste rutine compilate in C si mi-am pus maninile in cap: la varianta "lite (free)" a softului testat la fiecare instructiune utila mai executa cel putin doua instructiuni de transfer, deplasare, testare, etc, absolut in plus, care ocupau memoria si scadeau viteza. La un uC cu optiuni "nelimitate" nu e o problema memoria, dar viteza da. La un 16F676 cu 1K flash si 64 octeti RAM, e o mare problema. Varianta "full" costa cateva sute de dolari, probabil ca functiona corect, dar tot n-as baga mana in foc. 

Atasez un exemplu de utilizare a memoriei aproape 100% pentru un termostat programabil de mare precizie facut cu PIC16F676 cu multi ani in urma. Pe langa afisarea multiplexata calculeaza o functie de transfer pentru adaptarea optima a senzorului utilizand rutine pe 16biti. Am utilizat cam tot ce se putea din acel cip, apeland inclusiv la realocarea memoriei, atunci cand ramaneam in pana. A fost o ambitie, dar de peste 10 ani functioneaza perfect, nu s-a blocat niciodata.  

 

Capture.JPG

Link spre comentariu

Ai în principiu dreptate . Ideea e că cine vrea performanță dă banul. Totuși sunt compilatoare/IDE-uri destul de performante și în gama free. Eu am lucrat și lucrez cel mai mult (de fapt aproape exclusiv) cu MikroC Pro For PIC - dacă te încadrezi în cei doi 2k nu prea sunt probleme, codul este destul de eficient . Sigur că și priceperea de programator contează sau cunoașterea (și aplicarea) unor mici trucuri. De pildă dacă utilizezi de mai mult de 3-4 ori delay_ms() cu același argument e mai bine să faci o funcție apelabilă clasică în locul rutinei in_line implicite (dacă stiva îți permite), etc. 

În ce privește compilatorul despre care vorbești   - dacă e cel care cred eu - da, cam așa face . 

 

După mine cea mai mare problemă în assembler sunt rutinele matematice . Nu cred că vrea cineva să stea să scrie de la zero o rutină de împărțire 32/32 . Doar dacă ai niște biblioteci verificate și eficiente din care să împrumuți funcțiile necesare. Eu am scris doar un caz particular de înmulțire cu o constantă ca să obțin un număr pe 48 de biți și apoi o împărțire a acestuia cu un număr de 32 de biți - și acesta dintr-un domeniu limitat - și am muncit mai multe zile (desigur nu încontinuu) .

În ce privește controlul perifericelor nu văd o problemă. Toate compilatoarele (cred) permit folosirea asm inline sau ca funcție . Și eu folosesc uneori funcții proprii pentru ADC, LCD, SPI . 

Link spre comentariu

Cred ca programarea in limbaj de asamblare ar trebui sa fie punctul de plecare in studierea microcontrolerelor, pentru ca in acest fel intelegi cel mai bine arhitectura si functionarea lor. 

In legatura cu utilizarea functiilor matematice, da este o mare provocare. Stiu ca am studiat aritmetica binara saptamani bune inainte sa ma apuc de soft.  

Va doresc numai bine!

 

Link spre comentariu

   Problema cred ca ar trebuii pusa putin diferit, atat timp cat nu esti mai mult sau mai putin inginer de uC sa lucrezi in domeniu nu prea merita sa te complici cu _asm din punct de vedere pret/ timp investit. Eu nu inteleg pe unii care se cramponeaza sa foloseasca uC uri antice cum e si 12F629, probabil ca proiectele pe care vor sa le realizeze au fost facute cu multi ani in urma. Un PIC de generatie noua de exemplu PIC16F18326 are 26kB flash / 2kB RAM si ruleaza la 32Mhz.. diferenta de pret este cam de 2lei. Si atunci ma intreb in regim de amator/hobby merita investit atat timp sa inveti _asm pentru aia 2lei sau mai bine iei un PIC de generatie noua cu suficient spatiu si nu te mai doare capu. 

 

  Asm nu se mai preda nici in facultate, cel putin nu practic doar ceva teorie asa foarte foarte basic, cam ce e si cum arata si cam atat, motivul este ca in vremurile actuale  cand trebuie sa scoti pe banda rulanta sau sa fie totul gata cat mai repede nimeni nu se apuca de programat in _asm, companiile mari isi permit lejer licente de sute de euro facute calumea, daca varianta "free" ar fi la fell de performant nimeni nu ar mai cumpara licente. Chiar si in regim hobby partea de uC ca de trait traiesc din programare cel putin mie mi se pare mult mai rentabil o licenta MikroC care nu e capat de tara decat sa ma apuc de bibilit _asm. Candva nu zic ca nu a fost pe val si _asm ul insa incet incet nu mai este.

  

Editat de Bandi Szasz
Link spre comentariu

Pai se complica lumea cu uC-uri antice tocmai din cauza faptului ca pentru alea poti sa dai usor copy paste de pe net sa copiezi un proiect gata facut de altii.

Link spre comentariu

Va dau dreptate, e simplu sa dai copy-paste la un proiect de pe net, pentru orice tip de microcontroler. Exista totusi si o parte buna: poate la un moment dat cel care doreste sa realizeze ceva rapid, fara a avea cunostinte de programare, sa devina curios. Azi modifica ceva... vede ca-i place, maine modifica altceva si-apoi ia documentatia si studiaza. Si in acest fel un om din tagma celor absenti din propria viata, care merg cu telefonul in mana si castile pe urechi si iau totul de-a gata, este salvat; poate sa fie creativ si sa-si castige singur painea.

Este importanta scanteia aceea care, la un moment dat a aparut in viata fiecarui pasionat!

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