' ' ************************************************* ' * * ' * Graphic LCD Oscilloscope Program * ' * * ' * AVR Used is ATmega88 * ' * Basic Compiler is BASCOM-AVR * ' * Copyright By O-Family 2008. 3. 4 * ' ************************************************* ' ' Ver 01.01 初回公開バージョン ' Ver 01.02 BASCOM-AVRの「Version 1.11.9.1」に対応。($lib "GlcdKS108.lbx")と(Cls Graph)命令を変更。 ' Str(ワード型)の取扱が変更になったため、ボリュームのA/D値表示部を変更。 ' Ver 01.03 スイッチのイネーブル信号を、74HC32とPORTC.5を選択できるように変更。 ' ' $regfile = "m88def.dat" $crystal = 20000000 ' Gldtp Alias Portd 'Graphic-LCDのデータポート名 Gldip Alias Pind 'Graphic-LCDのデータポート名(キー入力用) Glcnp Alias Portb 'Graphic-LCDのコントロールポート名 Const Glce1 = 1 'Graphic-LCDの(CS1)を接続するピン番号 Const Glce2 = 0 'Graphic-LCDの(CS2)を接続するピン番号 Const Glccd = 3 'Graphic-LCDの(D/I)(RS)を接続するピン番号 Const Glcrd = 4 'Graphic-LCDの(R/W)を接続するピン番号 Const Glres = 2 'Graphic-LCDの(/RES)(RST)を接続するピン番号 Const Glena = 5 'Graphic-LCDの(E)を接続するピン番号 ' ' Dim Sampbuf(256) As Byte 'サンプリング データ バッファ Dim Glbuf(8) As Byte 'G-LCD Y方向1ライン描画バッファ Dim Bittab(8) As Byte '波形描画のビットパターンテーブル Dim Multab(8) As Byte '波形描画のビットをシフトさせる掛け率テーブル ' Dim Adnum As Byte 'A/D変換のサンプリング・バッファ位置 Dim Gdnum As Byte 'G-LCD X描画位置 Dim Gly As Byte 'G-LCDへデータ転送時のYアドレス Dim Glcun As Byte 'スケール描画用のカウンタ Dim Adsta As Byte 'タイマー割り込み内のA/D変換状態 Dim Timdiv As Byte 'Time/Div値 Dim Slope As Byte 'トリガーを検知する傾斜方向 Dim Level As Byte 'トリガー・レベル Dim Trgmod As Byte 'トリガー・モード Dim Negedg As Byte 'トリガー逆エッジ検出フラグ Dim Timout As Byte 'トリガーAUTO動作時の未検出タイマー Dim Wavchn As Byte '波形表示のチャネル数 Dim Ch2ofs As Byte 'Ch2.オフセット値 ' Dim Keycun As Byte 'キー入力チェック用タイマーカウンター Dim Keyflg As Byte 'キー入力検出フラグ Dim Keydat As Byte 'キー入力データ Dim Keytmp As Byte 'キー入力用テンポラリ ' Dim Temp1 As Byte '汎用テンポラリ変数 Byte型 No.1 Dim Temp2 As Byte '汎用テンポラリ変数 Byte型 No.2 Dim Temp3 As Byte '汎用テンポラリ変数 Byte型 No.3 Dim Temp4 As Byte '汎用テンポラリ変数 Byte型 No.4 Dim Temp5 As Byte '汎用テンポラリ変数 Byte型 No.5 Dim Tempw1 As Word '汎用テンポラリ変数 Word型 No.1 Dim Tempstr As String * 3 '汎用テンポラリ変数 String型 ' ' Config Portc = &B00110000 'PORTCを設定 (PC0-PC3=入力、PC4-PC5=出力) Set Portc.5 'スイッチのイネーブル信号を(H)に設定 ' $lib "GlcdKS108.lbx" 'KS0108チップ用ライブラリの使用を指示 Config Graphlcd = 128 * 64sed , Dataport = Gldtp , Controlport = Glcnp , Ce = Glce1 , Ce2 = Glce2 , Cd = Glccd , Rd = Glcrd , Reset = Glres , Enable = Glena Cls Setfont Oscfont6x8 'フォント・データを定義 ' Restore Gldata '波形描画のビットパターンテーブルをSRAMへ転送 For Temp1 = 1 To 8 Read Temp2 : Bittab(temp1) = Temp2 Next For Temp1 = 1 To 8 '波形描画のビットをシフトさせる掛け率テーブルをSRAMへ転送 Read Temp2 : Multab(temp1) = Temp2 Next ' ' Config Adc = Single , Prescaler = 32 , Reference = Avcc 'A/Dコンバータの設定。 Start Adc 'A/Dコンバータに電源を供給。 ' Config Timer0 = Timer , Prescale = 1024 'Timer0を設定(キー入力用 タイマー) ' Config Timer1 = Timer , Prescale = 1 , Clear Timer = 1 'Timer1を設定(データ サンプリング タイマー) Compare1a = 999 Timdiv = 3 ' On Compare1a Tmiad Nosave 'Timer1の割り込みルーチンを設定 Enable Interrupts 'すべての割り込みを許可 ' Lcdat 4 , 111 , "$%&" '[Slope]文字を表示 Lcdat 7 , 111 , "'()" '[Trg-L]文字を表示 Gosub Tmdset '右列の機能情報を表示 Gosub Glrdsp 'Slope , Auto/Single値の表示 ' ' ******************* ' * メイン ルーチン * ' ******************* ' Main: Adsta = 1 Main4: Temp5 = Adcsra 'A/Dコンバータのプリスケラ値を待避 Adcsra = Temp5 Or &H07 Tempw1 = Getadc(2 , &H20) 'トリガーレベル ボリューム値をA/D変換 Level = High(tempw1) Temp1 = Level / 5 '0〜255値を0〜51に変換 Tempstr = Str(temp1) 'トリガーレベル値をLCDへ表示 Tempstr = Format(tempstr , "0.0") Lcdat 8 , 111 , Tempstr ' Tempw1 = Getadc(3 , &H20) 'Ch2.オフセット ボリューム値をA/D変換 Ch2ofs = High(tempw1) Adcsra = Temp5 'A/Dコンバータのプリスケラを復帰 ' Adnum = 0 '波形描画用の初期値を設定 Gdnum = 0 Glcun = 1 Timout = 128 Negedg = 0 ' Temp1 = Getadc(0 , &H20) 'A/Dコンバータをアナログ入力0を左揃えモードに設定 Enable Compare1a 'サンプリング用 Timaer1 割り込み開始 ' Main1: If Gdnum > 108 Then Goto Main2 'If 波形描画終了? Then Gosub Glwvsub 'Yアドレス1列分の波形を描画 ' Main3: Gosub Keyin 'キー入力チェック If Keyflg = 0 Then Goto Main1 'If キー入力無し? Then Keyflg = 0 If Keydat = &H01 Then Goto Keyon1 'If Key(1) ON? Then If Keydat = &H02 Then Goto Keyon2 'If Key(2) ON? Then If Keydat = &H04 Then Goto Keyon3 'If Key(3) ON? Then If Keydat = &H08 Then Goto Keyon4 'If Key(4) ON? Then If Keydat = &H10 Then Goto Keyon5 'If Key(5) ON? Then If Keydat = &H20 Then Goto Keyon6 'If Key(6) ON? Then Goto Main1 ' Main2: If Trgmod = 1 Then Goto Main3 'If トリガーモード=Single? Then Main5: If Adsta <> 0 Then Goto Main5 'If A/Dサンプリング終了? Else Goto Main ' ' Keyon1: 'Key(1) Time/Divをマイナス If Wavchn = 0 Then Temp1 = 0 Else Temp1 = 2 End If If Timdiv = Temp1 Then Goto Main1 Timdiv = Timdiv - 1 Keyon11: Disable Compare1a 'サンプリング用 Timaer1 割り込み禁止 Gosub Tmdset Goto Main ' Keyon2: 'Key(2) Time/Divをプラス If Timdiv = 11 Then Goto Main1 Timdiv = Timdiv + 1 Goto Keyon11 ' Keyon3: 'Key(3) Slope切換 Toggle Slope.0 Gosub Glrdsp Goto Main1 ' Keyon4: 'Key(4) Readyキー If Trgmod = 0 Then Goto Main1 'If トリガーモード=Auto? Then Disable Compare1a 'サンプリング用 Timaer1 割り込み禁止 Adsta = 2 Lcdat 4 , 38 , " CDEF " , 1 '[Ready]文字を表示 Goto Main4 ' Keyon5: 'Key(5) Auto/Single切換 Disable Compare1a 'サンプリング用 Timaer1 割り込み禁止 Toggle Trgmod.0 Gosub Glrdsp Goto Main ' Keyon6: 'Key(6) 波形表示数を切換 If Wavchn = 1 Then Goto Keyon61 'If 現在2Ch. 表示モード? Then Wavchn = 1 '1Ch. -> 2Ch. へ変更 If Timdiv > 2 Then Timdiv = Timdiv - 1 Else Timdiv = 2 End If Goto Keyon11 ' Keyon61: Wavchn = 0 '2Ch. -> 1Ch. へ変更 If Timdiv <> 11 Then Timdiv = Timdiv + 1 Goto Keyon11 End ' ' ************************* ' * キー入力 サブルーチン * (Keyflg = 1 キー入力有り) ' ************************* (Keydat = キーデータ) ' Keyin: If Tifr0.tov0 = 0 Then Return 'If Timer0が10mSカウント終了? Else Load Timer0 , 195 'Timer0を10mSにセット Set Tifr0.tov0 'Timer0 オーバーフロー・フラグをリセット ' If Keycun < 10 Then Goto Keyin01 'If キー入力チェック開始待ち(100mS)? Then If Keycun = 10 Then Goto Keyin02 'If キー入力チェック開始? Then If Keycun < 13 Then Goto Keyin01 'If チャタリング チェック期間? Then If Keycun = 13 Then Goto Keyin04 'If キー入力再確認? Then ' Gosub Keyport 'キーオフを確認 Keydat = Keydat And &H3F If Keydat <> Keytmp Then Goto Keyin05 'If キーオフ? Then If Keycun < 113 Then Goto Keyin01 'If リピート期間待ち(1Sec)? Then Keyflg = 1 Keycun = 102 'リピート開始 ' Keyin01: 'キー入力チェック開始待ち(100mS) Keycun = Keycun + 1 Return ' Keyin02: 'キー入力チェック開始 Gosub Keyport 'キー接続ポートからデータ入力 Keydat = Keydat And &H3F If Keydat <> 0 Then Goto Keyin03 'If キー入力有り? Then Keyin05: Keycun = 0 Return ' Keyin03: 'キー入力有り Keytmp = Keydat Goto Keyin01 ' Keyin04: 'キー入力再確認 Gosub Keyport 'キー接続ポートからデータ入力 Keydat = Keydat And &H3F If Keydat <> Keytmp Then Goto Keyin05 'If キー入力エラー? Then Keyflg = 1 Goto Keyin01 ' ' ********************************************** ' * キー接続ポートからのデータ入力サブルーチン * (Keydat = キー入力ポートのデータ) ' ********************************************** ' Keyport: Config Gldtp = Input 'G-LCDのデータポートを入力に設定 Gldtp = &HFF 'G-LCDのデータポートをすべてプルアップ Reset Glcnp.glce1 'G-LCDの(CS1)を(L)に設定 Reset Glcnp.glce2 'G-LCDの(CS2)を(L)に設定 Reset Portc.5 'スイッチのイネーブル信号を(L)に設定 Waitus 10 'プルアップ抵抗の立ち上がり遅延時間 Keydat = Not Gldip 'キー・データを読み込み Set Portc.5 'スイッチのイネーブル信号を(H)に設定 Set Glcnp.glce1 'G-LCDの(CS1)を(H)に設定 Config Gldtp = Output 'G-LCDのデータポートを出力に設定 Return ' ' ***************************** ' * Time/Div 設定サブルーチン * (Timdiv = Time/Div値) ' ***************************** ' Tmdset: If Wavchn = 0 Then 'サンプリング データ テーブルを選択 Restore Samtab1 Else Restore Samtab2 End If Temp3 = Timdiv + 1 Temp4 = 0 Do Read Temp1 : Read Tempw1 : Read Temp2 Temp4 = Temp4 + 1 Loop Until Temp4 = Temp3 ' Lcdat 1 , 111 , "!" ; Chr(&H22) ; "#" 'Time/Div値を表示 Temp4 = Temp1 And &H30 Lcdat 2 , 111 , " " Select Case Temp4 Case &H00 : Temp5 = 117 Tempstr = " " Case &H10 : Temp5 = 117 Tempstr = "0" Case &H20 : Temp5 = 111 Tempstr = "00" End Select Temp3 = Temp1 And &H0F Lcdat 2 , Temp5 , Temp3 ; Tempstr ' Temp4 = Temp1 And &HC0 '"uS","mS","S" 表示 Select Case Temp4 Case &H00 : Tempstr = ":" '[u] Case &H40 : Tempstr = ";" '[m] Case &H80 : Tempstr = " " '[ ] End Select Lcdat 3 , 117 , Tempstr ; "?" '[S] ' Temp4 = Temp2 And &H80 'Timer1のプリスケラを設定 If Temp4 = 0 Then Temp3 = 1 Else Temp3 = 2 End If Temp1 = Tccr1b And &HF8 Tccr1b = Temp1 Or Temp3 Compare1a = Tempw1 ' Temp4 = Temp2 And &H0F ' A/Dコンバータのプリスケラを設定 Temp1 = Adcsra And &HF8 Adcsra = Temp1 Or Temp4 Return ' ' **************************************** ' * Slope , Auto/Single 表示サブルーチン * ' **************************************** ' Glrdsp: Tempstr = "-" 'Slope 表示 If Slope = 0 Then Tempstr = "+" Lcdat 5 , 117 , Tempstr ' Tempstr = "@AB" 'Auto/Single 表示 If Trgmod = 0 Then Tempstr = "<=>" Lcdat 6 , 111 , Tempstr Return ' ' ******************* ' * データ テーブル * ' ******************* ' Samtab1: '1Ch.表示用 Data &H21 , 99% , &H02 'Time/Div 100uS Data &H22 , 199% , &H03 'Time/Div 200uS Data &H25 , 499% , &H04 'Time/Div 500uS Data &H41 , 999% , &H05 'Time/Div 1mS Data &H42 , 1999% , &H06 'Time/Div 2mS Data &H45 , 4999% , &H07 'Time/Div 5mS Data &H51 , 9999% , &H07 'Time/Div 10mS Data &H52 , 19999% , &H07 'Time/Div 20mS Data &H55 , 49999% , &H07 'Time/Div 50mS Data &H61 , 12499% , &H87 'Time/Div 100mS Data &H62 , 24999% , &H87 'Time/Div 200mS Data &H65 , 62499% , &H87 'Time/Div 500mS ' Samtab2: '2Ch.表示用 Data &H22 , 99% , &H02 'Time/Div 200uS (Dummy) Data &H25 , 249% , &H03 'Time/Div 500uS (Dummy) Data &H41 , 499% , &H04 'Time/Div 1mS Data &H42 , 999% , &H05 'Time/Div 2mS Data &H45 , 2499% , &H06 'Time/Div 5mS Data &H51 , 4999% , &H07 'Time/Div 10mS Data &H52 , 9999% , &H07 'Time/Div 20mS Data &H55 , 24999% , &H07 'Time/Div 50mS Data &H61 , 49999% , &H07 'Time/Div 100mS Data &H62 , 12499% , &H87 'Time/Div 200mS Data &H65 , 31249% , &H87 'Time/Div 500mS Data &H81 , 62499% , &H87 'Time/Div 1 S ' Gldata: Data &H00 , &H01 , &H03 , &H07 , &H0F , &H1F , &H3F , &H7F '波形描画のビットパターンテーブル Data 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 '波形描画のビットをシフトさせる掛け率テーブル ' ' ' **************************************** ' * グラフィックLCD 波形描画サブルーチン * ' **************************************** ' Glwvsub: $asm LDS R24,{Gdnum} LDS R25,{Adnum} Sub R25 , R24 CPI R25,2 BRCC Glwvsub2 'If A/D 変換待ち? Else RJMP Glwvsub1 ; Glwvsub2: Loadadr Glbuf(1) , Z 'グリッド・スケールの描画 LDS R16,{Glcun} DEC R16 BREQ Glwvsub3 'If Yスケール描画? Then STS {Glcun},R16 CLR R17 ANDI R16,&H03 BRNE Glwvsub7 'If Xスケール描画? Else ST Z+,R17 'Xスケール描画 LDI R18,$08 ST Z+,R18 ST Z+,R17 LDI R18,$01 ST Z+,R18 LDI R18,$20 ST Z+,R18 ST Z+,R17 LDI R18,$04 ST Z+,R18 LDI R18,$80 ST Z+,R18 RJMP Glwvsub4 ; Glwvsub3: 'Yスケール描画 LDI R16,20 STS {Glcun},R16 LDI R18,$84 ST Z+,R18 LDI R19,$88 ST Z+,R19 LDI R18,$10 ST Z+,R18 LDI R18,$11 ST Z+,R18 LDI R18,$22 ST Z+,R18 LDI R18,$42 ST Z+,R18 LDI R18,$44 ST Z+,R18 ST Z+,R19 RJMP Glwvsub4 ; Glwvsub7: 'G-LCDバッファ クリア ST Z+,R17 ST Z+,R17 ST Z+,R17 ST Z+,R17 ST Z+,R17 ST Z+,R17 ST Z+,R17 ST Z+,R17 ; Glwvsub4: LDS R18,{Wavchn} CPI R18,1 BREQ Glwvsub5 'If 2波形表示? Then !CALL Glcdlins 'チャネル1の波形をG-LCDバッファへ書き込み RJMP Glwvsub8 ; Glwvsub5: !CALL Glcdl21s '2波形表示のCh.1波形をG-LCDバッファへ書き込み !CALL Glcdl22s '2波形表示のCh.2波形をG-LCDバッファへ書き込み ; Glwvsub8: LDS R20,{Gdnum} 'G-LCDバッファのデータをLCDへ転送 INC R20 STS {Gdnum},R20 LDI R21,1 STS {Gly},R21 ; Glwvsub6: LDS R20,{Gdnum} 'R20 = Xアドレス LDS R21,{Gly} 'R21 = Yアドレス !CALL _glocate 'G-LCDライブラリのアドレスセット・ルーチン Loadadr Glbuf(gly) , X LD R24,X 'R24 = データ !CALL _gwrite_data 'G-LCDライブラリのデータセット・ルーチン ; LDS R21,{Gly} INC R21 STS {Gly},R21 CPI R21,9 BRCS Glwvsub6 'If 8バイト転送終了? Else Glwvsub1: $end Asm Return ' ' * G-LCDバッファ書き込みサブルーチン * ' $asm Glcdlins: Loadadr Sampbuf(1) , X CLR R25 'A/D データを2個読み込む LDS R24,{Gdnum} ADD R26,R24 ADC R27,R25 LD R16,X+ 'R16 = バッファーへの描画開始位置 LD R17,X Glcdlin1: COM R16 'A/Dデータを反転し6Bitに縮小 LSR R16 LSR R16 COM R17 LSR R17 LSR R17 ; MOV R24,R17 Sub R17 , R16 '2個のデータの差分を求め、絶対値を取る BRPL Glcdlin2 MOV R16,R24 NEG R17 'R17 = ライン・レングス Glcdlin2: Loadadr Glbuf(1) , Z 'G-LCDバッファ描画開始位置を計算 (Z) LDI R24,$38 AND R24,R16 LSL R24 Swap R24 ADD R30,R24 ADC R31,R25 ; LDI R18,$08 '描画開始位置のビットパターンを計算 LDI R20,$FF CPI R17,$08 BRCC Glcdlin3 'If ライン・レングス < 8 Else CPI R17,$00 BRNE GlcdLIN4 'If ライン・レングス = 0 Else INC R17 Glcdlin4: MOV R18,R17 'R18 = 描画開始位置のビット数 Loadadr Bittab(1) , X ADD R26,R18 ADC R27,R25 LD R20,X 'R20 = 描画開始位置のビットパターン ; Glcdlin3: Loadadr Multab(1) , X '描画開始位置のビット位置を計算 LDI R19,$07 AND R19,R16 ADD R26,R19 ADC R27,R25 LD R21,X MUL R20,R21  'R21 = ビットをシフトさせる掛け率 ; LD R1,Z 'G-LCDバッファへ初めのデータを書き込み OR R0,R1 ST Z+,R0 ; LDI R24,$08 '開始位置へ描画したビット数を計算 Sub R24 , R18 Sub R24 , R19 BRCC GlcdLIN5 ADD R18,R24 'R18 = 開始位置へ描画したビット数 Glcdlin5: Sub R17 , R18 'ライン・レングスの残数を計算 Glcdlin6: CPI R17,$08 BRCS GlcdLIN7 'If 残数 < 8 Then SER R24 'バイト単位のフルビット($FF)パターンを書き込み ST Z+,R24 SUBI R17,$08 RJMP Glcdlin6 ; Glcdlin7: Loadadr Bittab(1) , X ADD R26,R17 ADC R27,R25 LD R0,X '終わりのビットパターンを書き込み LD R1,Z OR R0,R1 ST Z,R0 Glcdlin8: RET ; ; Glcdl21s: '2波形表示のCh.1用サブルーチン Loadadr Sampbuf(1) , X CLR R25 'A/D データを2個読み込む LDS R24,{Gdnum} ADD R26,R24 ADC R27,R25 LD R16,X+ 'R16 = バッファーへの描画開始位置 LSR R16 LD R17,X LSR R17 RJMP Glcdlin1 ; Glcdl22s: '2波形表示のCh.2用サブルーチン LDS R24,{Gdnum} CPI R24,0 BREQ Glcdlin8 'If 1番目のデータ? Then Loadadr Sampbuf(128) , X CLR R25 'A/D データを2個読み込む ADD R26,R24 ADC R27,R25 LDS R18,{Ch2ofs} 'Ch.2波形にオフセットを加算 LD R16,X+ 'R16 = バッファーへの描画開始位置 LSR R16 ADD R16,R18 BRCC Glcdl221 'If A/Dデータ オーバーフロー? Else LDI R16,$FF Glcdl221: LD R17,X LSR R17 ADD R17,R18 BRCC Glcdl222 'If A/Dデータ オーバーフロー? Else LDI R17,$FF Glcdl222: RJMP Glcdlin1 $end Asm ' ' ******************************* ' * Timer1 割り込み処理ルーチン * ' ******************************* ' Tmiad: $asm PUSH R0 PUSH R1 PUSH R16 PUSH R17 PUSH R18 PUSH R26 PUSH R27 PUSH R23 IN R0,SREG 'ステータス・レジスタを待避 ; IN R1,ADCH 'A/D データ読み込み LDS R16,{Adsta} CPI R16,03 BRNE Tmiad05 'If 1Ch モード A/D バッファ書き込み? Else RJMP Tmiad03 ; Tmiad05: CPI R16,04 BRCS Tmiad14 'If 波形表示 2Ch モード? Else RJMP Tmiad04 ; Tmiad14: 'エッジ検出 CPI R16,02 BREQ Tmiad02 'If Single モード? Then ; LDS R17,{Timout} 'Auto モード DEC R17 STS {Timout},R17 BRNE Tmiad02 'If タイムアウト? Else RJMP Tmiad06 ; Tmiad02: LDS R18,{Level} 'トリガーエッジを検出 LDS R16,{Negedg} LDS R17,{Slope} CPI R17,0 BRNE Tmiad07 'If トリガー(-)エッジ? Then ; CPI R16,1 'トリガー(+)エッジ BREQ Tmiad08 'If 逆エッジ検出完了? Then CP R1,R18 '逆エッジ検出 BRCS Tmiad09 'If 逆エッジ検知? Then RJMP Tmiad16 ; Tmiad09: 'トリガー(+)エッジ 検知開始 LDI R16,1 STS {Negedg},R16 ; Tmiad08: 'トリガー(+)エッジ 検知 CP R18,R1 BRCS Tmiad06 'If A/D > Level ? Then RJMP Tmiad16 ; Tmiad07: 'トリガー(-)エッジ CPI R16,1 BREQ Tmiad11 'If 逆エッジ検出完了? Then CP R18,R1 '逆エッジ検出 BRCS Tmiad12 'If 逆エッジ検知? Then RJMP Tmiad16 ; Tmiad12: 'トリガー(-)エッジ 検知開始 LDI R16,1 STS {Negedg},R16 ; Tmiad11: 'トリガー(-)エッジ 検知 CP R1,R18 BRCS Tmiad06 'If A/D < Level ? Then Tmiad16: SBI ADCSR,ADSC 'A/D コンバータを再起動 Loadadr Sampbuf(1) , X ST X,R1 RJMP Tmiad01 ; ; Tmiad04: '波形表示 2Ch モード CPI R16,05 BREQ Tmiad13 'If Ch.2 バッファー書き込み? Then Tmiad15: SBI ADMUX,MUX0 'A/DチャンネルをADC1に変更 LDI R16,05 RJMP Tmiad10 ; Tmiad13: 'Ch.2 バッファー書き込み CBI ADMUX,MUX0 'A/DチャンネルをADC0に変更 SBI ADCSR,ADSC 'A/D コンバータを再起動 LDI R16,04 STS {Adsta},R16 Loadadr Sampbuf(129) , X 'A/D バッファの書き込み位置を計算 CLR R18 LDS R17,{Adnum} ADD R26,R17 ADC R27,R18 ST -X,R1 RJMP Tmiad01 ; ; Tmiad06: 'トリガー検出完了 LDS R17,{Wavchn} '波形表示のチャンネル数をチェック CPI R17,1 BREQ Tmiad15 'If 波形表示のチャンネル数 = 2? Then LDI R16,03 Tmiad10: STS {Adsta},R16 ; Tmiad03: SBI ADCSR,ADSC 'A/D コンバータを再起動 Loadadr Sampbuf(2) , X 'A/D バッファの書き込み位置を計算 CLR R18 LDS R17,{Adnum} ADD R26,R17 ADC R27,R18 ST X,R1 INC R17 'A/D バッファのポインターを更新 STS {Adnum},R17 CPI R17,110 BRCS Tmiad01 'If A/D バッファ書き込み終了? Else STS {Adsta},R18 CBI TIMSK1,OCIE1A 'TIMER1 比較一致割り込みを禁止 Tmiad01: ; Out Sreg , R0 'ステータス・レジスタを復帰 POP R23 POP R27 POP R26 POP R18 POP R17 POP R16 POP R1 POP R0 $end Asm Return ' ' ******************* ' * フォント データ * ' ******************* ' Oscfont6x8: $asm .db 1 , 6 , 6 , 0 .db $00 , $00 , $00 , $00 , $00 , $00 ' .db $01 , $7f , $01 , $7c , $04 , $78 ' ! [Tm/Dv] .db $04 , $78 , $10 , $08 , $04 , $7f ' .db $41 , $3e , $00 , $3c , $40 , $3c ' # .db $26 , $49 , $32 , $00 , $7f , $40 ' $ [Slope] .db $00 , $38 , $44 , $38 , $00 , $7c ' % .db $14 , $08 , $00 , $38 , $54 , $58 ' & .db $01 , $7f , $01 , $00 , $7c , $08 ' ' [Trg-L] .db $04 , $00 , $48 , $54 , $3c , $00 ' .db $08 , $08 , $00 , $7f , $40 , $40 ' .db $00 , $14 , $08 , $3e , $08 , $14 ' * .db $00 , $08 , $08 , $3e , $08 , $08 ' + .db $00 , $00 , $50 , $30 , $00 , $00 ' , .db $00 , $08 , $08 , $08 , $08 , $08 ' - .db $00 , $00 , $60 , $60 , $00 , $00 ' . .db $00 , $20 , $10 , $08 , $04 , $02 ' / .db $00 , $3e , $51 , $49 , $45 , $3e ' 0 .db $00 , $00 , $42 , $7f , $40 , $00 ' 1 .db $00 , $62 , $51 , $49 , $49 , $46 ' 2 .db $00 , $22 , $41 , $49 , $49 , $36 ' 3 .db $00 , $18 , $14 , $12 , $7f , $10 ' 4 .db $00 , $27 , $45 , $45 , $45 , $39 ' 5 .db $00 , $3c , $4a , $49 , $49 , $30 ' 6 .db $00 , $01 , $71 , $09 , $05 , $03 ' 7 .db $00 , $36 , $49 , $49 , $49 , $36 ' 8 .db $00 , $06 , $49 , $49 , $29 , $1e ' 9 .db $00 , $fc , $20 , $20 , $10 , $3c ' : [u] .db $00 , $7c , $04 , $78 , $04 , $78 ' ; [m] .db $7e , $11 , $11 , $7e , $00 , $3c ' < [Auto] .db $40 , $20 , $7c , $00 , $04 , $3e ' = .db $44 , $00 , $38 , $44 , $44 , $38 ' > .db $00 , $26 , $49 , $49 , $49 , $32 ' ? [S] .db $26 , $49 , $49 , $32 , $00 , $7d ' @ [Singl] .db $00 , $7c , $04 , $78 , $00 , $48 ' A .db $54 , $3c , $00 , $7f , $40 , $00 ' B .db $7f , $09 , $19 , $66 , $00 , $38 ' C [Ready] .db $54 , $54 , $58 , $00 , $20 , $54 ' D .db $54 , $78 , $00 , $30 , $48 , $48 ' E .db $7f , $00 , $4c , $50 , $30 , $1c ' F $end Asm