Sida 2 av 2
Postat: 22 september 2005, 18:48:17
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.

Postat: 22 september 2005, 22:32:04
av sodjan
OK.
HAr du möjlighet att visa samma sak men med "for vilkenb = 0 to 3 step 1" ?
Postat: 22 september 2005, 23:49:37
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
Postat: 23 september 2005, 00:09:14
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.
Postat: 23 september 2005, 01:34:23
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...
Postat: 23 september 2005, 11:56:25
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...
Postat: 23 september 2005, 20:29:46
av JimmyAndersson
Det ska jag också göra.

Postat: 5 oktober 2005, 19:42:06
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

Postat: 11 oktober 2005, 03:13:16
av JimmyAndersson
Orättvist
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...)

Postat: 23 oktober 2005, 23:13:07
av Lonius
Mikroelektronikas Mikropascal funkar bätre tycker jag iaf, basicen var knepig. Bara mitt tycke

Postat: 23 oktober 2005, 23:42:03
av sodjan
Så länge som man kör gratisversionerna så är de väll precis lika prisvärda, antar jag...
