Räkna ner i (Mikro)Basic ?

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Här kommer asm-varianten på koden du skrev:

Kod: Markera allt

;// ADDRESS	OPCODE	ASM
; ----------------------------------------------
$0000	$EF04	F000	GOTO	Korttest_main
$0008	$	Korttest_main:
$0008	$	Korttest_main_main:
$0008	$0E03	MOVLW	3
$000A	$6E15	MOVWF	main_global_vilkenb, 0
$000C	$	Korttest_L_0:
$000C	$6A01	CLRF	STACK_1, 0
$000E	$80D8	BSF	STATUS, C, 0
$0010	$BE15	BTFSC	main_global_vilkenb, 7, 0
$0012	$D002	BRA	Korttest_L_3
$0014	$5015	MOVF	main_global_vilkenb, W, 0
$0016	$5C01	SUBWF	STACK_1, W, 0
$0018	$	Korttest_L_3:
$0018	$E30A	BNC	Korttest_L_2
$001A	$	Korttest_L_1:
$001A	$6A81	CLRF	PORTB, 0
$001C	$0EFF	MOVLW	255
$001E	$2615	ADDWF	main_global_vilkenb, F, 0
$0020	$0EFF	MOVLW	255
$0022	$6E15	MOVWF	main_global_vilkenb, 0
$0024	$0EFF	MOVLW	255
$0026	$B0D8	BTFSC	STATUS, C, 0
$0028	$0F01	ADDLW	1
$002A	$2615	ADDWF	main_global_vilkenb, F, 0
$002C	$D7EF	BRA	Korttest_L_0
$002E	$	Korttest_L_2:
$002E	$	Korttest_L_4:
$002E	$D7FF	BRA	Korttest_L_4
Betydligt med överskådlig. :)
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

OK.
HAr du möjlighet att visa samma sak men med "for vilkenb = 0 to 3 step 1" ?
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jepp, här kommer den koden:

Kod: Markera allt

;// ADDRESS	OPCODE	ASM
; ----------------------------------------------
$0000	$EF04	F000	GOTO	Korttest_main
$0008	$	Korttest_main:
$0008	$	Korttest_main_main:
$0008	$6A15	CLRF	main_global_vilkenb, 0
$000A	$	Korttest_L_0:
$000A	$0E03	MOVLW	3
$000C	$6E01	MOVWF	STACK_1, 0
$000E	$80D8	BSF	STATUS, C, 0
$0010	$BE15	BTFSC	main_global_vilkenb, 7, 0
$0012	$D002	BRA	Korttest_L_3
$0014	$5015	MOVF	main_global_vilkenb, W, 0
$0016	$5C01	SUBWF	STACK_1, W, 0
$0018	$	Korttest_L_3:
$0018	$E303	BNC	Korttest_L_2
$001A	$	Korttest_L_1:
$001A	$6A81	CLRF	PORTB, 0
$001C	$2A15	INCF	main_global_vilkenb, F, 0
$001E	$D7F5	BRA	Korttest_L_0
$0020	$	Korttest_L_2:
$0020	$	Korttest_L_4:
$0020	$D7FF	BRA	Korttest_L_4
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

OK. Dels blev det kortare (speciellt efter "CLRF PORTB" instruktionen), dels så går det att förstå hur det fungerar. Versionen med "step -1" förstår jag inte, och det *ser ut* som om den inte fungerar...

Sedan kan man tycka att, eftersom MikroBasic vet att det är en PIC18 som används, så kunde de använda en CPFxxx ("Compare file with W...") instruktion istället för kombinationen MOVF->SUBWF->BNC. Men antagligen har de samma kodgenerator just här för PIC16 och PIC18...

Hur som helst, koden med "step 1" verkar OK, medans den med "step -1" är lite skum, så vitt jag kan se... Man skulle kunna köra asm koden som ett eget projekt i MPASM (alltså som ett vanligt asm program) och följa koden i SIM-ulatorn (MPSIM). Man får bara lägga till lite definitioner för variablerna...

Jag vet inte om det var till någon hjälp, men det visar i alla fall att det kan vara bra att kunna läsa den ASM kod som kompilatorn genererar, och det gäller inte bara för Basic utan alla högnivåspråk.
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jo, det blev en intressant lektion. ASM är bra att kunna som sagt.
Får se om jag stöter på en lösning på varför det inte fungerar.

Men som sagt, koderna var bara lite test för att se lite hur det fungerade (och inte fungerade) i MikroBasic. När jag ska programmera något så brukar jag dela upp det i flera småtester för att sedan göra det slutgiltiga programmet när jag är nöjd med alla smådelar. Mycket smidigare än att modifiera massa grejjer i ett stort program tills man är nöjd...
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

OK.
Det *jag* skulle göra nu, är att skicka ett mail till Mikroelektronics support och fråga om negativa "step" i for-loopar...
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Det ska jag också göra. :)
Användarvisningsbild
pcmper
EF Sponsor
Inlägg: 1280
Blev medlem: 14 september 2005, 20:00:14
Ort: Malmö

Inlägg av pcmper »

det fungerar utmärkt i proton att skriva negativa loopar se exempel.

Device 16F877
XTAL = 20 ' Set Xtal Frequency

LCD_DTPIN = PORTD.4
LCD_RSPIN = PORTE.0
LCD_ENPIN = PORTE.1
LCD_INTERFACE = 4 ' 4-bit Interface
LCD_LINES = 2
LCD_TYPE = 0
ALL_DIGITAL = TRUE
DelayMS 500


Dim i As Byte


printas:
Print Cls , "hello"
For i = 3 To 0 Step -1
Print At 2,1, Dec i
DelayMS 2000
Next

GoTo printas
End :wink:
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Orättvist :lol:

Har aldrig programmerat i Proton, men koden för FOR-loopen är likadan. Enda skillnaden är att min inte vill fungera.
Ska se vad MikroBasic's support svarar på mitt mail, (om jag nu får det någon gång...) :)
Användarvisningsbild
Lonius
Inlägg: 226
Blev medlem: 10 juli 2005, 01:38:58
Ort: Sollentuna

Inlägg av Lonius »

Mikroelektronikas Mikropascal funkar bätre tycker jag iaf, basicen var knepig. Bara mitt tycke :)
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Inlägg av sodjan »

Så länge som man kör gratisversionerna så är de väll precis lika prisvärda, antar jag... :-)
Skriv svar