Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <io430x16x.h>
- #include <msp430x16x.h>
- rseg code:CODE,2000h
- extern LCDUpdate, LCDStr,LCDChrXY, DelayN, LCDPixmove
- extern LCDUtoLXY, LCDUtoRXY, LCDLabdaXY
- public asmmain
- ////////////////////////////////////////////////
- asmmain:
- ; ide írhatod az asm-programot
- #define LeftValue &ADC12MEM0
- #define RightValue &ADC12MEM1
- #define x R10 //megadjuk x értékét
- #define y R6 //megadjuk y értékét
- #define dx R8 //megadjuk dx értékét
- #define dy R9 //megadjuk dy értékét
- clr.w x //lenullázzuk x értékét
- clr.w y //lenullázzuk y értékét
- mov.w #1,dx //adatmozgatás #1-ből dx-be
- mov.w #1,dy //adatmozgatás #1-ből dy-ba
- Ciklus: //labdamozgatás
- mov.w y,R11 //adatmozgatás
- add.w dy,R11 //R11=dy+R11
- cmp.w #40,R11 //ha nagyobb mint #40 akkor meghívja Cimke001-et
- jge Cimke001
- cmp.w #0,R11 //ha kisebb,mint #0 akkor meghívja Cimke002-t
- jge Cimke002
- Cimke001:
- xor #0xffff,dy //visszapattanás (ha eléri a szélélt megfordul)
- inc dy
- Cimke002:
- add.w dy,y //dy=dy+y
- mov.w x,R11 //adatmozgatás x-ből R11-be
- add.w dx,R11 //adatmozgatás dx-ből R11-be
- cmp.w #77,R11
- jge Cimke003
- cmp.w #0,R11
- jge Cimke004
- Cimke003:
- xor #0xffff,dx
- inc dx
- Cimke004:
- add.w dx,x //dx=dx+x
- mov.b y,R13 //adatmozgatás y-ból R13-ba
- mov.b x,R12 //adatmozgatás x-ből R12-be
- call #LCDLabdaXY
- mov.b x,R12 //adatmozgatás x-ből R12-be
- call #SetupADC12
- mov.w LeftValue,R12
- mov.w #0,R13 //a bal ütő mozgatása
- mov.w #102,R14 //a bal ütő mozgatása
- call #divide //a bal ütő mozgatása
- call #LCDUtoLXY //a bal ütő mozgatása
- call #SetupADC12
- mov.w RightValue,R12
- mov.w #0,R13 //adatmozgatás #0-ból R13-ba
- mov.w #102,R14 //adatmozgatás #20-ból R14-ba
- call #divide
- call #LCDUtoRXY
- call #LCDUpdate
- jmp Ciklus
- ;*********************************************
- ;ADC12 Inicializálás
- SetupADC12 mov #SHT0_8+MSC+ADC12ON,&ADC12CTL0
- ; Turn on ADC12, use int. osc.
- ; extend sampling time so won't
- ; get overflow
- ; Set MSC so conversions triggered
- ; automatically
- mov #SHP+CONSEQ_3,&ADC12CTL1
- ; Use sampling timer, set mode
- mov #BIT3,&ADC12IE ; Enable ADC12IFG.3 for ADC12MEM3
- mov.b #INCH_0,ADC12MCTL0 ; A0 goes to MEM0
- mov.b #INCH_1,ADC12MCTL1 ; A1 goes to MEM1
- mov.b #INCH_2,ADC12MCTL2 ; A2 goes to MEM2
- mov.b #EOS+INCH_3,ADC12MCTL3 ; A3 goes to MEM3, end of sequence
- ;
- clr R5 ; Clear pointer
- ;
- bis #ENC,&ADC12CTL0 ; Enable conversions
- bis #ADC12SC,&ADC12CTL0 ; Start conversions
- // bis #CPUOFF+GIE,SR ; Hold in LPM0, Enable interrupts
- //ki kell várni a konverzió végét
- testIFG bit #BIT0,&ADC12IFG ; konverzió ellenőrzése
- jz testIFG ; nemleges válasz esetén újra tesztelés
- ret ; Need only for debug
- ;
- ;ADC Startup
- StartADC12:
- bis #ADC12SC,&ADC12CTL0 ; konverzió kezdete
- bit #BIT0,&ADC12IFG ; konverzió ellenőrzése
- jz testIFG ; nemleges válasz esetén újra tesztelés
- mov &ADC12MEM0, R5 ; a konverzió eredménye az R5-ös regiszterbe
- ret
- divide:
- mov.w R14, R15
- mov.w R12, R13
- clr.w R14
- mov.w #0x1,R12
- div_LO: rla.w R13
- rlc.w R14
- cmp.w R15, R14
- jnc div_1
- sub.w R15, R14
- div_1: rlc.w R12
- jnc div_LO
- ret
- multiply:
- mov.w R12, &MPY
- mov.w R14, &OP2
- mov.w &RESLO, R12
- mov.w &RESHI, R13
- ret
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement