;****************************************************************************************** ; オシレータサンプル (16F88) ; Program Name : ; Programer : ; Create date : Version 1.0 H18.09.30 ; History : ;****************************************************************************************** ; (1)Descript I/O ; B0〜B7 : D/A Converter Output ; A0 : Signal Output ; A1 : Sirial Data Input ; A2 : Push SW (1) ; A3 : Push SW (2) ; A4 : Push SW (3) ; A5 : Push SW (4) ; ;****************************************************************************************** LIST P=PIC16F88,ST=OFF,R=DEC INCLUDE "P16F88.inc" __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_IO ; __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC __CONFIG _CONFIG2 , _IESO_OFF & _FCMEN_OFF ; WTIND EQU 20H WTLOP EQU 21H TMP1 EQU 22H LPWAV0 EQU 23H LPWAVWATA EQU 24H LPWAVWATB EQU 25H ORG 0 GOTO START ORG 4 GOTO START START ; Bank0での設定 BANKSEL PORTA ; (Bank0) CLRF PORTA ; PortAの初期化 CLRF PORTB ; PortBの初期化 ; Bank1での設定 BANKSEL ANSEL ; (Bank1) MOVLW B'01111110' ;内部OSC選択,内部OSCに8MHzを選択 MOVWF OSCCON MOVLW B'00000000' ; 全てをDegitalに設定 MOVWF ANSEL ; Degital Inputに設定(Bank1) MOVLW B'11111110' MOVWF TRISA ; PortAのI/O設定(Bank1) MOVLW B'00000000' MOVWF TRISB ; PortBのI/O設定(Bank1) ; Bank0に戻す BANKSEL PORTA ; PortAのBankを選択する ; CLRF WTLOP BCF PORTA,0 MAIN ; 1.波形の間隔時間を設定する CALL GETFLG ; 2.波形を出力する CALL MKWAVE GOTO MAIN ;****************************************************************************************** ; Function Name : GETWVAL ; Title : SIN波の波形の大きさを設定する ; Input : ; Output : ;****************************************************************************************** GETWVAL ADDWF PCL,F RETLW D'100' ; 00 RETLW D'106' ; 01 RETLW D'113' ; 02 RETLW D'119' ; 03 RETLW D'125' ; 04 RETLW D'131' ; 05 RETLW D'137' ; 06 RETLW D'143' ; 07 RETLW D'148' ; 08 RETLW D'154' ; 09 RETLW D'159' ; 10 RETLW D'164' ; 11 RETLW D'168' ; 12 RETLW D'173' ; 13 RETLW D'177' ; 14 RETLW D'181' ; 15 RETLW D'184' ; 16 RETLW D'188' ; 17 RETLW D'190' ; 18 RETLW D'193' ; 19 RETLW D'195' ; 20 RETLW D'197' ; 21 RETLW D'198' ; 22 RETLW D'199' ; 23 RETLW D'200' ; 24 RETLW D'200' ; 25 RETLW D'200' ; 26 RETLW D'199' ; 27 RETLW D'198' ; 28 RETLW D'197' ; 29 RETLW D'195' ; 30 RETLW D'193' ; 31 RETLW D'190' ; 32 RETLW D'188' ; 33 RETLW D'184' ; 34 RETLW D'181' ; 35 RETLW D'177' ; 36 RETLW D'173' ; 37 RETLW D'168' ; 38 RETLW D'164' ; 39 RETLW D'159' ; 40 RETLW D'154' ; 41 RETLW D'148' ; 42 RETLW D'143' ; 43 RETLW D'137' ; 44 RETLW D'131' ; 45 RETLW D'125' ; 46 RETLW D'119' ; 47 RETLW D'112' ; 48 RETLW D'106' ; 49 RETLW D'100' ; 50 RETLW D'094' ; 51 RETLW D'087' ; 52 RETLW D'081' ; 53 RETLW D'075' ; 54 RETLW D'069' ; 55 RETLW D'063' ; 56 RETLW D'057' ; 57 RETLW D'052' ; 58 RETLW D'046' ; 59 RETLW D'041' ; 60 RETLW D'036' ; 61 RETLW D'031' ; 62 RETLW D'027' ; 63 RETLW D'023' ; 64 RETLW D'019' ; 65 RETLW D'015' ; 66 RETLW D'012' ; 67 RETLW D'009' ; 68 RETLW D'007' ; 69 RETLW D'005' ; 70 RETLW D'003' ; 71 RETLW D'002' ; 72 RETLW D'001' ; 73 RETLW D'000' ; 74 RETLW D'000' ; 75 RETLW D'000' ; 76 RETLW D'001' ; 77 RETLW D'002' ; 78 RETLW D'003' ; 79 RETLW D'005' ; 80 RETLW D'007' ; 81 RETLW D'010' ; 82 RETLW D'012' ; 83 RETLW D'016' ; 84 RETLW D'019' ; 85 RETLW D'023' ; 86 RETLW D'027' ; 87 RETLW D'032' ; 88 RETLW D'036' ; 89 RETLW D'041' ; 90 RETLW D'047' ; 91 RETLW D'052' ; 92 RETLW D'058' ; 93 RETLW D'063' ; 94 RETLW D'069' ; 95 RETLW D'075' ; 96 RETLW D'081' ; 97 RETLW D'088' ; 98 RETLW D'094' ; 99 RETLW D'100' ; 100 RETLW D'000' ; RETLW D'000' ; ;****************************************************************************************** ; Function Name : GETFLG ; Title : 波形の間隔時間変数を設定する ; Input : ; Output : ;****************************************************************************************** GETFLG MOVLW H'01' MOVWF WTIND ; 1.SWからの設定 BTFSS PORTA,2 GOTO GETFLGS2 MOVLW H'01' ; 536Hz MOVWF WTLOP RETURN GETFLGS2 BTFSS PORTA,3 GOTO GETFLGS3 MOVLW H'11' ;101Hz MOVWF WTLOP RETURN GETFLGS3 BTFSS PORTA,4 GOTO GETFLGS4 MOVLW H'25' ; 50Hz MOVWF WTLOP RETURN GETFLGS4 BTFSS PORTA,5 GOTO GETFLGSER MOVLW H'D0' ; 10Hz MOVWF WTLOP RETURN GETFLGSER BTFSS PORTA,1 GOTO GETFLGCHK ; GETFLGCHK MOVFW WTLOP XORLW H'00' BTFSC STATUS,Z GOTO GETFLG RETURN ;****************************************************************************************** ; Function Name : MKWAVE ; Title : 波形を出力する ; Input : ; Output : ;****************************************************************************************** MKWAVE ; 1.100回ループ設定 MOVLW H'64' MOVWF LPWAV0 MKWAVE2 ; 2.波形の大きさを設定する ; (1)テーブルの加算値を計算(100-LPWAV0=>Wreg) MOVLW H'64' MOVWF TMP1 MOVFW LPWAV0 SUBWF TMP1,W ; (2)波形の大きさを得る(0=>200;0V=>3.92V) CALL GETWVAL ; (3)波形の振幅をオペアンプ(LM356)に合わせて補正する MOVWF TMP1 RRF TMP1,F ; 振幅を半分にする(0V=>1.96V) MOVLW D'26' ; 0.5V程度の下駄を履かせる ADDWF TMP1,W ; (4)D/A Converterに出力する MOVWF PORTB ; 3.波形の長さを設定する CALL WAVWAT DECFSZ LPWAV0,F GOTO MKWAVE2 RETURN ;****************************************************************************************** ; Function Name : WAVWAT ; Title : 波形の長さを設定する(WAITする) ; Input : ; Output : ;****************************************************************************************** WAVWAT MOVFW WTIND MOVWF LPWAVWATB WAVWATB MOVFW WTLOP MOVWF LPWAVWATA WAVWATA NOP NOP NOP NOP NOP NOP NOP DECFSZ LPWAVWATA,F GOTO WAVWATA DECFSZ LPWAVWATB,F GOTO WAVWATB RETURN END