Ich möchte gerne mit einem Metga88 einen Touch-Sensor hinter einer Fliese realisieren.
Im Beitrag http://www.mikrocontroller.net/topic/154598#new
ist das auch beschrieben wie das wohl geht.
Aber ich weiss nicht wie man den ASM-Code in ein C-Programm bekommt.
Ich arbeite mit dem Studio-4 von Atmel, WINAVR und GCC.
Wie bau ich das in die main ein ???
Hier der ASM
Code: Alles auswählen
;--------------------------------------------------
Touch:
sbi PortD, Touch1B
sbi PortD, Touch2B
clr XH
clr XL
ldi Temp, 0b01001010
ldi TempH, 0b00000010
ldi Temp3, 0b00100110
out DDRD, TempH
_TouchLoop:
out DDRD, Temp
out DDRD, TempH
out DDRD, Temp3
out DDRD, TempH
adiw XH:XL, 1
cpi XH, $04
breq _TouchEnd1
sbis PinD, Touch1B
movw Di1:Di0, XH:XL
sbis PinD, Touch2B
movw Di3:Di2, XH:XL
rjmp _TouchLoop
_TouchEnd1:
sbi DDRD, Touch1A ;apply GND on touch terminal 1A
cbi PortD, Touch1B ;prepare low level on terminal 1B
sbi DDRD, Touch1B ;apply GND on touch terminal 1B
sbi DDRD, Touch2A ;apply GND on touch terminal 2A
cbi PortD, Touch2B ;prepare low level on terminal 2B
sbi DDRD, Touch2B ;apply GND on touch terminal 2B
sts Touch1L, Di0
sts Touch1H, Di1
sts Touch2L, Di2
sts Touch2H, Di3
sbi Status, _NewTouch
ret
Code: Alles auswählen
.def Di0 =r12
.def Di1 =r13
.def Di2 =r14
.def Di3 =r15
.equ Status =GPIOR0 ;Flag register
.equ _NewTouch =0
.equ Touch1A =2 ;PortD
.equ Touch1B =3
.equ Touch2A =5
.equ Touch2B =6
.equ Touch1L =$0100
.equ Touch1H =$0101
.equ Touch2L =$0102
.equ Touch2H =$0103