サンプル1:デジタル出力

ネットワークコネクタ近くに実装されているLED13という赤いLEDを1秒おきに点滅させます。

LED13はPORTBの第7桁です。1を書き込むと点灯、0で消灯になります。

複数本のデジタル出力が1つのアドレスに同居していますのでちょっと面倒な、回りくどい手順ー読んで、書き換えて、書くーが必要です。まあそれでも3ステップなので、ここはその面倒さをあえて感じていただければと思います。

世の中のCPUではこのような操作を1ステップでできる命令が備わっているのが一般的です。(内部ではこれと同じことをやっています。)

                 .list

                 ;---
                 ; A Sample Code of Digital I/O Manipulation
                 ;---

                 	dem_cseg
                 main:
 0000  38 46     	IN	46		; read DDRB
 0002  87 27     	MASK	2, 7		; set 2(output) to digit 7 for LED13
 0004  39 46     	OUT	46		; write DDRB
                 loop:
 0006  38 48     	IN	48		; read PORTB
 0008  87 17     	MASK	1, 7		; set 1(light-on) to digit 7
 0010  39 48     	OUT	48		; write PORTB

 0012  30 10     	LDI.b	10		; 10*0.1s=1s
 0014  64 20     	SYS	sys_pause	; pause

 0016  38 48     	IN	48		; read PORTB
 0018  87 07     	MASK	0, 7		; set 0(light-off) to digit 7
 0020  39 48     	OUT	48		; write PORTB

 0022  30 10     	LDI.b	10		; 10*0.1s=1s
 0024  64 20     	SYS	sys_pause	; pause

 0026  61 22     	JB	loop