; ;********************************************************** ; DDS/AKI80 SILVER LED DSP ; K.I 98.9.12 ; ;********************************************************** PIOA_D EQU 1CH ;PIOA: PA0,DATA PA1,STB PA2,SCK PIOA_C EQU 1DH ;PA3,1 PA4,2 PA5,4(100KHZ) PA6,UP PA7,DWN PIOB_D EQU 1EH ;PIOB: PB0,1 PB1,2 PB2,4 PB3,8 (1KHZ) PIOB_C EQU 1FH ; PB4,1 PB5,2 PB6,4 PB7,8 (10HKZ) SIOA_D EQU 18H ;DCDA(DATA) CSTA(DATA+1),1k SIOA_C EQU 19H SIOB_D EQU 1AH ;DCDB(DATA+2),RIT CSTB(DATA+3),R/T SIOB_C EQU 1BH ctc_0 equ 10h ;CH0 T1-G0 ctc_1 equ 11h ;CH1 USTACK EQU 9800H RAM EQU 9000H ORG 0000H START: LD SP,USTACK di ld a,00h out (ctc_0),a ctc_ini: ld A,00100101b ;ctc_1 counter out (ctc_1),a ld a,157 out (ctc_1),a ld a,0d5h ;ctc_1 timer out (ctc_0),a ld a,100 out (ctc_0),a PIO_INI: LD A,0CFH ;A-PORT MODE3 OUT (PIOA_C),A ; bit 0 1 2 3 4 5 6 7 LD A,0C0H ; 0 0 0 0 0 0 1 1 0,OUT 1,IN OUT (PIOA_C),A LD A,0CFH ;B-PORT MODE3 OUT (PIOB_C),A ; bit 0 1 2 3 4 5 6 7 LD A,0H ; 0 0 0 0 0 0 0 0 OUT (PIOB_C),A SIO_INI: LD A,00011000b ;SIOA Setting OUT (SIOA_C),A LD A,00011000b ;SIOB Setting OUT (SIOB_C),A im 2 ld a,70h ld i,a ei INIT: LD A,2 ;テーブル初期設定 100KHZ LD HL,TBL2 LD (HL),A INC HL XOR A LD B,35 TBLCLR: LD (HL),A ;テーブルクリア(TBL2+1〜 datA) INC HL DJNZ TBLCLR LD A,04EH ;周波数データ初期設定 LD (TBL3+2),A ;MHZ DATA LD A,0B3H ;4E B3 58 LD (TBL3+1),A ;5MHZ LD A,58H LD (TBL3),A LEDINI: CALL DISP DDSINI: LD HL,PIO_DAT LD A,(HL) SET 0,A SET 1,A SET 2,A out (pioa_d),a LD (HL),A LD B,4 ;DDS初期設定 LD HL,PIO_DAT DDSIN1: LD A,(HL) ;SCK RESET 011b SET 0,A SET 1,A RES 2,A OUT (PIOA_D),A ;DDS出力 on SET 0,A ;SCK SET 111b SET 1,A SET 2,A OUT (PIOA_D),A DJNZ DDSIN1 SET 0,A ;DATA RESET 011b set 1,a res 2,a OUT (PIOA_D),A LD (HL),A LD B,29 CALL CMD1 LD C,67H ;DDSのCH1周波数データ書込&出力 CALL FSET LD BC,5 LD HL,TBL2 ;TBL2,3 →TBL4,5 →TBL6,7 LD DE,TBL4 LDIR LD BC,4 LD HL,TBL3 LD DE,TBL5 LDIR LD BC,5 LD HL,TBL2 LD DE,TBL6 LDIR LD BC,4 LD HL,TBL3 LD DE,TBL7 LDIR SWIN: IN A,(PIOA_D) BIT 6,A JP NZ,UP BIT 7,A JP NZ,DOWN ;ロータリーエンコーダUP RITCHK: CALL SW_CHK LD A,(DATA+2) BIT 0,A JR NZ,RITON LD HL,FLAG BIT 1,(HL) JR Z,SWIN1 ;既にRITスイッチOFFになっていた CALL TIMER ;チャタリングキャンセル CALL SW_CHK LD A,(DATA+2) BIT 0,A JR NZ,SWIN1 ;RITスイッチOFFではなかった RITOFF: RES 1,(HL) ;RITフラグOFF LD BC,5 LD HL,TBL6 ;TBL6,7 →TBL2.3 LD DE,TBL2 LDIR LD BC,4 LD HL,TBL7 LD DE,TBL3 LDIR CALL DISP LD C,67H CALL FSET JR SWIN1 RITON: LD HL,FLAG ;RIT ON BIT 1,(HL) JR NZ,SWIN1 ;既にRIT ONになっていた CALL TIMER ;チャタリングキャンセル CALL SW_CHK LD A,(DATA+2) BIT 0,A JR Z,SWIN1 ;RIT ONではなかった SET 1,(HL) ;RIT フラグON LD BC,5 LD HL,TBL2 ;TBL2,3 →TBL6,7 LD DE,TBL6 LDIR ;RIT表示 PPI1A: bit1(R/T) bit2(RIT) LD BC,4 ; 1,R 1,OFF LD HL,TBL3 ; 0,T 0,ON LD DE,TBL7 ; FLAG: bit1(RIT) bit0(R/T) LDIR ; 1,ON 1,T SWIN1: CALL SW_CHK ;送受チェック LD A,(DATA+3) BIT 0,A JR NZ,T ;送信 LD HL,FLAG BIT 0,(HL) JR Z,R2 ;既に受信状態になっていた CALL TIMER ;チャタリングキャンセル CALL SW_CHK LD A,(DATA+3) BIT 0,A JR NZ,R2 R1: RES 0,(HL) LD HL,FLAG BIT 1,(HL) JR Z,R2 ;RIT OFFになっていた LD BC,5 LD HL,TBL4 ;TBL4,5 →TBL2.3 LD DE,TBL2 LDIR LD BC,4 LD HL,TBL5 LD DE,TBL3 LDIR LD C,67H ;DDS CH1出力 CALL FSET CALL DISP R2: JP SWIN T: LD HL,FLAG ;送信 BIT 0,(HL) JP NZ,SWIN ;既に送信状態になっていた CALL TIMER ;チャタリングキャンセル CALL SW_CHK LD A,(DATA+3) BIT 0,A JP Z,SWIN ;送信ではなかった SET 0,(HL) ;送信フラグON JP RTCHK UP: LD A,(FLAG) ;エンコーダUP AND 2 ;エンコーダの出力がLのままで停止した場合に、ここの LD B,A ;ループから抜け出せなくなるので、RITスイッチの変化を CALL SW_CHK ;監視し変化があればこのルーチンから抜け出す LD A,(DATA+2) RLA AND 2 CP B JP Z,SWCHK JP RITCHK SWCHK: LD A,(FLAG) ;送受変化があった場合に、ループから抜け出す AND 1 LD B,A CALL SW_CHK LD A,(DATA+3) AND 1 CP B JP NZ,SWIN1 UPCHK: IN A,(PIOA_D) BIT 6,A JR NZ,UP ;エンコーダ出力Lになったまま LD HL,CNT INC (HL) LD A,(TBL2) CP 8 JP Z,SWIN CALL SW_CHK LD A,(DATA+1) BIT 0,A JR NZ,U1KK ld hl,flag BIT 3,(HL) JR NZ,U1KK bit 2,(hl) jr nz,u100 ;100hz U10: LD HL,(TBL3) ;デーブル3のデータ10HZ UP LD DE,10H ADD HL,DE LD (TBL3),HL LD E,0 LD HL,(TBL3+2) ADC HL,DE LD (TBL3+2),HL UP1: LD HL,TBL2+4 LD B,5 UP2: INC (HL) ;TBL2+4のデータを+1し、その結果9以下の時は LD A,(HL) ;このルーチンからRTCHKへ CP 10 JP C,RTCHK ;結果が10になった時は桁上がり LD (HL),0 DEC HL DJNZ UP2 JP RTCHK u100: ld hl,(TBL3) ;デーブル3のデータ100HZ UP LD DE,64H ADD HL,DE LD (TBL3),HL LD E,0 LD HL,(TBL3+2) ADC HL,DE LD (TBL3+2),HL UP11: LD HL,TBL2+3 LD B,4 UP12: INC (HL) ;TBL2+3のデータを+1し、その結果9以下の時は LD A,(HL) ;このルーチンからRTCHKへ CP 10 JP C,RTCHK ;結果が10になった時は桁上がり LD (HL),0 DEC HL DJNZ UP12 JP RTCHK U1KK: JP U1K U10K: LD HL,(TBL3) LD DE,2710H ;TBL3 +10K ADD HL,DE LD (TBL3),HL LD HL,(TBL3+2) LD DE,0 ADC HL,DE LD (TBL3+2),HL LD HL,TBL2+1 ;10KHzステップ LD A,1 ADD A,(HL) ;10KHzの桁+1 CP 10 ;以下UP2のルーチンと同様処理 JR C,U10K1 SUB 10 ;10KHZ の桁 0 LD (HL),A DEC HL ;100KHzの桁+1 INC (HL) LD A,(HL) CP 8 JP C,RTCHK XOR A U10K1: LD (HL),A JP RTCHK U1K: LD HL,(TBL3) LD DE,1F4H ADD HL,DE LD (TBL3),HL LD HL,(TBL3+2) LD DE,0 ADC HL,DE LD (TBL3+2),HL UK1: LD HL,TBL2+2 LD B,3 UK2: LD A,1 ADD A,(HL) ;1KHz(TBL2+2) +1 CP 10 JR C,U1K1 ;TBL2+2の値が10以下の時 SUB 10 ;TBL2+2の値から10引いて LD (HL),A ;上位へ桁上がり DEC HL DJNZ UK2 LD A,2 JP U1K U1K1: LD (HL),A JP RTCHK DOWN: LD A,(FLAG) ;エンコーダDOWN AND 2 ;UPルーチンと同様処理 LD B,A ;テーブル処理は引き算で CALL SW_CHK LD A,(DATA+2) RLA AND 2 CP B JP Z,SWCHK1 JP RITCHK SWCHK1: LD A,(FLAG) AND 1 LD B,A CALL SW_CHK LD A,(DATA+3) AND 1 CP B JP NZ,SWIN1 DNCHK: IN A,(PIOA_D) BIT 7,A JR NZ,DOWN ld hl,cnt inc (hl) LD A,(TBL2) CP 9 JP Z,SWIN CALL SW_CHK LD A,(DATA+1) BIT 0,A JR NZ,D1KK ;1KHZ LD HL,FLAG BIT 3,(HL) JR NZ,D1KK BIT 2,(HL) JR NZ,D100 D1: LD HL,(TBL3) ;デーブル3のデータ10HZ DOWN LD DE,10 XOR A SBC HL,DE LD (TBL3),HL LD DE,0 LD HL,(TBL3+2) SBC HL,DE LD (TBL3+2),HL DOWN1: LD HL,TBL2+4 ;10Hzの桁 -1 LD B,5 DOWN2: DEC (HL) JP P,RTCHK LD (HL),9 DEC HL DJNZ DOWN2 JP RTCHK D100: LD HL,(TBL3) ;デーブル3のデータ100HZ DOWN LD DE,64H XOR A SBC HL,DE LD (TBL3),HL LD DE,0 LD HL,(TBL3+2) SBC HL,DE LD (TBL3+2),HL DOWN21: LD HL,TBL2+3 ;10Hzの桁 -1 LD B,4 DOWN22: DEC (HL) JP P,RTCHK LD (HL),9 DEC HL DJNZ DOWN22 JR RTCHK D1KK: JP D1K D10K: LD HL,(TBL3) LD DE,2710H ;TBL3 +10K SBC HL,DE LD (TBL3),HL LD HL,(TBL3+2) LD DE,0 SBC HL,DE LD (TBL3+2),HL LD HL,TBL2+1 ;10KHzステップ LD A,(HL) SUB 1 JP P,D10K1 ;TBL2+1が正なら ADD A,10 LD (HL),A DEC HL ;100KHzの桁 -1 DEC (HL) JP P,RTCHK ;TBL2が正なら LD A,8 D10K1: LD (HL),A JP RTCHK D1K: LD HL,(TBL3) LD DE,1F4H ;TBL3 -1 SBC HL,DE LD (TBL3),HL LD HL,(TBL3+2) LD DE,0 SBC HL,DE LD (TBL3+2),HL DK1: LD HL,TBL2+2 ;1KHzの桁 -1 LD B,3 DK2: LD A,(HL) SUB 1 JP P,D1K1 ;TBL2+2が正なら ADD A,10 LD (HL),A DEC HL DJNZ DK2 LD A,2 JP D1K D1K1: LD (HL),A JP RTCHK RTCHK: LD A,(FLAG) BIT 0,A JR Z,RX ;受信状態 LD HL,FLAG BIT 1,(HL) JR NZ,T9 LD C,67H ;DDS CH1に周波数データ書込 CALL FSET CALL DISP ;LEDに周波数表示 JP SWIN T9: LD BC,5 LD HL,TBL2 ;TBL2,3 →TBL4,5 LD DE,TBL4 LDIR LD BC,4 LD HL,TBL3 LD DE,TBL5 LDIR LD BC,5 LD HL,TBL6 ;TBL6,7 →TBL2,3 LD DE,TBL2 LDIR LD BC,4 LD HL,TBL7 LD DE,TBL3 LDIR LD C,67H CALL FSET CALL DISP JP SWIN RX: LD A,(FLAG) BIT 1,A JR NZ,RX1 ;受信状態でかつRIT ON LD C,67H ;DDS CH1に周波数データ書込&出力 CALL FSET CALL DISP JP SWIN RX1: LD BC,5 LD HL,TBL2 ;TBL2,3 →TBL4,5 LD DE,TBL4 LDIR LD BC,4 LD HL,TBL3 LD DE,TBL5 LDIR LD C,67H ;RIT ONの時CH1のみ周波数変更 CALL FSET CALL DISP JP SWIN CMD: LD B,7 ;DDSにコマンドを書き込むルーチン CALL WRIT LD B,26 CMD1: LD HL,PIO_DAT ;DDS CLOCK LD A,(HL) SET 0,A SET 1,A RES 2,A OUT (PIOA_D),A ;SCK RESET 011b LD A,(HL) SET 0,A SET 1,A SET 2,A OUT (PIOA_D),A ;SCK SET 111b LD (HL),A DJNZ CMD1 LD HL,PIO_DAT ;DDSへSTB信号送出 101b LD A,(HL) SET 0,A RES 1,A SET 2,A OUT (PIOA_D),A ;STB RSET 101b LD A,(HL) SET 0,A RES 1,A SET 2,A OUT (PIOA_D),A ;DATA SET 101b LD A,(HL) SET 0,A SET 1,A SET 2,A OUT (PIOA_D),A ;STB SET 111b LD (HL),A RET FSET: LD B,7 ;DDSに周波数データ送出 CALL WRIT ;7 BITS LD HL,TBL3 LD C,(HL) ;TBL3,8BITS LD B,8 CALL WRIT LD HL,TBL3+1 LD C,(HL) ;TBL3+1,8BITS LD B,8 CALL WRIT LD HL,TBL3+2 LD C,(HL) ;TBL3+2,8BITS LD B,8 CALL WRIT LD HL,TBL3+3 LD C,(HL) ;TBL3+3,2BITS LD B,2 CALL WRIT LD HL,PIO_DAT LD A,(HL) RES 0,A RES 1,A SET 2,A OUT (PIOA_D),A ;STB RESET 100b SET 0,A RES 1,A SET 2,A OUT (PIOA_D),A ;DATA SET 101b SET 0,A SET 1,A SET 2,A OUT (PIOA_D),A ;STB SET 111b LD (HL),A RET WRIT: LD HL,PIO_DAT ;Cレジスタの値を1ビットずつシリアルに送出 LD A,(HL) RR C JR NC,WRIT1 ;BIT 0 → WRIT1 ld A,(HL) SET 0,A JP WRIT2 WRIT1: RES 0,A WRIT2: OUT (PIOA_D),A ;DATA RESET 010b RES 2,A OUT (PIOA_D),A ;SCK RESET 0100b SET 2,A OUT (PIOA_D),A ;SCK SET 110b LD (HL),A DJNZ WRIT RET DISP: EX AF,AF' EXX LD HL,TBL2+2 LD B,(HL) LD HL,TBL2+1 LD A,(HL) RLCA RLCA RLCA RLCA OR B OUT (PIOB_D),A LD HL,PIO_DAT LD A,(HL) RES 3,A RES 4,A RES 5,A LD B,A LD HL,TBL2 LD A,(HL) RLCA RLCA RLCA RES 0,A RES 1,A RES 2,A OR B OUT (PIOA_D),A LD HL,PIO_DAT LD (HL),A EXX EX AF,AF' RET SW_CHK: EX AF,AF' EXX XOR A LD (DATA),A LD (DATA+1),A LD (DATA+2),A LD (DATA+3),A LD A,00000000b OUT (SIOA_C),A IN A,(SIOA_C) LD B,A LD A,00000000b OUT (SIOB_C),A IN A,(SIOB_C) LD C,A LD A,1 BIT 3,B JR Z,SW_1 LD (DATA+0),A ;DCDA(band)→BIT0 SW_1: BIT 5,B JR Z,SW_2 LD (DATA+1),A ;CTSA(10k)→BIT0 SW_2: BIT 3,C JR Z,SW_3 LD (DATA+2),A ;DCDB(rit)→BIT0 DCDB CSTB (A) (5) (3) SW_3: BIT 5,C ; H H 44 0 0 JR Z,SW_4 ; L H 4C 0 1 LD (DATA+3),A ;CTSB(r/t)→BIT0 H L 64 1 0 SW_4: ; L L 6C 1 1 ld a,00011000b out (siob_c),a ld a,00011000b out (sioa_c),a EX AF,AF' EXX RET TIMER_A: LD DE,0200H W1: DEC E JR NZ,W1 DEC D JR NZ,W1 RET TIMER_B: LD DE,0400H W2: DEC E JR NZ,W2 DEC D JR NZ,W2 RET TIMER: LD DE,100H ;チャタリング キャンセル用タイマー TIMER1: DEC DE LD A,D CP 0 JR NZ,TIMER1 LD A,E JR NZ,TIMER1 RET ORG RAM ; ← TBL2: DS 5 ;TX 10進データ(10,100,1K,10K,100K) TBL3: DS 4 ;TX ハラレルデータ TBL4: DS 5 ;RIT 10進データ TBL5: DS 4 ;RIT ハラレルデータ TBL6: DS 5 ;TX 10進データ(10,100,1K,10K,100K) Back up TBL7: DS 4 ;TX ハラレルデータ Back up FLAG: DS 1 CNT: DS 1 DATA: DS 4 PIO_DAT DS 1 ORG 7000H dw _timer_ _timer_: ex af,af' exx LD HL,CNT LD A,(HL) CP 20 JR C,SUB100 LD HL,FLAG SET 3,(HL) SET 2,(HL) LD A,0 LD HL,CNT LD (HL),A ex af,af' exx ei reti sub100: ld hl,cnt LD A,(HL) CP 10 JR C,SUB10 LD HL,FLAG SET 2,(HL) res 3,(hl) LD A,0 LD HL,CNT LD (HL),A ex af,af' EXX EI RETI SUB10: LD A,0 LD HL,CNT LD (HL),A LD HL,FLAG RES 2,(HL) res 3,(hl) ex af,af' EXX EI RETI END