# PIC mikrokontrolleri >  PICbasic Pro un PIC16F690 Help....

## RaimixLv

Esmu pamatīgs iesācējs programmēšanā, kādreiz skolas laikos kaut cik zināju Beisiku, tagad radās doma uztaisīt kaut ko pašam  :: 
Iepirku PICkit 2 kam komplektā nāca  DEMOboards uz PIC16F690 un LED vietā caur traņiem salodēju tiristorus. Ir doma paprogrammēt soļu motorus. tur protams viss notiek savādāk, papētīju shēmas, bet ne tur tā lieta....
Programmēju ar MicrCode Studio kuram klāt nāk PICbasic Pro
Doma tāda ka nospiežot pogu vienreiz , ierubijas pirmais tiristors, tad nospiežot otreiz , otrais, u.t.t. līdz pēdējo reizi nospiežot, cikls sākas no sākuma . Bet kad pietur tad automātiski pārslēdzas uz riņķi.

uzrakstīju šādu progu , bet strādā nestabili, tjip spaidot pogu reizēm ierubijas pirmais,tad trešais, tad otrais,  bet reizēm var spaidot noķert brīdi, kad strādā normāli. pieturot viss strādā kā vajag. Lasīju šeit forumos ka iespējams nospiežot pogu, tur kontakti noraustas vairākas reizes, tāpēc gļučī, tas varētu būt loģisks izskaidrojums, jo itkā progā neredzu kļūdas, vienīgais tikkai varbūt kāda nepilnība. 

Varbūt kāds var paskaidrot un palabot kodu, zinu ka šeit ir zinoši cilvēki, tikkai sorry ka BASIC,  asemblerī un C++ vispār esmu cirvis, un vairs nav tas vecums lai apgūtu pilnībā  :: 



```
s           var  word
switch      var  PORTA.3
TRISA = $ff
TRISC = 0
PORTC = 0

home:
s=0
for s = 0 to 4
if switch = 0 and s=0 then GOSUB pirmaa
if switch = 0 and s=1 then GOSUB otraa
if switch = 0 and s=2 then GOSUB treshaa
if switch = 0 and s=3 then GOSUB ceturtaa
if switch = 0 and s=4 then GOto home
next s
GOto home

pirmaa:
low portc.3
high portc.0
pause 500
return

otraa:
low portc.0
high portc.1
pause 500
return

treshaa:
low portc.1
high portc.2
pause 500
return

ceturtaa:
low portc.2
high portc.3
pause 500
return
```

----------


## kaspich

1. nesapratu par tiristoriem. nahrena tiristori?? s kakovo perepugu?  :: 
2. par pogu konttakta 'drebeeshanu'  - n reizes runaats, pilns internets. google.lv

globaali - ja nav tas vecums, kad esi gatavs ko nopietni maaciities = met pie malas sho gibloje delo  ::

----------


## RaimixLv

> 1. nesapratu par tiristoriem. nahrena tiristori?? s kakovo perepugu? 
> 2. par pogu konttakta 'drebeeshanu'  - n reizes runaats, pilns internets. google.lv
> 
> globaali - ja nav tas vecums, kad esi gatavs ko nopietni maaciities = met pie malas sho gibloje delo


 
Nu doma tur piemest diezgan lielu slodzi, piemēram elektromotoru vai ko citu kas ir uz 220 V
par kontaktu drebēšannu iekš C++ piemēru daudz, bet Beisikā neatradu pat googlī  ::  laikam nemāku meklēt  :: 
enivej gribētos dzirdēt kādu gudru domu, vai nelielu piemēru iekš BASIC.
'
par "met pie malas" , nepiekrītu  ::   interesanti paeksperimentēt ar kaut ko jaunu  :: 


P.s. Šis tač nav FORUMS tikkai Profiem un Vafeļģīmjiem, parastais baltais cilvēks arī takš var kaut ko uzjautāt, un nav jau tā ka neko nejēdzu  ::

----------


## next

Beisiklietotaaju jau mcu lietaas pamaz.
Taalab gudraak buutu kompileeshanas rezultaatu te izlikt.
ASMu (ja vinjsh taadu taisa, ja nee tad HEXu disasemblerim iebarot) ieposteet.

----------


## kaspich

es ceru, ka tiem tiristoriem/sismistoriem optiskaa atsaiste ir? [sore par jautaajumu]

ok, es atvainojos, bet kaapeec vajadziigs basic kods tik tupai funkcijai? ja ir apzinaata/izlasiita ideja, nepietiek ar to?
td kaadaa liimenii Tu zini to BASIC, vai vispaar domaa? piedod, bet izklausaas peec paliigskolas..

sore, 3 dienas domaaju [tupaakais variants]:

poga_off
  if poga=off, then goto poga_off
  else call delay_100mS

  poga_st=poga_st+1
  goto poga_off 

nez, sanaaca BASIC?  ::

----------


## RaimixLv

> Beisiklietotaaju jau mcu lietaas pamaz.
> Taalab gudraak buutu kompileeshanas rezultaatu te izlikt.
> ASMu (ja vinjsh taadu taisa, ja nee tad HEXu disasemblerim iebarot) ieposteet.


 Nu ja rezultātu tad :
ASM fails.



```
; PICBASIC PRO(TM) Compiler 2.50a, (c) 1998, 2007 microEngineering Labs, Inc. All Rights Reserved.  
_USED			EQU	1

	INCLUDE	"C:\PBP\16F690.INC"


; Define statements.
#define		CODE_SIZE		 4
#define		CCP1_REG		 PORTC
#define		CCP1_BIT		 5
#define		ADC_SAMPLEUS		 50

RAM_START       		EQU	00020h
RAM_END         		EQU	0016Fh
RAM_BANKS       		EQU	00003h
BANK0_START     		EQU	00020h
BANK0_END       		EQU	0007Fh
BANK1_START     		EQU	000A0h
BANK1_END       		EQU	000EFh
BANK2_START     		EQU	00120h
BANK2_END       		EQU	0016Fh
EEPROM_START    		EQU	02100h
EEPROM_END      		EQU	021FFh

R0              		EQU	RAM_START + 000h
R1              		EQU	RAM_START + 002h
R2              		EQU	RAM_START + 004h
R3              		EQU	RAM_START + 006h
R4              		EQU	RAM_START + 008h
R5              		EQU	RAM_START + 00Ah
R6              		EQU	RAM_START + 00Ch
R7              		EQU	RAM_START + 00Eh
R8              		EQU	RAM_START + 010h
FLAGS           		EQU	RAM_START + 012h
GOP             		EQU	RAM_START + 013h
RM1             		EQU	RAM_START + 014h
RM2             		EQU	RAM_START + 015h
RR1             		EQU	RAM_START + 016h
RR2             		EQU	RAM_START + 017h
_s               		EQU	RAM_START + 018h
T1              		EQU	RAM_START + 01Ah
T2              		EQU	RAM_START + 01Ch
_PORTL           		EQU	 PORTA
_PORTH           		EQU	 PORTC
_TRISL           		EQU	 TRISA
_TRISH           		EQU	 TRISC
#define _switch          	_PORTA??3
#define _PORTA??3        	 PORTA, 003h
#define _PORTC??3        	 PORTC, 003h
#define _PORTC??0        	 PORTC, 000h
#define _PORTC??1        	 PORTC, 001h
#define _PORTC??2        	 PORTC, 002h
	INCLUDE	"MULTISEEDZIS.MAC"
	INCLUDE	"C:\PBP\PBPPIC14.LIB"

	MOVE?CB	0FFh, TRISA
	MOVE?CB	000h, TRISC
	MOVE?CB	000h, PORTC

	LABEL?L	_home	
	MOVE?CW	000h, _s
	MOVE?CW	000h, _s
	LABEL?L	L00001	
	CMPGT?WCL	_s, 004h, L00002
	CMPEQ?TCB	_switch, 000h, T1
	CMPEQ?WCB	_s, 000h, T2
	LAND?BBW	T1, T2, T2
	CMPF?WL	T2, L00003
	GOSUB?L	_pirmaa
	LABEL?L	L00003	
	CMPEQ?TCB	_switch, 000h, T1
	CMPEQ?WCB	_s, 001h, T2
	LAND?BBW	T1, T2, T2
	CMPF?WL	T2, L00005
	GOSUB?L	_otraa
	LABEL?L	L00005	
	CMPEQ?TCB	_switch, 000h, T1
	CMPEQ?WCB	_s, 002h, T2
	LAND?BBW	T1, T2, T2
	CMPF?WL	T2, L00007
	GOSUB?L	_treshaa
	LABEL?L	L00007	
	CMPEQ?TCB	_switch, 000h, T1
	CMPEQ?WCB	_s, 003h, T2
	LAND?BBW	T1, T2, T2
	CMPF?WL	T2, L00009
	GOSUB?L	_ceturtaa
	LABEL?L	L00009	
	CMPEQ?TCB	_switch, 000h, T1
	CMPEQ?WCB	_s, 004h, T2
	LAND?BBW	T1, T2, T2
	CMPF?WL	T2, L00011
	GOTO?L	_home
	LABEL?L	L00011	
	NEXT?WCL	_s, 001h, L00001
	LABEL?L	L00002	
	GOTO?L	_home

	LABEL?L	_pirmaa	
	LOW?T	_PORTC??3
	HIGH?T	_PORTC??0
	PAUSE?C	001F4h
	RETURN?	

	LABEL?L	_otraa	
	LOW?T	_PORTC??0
	HIGH?T	_PORTC??1
	PAUSE?C	001F4h
	RETURN?	

	LABEL?L	_treshaa	
	LOW?T	_PORTC??1
	HIGH?T	_PORTC??2
	PAUSE?C	001F4h
	RETURN?	

	LABEL?L	_ceturtaa	
	LOW?T	_PORTC??2
	HIGH?T	_PORTC??3
	PAUSE?C	001F4h
	RETURN?	

	END
```

 
Paldies par sapratni, bet šis kods man ir tumša bilde  ::

----------


## kaspich

redz, programmas autor, ja ieluukosies, pamaniisi n reizes atkaartojoshamies kodu. iedomaajie,s ka Tev buutu 100 tiristori jaavada.. ko tad?
taapec - skati taadu lietu kaa CIKLS.
ciklaa vajag apstraadaat gan pogas staavokli, gan citaa ciklaa - tiristoru vadiibu.
programma buus 10X iisaaka, logjiskkaaka, atliks laiks [ja/kad vajadzees] citaam darbiibaam paraleeli.

----------


## kaspich

p.s. es atvainojos.
tiristori neiet kopaa ar solju mototirem.
tiristori neiet kopaa ar AC slodzes komuteeshanu..
AC slodzes komuteeshana neiet kopaa ar 'caur tranjiem salodeeju..'
izklausaas auzaas..

----------


## RaimixLv

> es ceru, ka tiem tiristoriem/sismistoriem optiskaa atsaiste ir? [sore par jautaajumu]
> 
> ok, es atvainojos, bet kaapeec vajadziigs basic kods tik tupai funkcijai? ja ir apzinaata/izlasiita ideja, nepietiek ar to?
> td kaadaa liimenii Tu zini to BASIC, vai vispaar domaa? piedod, bet izklausaas peec paliigskolas..
> 
> sore, 3 dienas domaaju [tupaakais variants]:
> 
> poga_off
>   if poga=off, then goto poga_off
> ...


 A Kāda starpība, ir tā optiskā atsaiste vai nav????  galvenais ir doma kā tam jāstrādā, un vispār, nevajag uzreiz braukt virsū par līmeni kādā es zinu beisiku, tas tak ir skaidrs no uzdotā jautājuma, ka ....... Kādreiz skolas laikos .... Utt. 
Paldies par tupāko variantu ...........  ::  pieņēmu to kā joku, man arī ir humora izjūta  :: 

NU no tā tava beisika piemēra sapratu ka pats esi baigais gudrītis un neko citiem iemācīt nevari, tikkai tupi paņirgāties par tiem kam nav tik daudz zināšanu  ::  

p.s. sory par atbildi  ::  tās tik manas domas.

----------


## kaspich

nu, visu cienju par Tavu drosmiigo veerteejumu.
par optisko atsaiti - nuu, piesleedz klaat pie 230, nograabsties ar rokaam, un tad sapratisi, kaapeec vajag optisko atsaiti. un, nevis man vajag, bet Tev, mans jaunais draugs.

par to basic piemeeru - piedod, es skolaa basic apguvu pirms 20 gadiem, un mcu programmeeju asm. bet, ja Tev galva straadaa, domaaju, ljoti viegli vari saskatiit ideju/risinaajumu. saskati, jeb nee?

----------


## RaimixLv

> p.s. es atvainojos.
> tiristori neiet kopaa ar solju mototirem.
> tiristori neiet kopaa ar AC slodzes komuteeshanu..
> AC slodzes komuteeshana neiet kopaa ar 'caur tranjiem salodeeju..'
> izklausaas auzaas..


 Pagaidām es esmu salodējis tiristorus, un domāju uztaisīt vienkāršu Releju vadību no tās PIC mikrenes, kā jau teicu ka vēlāk varbūt arī uztaisīšu soļu motoru vadību, ja protams sanāks, zinu ka tur ir pavisam kas cits, pielodēšu uln2803 un pierubīšu soļu motoru, nekas sarežģīts, tikkai savādāk jāsaprogrammē. Jau 22 gadus nodarbojos ar radiotehniku, zinu kas ir kas  ::  , AC slodzei vajag simistorus... (vai kā tur viņus zinātniski sauca) , un tas nav tas galvenais, kā jau teicu ka viss strādā, ir tikkai problēma ka NESTABILI ...... !!!!    Un nevajag piesieties par krutajiem radiotehnikas sīkumiem, man visas shēmas ir galvā  ::  , kā salodēju tā strādā, ļoti rei kad kaut kas nodeg, mācos no pieredzes  ::

----------


## kaspich

oi.


ar tiristoriem tachu relejus nevar vadiit  :: 

kaa pirmo reizi ieslegsies, taa aaraa nesleegsies  :: 

iemet sheemu, apsolos buut draudzigs un vnk pastaastiit, kas jaadeletee  :: 

par nestabilitaati - blin, tak par kodu priekshaa uzrakstiiju...jtm...

----------


## RaimixLv

> nu, visu cienju par Tavu drosmiigo veerteejumu.
> par optisko atsaiti - nuu, piesleedz klaat pie 230, nograabsties ar rokaam, un tad sapratisi, kaapeec vajag optisko atsaiti. un, nevis man vajag, bet Tev, mans jaunais draugs.
> 
> par to basic piemeeru - piedod, es skolaa basic apguvu pirms 20 gadiem, un mcu programmeeju asm. bet, ja Tev galva straadaa, domaaju, ljoti viegli vari saskatiit ideju/risinaajumu. saskati, jeb nee?


 Paldies, ideju protams sapratu  :: 

Un pagaidām netaisos pie tā visa rubīt 230  ::  , pagaidām tikkai eksperimenti, kad tas viss strādās, domāšu par drošību  :: 

Njā , jauniņos te diezko neciena. tas ka esmu biku netik advancēts, nenozīmē ka vakar iegādājos lodāmuri ar instrukciju kā to lietot  ::

----------


## Slowmo

Es gan beisikā PICus programmējis neesmu, bet nu, ja pareizi saprotu programmas kodu, tad ir konceptuāla problēma, kas pat nav saistīta ar kontaktu "drebēšanu"
Fonā skaita cikls no 0 līdz 4 (arī tad, ja nav nospiesta poga). Kad nospied pogu, tad izpildās tā rindiņa, kur uz to brīdi aizskaitījis mainīgais "s".

----------


## kaspich

> Es gan beisikā PICus programmējis neesmu, bet nu, ja pareizi saprotu programmas kodu, tad ir konceptuāla problēma, kas pat nav saistīta ar kontaktu "drebēšanu"
> Fonā skaita cikls no 0 līdz 4 (arī tad, ja nav nospiesta poga). Kad nospied pogu, tad izpildās tā rindiņa, kur uz to brīdi aizskaitījis mainīgais "s".


 man slinkums shajaa mega kodaa ieglubinaties, bet vai tad vinjsh  ar to cmp vnk netup holdaa, kameer nav nomainiijies in porta staavoklis? vismaz taa vajadzeetu buut..

vnk, te jau atkal - kods ta (*^^%)*)_*%$*

----------


## kaspich

> nu, visu cienju par Tavu drosmiigo veerteejumu.
> par optisko atsaiti - nuu, piesleedz klaat pie 230, nograabsties ar rokaam, un tad sapratisi, kaapeec vajag optisko atsaiti. un, nevis man vajag, bet Tev, mans jaunais draugs.
> 
> par to basic piemeeru - piedod, es skolaa basic apguvu pirms 20 gadiem, un mcu programmeeju asm. bet, ja Tev galva straadaa, domaaju, ljoti viegli vari saskatiit ideju/risinaajumu. saskati, jeb nee?
> 
> 
>  Paldies, ideju protams sapratu 
> 
> Un pagaidām netaisos pie tā visa rubīt 230  , pagaidām tikkai eksperimenti, kad tas viss strādās, domāšu par drošību 
> ...


 

nu, bet.. tiristors neder ne releju, ne motoru, ne spuldzishu.. nekaa vadiibai taa, kaa esi iedomaajies  ::

----------


## Epis

labāk sāc mācītes C valodu, vispār C idejiski līdzīgs basic, tikai ir papild iekavas un ( ::  citi  simboli, un kods izskatās sakārtotāks, strukturētāks, un vieglāk saprotams, pāris dienās pirekš tik maza koda varētu pārorjentēties  :: 
 pic ASM gan neiesaku sākt mācītes, jo tur ir grūti ko saprast, bet citiem čipiem gan asm ir viegls, kā AVR.

ja kodētu C tad varētu kādu koda gabalu iemest (domātu priekš citas firmas čipa).

----------


## RaimixLv

> Es gan beisikā PICus programmējis neesmu, bet nu, ja pareizi saprotu programmas kodu, tad ir konceptuāla problēma, kas pat nav saistīta ar kontaktu "drebēšanu"
> Fonā skaita cikls no 0 līdz 4 (arī tad, ja nav nospiesta poga). Kad nospied pogu, tad izpildās tā rindiņa, kur uz to brīdi aizskaitījis mainīgais "s".


 Paldies, toč , šito nebiju iedomājies, pamēģināšu palabot kodu  ::

----------


## kaspich

jaa, interesanti..
ir, kas ASM uzskata par visefektiivaako [nu, ir jau arii] un vienkaarshaako [dzelzhu vadiibai] vidi, un nespeej pienjemt augsta liimenja valodas [vot es vnk nepaarvaaru cpp, c# abstrakcijas], ir, kam ir tieshi otraadi..

----------


## RaimixLv

> labāk sāc mācītes C valodu, vispār C idejiski līdzīgs basic, tikai ir papild iekavas un ( citi  simboli, un kods izskatās sakārtotāks, strukturētāks, un vieglāk saprotams, pāris dienās pirekš tik maza koda varētu pārorjentēties 
>  pic ASM gan neiesaku sākt mācītes, jo tur ir grūti ko saprast, bet citiem čipiem gan asm ir viegls, kā AVR.
> 
> ja kodētu C tad varētu kādu koda gabalu iemest (domātu priekš citas firmas čipa).


 Paldies par ieteikumiem, laikam nāksies pamācīties C .

----------


## Slowmo

[quote="kaspich"
man slinkums shajaa mega kodaa ieglubinaties, bet vai tad vinjsh  ar to cmp vnk netup holdaa, kameer nav nomainiijies in porta staavoklis? vismaz taa vajadzeetu buut..

vnk, te jau atkal - kods ta (*^^%)*)_*%$*[/quote]

Nu tas, ko es redzu ir, ka izpildās cikls no 0 līdz 4, un kad tas izpildījies, viss atsākas no sākuma. Ja nav nospiesta poga, neizpildās neviens no if, bet, kad nospiež pogu, kur nu tajā brīdī būs cikls aizskaitījis, tas ifs arī izpildīsies.

----------


## RaimixLv

> nu, visu cienju par Tavu drosmiigo veerteejumu.
> par optisko atsaiti - nuu, piesleedz klaat pie 230, nograabsties ar rokaam, un tad sapratisi, kaapeec vajag optisko atsaiti. un, nevis man vajag, bet Tev, mans jaunais draugs.
> 
> par to basic piemeeru - piedod, es skolaa basic apguvu pirms 20 gadiem, un mcu programmeeju asm. bet, ja Tev galva straadaa, domaaju, ljoti viegli vari saskatiit ideju/risinaajumu. saskati, jeb nee?
> 
> 
>  Paldies, ideju protams sapratu 
> 
> Un pagaidām netaisos pie tā visa rubīt 230  , pagaidām tikkai eksperimenti, kad tas viss strādās, domāšu par drošību 
> ...


 te tu maldies, ar tiristoru var vadīt gandrīz jebko kam nav vajadzīga pilns sīnuss, tobiš lampiņas, relejus, u.t.t.  Ja grib trafu kā slodzi piedabūt, tad vajadzīgs simistors  ::

----------


## kaspich

[quote=Slowmo]


> Nu tas, ko es redzu ir, ka izpildās cikls no 0 līdz 4, un kad tas izpildījies, viss atsākas no sākuma. Ja nav nospiesta poga, neizpildās neviens no if, bet, kad nospiež pogu, kur nu tajā brīdī būs cikls aizskaitījis, tas ifs arī izpildīsies.


 
nu jaa, tagad redzu pat es [peec basic arii taa ir]  :: 
nu, sanaak gadiijumskaitlju gjenrators [no 1liidz 4] ar drebezga paziimeem [pgas nospieshanas/atlaishanas briidii gan jau paspeej nomirgot visi, kaut kaut kaads delay tur vinam uzlikts, nez kaapeec..]

p.s. par tiristoriem - ok, vadi lampinjas, kas mirgos ar 50hz, vadi relejus, kas blarkskjees.. nafiga tas jaadara?????

----------


## kaspich

p.s. trafu kaa slodzi.. nu, nu. ja/kad meegjinaasi kaadu toru taa vnk caur simistoru piesleegt, padod zinju  ::

----------


## RaimixLv

> p.s. trafu kaa slodzi.. nu, nu. ja/kad meegjinaasi kaadu toru taa vnk caur simistoru piesleegt, padod zinju


 Da labi austrumu gudrais, ne tur tā ideja, tu jau pašā sākumā šim jautājumam piekasījies no nepareizās puses, te par elektroniku nebija sakars....

ONLY par programmēšanu ! . 

Bet labi,  jo daudz ko esmu būvējis uz tiristoriem, u.t.t, protams pa tiešo pierubījot nekas nebūs, vajag tomēr padomāt par taisngriežiem, tobiš diodēm, u.t.t., es pagaidām ar maiņstrāvu neeksperimentēju, bet gan ar PIC vadību !!

Ja man vajadzētu tad arī uzlodētu shēmu kas vadītu trafus kā slodzi  ::  un nesaskatu tur neko sarežģītu, kaut gan neesmu kaut kāds tur RTU izlaidenis  ::  tikkai vienkāršs radiotehniķis no laukiem  ::

----------


## kaspich

oi. uztaisi to vienkaarsho trafa vadiibu, i tad runaa.  :: 
par sho teemu - knjigu chital  :: 

nu, savu PIC programmu izlaboji?  ::

----------


## RaimixLv

> oi. uztaisi to vienkaarsho trafa vadiibu, i tad runaa. 
> par sho teemu - knjigu chital 
> 
> nu, savu PIC programmu izlaboji?


 Nē, pagaidām ciemos pie Nellijām un svinam vārdasvētkus kā arī plēsējdzīvnieksvētkus , un neesmu mājās pie programmera, lai eksperimentētu, bet tas jau netraucē diskutēt  ::

----------


## RaimixLv

> oi. uztaisi to vienkaarsho trafa vadiibu, i tad runaa. 
> par sho teemu - knjigu chital 
> 
> nu, savu PIC programmu izlaboji?


 
Tad nu tā, kodu izlaboju un strādā perfekti  ::   Paldies par kritiku un palīdzību  :: 

gala rezultāts:


```
s           var  word
switch      var  PORTA.3
TRISA = $ff
TRISC = 0
PORTC = 0

home:
s=0
while 1
    if switch = 0 then
        Pause 10
        if switch = 0 then
            select case s
                case 0:
                       s = 1
                        GOSUB pirmaa
                case 1:
                       s = 2
                        GOSUB otraa             
                case 2:
                       s = 3
                        GOSUB treshaa                
                case 3:
                       s = 0
                        GOSUB ceturtaa              
            end select
        endif
    endif
WEND

pirmaa:
low portc.3
high portc.0
pause 500
return

otraa:
low portc.0
high portc.1
pause 500
return

treshaa:
low portc.1
high portc.2
pause 500
return

ceturtaa:
low portc.2
high portc.3
pause 500
return
```

 ASM:



```
; PICBASIC PRO(TM) Compiler 2.50a, (c) 1998, 2007 microEngineering Labs, Inc. All Rights Reserved.  
_USED			EQU	1

	INCLUDE	"C:\PBP\16F690.INC"


; Define statements.
#define		CODE_SIZE		 4
#define		CCP1_REG		 PORTC
#define		CCP1_BIT		 5

RAM_START       		EQU	00020h
RAM_END         		EQU	0016Fh
RAM_BANKS       		EQU	00003h
BANK0_START     		EQU	00020h
BANK0_END       		EQU	0007Fh
BANK1_START     		EQU	000A0h
BANK1_END       		EQU	000EFh
BANK2_START     		EQU	00120h
BANK2_END       		EQU	0016Fh
EEPROM_START    		EQU	02100h
EEPROM_END      		EQU	021FFh

R0              		EQU	RAM_START + 000h
R1              		EQU	RAM_START + 002h
R2              		EQU	RAM_START + 004h
R3              		EQU	RAM_START + 006h
R4              		EQU	RAM_START + 008h
R5              		EQU	RAM_START + 00Ah
R6              		EQU	RAM_START + 00Ch
R7              		EQU	RAM_START + 00Eh
R8              		EQU	RAM_START + 010h
FLAGS           		EQU	RAM_START + 012h
GOP             		EQU	RAM_START + 013h
RM1             		EQU	RAM_START + 014h
RM2             		EQU	RAM_START + 015h
RR1             		EQU	RAM_START + 016h
RR2             		EQU	RAM_START + 017h
_s               		EQU	RAM_START + 018h
_PORTL           		EQU	 PORTA
_PORTH           		EQU	 PORTC
_TRISL           		EQU	 TRISA
_TRISH           		EQU	 TRISC
#define _switch          	_PORTA??3
#define _PORTA??3        	 PORTA, 003h
#define _PORTC??3        	 PORTC, 003h
#define _PORTC??0        	 PORTC, 000h
#define _PORTC??1        	 PORTC, 001h
#define _PORTC??2        	 PORTC, 002h
	INCLUDE	"MULTISEEDZIS.MAC"
	INCLUDE	"C:\PBP\PBPPIC14.LIB"

	MOVE?CB	0FFh, TRISA
	MOVE?CB	000h, TRISC
	MOVE?CB	000h, PORTC

	LABEL?L	_home	
	MOVE?CW	000h, _s
	LABEL?L	L00001	
	CMPF?CL	001h, L00002
	CMPNE?TCL	_switch, 000h, L00003
	PAUSE?C	00Ah
	CMPNE?TCL	_switch, 000h, L00005
	CMPNE?WCL	_s, 000h, L00009
	MOVE?CW	001h, _s
	GOSUB?L	_pirmaa
	GOTO?L	L00008
	LABEL?L	L00009	
	CMPNE?WCL	_s, 001h, L00010
	MOVE?CW	002h, _s
	GOSUB?L	_otraa
	GOTO?L	L00008
	LABEL?L	L00010	
	CMPNE?WCL	_s, 002h, L00011
	MOVE?CW	003h, _s
	GOSUB?L	_treshaa
	GOTO?L	L00008
	LABEL?L	L00011	
	CMPNE?WCL	_s, 003h, L00012
	MOVE?CW	000h, _s
	GOSUB?L	_ceturtaa
	LABEL?L	L00012	
	LABEL?L	L00008	
	LABEL?L	L00005	
	LABEL?L	L00003	
	GOTO?L	L00001
	LABEL?L	L00002	

	LABEL?L	_pirmaa	
	LOW?T	_PORTC??3
	HIGH?T	_PORTC??0
	PAUSE?C	001F4h
	RETURN?	

	LABEL?L	_otraa	
	LOW?T	_PORTC??0
	HIGH?T	_PORTC??1
	PAUSE?C	001F4h
	RETURN?	

	LABEL?L	_treshaa	
	LOW?T	_PORTC??1
	HIGH?T	_PORTC??2
	PAUSE?C	001F4h
	RETURN?	

	LABEL?L	_ceturtaa	
	LOW?T	_PORTC??2
	HIGH?T	_PORTC??3
	PAUSE?C	001F4h
	RETURN?	

	END
```

----------


## Slowmo

Nu jau labāk, tik man liekas, ka viens no "if switch = 0 then" un "pause 10" nav vajadzīgi, jo tev katrā cikla iterācijā tāpat ir nodrošināta 500ms aizture.
Lai drusku nooptimizētu, izmet ārā otro "if switch = 0", bet "pause 10" vietā ieliec "pause 500". Tad pause varētu izņemt ārā no visām funkcijām, jo aizture notiktu pirms funkcijas izsaukšanas nevis katrā funkcijā atsevišķi.

Protams, arī atsevišķās funkcijas varētu novienkāršot līdz vienai funkcijai, bet lai nu paliek.

----------


## sharps

> labāk sāc mācītes C valodu, vispār C idejiski līdzīgs basic, tikai ir papild iekavas un ( citi  simboli, un kods izskatās sakārtotāks, strukturētāks, un vieglāk saprotams, pāris dienās pirekš tik maza koda varētu pārorjentēties 
>  pic ASM gan neiesaku sākt mācītes, jo tur ir grūti ko saprast, bet citiem čipiem gan asm ir viegls, kā AVR.
> 
> ja kodētu C tad varētu kādu koda gabalu iemest (domātu priekš citas firmas čipa).
> 
> 
>  Paldies par ieteikumiem, laikam nāksies pamācīties C .


 
iesaku labaak saakumaa panjemt pasha PICa datasheetu un pamaaciities ASM komandas. taa tu vismaz apguusi pasha dzelzha darbiibu. savaa laikaa universitaatee pat njeemaam ASM kodu uz papiira kompileejaam un taisijaam hex kodu. saakumaa studentinji buudami nesaprataam tam visam jeegu. tagad jau tik saproti ka tas deva iespeeju apguut diezgan labaa liimenii zemaa liimenja programmeeshanu.

----------


## Slowmo

> ir, kas ASM uzskata par visefektiivaako [nu, ir jau arii] un vienkaarshaako [dzelzhu vadiibai] vidi, un nespeej pienjemt augsta liimenja valodas [vot es vnk nepaarvaaru cpp, c# abstrakcijas], ir, kam ir tieshi otraadi..


 Programmējot autsta līmeņa valodā, mani īpaši nesatrauc, kas tur apakšā notiek, jo vairumā gadījumu jau izpildes laiks nav kritisks, savukārt, programmējot mikrokontrolierus, man iestājas paranoja un vienkārši nespēju pieņemt nevienu lieku instrukciju  ::  Bet, kas attiecas uz augsta līmeņa valodām, visu izšķir, cik efektīvi kompilators veic optimizācijas. Var gadīties, ka augsta līmeņa abstrakcija nokompilējas efektīvāk nekā mēģinot pašam to realizēt pa tiešo zemā līmenī. Par izstrādes laiku nemaz nerunāsim. Ikdienā strādāju ar iekārtām, kur firmware aizņem 3-4 megabaitus (resursu failu tur iekšā nav). Cik tas ir instrukciju? :O

----------


## kaspich

pag, skjiet, ka mees par dazhaadaam lietaam rnaajam..
es runaaju par kontrolieriem, kas peec buutiibas [manaa izpratnee] parasti ir aareeju procesu/dzelzhu vadibai. biezhi [logjiski] straadaa reaalajaa laikaa.
vismaz mana pieredze ir tieshi preteeja - reaalaa laika sisteemas, kur izpildes laiks ir absoluuta rpioritaate.
kur tad Tev kontrolieros MB ar asoftu? ok, vadiibas prochos - protams, cita lieta, nevisn muusdienaas user interfeisus, menu, aplikaacijas netaisiis asm.

es gan iebildiishu - lai kompilators nooptimizetu kodu labaak par pasha rakstiitu asm - dziit ar koku taadu 'programmeetaaju' [to, aks asm aakstiijaas]. tas ir vnk nejeega. peec definiicijas.

----------


## JDat

Būs laiks, parunāšu par BASIC uz PICiem...
Ir man sava pieredze... bet ar GCBASIC nevis PICbasic Pro

----------


## Slowmo

Par tām pašām vien runājam. Tiklīdz tiek rakstits augsta līmeņa valodā, daļēji pazūd kontrole pār to, kas uz mikrokontroliera izpildās. Protams, ka tas, kurš nevar uzrakstīt kodu ASMā, kurš strādātu ātrāk par no augsta līmeņa kompilēto, nevar tikt uzskatīts par labu programmētāju, un vairumā gadījumu ASM rakstīti koda gabali būs ātrāki par kompilētajiem, bet var būt arī izņēmumi, kur kompilators nooptimizē kodu, izmantojot matemātiskas viltības, kuras ASMā nemaz tik acīmredzamas nav.

Bet megabaitīgie softi man nāk automātiskās produktu maķēšanas iekārtās. Tur kļūdu aprakstā vien ap 2000 dažādu kļūdu kodu, kas vien jau liecina, cik daudz tur visa kā (database manager, task manager, system manager, bus manager un vēl kādi 30 moduļi). Pat skriptu interpretators tur iebūvēts. Ko tādu plikā ASMā gandrīz nereāli paveikt.
Nelielas programmiņas, kurām vēl piedevām reālā laikā jāstrādā, gan ērtāk rakstīt ASMā, tas nu tiesa.

----------


## kaspich

nu, taisniibu jau vien saki.
papildinot - ne velti visos basic/c kompilatoros var bliezt iekshaa asm fragmentus.
tb, kur vajag realtime -asm, pie apjoma - c.
manaa izpratnee, basic prastaakas lietaas [nosaciijumi, cikli] nav nekas ljauns [ja nu tieshaam nav jaaprovee 1 komanda ieekonomeet paarbaudot statusa bitu]arii dzelzhu vadiibaa [kods prognozeejams].
savukaart, ja jaavada dzelzhi [jaasimulee pwm, augsta bitrate porti] - hvz, kaa to c var izpildiit.
cita fignja, ka pedeejaa laikaa daudzas lietas - pwm, spi, i2c, pat usb u.c. navaroti ir kljuvushi par iebuuveetu ikdienu..

----------


## JDat

Mans necilais viedoklis par MCU kopumā:
Pirmkārt jebkuram MCU programmētājam vajadzētu zināt attiecīgā MCU asm valodu.
Pēc tam jāzina augsta līmeņa valoda. Protams ka vislabāk zināt C priekš MCU.
Un tikai treškārt, var čakarēties ar pārējām lietām, beisiki uc muļķības.

----------

