;****************************************************************************************** ;PIC18F8720サンプルプログラム ; プログラム名 : ; 作成者 : ; 作成日 : Version 1.0 H17.07.15 ; 修正履歴 : ;******************************************************************************************* LIST P=PIC18F8720,ST=OFF,R=DEC INCLUDE "P18F8720.inc" ;標準ヘッダ定義ファイル __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H __CONFIG _CONFIG2L, _BOR_OFF_2L & _PWRT_OFF_2L & _BORV_20_2L __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H __CONFIG _CONFIG3H, _CCP2MX_OFF_3H __CONFIG _CONFIG3L, _WAIT_OFF_3L & _MC_MODE_3L ; Processor Mode Select bitsはP.43を見よ __CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L & _CP4_OFF_5L & _CP5_OFF_5L & _CP6_OFF_5L & _CP7_OFF_5L __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L & _WRT4_OFF_6L & _WRT5_OFF_6L & _WRT6_OFF_6L & _WRT7_OFF_6L __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L & _EBTR4_OFF_7L & _EBTR5_OFF_7L & _EBTR6_OFF_7L & _EBTR7_OFF_7L __CONFIG _CONFIG7H, _EBTRB_OFF_7H ; COMWT1A EQU 03H COMWP1A EQU 04H COMWP01A EQU 05H COMWP001A EQU 06H COMWP001B EQU 07H COMWP000001A EQU 08H COMBEEPLP EQU 09H COMTERMTP EQU 0AH COMEEPADDH EQU 0BH COMEEPADDL EQU 0CH COMCOU0 EQU 0DH COMCOU1 EQU 0EH COMCOU2 EQU 0FH COMCOU3 EQU 10H COMCOU4 EQU 11H COMCOU5 EQU 12H COMCHRCOU0 EQU 13H COMCHRCOU1 EQU 14H COMCHRCOU2 EQU 15H COMCHRCOU3 EQU 16H COMCHRCOU4 EQU 17H COMCHRCOU5 EQU 18H COMADANSL EQU 19H COMADANSR EQU 1AH COMCNT1 EQU 1BH COMCNT2 EQU 1CH MSGCNT EQU 1DH COMI2CRSLP EQU 1EH COMI2CSDTMP EQU 1FH COMI2CSDLP EQU 20H COMI2CRSTMP EQU 21H COMWRT24TMP EQU 22H COMATEEPSEL EQU 23H ; AT24C-EEPのアドレス選択 COMRED24EEPWK EQU 24H COMATEEPAD0 EQU 25H COMATEEPAD1 EQU 26H COMATEEPDAT EQU 27H COMTRANALLWK EQU 28H IODAT EQU 29H SENDLP EQU 2AH SENDWAT EQU 2BH RECLP EQU 2CH RECWAT EQU 2DH CNT EQU 2EH CNT1 EQU 2FH WK EQU 30H ORG 0 GOTO START ORG 8 GOTO START ORG 18H GOTO START ;******************************************************************************************* ; メッセージテーブルエリア     ;******************************************************************************************* ; 1.パワーオンデモ用(DEMOPON) DEMOPONTBL ADDWF PCL,F RETLW ' ' RETLW ' ' RETLW ' ' RETLW 'S' RETLW 'Y' RETLW 'S' RETLW ' ' RETLW '0' RETLW '2' RETLW '7' RETLW '8' RETLW 'F' RETLW '8' RETLW '1' RETLW 'C' RETLW 'I' RETLW 'P' RETLW ' ' RETLW ' ' RETLW 'd' RETLW 'r' RETLW 'o' RETLW 'B' RETLW ' ' RETLW 'U' RETLW 'P' RETLW 'C' RETLW ' ' RETLW 't' RETLW 'r' RETLW 'a' RETLW 't' RETLW 'S' START ; 1.Port設定 ; (1)PortAの定義 ; (2)PortBの定義 ; (3)PortCの定義 ; PORTC CLRF PORTC CLRF LATC MOVLW B'10100011' MOVWF TRISC BSF PORTC,2 ; LCD BSF PORTC,6 ; RS232C PORT1 ; (4)PortDの定義 ; (5)PortEの定義 ; (6)PortFの定義 ; PORTF CLRF PORTF CLRF LATF MOVLW B'01111111' MOVWF TRISF ; (7)PortGの定義 ; PORTG CLRF PORTG CLRF LATG MOVLW B'11111101' MOVWF TRISG BSF PORTG,1 ; RS232C PORT2 ; (8)PortHの定義 ; PORTH CLRF PORTH CLRF LATH MOVLW B'11110011' MOVWF TRISH BSF PORTH,2 ; SERIAL PORT2 BSF PORTH,3 ; SERIAL PORT1 ; ; 2.Initialize設定 ; (1)LCD初期化待ちと電源ONデモ表示 CALL COMWATP5 ; LCDのイニシャライズが完了するのを待つ CALL DEMOPON ; (2)EEP_AT24Cのデフォルトをゼロ番ソケットにする CALL COMSEL24EEP0 ; (3)A/D ConverterのデフォルトをAN0にする CALL COMADCINIT ; レジスタ初期化 CALL COMADCSEL0 ; AN0を選択 ; (4)0.5秒間WAITする CALL COMWATP5 MAIN CALL PRGMANU01 GOTO MAIN ;******************************************************************************************* ; 関数名 : DEMOPON     ; 機能 : デモ表示(パワーオンデモ) ; 引数 : ; 変数 :   ; 注意 : ;******************************************************************************************* DEMOPON CALL COMLCDCLR ; LCD画面クリア MOVLW H'40' MOVWF MSGCNT DEMOPONA CALL COMWATP001 MOVF MSGCNT,W CALL DEMOPONTBL CALL COMLCD DECFSZ MSGCNT,F ; DUMMY READ NOP DECFSZ MSGCNT,F GOTO DEMOPONA RETURN ;******************************************************************************************* ; 関数名 : PRGMANU01     ; 機能 : 初期メニュー ; 引数 : ; 変数 :   ; 注意 : ;******************************************************************************************* PRGMANU01 CALL COMLCDCLR ; LCD画面クリア ; Terminal Mode CALL COMWATP001 MOVLW 'T' CALL PRGMANU02LCD MOVLW 'e' CALL PRGMANU02LCD MOVLW 'r' CALL PRGMANU02LCD MOVLW 'm' CALL PRGMANU02LCD MOVLW '?' CALL PRGMANU02LCD CALL PRGMANU02YN CALL COMGETSW XORLW '1' BTFSC STATUS,Z CALL COMTERMA CALL COMWATP1 ; 7 Segment LED CALL COMLCDCLR CALL COMWATP001 MOVLW '7' CALL PRGMANU02LCD MOVLW 'L' CALL PRGMANU02LCD MOVLW 'E' CALL PRGMANU02LCD MOVLW 'D' CALL PRGMANU02LCD MOVLW '?' CALL PRGMANU02LCD CALL PRGMANU02YN CALL COMGETSW XORLW '1' BTFSC STATUS,Z CALL DEMOCOUHEX CALL COMWATP1 ; LED Demo CALL COMLCDCLR CALL COMWATP001 MOVLW 'L' CALL PRGMANU02LCD MOVLW 'E' CALL PRGMANU02LCD MOVLW 'D' CALL PRGMANU02LCD MOVLW '?' CALL PRGMANU02LCD CALL PRGMANU02YN CALL COMGETSW XORLW '1' BTFSC STATUS,Z CALL DEMOLED01 CALL COMWATP1 ; LED Demo CALL COMLCDCLR CALL COMWATP001 MOVLW 'L' CALL PRGMANU02LCD MOVLW 'E' CALL PRGMANU02LCD MOVLW 'D' CALL PRGMANU02LCD MOVLW 'r' CALL PRGMANU02LCD MOVLW '?' CALL PRGMANU02LCD CALL PRGMANU02YN CALL COMGETSW XORLW '1' BTFSC STATUS,Z CALL DEMOLED02 CALL COMWATP1 RETURN PRGMANU02LCD CALL COMLCD CALL COMWATP001 RETURN PRGMANU02YN CALL COMLCDCR CALL COMWATP001 MOVLW '1' CALL PRGMANU02LCD MOVLW ':' CALL PRGMANU02LCD MOVLW 'Y' CALL PRGMANU02LCD MOVLW 'e' CALL PRGMANU02LCD MOVLW 's' CALL PRGMANU02LCD MOVLW '/' CALL PRGMANU02LCD MOVLW '2' CALL PRGMANU02LCD MOVLW ':' CALL PRGMANU02LCD MOVLW 'N' CALL PRGMANU02LCD MOVLW 'o' CALL PRGMANU02LCD RETURN ;******************************************************************************************* ; 関数名 : DEMOLED02 ; 機能 : LEDパラレルボードデモ2 ; パラレルボードB, またはDに LED_Bordをつないでおく事 ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* DEMOLED02 CLRF PORTB ; PORTBの初期化 CLRF LATB ; データラッチレジスタの初期化 MOVLW B'00000000' ; PORTBのIO設定(0-7) MOVWF TRISB ; PORTBのIO設定 ; CLRF PORTD ; PORTBの初期化 CLRF LATD ; データラッチレジスタの初期化 MOVLW B'00000000' ; PORTBのIO設定(0-7) MOVWF TRISD ; PORTBのIO設定 ; MOVLW B'11111111' CALL DEMOLED02B CALL COMWATP1 CALL COMWATP1 MOVLW B'00000000' CALL DEMOLED02B CALL COMWATP1 CALL COMWATP1 MOVLW B'11111111' CALL DEMOLED02B CALL COMWATP1 CALL COMWATP1 MOVLW B'00000000' CALL DEMOLED02B CALL COMWATP1 CALL COMWATP1 MOVLW B'10101010' CALL DEMOLED02B CALL COMWATP1 MOVLW B'01010101' CALL DEMOLED02B CALL COMWATP1 MOVLW B'10101010' CALL DEMOLED02B CALL COMWATP1 MOVLW B'01010101' CALL DEMOLED02B CALL COMWATP1 MOVLW B'00000001' CALL DEMOLED02B CALL COMWATP1 CALL COMWATP1 CALL COMWATP1 DEMOLED02A MOVLW B'00000001' CALL DEMOLED02B MOVLW B'00000010' CALL DEMOLED02B MOVLW B'00000100' CALL DEMOLED02B MOVLW B'00001000' CALL DEMOLED02B MOVLW B'00010000' CALL DEMOLED02B MOVLW B'00100000' CALL DEMOLED02B MOVLW B'01000000' CALL DEMOLED02B MOVLW B'10000000' CALL DEMOLED02B ; GOTO DEMOLED02A DEMOLED02B MOVWF PORTB MOVWF PORTD CALL COMWATP01 RETURN ;******************************************************************************************* ; 関数名 : DEMOLED01 ; 機能 : LEDパラレルボードデモ ; パラレルボードB, またはDに LED_Bordをつないでおく事 ; 引数 : ; 変数 :   ; 注意 : ;******************************************************************************************* DEMOLED01 CLRF PORTB ; PORTBの初期化 CLRF LATB ; データラッチレジスタの初期化 MOVLW B'00000000' ; PORTBのIO設定(0-7) MOVWF TRISB ; PORTBのIO設定 CLRF PORTD ; PORTBの初期化 CLRF LATD ; データラッチレジスタの初期化 MOVLW B'00000000' ; PORTBのIO設定(0-7) MOVWF TRISD ; PORTBのIO設定 DEMOLED01A MOVLW B'00001100' MOVWF PORTB MOVLW B'00100001' MOVWF PORTD CALL COMWATP1 CALL COMWATP1 CALL COMWATP1 MOVLW B'10000001' MOVWF PORTB MOVLW B'01001001' MOVWF PORTD CALL COMWATP5 MOVLW B'00101000' MOVWF PORTB MOVLW B'00010000' MOVWF PORTD CALL COMWATP1 MOVLW B'10000000' MOVWF PORTB MOVLW B'00010100' MOVWF PORTD CALL COMWATP1 CALL COMWATP1 MOVLW B'10110111' MOVWF PORTB MOVLW B'00110010' MOVWF PORTD CALL COMWATP5 MOVLW B'00100100' MOVWF PORTB MOVLW B'00100001' MOVWF PORTD CALL COMWATP1 CALL COMWATP1 MOVLW B'10001111' MOVWF PORTB MOVLW B'11111010' MOVWF PORTD CALL COMWATP5 MOVLW B'11111111' MOVWF PORTB MOVLW B'11111111' MOVWF PORTD CALL COMWATP1 GOTO DEMOLED01A ;******************************************************************************************* ; 関数名 : DEMOCOUHEX ; 機能 : 16進(10進)カウンタデモ ; Serial_Port_1 に Sirial_7-Segment_Bordをつないでおく事 ; 引数 : ; 変数 :   ; 注意 : ;******************************************************************************************* DEMOCOUHEX MOVLW 'S' CALL COMSERTA ; Dummy Pulse CALL COMCNTINIT CALL COMWAT1 DEMOCOUHEX1 CALL COMCNTCHR MOVLW 'S' CALL COMSERTA CALL COMWATP01 MOVF COMCHRCOU5,W CALL COMSERTA CALL COMWATP01 MOVF COMCHRCOU4,W CALL COMSERTA CALL COMWATP01 MOVF COMCHRCOU3,W CALL COMSERTA CALL COMWATP01 MOVF COMCHRCOU2,W CALL COMSERTA CALL COMWATP01 MOVF COMCHRCOU1,W CALL COMSERTA CALL COMWATP01 MOVF COMCHRCOU0,W CALL COMSERTA CALL COMWATP01 CALL COMCNTHEX ; 16進バージョン ; CALL COMCNTDEC ; 10進バージョン CALL COMWATP01 GOTO DEMOCOUHEX1 ;******************************************************************************************* ; 関数名 : COMADCSEL0     ; 機能 : A/D ConverterにAN0を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL0 ; (1)ADCON0の設定 MOVLW B'00000001' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL1     ; 機能 : A/D ConverterにAN1を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL1 ; (1)ADCON0の設定 MOVLW B'00000101' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL2     ; 機能 : A/D ConverterにAN2を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL2 ; (1)ADCON2の設定 MOVLW B'00001001' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL3     ; 機能 : A/D ConverterにAN3を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL3 ; (1)ADCON0の設定 MOVLW B'00001101' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL4     ; 機能 : A/D ConverterにAN4を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL4 ; (1)ADCON0の設定 MOVLW B'00010001' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL5     ; 機能 : A/D ConverterにAN5を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL5 ; (1)ADCON0の設定 MOVLW B'00010101' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL6     ; 機能 : A/D ConverterにAN6を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL6 ; (1)ADCON0の設定 MOVLW B'00011001' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL7     ; 機能 : A/D ConverterにAN7を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL7 ; (1)ADCON0の設定 MOVLW B'00011101' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL8     ; 機能 : A/D ConverterにAN8を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL8 ; (1)ADCON0の設定 MOVLW B'00100001' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL9     ; 機能 : A/D ConverterにAN9を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL9 ; (1)ADCON0の設定 MOVLW B'00100101' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL10     ; 機能 : A/D ConverterにAN10を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL10 ; (1)ADCON0の設定 MOVLW B'00101001' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL11     ; 機能 : A/D ConverterにAN11を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL11 ; (1)ADCON0の設定 MOVLW B'00101101' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL12     ; 機能 : A/D ConverterにAN12を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL12 ; (1)ADCON0の設定 MOVLW B'00110001' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL13     ; 機能 : A/D ConverterにAN13を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL13 ; (1)ADCON0の設定 MOVLW B'00110101' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL14     ; 機能 : A/D ConverterにAN14を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL14 ; (1)ADCON0の設定 MOVLW B'00111001' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCSEL15     ; 機能 : A/D ConverterにAN15を選択する ; 引数 : Output : ADANSL,ADANSR ; 変数 : ; 注意 : ;******************************************************************************************* COMADCSEL15 ; (1)ADCON0の設定 MOVLW B'00111101' MOVWF ADCON0 ; ADCON0[7:6] None ; ADCON0[5-2] AN-Chanel-Select ; ADCON0[1] Go/Done ; ADCON0[0] A/D-Converter ON RETURN ;******************************************************************************************* ; 関数名 : COMADCINIT     ; 機能 : A/D Converterのレジスタ初期化 ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMADCINIT ; (1)ADCON1の設定 MOVLW B'00000000' MOVWF ADCON1 ; ADCON1[7-6] None ; ADCON1[5-4] V-Refer(GND-VCC) ; ADCON1[3-0] 全PORTをA/D_Converterで使用する ; (2)ADCON2の設定 MOVLW B'10000010' MOVWF ADCON2 ; ADCON2[7] 10Bitを右詰めで得る ; ADCON2[6-3] None ; ADCON2[2-0] サンプリング周波数;Fosc/32(OSC周波数の1/32) RETURN ;******************************************************************************************* ; 関数名 : COMADCGET     ; 機能 : A/D Converterから端子の電圧を得る ; GND=>0000 VCC=>1023 ; 引数 : ; Output1 : COMADANSL,COMADANSR (16進バイナリー形式) ; Output2 : COMCOU0〜COMCOU3 (10進数値形式) ; Output3 : COMCHRCOU0〜COMCHRCOU3 (10進キャラクタ形式) ; 変数 : ; 注意 : ;******************************************************************************************* COMADCGET ; (1)開始 BSF ADCON0,1 COMADCGET1 BTFSC ADCON0,1 ; ADCの開始フラグが完了するまで待つ GOTO COMADCGET1 ; ADCの開始フラグが完了するまで待つ ; ; CALL COMWATP001 BSF ADCON0,1 COMADCGET2 BTFSC ADCON0,1 ; ADCの開始フラグが完了するまで待つ GOTO COMADCGET2 ; ADCの開始フラグが完了するまで待つ ; MOVF ADRESH,W ; 上位2ビットデータ収集 MOVWF COMADANSL ; 上位2ビットデータ代入 MOVF ADRESL,W ; 下位8ビットデータ収集 MOVWF COMADANSR ; 下位8ビットデータ代入 ; (2)データ形式変換 CALL COMHEXDEC ; (3)キャラクタ変換 CALL COMCNTCHR RETURN ;******************************************************************************************* ; 関数名 : COMSEL24EEP0     ; 機能 : AT24C1024の0番ソケットのEEPを選択する ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMSEL24EEP0 MOVLW B'10100000' MOVWF COMATEEPSEL RETURN ;******************************************************************************************* ; 関数名 : COMSEL24EEP1     ; 機能 : AT24C1024の1番ソケットのEEPを選択する ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMSEL24EEP1 MOVLW B'10100100' MOVWF COMATEEPSEL RETURN ;******************************************************************************************* ; 関数名 : COMSEL24EEP2     ; 機能 : AT24C1024の2番ソケットのEEPを選択する ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMSEL24EEP2 MOVLW B'10100010' MOVWF COMATEEPSEL RETURN ;******************************************************************************************* ; 関数名 : COMRED24EEP     ; 機能 : AT24C1024からデータを読み込む ; 引数 : Input ; ATEEPAD1 アドレス2桁め ; ATEEPAD0 アドレス1桁め ; : Output : ; ATEEPDAT,W 読込みデータ ; 変数 : ; 注意 : ;******************************************************************************************* COMRED24EEP ; 1.Dummy Write ; (1)Start Condition CALL COMI2CSTR ; (2)ヘッダー送信(1010,0000) ; MOVLW B'10100000' MOVF COMATEEPSEL,W CALL COMI2CSEND ; (3)アドレス送信 ; 上位アドレス送信 BCF COMATEEPAD1,7 ; 不定 ; BSF COMATEEPAD1,6 ; MSBセット H17.07.07 Comment MOVF COMATEEPAD1,W CALL COMI2CSEND ; 下位アドレス送信 MOVF COMATEEPAD0,W CALL COMI2CSEND ; 2.READ ; (1)Start Condition CALL COMI2CSTR ; (2)ヘッダー送信(1010,0001) ; MOVLW B'10100001' MOVF COMATEEPSEL,W MOVWF COMRED24EEPWK BSF COMRED24EEPWK,0 MOVF COMRED24EEPWK,W CALL COMI2CSEND ; (3)読込み CALL COMI2CRES ; (4)Stop Condition CALL COMI2CSTP MOVF COMATEEPDAT,W RETURN ;******************************************************************************************* ; 関数名 : COMWRT24EEP     ; 機能 : AT24C1024にデータを書き込む ; 引数 : Input ; ATEEPAD1 アドレス2桁め ; ATEEPAD0 アドレス1桁め ; W 書き込みデータ ; : Output : なし ; 変数 : ; 注意 : ;******************************************************************************************* COMWRT24EEP MOVWF COMWRT24TMP ; (1)Start Condition CALL COMI2CSTR ; (2)ヘッダー送信(1010,0000) ; MOVLW B'10100000' MOVF COMATEEPSEL,W CALL COMI2CSEND ; (3)アドレス送信 ; 上位アドレス送信 BCF COMATEEPAD1,7 ; 不定 ; BSF COMATEEPAD1,6 ; MSBセット H17.07.07 Comment MOVF COMATEEPAD1,W CALL COMI2CSEND ; 下位アドレス送信 MOVF COMATEEPAD0,W CALL COMI2CSEND ; (4)データ送信 MOVF COMWRT24TMP,W CALL COMI2CSEND ; (5)Stop Condition CALL COMI2CSTP RETURN ;******************************************************************************************* ; 関数名 : COMI2CSTR     ; 機能 : I2Cバスでスタートコンディションを与える ; 引数 : Input : なし ; : Output : なし ; 変数 : ; 注意 : ;******************************************************************************************* COMI2CSTR BSF PORTC,4 ; SDA信号(1) BSF PORTC,3 ; SCL信号(1) CALL COMWATP000001 ; 0.6μS以上 BCF PORTC,4 ; SDA信号(0) CALL COMWATP000001 ; 0.6μS以上 BCF PORTC,3 ; SCL信号(0) CALL COMWATP000001 ; 0.6μS以上 RETURN ;******************************************************************************************* ; 関数名 : COMI2CSTP     ; 機能 : I2Cバスでストップコンディションを与える ; 引数 : Input : なし ; : Output : なし ; 変数 : ; 注意 : ;******************************************************************************************* COMI2CSTP BCF PORTC,3 ; SCL信号(0) BCF PORTC,4 ; SDA信号(0) CALL COMWATP000001 ; 0.6μS以上 BSF PORTC,3 ; SCL信号(1) BCF PORTC,4 ; SDA信号(0) CALL COMWATP000001 ; 0.6μS以上 BSF PORTC,4 ; SDA信号(1) CALL COMWATP000001 ; 0.6μS以上 RETURN ;******************************************************************************************* ; 関数名 : COMI2CRES     ; 機能 : I2Cバスで8ビットのデータをバスから受ける ; 引数 : Input : なし ; : Output : W ; 変数 : ; 注意 : ;******************************************************************************************* COMI2CRES MOVLW B'10110011' ; PORTCのIO設定(0-7) MOVWF TRISC ; PORTCのIO設定 BSF PORTC,5 BSF PORTC,6 ;1:8Bit受信 ; 0)ループ変数設定 MOVLW H'08' MOVWF COMI2CRSLP COMI2CRES2 ; 1)クロック設定(1) CALL COMWATP000001 BSF PORTC,3 CALL COMWATP000001 ; 2)データ設定 BTFSS PORTC,4 ; BCF COMI2CRSTMP,0 ; BTFSC PORTC,4 ; BSF COMI2CRSTMP,0 ; ; 3)クロック設定(0) BCF PORTC,3 MOVF COMI2CRSTMP,W ; 1回分の余計なシフトを補正 MOVWF COMATEEPDAT ; 1回分の余計なシフトを補正 RLCF COMI2CRSTMP,F DECFSZ COMI2CRSLP,F GOTO COMI2CRES2 ;2:NoAct CALL COMI2CCLOK CALL COMWATP000001 ;3:元に戻す MOVLW B'10100011' ; PORTCのIO設定(0-7) MOVWF TRISC ; PORTCのIO設定 BSF PORTC,5 BSF PORTC,6 ;4:結果を返す MOVF COMATEEPDAT,W RETURN ;******************************************************************************************* ; 関数名 : COMI2CSEND     ; 機能 : I2Cバスで8ビットのデータを与える ; 引数 : Input : W 書き込みデータ ; : Output : なし ; 変数 : ; 注意 : ;******************************************************************************************* COMI2CSEND MOVWF COMI2CSDTMP ;1:8Bit送信 ; 0)ループ変数設定 MOVLW H'08' MOVWF COMI2CSDLP COMI2CSEND2 ; 1)データ設定 BTFSS COMI2CSDTMP,7 ; BCF PORTC,4 ; BTFSC COMI2CSDTMP,7 ; BSF PORTC,4 ; ; 2)クロック信号 CALL COMI2CCLOK ; ; 3)ACTのリターンでデバイス衝突が起きないようにゼロにする BCF PORTC,4 ; ; 4)シフト RLCF COMI2CSDTMP,F DECFSZ COMI2CSDLP,F GOTO COMI2CSEND2 ;(2)ACT検知 CALL COMI2CACT RETURN ;******************************************************************************************* ; 関数名 : COMI2CACT    ; 機能 : I2CバスでACT信号を検知する ; 引数 : Input : なし ; : Output : なし ; 変数 : ; 注意 : ;******************************************************************************************* COMI2CACT MOVLW B'10110011' ; PORTCのIO設定(0-7) MOVWF TRISC ; PORTCのIO設定 BSF PORTC,5 BSF PORTC,6 CALL COMWATP000001 ; BSF PORTC,3 ; SCL信号(1) CALL COMWATP000001 ; COMI2CACT2 BTFSC PORTC,4 ; GOTO COMI2CACT2 ; BCF PORTC,3 ; SCL信号(0) CALL COMWATP000001 ; ; MOVLW B'10100011' ; PORTCのIO設定(0-7) MOVWF TRISC ; PORTCのIO設定 BSF PORTC,5 BSF PORTC,6 RETURN ;******************************************************************************************* ; 関数名 : COMI2CCLOK    ; 機能 : I2Cバスでクロックパルスを与える ; 引数 : Input : なし ; : Output : なし ; 変数 : ; 注意 : ;******************************************************************************************* COMI2CCLOK BCF PORTC,3 ; SCL信号(0) CALL COMWATP000001 ; 1.3μS以上 CALL COMWATP000001 ; 1.3μS以上 BSF PORTC,3 ; SCL信号(1) CALL COMWATP000001 ; 0.6μS以上 BCF PORTC,3 ; SCL信号(0) NOP ; NOP ; RETURN ;******************************************************************************************* ; 関数名 : COMGETSW     ; 機能 : 基板上のプッシュSWの判定 ; 引数 : W: 押されたプッシュSWの番号 ; 変数 : ; 注意 : ;******************************************************************************************* COMGETSW BTFSC PORTG,0 RETLW '1' BTFSC PORTG,3 RETLW '2' BTFSC PORTG,4 RETLW '3' GOTO COMGETSW ;******************************************************************************************* ; 関数名 : COMTERMA     ; 機能 : ターミナルモード ; 入力 RS232C(ポート1) ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMTERMA CALL COMWATP001 CALL COMLCDCLR MOVLW 'O' CALL COMLCD CALL COMWATP001 MOVLW 'K' CALL COMLCD CALL COMWATP001 MOVLW '>' CALL COMLCD CALL COMWATP001 ; CALL COMRESA MOVWF COMTERMTP ; CALL COMLCDCLR COMTERMA1 MOVF COMTERMTP,W CALL COMLCDT MOVF COMTERMTP,W CALL COMTRNA ; CALL COMRESA MOVWF COMTERMTP GOTO COMTERMA1 ;******************************************************************************************* ; 関数名 : COMTRANALL     ; 機能 : LCD,Serlal@,RS232C@に同時に出力する ; 引数 : W ; 変数 : ; 注意 : ;******************************************************************************************* COMTRANALL ; 1.LCDに出力 MOVWF COMTRANALLWK CALL COMLCD ; 2.Serial Portに出力 MOVF COMTRANALLWK,W CALL COMSERTA ; 3.RS232C Portに出力 MOVF COMTRANALLWK,W CALL COMTRNA RETURN ;******************************************************************************************* ; 関数名 : COMLCDCLR     ; 機能 : LCDの画面クリア ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMLCDCLR MOVLW H'80' CALL COMLCD RETURN ;******************************************************************************************* ; 関数名 : COMLCDCR     ; 機能 : LCDの2行目入力(改行) ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMLCDCR MOVLW H'81' CALL COMLCD RETURN ;******************************************************************************************* ; 関数名 : COMLCD     ; 機能 : LCDに文字を表示する(受信確認あり) ; 引数 : W : キャラクタコード ; 変数 : ; 注意 : ;******************************************************************************************* COMLCD MOVWF IODAT CALL COMLCDT CALL COMRLCD RETURN ;******************************************************************************************* ; 関数名 : COMLCDT     ; 機能 : LCD(PORTC2)に文字を表示する ; 引数 : W : キャラクタコード ; 変数 : ; 注意 : ;******************************************************************************************* COMLCDT MOVWF IODAT BCF PORTC,2 ; 送信開始 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF SENDWAT COMLCDT1 DECFSZ SENDWAT,F GOTO COMLCDT1 ; ; (2)データ送信(8ビット) MOVLW 8 ; 8ビットデータ分、送信する MOVWF SENDLP NOP COMLCDT2 RRCF IODAT,F NOP BTFSS STATUS,C ; ビットデータが0の時, 0を立てる BCF PORTC,2 BTFSC STATUS,C ; ビットデータが1の時, 1を立てる BSF PORTC,2 MOVLW H'AA' ; パルス(9600BPS,OSC;20MHz) MOVWF SENDWAT COMLCDT3 DECFSZ SENDWAT,F GOTO COMLCDT3 DECFSZ SENDLP,F GOTO COMLCDT2 ; (3)終了 BSF PORTC,2 ; フラグを戻す ; (4)送信後、少し待つ CALL TIMER RETURN ;******************************************************************************************* ; 関数名 : COMRLCD     ; 機能 : シリアルLCD(PORTC5)のリターンを得る ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMRLCD ; (0)変数初期化 CLRF IODAT COMRLCD0 ; (1)受信データを待つ BTFSC PORTC,5 GOTO COMRLCD0 ; (2)1/2ビット分待つ MOVLW H'55' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMRLCD1 DECFSZ RECWAT,F GOTO COMRLCD1 ; (3)データ受信(8ビット分) MOVLW 8 MOVWF RECLP NOP COMRLCD2 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMRLCD3 DECFSZ RECWAT,F GOTO COMRLCD3 NOP BTFSS PORTC,5 ; ビットデータが0の時, 0を立てる BCF STATUS,C BTFSC PORTC,5 ; ビットデータが1の時, 1を立てる BSF STATUS,C RRCF IODAT,F ; 変数内でビットをシフトする DECFSZ RECLP,F GOTO COMRLCD2 MOVF IODAT,W NOP NOP ; RETURN ;******************************************************************************************* ; 関数名 : COMTRNA     ; 機能 : 232Cポート1(PORTC6)に文字を出力する ; 引数 : W : キャラクタコード ; 変数 : ; 注意 : ;******************************************************************************************* COMTRNA MOVWF IODAT BCF PORTC,6 ; 送信開始 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF SENDWAT COMTRNA1 DECFSZ SENDWAT,F GOTO COMTRNA1 ; ; (2)データ送信(8ビット) MOVLW 8 ; 8ビットデータ分、送信する MOVWF SENDLP NOP COMTRNA2 RRCF IODAT,F NOP BTFSS STATUS,C ; ビットデータが0の時, 0を立てる BCF PORTC,6 BTFSC STATUS,C ; ビットデータが1の時, 1を立てる BSF PORTC,6 MOVLW H'AA' ; パルス(9600BPS,OSC;20MHz) MOVWF SENDWAT COMTRNA3 DECFSZ SENDWAT,F GOTO COMTRNA3 DECFSZ SENDLP,F GOTO COMTRNA2 ; (3)終了 BSF PORTC,6 ; フラグを戻す ; (4)送信後、少し待つ CALL TIMER RETURN ;******************************************************************************************* ; 関数名 : COMRESA     ; 機能 : 232Cポート1(PORTC7)から文字を受信する ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMRESA ; (0)変数初期化 CLRF IODAT COMRESA0 ; (1)受信データを待つ BTFSC PORTC,7 GOTO COMRESA0 ; (2)1/2ビット分待つ MOVLW H'55' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMRESA1 DECFSZ RECWAT,F GOTO COMRESA1 ; (3)データ受信(8ビット分) MOVLW 8 MOVWF RECLP NOP COMRESA2 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMRESA3 DECFSZ RECWAT,F GOTO COMRESA3 NOP BTFSS PORTC,7 ; ビットデータが0の時, 0を立てる BCF STATUS,C BTFSC PORTC,7 ; ビットデータが1の時, 1を立てる BSF STATUS,C RRCF IODAT,F ; 変数内でビットをシフトする DECFSZ RECLP,F GOTO COMRESA2 MOVF IODAT,W NOP NOP ; RETURN ;******************************************************************************************* ; 関数名 : COMTRNB     ; 機能 : 232Cポート2(PORTG1)に文字を出力する ; 引数 : W : キャラクタコード ; 変数 : ; 注意 : ;******************************************************************************************* COMTRNB MOVWF IODAT BCF PORTG,1 ; 送信開始 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF SENDWAT COMTRNB1 DECFSZ SENDWAT,F GOTO COMTRNB1 ; ; (2)データ送信(8ビット) MOVLW 8 ; 8ビットデータ分、送信する MOVWF SENDLP NOP COMTRNB2 RRCF IODAT,F NOP BTFSS STATUS,C ; ビットデータが0の時, 0を立てる BCF PORTG,1 BTFSC STATUS,C ; ビットデータが1の時, 1を立てる BSF PORTG,1 MOVLW H'AA' ; パルス(9600BPS,OSC;20MHz) MOVWF SENDWAT COMTRNB3 DECFSZ SENDWAT,F GOTO COMTRNB3 DECFSZ SENDLP,F GOTO COMTRNB2 ; (3)終了 BSF PORTG,1 ; フラグを戻す ; (4)送信後、少し待つ CALL TIMER RETURN ;******************************************************************************************* ; 関数名 : COMRESB     ; 機能 : 232Cポート2(PORTG2)から文字を受信する ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMRESB ; (0)変数初期化 CLRF IODAT COMRESB0 ; (1)受信データを待つ BTFSC PORTG,2 GOTO COMRESB0 ; (2)1/2ビット分待つ MOVLW H'55' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMRESB1 DECFSZ RECWAT,F GOTO COMRESB1 ; (3)データ受信(8ビット分) MOVLW 8 MOVWF RECLP NOP COMRESB2 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMRESB3 DECFSZ RECWAT,F GOTO COMRESB3 NOP BTFSS PORTG,2 ; ビットデータが0の時, 0を立てる BCF STATUS,C BTFSC PORTG,2 ; ビットデータが1の時, 1を立てる BSF STATUS,C RRCF IODAT,F ; 変数内でビットをシフトする DECFSZ RECLP,F GOTO COMRESB2 MOVF IODAT,W NOP NOP ; RETURN ;******************************************************************************************* ; 関数名 : COMSERTA     ; 機能 : シリアルポート1(PORTH3)に文字を出力する ; 引数 : W : キャラクタコード ; 変数 : ; 注意 : ;******************************************************************************************* COMSERTA MOVWF IODAT BCF PORTH,3 ; 送信開始 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF SENDWAT COMSERTA1 DECFSZ SENDWAT,F GOTO COMSERTA1 ; ; (2)データ送信(8ビット) MOVLW 8 ; 8ビットデータ分、送信する MOVWF SENDLP NOP COMSERTA2 RRCF IODAT,F NOP BTFSS STATUS,C ; ビットデータが0の時, 0を立てる BCF PORTH,3 BTFSC STATUS,C ; ビットデータが1の時, 1を立てる BSF PORTH,3 MOVLW H'AA' ; パルス(9600BPS,OSC;20MHz) MOVWF SENDWAT COMSERTA3 DECFSZ SENDWAT,F GOTO COMSERTA3 DECFSZ SENDLP,F GOTO COMSERTA2 ; (3)終了 BSF PORTH,3 ; フラグを戻す ; (4)送信後、少し待つ CALL TIMER RETURN ;******************************************************************************************* ; 関数名 : COMSERRA     ; 機能 : シリアルポート1(PORTH1)から文字を受信する ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMSERRA ; (0)変数初期化 CLRF IODAT COMSERRA0 ; (1)受信データを待つ BTFSC PORTH,1 GOTO COMSERRA0 ; (2)1/2ビット分待つ MOVLW H'55' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMSERRA1 DECFSZ RECWAT,F GOTO COMSERRA1 ; (3)データ受信(8ビット分) MOVLW 8 MOVWF RECLP NOP COMSERRA2 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMSERRA3 DECFSZ RECWAT,F GOTO COMSERRA3 NOP BTFSS PORTH,1 ; ビットデータが0の時, 0を立てる BCF STATUS,C BTFSC PORTH,1 ; ビットデータが1の時, 1を立てる BSF STATUS,C RRCF IODAT,F ; 変数内でビットをシフトする DECFSZ RECLP,F GOTO COMSERRA2 MOVF IODAT,W NOP NOP ; RETURN ;******************************************************************************************* ; 関数名 : COMSERTB     ; 機能 : シリアルポート2(PORTH2)に文字を出力する ; 引数 : W : キャラクタコード ; 変数 : ; 注意 : ;******************************************************************************************* COMSERTB MOVWF IODAT BCF PORTH,2 ; 送信開始 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF SENDWAT COMSERTB1 DECFSZ SENDWAT,F GOTO COMSERTB1 ; ; (2)データ送信(8ビット) MOVLW 8 ; 8ビットデータ分、送信する MOVWF SENDLP NOP COMSERTB2 RRCF IODAT,F NOP BTFSS STATUS,C ; ビットデータが0の時, 0を立てる BCF PORTH,2 BTFSC STATUS,C ; ビットデータが1の時, 1を立てる BSF PORTH,2 MOVLW H'AA' ; パルス(9600BPS,OSC;20MHz) MOVWF SENDWAT COMSERTB3 DECFSZ SENDWAT,F GOTO COMSERTB3 DECFSZ SENDLP,F GOTO COMSERTB2 ; (3)終了 BSF PORTH,2 ; フラグを戻す ; (4)送信後、少し待つ CALL TIMER RETURN ;******************************************************************************************* ; 関数名 : COMSERRB     ; 機能 : シリアルポート2(PORTH0)から文字を受信する ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMSERRB ; (0)変数初期化 CLRF IODAT COMSERRB0 ; (1)受信データを待つ BTFSC PORTH,0 GOTO COMSERRB0 ; (2)1/2ビット分待つ MOVLW H'55' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMSERRB1 DECFSZ RECWAT,F GOTO COMSERRB1 ; (3)データ受信(8ビット分) MOVLW 8 MOVWF RECLP NOP COMSERRB2 MOVLW H'AA' ; 9600BPS,OSC;20MHz MOVWF RECWAT COMSERRB3 DECFSZ RECWAT,F GOTO COMSERRB3 NOP BTFSS PORTH,0 ; ビットデータが0の時, 0を立てる BCF STATUS,C BTFSC PORTH,0 ; ビットデータが1の時, 1を立てる BSF STATUS,C RRCF IODAT,F ; 変数内でビットをシフトする DECFSZ RECLP,F GOTO COMSERRB2 MOVF IODAT,W NOP NOP ; RETURN ;******************************************************************************************* ; 関数名 : COMBEEP     ; 機能 : ビープ音を出す ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* COMBEEP MOVLW H'FF' MOVWF COMBEEPLP COMBEEP1 BSF PORTF,7 CALL COMWATP001 BCF PORTF,7 CALL COMWATP001 DECFSZ COMBEEPLP,F GOTO COMBEEP1 RETURN ;****************************************************************************************** ; 関数名 : COMHEXDEC    ; 機能 : 10Bit-A/D-Converter の16進数を文字型10進数(4桁)に変換する ; 引数 : ; In COMADANSL,COMADANSR (10Bit-A/D-Converterの出力形式) ; Out COMCOU0,COMCOU1,COMCOU2,COMCOU3(4桁の10進数) ; 変数 : なし ; 注意 : なし ;****************************************************************************************** COMHEXDEC ; (1)10進数の出力変数を初期化  CLRF COMCOU0 CLRF COMCOU1 CLRF COMCOU2 CLRF COMCOU3 CLRF COMCOU4 CLRF COMCOU5 ; ; (2)16進数を10進数に変換する ; ※ Binary-16進数の値分だけ10進カウンタを回して、Binary-16進数を文字型10進数の ; COMCOU0,COMCOU1,COMCOU2,COMCOU3にカウントアップして10進数を作り出す ; MOVF COMADANSL,W XORLW H'00' BTFSC STATUS,Z GOTO COMHEXDEE ; MOVF COMADANSL,W MOVWF COMCNT2 COMHEXDEC2 MOVLW H'FF' MOVWF COMCNT1 CALL COMCNTDEC COMHEXDEC1 CALL COMCNTDEC DECFSZ COMCNT1,F GOTO COMHEXDEC1 DECFSZ COMCNT2,F GOTO COMHEXDEC2 ; COMHEXDEE MOVF COMADANSR,W XORLW H'00' BTFSC STATUS,Z GOTO COMHEXDECE MOVF COMADANSR,W MOVWF COMCNT1 COMHEXDEE1 CALL COMCNTDEC DECFSZ COMCNT1,F GOTO COMHEXDEE1 COMHEXDECE RETURN ;****************************************************************************************** ; 関数名 : COMCNTDEC  ; 機能 : 10進(6桁)アップカウンタ ; 引数 : COMCOU0〜COMCOU5 ; 変数 : なし ; 注意 : なし ;****************************************************************************************** COMCNTDEC MOVLW H'01' ADDWF COMCOU0,F ; 0桁目10進カウンタ(0aで桁上げ) MOVF COMCOU0,W XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COMCOU0 MOVLW H'01' ADDWF COMCOU1,F ; 1桁目10進カウンタ(0aで桁上げ) MOVF COMCOU1,W XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COMCOU1 MOVLW H'01' ADDWF COMCOU2,F ; 2桁目10進カウンタ(0aで桁上げ) MOVF COMCOU2,W XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COMCOU2 MOVLW H'01' ADDWF COMCOU3,F ; 3桁目10進カウンタ(0aで桁上げ) MOVF COMCOU3,W XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COMCOU3 MOVLW H'01' ADDWF COMCOU4,F ; 4桁目10進カウンタ(0aで桁上げ) MOVF COMCOU4,W XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COMCOU4 MOVLW H'01' ADDWF COMCOU5,F ; 5桁目10進カウンタ(0aで桁上げ) MOVF COMCOU5,W XORLW H'0A' BTFSS STATUS,Z RETURN ; CLRF COMCOU0 CLRF COMCOU1 CLRF COMCOU2 CLRF COMCOU3 CLRF COMCOU4 CLRF COMCOU5 ; RETURN ;****************************************************************************************** ; 関数名 : COMCNTHEX    ; 機能 : 16進(6桁)アップカウンター ; 引数 : COMCOU0〜COMCOU5 ; 変数 : ; 注意 : ;****************************************************************************************** COMCNTHEX ; 0桁目 MOVLW H'01' ADDWF COMCOU0,F BTFSS COMCOU0,4 RETURN ; 1桁目 MOVF COMCOU0,W ANDLW B'00001111' MOVWF COMCOU0 MOVLW H'01' ADDWF COMCOU1,F BTFSS COMCOU1,4 RETURN ; 2桁目 MOVF COMCOU1,W ANDLW B'00001111' MOVWF COMCOU1 MOVLW H'01' ADDWF COMCOU2,F BTFSS COMCOU2,4 RETURN ; 3桁目 MOVF COMCOU2,W ANDLW B'00001111' MOVWF COMCOU2 MOVLW H'01' ADDWF COMCOU3,F BTFSS COMCOU3,4 RETURN ; 4桁目 MOVF COMCOU3,W ANDLW B'00001111' MOVWF COMCOU3 MOVLW H'01' ADDWF COMCOU4,F BTFSS COMCOU4,4 RETURN ; 5桁目 MOVF COMCOU4,W ANDLW B'00001111' MOVWF COMCOU4 MOVLW H'01' ADDWF COMCOU5,F BTFSS COMCOU5,4 RETURN ; 桁上がり CLRF COMCOU0 CLRF COMCOU1 CLRF COMCOU2 CLRF COMCOU3 CLRF COMCOU4 CLRF COMCOU5 RETURN ;****************************************************************************************** ; 関数名 : COMCNTINIT    ; 機能 : カウンター変数の初期化 ; 引数 : COMCOU0〜COMCOU5 ; 変数 : ; 注意 : ;****************************************************************************************** COMCNTINIT CLRF COMCOU0 CLRF COMCOU1 CLRF COMCOU2 CLRF COMCOU3 CLRF COMCOU4 CLRF COMCOU5 RETURN ;****************************************************************************************** ; 関数名 : COMCNTCHR    ; 機能 : カウンター変数をキャラクタに変換 ; 引数 : (I)COMCOU0〜COMCOU5 ; (O)COMCHRCOU0〜COMCHRCOU5 ; 変数 : ; 注意 : ;****************************************************************************************** COMCNTCHR MOVF COMCOU0,W IORLW H'30' MOVWF COMCHRCOU0 ; MOVF COMCOU1,W IORLW H'30' MOVWF COMCHRCOU1 ; MOVF COMCOU2,W IORLW H'30' MOVWF COMCHRCOU2 ; MOVF COMCOU3,W IORLW H'30' MOVWF COMCHRCOU3 ; MOVF COMCOU4,W IORLW H'30' MOVWF COMCHRCOU4 ; MOVF COMCOU5,W IORLW H'30' MOVWF COMCHRCOU5 ; RETURN ;******************************************************************************************* ; 関数名 : COMWAT1     ; 機能 : WAIT 1秒 ; 引数 : ; 変数 : ; 注意 : 10(Hz) => 1(Hz)/10分周 ;******************************************************************************************* COMWAT1 MOVLW H'0A' ; 10分周(>10分周) MOVWF COMWT1A COMWA1A CALL COMWATP1 DECFSZ COMWT1A,F GOTO COMWA1A RETURN ;******************************************************************************************* ; 関数名 : COMWATP5     ; 機能 : WAIT 0.5秒 ; 引数 : ; 変数 : ; 注意 : 1,000(Hz) => 10(Hz)/100分周 ;******************************************************************************************* COMWATP5 CALL COMWATP1 CALL COMWATP1 CALL COMWATP1 CALL COMWATP1 CALL COMWATP1 RETURN ;******************************************************************************************* ; 関数名 : COMWATP1     ; 機能 : WAIT 0.1秒 ; 引数 : ; 変数 : ; 注意 : 1,000(Hz) => 10(Hz)/100分周 ;******************************************************************************************* COMWATP1 MOVLW H'64' ; 100分周(>100分周) MOVWF COMWP1A COMWTP1A CALL COMWATP001 DECFSZ COMWP1A,F GOTO COMWTP1A RETURN ;******************************************************************************************* ; 関数名 : COMWATP01     ; 機能 : WAIT 0.01秒 ; 引数 : ; 変数 : ; 注意 : 1,000(Hz) => 100(Hz)/10分周 ;******************************************************************************************* COMWATP01 MOVLW H'0A' ; 10分周(>10分周) MOVWF COMWP01A COMWTP01A CALL COMWATP001 DECFSZ COMWP01A,F GOTO COMWTP01A RETURN ;******************************************************************************************* ; 関数名 : COMWATP001     ; 機能 : WAIT 0.001秒 ; 引数 : ; 変数 : ; 注意 : 20MHzのOSC用 ; 20,000,000(Hz) => 1,000(Hz)/20,000分周 ;******************************************************************************************* COMWATP001 MOVLW H'64' ; 100分周(>100分周) MOVWF COMWP001B COMWTP001B MOVLW H'63' ; 99分周(200分周) MOVWF COMWP001A COMWTP001A DECFSZ COMWP001A,F GOTO COMWTP001A DECFSZ COMWP001B,F GOTO COMWTP001B RETURN ;******************************************************************************************* ; 関数名 : COMWATP000001     ; 機能 : 0.000001秒(1μ秒[1000n秒])タイマー ; 引数 : ; 変数 : ; 注意 : 20MHz用 ;******************************************************************************************* COMWATP000001 MOVLW H'09' MOVWF COMWP000001A COMWATP000001A DECFSZ COMWP000001A,F GOTO COMWATP000001A RETURN ; ;****************************************************************************************** ; Function Name : TIMER ; Disctiption : タイマー(1000回ループ) ; Input : ; Output : ;****************************************************************************************** TIMER MOVLW H'0A' MOVWF CNT1 TIMER1 MOVLW H'64' MOVWF CNT TIMER2 DECFSZ CNT,F GOTO TIMER2 DECFSZ CNT1,F GOTO TIMER1 RETURN END