#参考文献
これを参考にアセンブラで書きました
命令セット一覧
命令セット一覧
global変数
//global変数にする
volatile byte c = 0;
volatile byte d = 0;
main()
//main関数とかに入れる。
asm(
"ldi r16, 0x60 \n"
"sts 0x007C, r16 \n"
"ldi r16, 0xC0 \n"
"sts 0x007A, r16 \n"
"wait_adc: \n"
"lds r17, 0x007A \n"
"sbrc r17, 6 \n"
"rjmp wait_adc \n"
"lds r17,0x0078 \n"
"sts (c), r17 \n"
"lds r17,0x0079 \n"
"sts (d), r17 \n"
);
全文
//変数はグローバルかどうかで挙動がちがう。
volatile byte c = 0;
volatile byte d = 0;
void setup() {
Serial.begin(115200);
//アセンブラ
//ADMUX(address:0x7C)に0を代入
//ADCSRA(address:0x7A)に0を代入
//ADCL(address:0x78)とADCH(address:0x79)にvalueが入っている。
while (1) {
asm(
"ldi r16, 0x60 \n"
"sts 0x007C, r16 \n"
"ldi r16, 0xC0 \n"
"sts 0x007A, r16 \n"
"wait_adc: \n"
"lds r17, 0x007A \n"
"sbrc r17, 6 \n"
"rjmp wait_adc \n"
"lds r17,0x0078 \n"
"sts (c), r17 \n"
"lds r17,0x0079 \n"
"sts (d), r17 \n"
);
//表示
Serial.print(c);
Serial.print(',');
Serial.print(d);
Serial.print('\n');
delay(100);
}
}
void loop() {
}