;****************************************************************************************** ; 16*32ドット表示機用 通信制御サンプル ; ※このプログラムは、18F452/16F877用とペアで使用する ; Program Name : ; Programer : ; Create date : Version 1.0 H17.08.01 ; History : ;****************************************************************************************** ; (1)Descript I/O ; GP0 : PIC18F452からのシグナル入力 ; GP1 : PIC18F452へのデータ出力 ; GP4 : Input (RS) ; GP5 : Output(TX) ; ;****************************************************************************************** LIST P=PIC12F683,ST=OFF,R=DEC INCLUDE "P12F683.inc" ;標準ヘッダ定義ファイル __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF ; WATP001TMR = 80 ; 8MHz用001秒タイマー分周値 ; IODAT EQU 20H SENDLP EQU 21H SENDWAT EQU 22H RECLP EQU 23H RECWAT EQU 24H MSGCNT EQU 25H CNT EQU 26H CNT1 EQU 27H BKIODAT EQU 28H ORG 0 GOTO START ORG 4 GOTO START START BSF STATUS,RP0 ; BANK1を選択 BSF OSCCON,6 ; 8MHzを設定 BSF OSCCON,5 ; 8MHzを設定 BSF OSCCON,4 ; 8MHzを設定 BCF STATUS,RP0 ; BANK0を選択 MOVLW 07H ; BANK0でデジタルIO設定 MOVWF CMCON0 ; BANK0でデジタルIO設定 CLRF GPIO ; BANK0でポート初期化 BSF STATUS,RP0 ; BANK1を選択 CLRF ANSEL ; BANK1でデジタルIO初期化 MOVLW B'010001' ; BANK1でPORT設定 MOVWF TRISIO ; BANK1でPORT設定 BCF STATUS,RP0 ; BANK0を選択 BSF GPIO,1 CALL DEMO1 MAIN CALL REC BCF GPIO,1 MOVFW IODAT MOVWF BKIODAT MAIN1 BTFSC GPIO,0 GOTO MAIN1 BSF GPIO,1 CALL PSEND MOVFW BKIODAT MOVWF IODAT CALL SEND GOTO MAIN ;******************************************************************************************* ; 関数名 : DEMO1     ; 機能 : PowerON デモ ; 引数 : ; 変数 : ; 注意 : ;******************************************************************************************* DEMO1 CALL WATP001 MOVLW H'1B' MOVWF MSGCNT DEMO1A MOVFW MSGCNT CALL DEMO1TBL MOVWF IODAT CALL SEND CALL WATP001 DECFSZ MSGCNT,F GOTO DEMO1A RETLW 0 DEMO1TBL ADDWF PCL,F RETLW ' ' RETLW '>' RETLW 'K' RETLW 'O' RETLW ' ' RETLW '3' RETLW '8' RETLW '6' RETLW 'F' RETLW '2' RETLW '1' RETLW 'C' RETLW 'I' RETLW 'P' RETLW ' ' RETLW 'd' RETLW 'e' RETLW 't' RETLW 'c' RETLW 'e' RETLW 'n' RETLW 'n' RETLW 'o' RETLW 'C' RETLW ' ' RETLW ' ' RETLW ' ' RETLW ' ' ;****************************************************************************************** ; Function Name : REC ; Disctiption : RS232C受信サブルーチン(GPIO,4) ; 9600BPS OSC;8.000MHz仕様 ; Input : ; Output : ;****************************************************************************************** ; (0)変数初期化 CLRF IODAT ; (1)受信データを待つ REC BTFSC GPIO,4 GOTO REC ; (2)1/2ビット分待つ MOVLW H'21' ; 9600BPS,OSC;8MHz MOVWF RECWAT REC1 DECFSZ RECWAT,F GOTO REC1 ; (3)データ受信(8ビット分) MOVLW 8 MOVWF RECLP NOP REC2 MOVLW H'42' ; 9600BPS,OSC;8MHz MOVWF RECWAT REC3 DECFSZ RECWAT,F GOTO REC3 NOP BTFSS GPIO,4 ; ビットデータが0の時, 0を立てる BCF STATUS,C BTFSC GPIO,4 ; ビットデータが1の時, 1を立てる BSF STATUS,C RRF IODAT,F ; 変数内でビットをシフトする DECFSZ RECLP,F GOTO REC2 NOP NOP ; RETURN ;****************************************************************************************** ; Function Name : SEND ; Disctiption : RS232C送信サブルーチン(GPIO,5) ; 9600BPS OSC;8.000MHz仕様 ; Input : ; Output : ;****************************************************************************************** ; (1)送信開始 SEND BCF GPIO,5 ; 送信開始 MOVLW H'42' ; 9600BPS,OSC;8MHz MOVWF SENDWAT SEND1 DECFSZ SENDWAT,F GOTO SEND1 ; ; (2)データ送信(8ビット) MOVLW 8 ; 8ビットデータ分、送信する MOVWF SENDLP NOP SEND2 RRF IODAT,F NOP BTFSS STATUS,C ; ビットデータが0の時, 0を立てる BCF GPIO,5 BTFSC STATUS,C ; ビットデータが1の時, 1を立てる BSF GPIO,5 MOVLW H'42' ; パルス(9600BPS,OSC;8MHz) MOVWF SENDWAT SEND3 DECFSZ SENDWAT,F GOTO SEND3 DECFSZ SENDLP,F GOTO SEND2 ; (3)終了 BSF GPIO,5 ; フラグを戻す ; (4)送信後、少し待つ CALL TIMER RETURN ;****************************************************************************************** ; Function Name : PSEND ; Disctiption : 18F452への送信サブルーチン(GPIO,1) ; 9600BPS OSC;8.000MHz仕様 ; Input : ; Output : ;****************************************************************************************** ; (1)送信開始 PSEND BCF GPIO,1 ; 送信開始 MOVLW H'42' ; 9600BPS,OSC;8MHz MOVWF SENDWAT PSEND1 DECFSZ SENDWAT,F GOTO PSEND1 ; ; (2)データ送信(8ビット) MOVLW 8 ; 8ビットデータ分、送信する MOVWF SENDLP NOP PSEND2 RRF IODAT,F NOP BTFSS STATUS,C ; ビットデータが0の時, 0を立てる BCF GPIO,1 BTFSC STATUS,C ; ビットデータが1の時, 1を立てる BSF GPIO,1 MOVLW H'42' ; パルス(9600BPS,OSC;8MHz) MOVWF SENDWAT PSEND3 DECFSZ SENDWAT,F GOTO PSEND3 DECFSZ SENDLP,F GOTO PSEND2 ; (3)終了 BSF GPIO,1 ; フラグを戻す ; (4)送信後、少し待つ CALL TIMER 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 ;******************************************************************************************* ; 関数名 : WATP001     ; 機能 : 0.001秒(1mS)タイマー ; 引数 : なし ; 変数 : ; 注意 : マクロでWATP001TMRを定義しておく ;******************************************************************************************* WATP001 MOVLW WATP001TMR MOVWF CNT1 WATP001B MOVLW H'64' MOVWF CNT WATP001A DECFSZ CNT,F GOTO WATP001A DECFSZ CNT1,F GOTO WATP001B RETLW 0 END