;******************************************************************************************
;  ＡＶＲサンプル(D/Aコンバータ)
;   Project      :
;   Program Name : 
;   Programer    :
;   Create date  :  Version 1.0    H18.12.01
;   History      :
;******************************************************************************************
;  (1)Description 
;   R16;  General Register
;   R17;  Data Adress
;   R18;  Data Adress
;   R19;  General Register  
;   R20;  Data Index
;******************************************************************************************
.include "2313def.inc"
.cseg
;  1.初期化
	LDI	R16,RAMEND
	OUT	SPL,R16		;
	LDI	R16,0xFF	; PORTB(0-7)を全て出力にする
	OUT	DDRB,R16	; PORTB(0-7)を全て出力にする
	LDI	R16,0x00	; PORTD(0-6)を全て入力にする
	OUT	DDRD,R16	; PORTD(0-6)を全て入力にする
;
	LDI	R16,0x00	; PORTBを初期化
	OUT	PORTB,R16	; PORTBを初期化
	LDI	R16,0x00	; PORTDを初期化(プルアップさせない)
	OUT	PORTD,R16	; PORTDを初期化(プルアップさせない)
;
	LDI	R20,101		;
;
MAIN:
;  2.波形出力
;   (1)データインデックスの設定
	RCALL	CNTIDX
;   (2)波形データを得る
	MOV		R16,R20			; R16 <= R20 - 1
	DEC		R16			; R16 <= R20 - 1
	LDI		R17,low(WEBDAT*2)
	LDI		R18,high(WEBDAT*2)
	ADD		R17,R16
	MOV		ZL,R17
	MOV		ZH,R18
	LPM	
;   (3)波形データを出力する
	LDI		R19,0x33		; R0に1.0Vの下駄をはかせる
	ADD		R19,R0			; R0に1.0Vの下駄をはかせる
	LSR		R19			; 振幅を半分にする(1.96V) 	
	LSR		R19			; 振幅を半分にする(0.98V) 
	OUT		PORTB,R19
;   (4)Waitする
	RCALL	WAT		 
;   (5)ループする
	RJMP	MAIN

;******************************************************************************************
;   Function Name : CNTIDX
;   Title         : データインデックスを減算
;   Input         : 
;   Output        : 
;******************************************************************************************
CNTIDX:
	DEC	R20		;
	BRNE	CNTIDX1		;
	LDI	R20,100		;
	RET			;
CNTIDX1:			;
	RET			;


;******************************************************************************************
;   Function Name : WAT
;   Title         : タイマー関数
;   Input         : 
;   Output        : 
;******************************************************************************************
WAT:
	LDI	R22,2		;
WAT_B:				;
	LDI	R21,110		;
WAT_C:				;
	RJMP	PC+1		;
	RJMP	PC+1		;
	RJMP	PC+1		;
	DEC	R21		;
	BRNE	WAT_C		;
	DEC	R22		;
	BRNE	WAT_B		;

	RET			

;******************************************************************************************
;   Function Name : 
;   Title         : Sin Wave Data (Decimal)
;   Input         : 
;   Output        : 
;******************************************************************************************
WEBDAT:
.db	100,106,113,119,125,131,137,143,148,154		;  0-  9
.db	159,164,168,173,177,181,184,188,190,193		; 10- 19
.db	195,197,198,199,200,200,200,199,198,197		; 20- 29
.db	195,193,190,188,184,181,177,173,168,164		; 30- 39
.db	159,154,148,143,137,131,125,119,112,106		; 40- 49
.db	100, 94, 87, 81, 75, 69, 63, 57, 52, 46		; 50- 59
.db	 41, 36, 31, 27, 23, 19, 15, 12,  9,  7		; 60- 69
.db	  5,  3,  2,  1,  0,  0,  0,  1,  2,  3		; 70- 79
.db	  5,  7, 10, 12, 16, 19, 23, 27, 32, 36		; 80- 89
.db	 41, 47, 52, 58, 63, 69, 75, 81, 88, 94		; 90- 99
.db	100,  0,  0,  0,  0,  0,  0,  0,  0,  0		;100-109 



