CCS PCM C Compiler, Version 3.214, 26536 09-2-06 11:25 Filename: HeartBeat.LST ROM used: 1799 words (44%) Largest free fragment is 2048 RAM used: 38 (20%) at main() level 47 (25%) worst case Stack: 7 worst case (3 in main + 4 for interrupts) * 0000: MOVLW 00 0001: MOVWF 0A 0002: GOTO 69F 0003: NOP 0004: MOVWF 7F 0005: SWAPF 03,W 0006: CLRF 03 0007: MOVWF 26 0008: MOVF 7F,W 0009: MOVWF 25 000A: MOVF 0A,W 000B: MOVWF 2D 000C: CLRF 0A 000D: SWAPF 25,F 000E: MOVF 04,W 000F: MOVWF 27 0010: MOVF 20,W 0011: MOVWF 28 0012: MOVF 21,W 0013: MOVWF 29 0014: MOVF 22,W 0015: MOVWF 2A 0016: MOVF 23,W 0017: MOVWF 2B 0018: MOVF 24,W 0019: MOVWF 2C 001A: BCF 03.7 001B: BCF 03.5 001C: MOVLW 8C 001D: MOVWF 04 001E: BTFSS 00.5 001F: GOTO 022 0020: BTFSC 0C.5 0021: GOTO 03B 0022: MOVLW 8C 0023: MOVWF 04 0024: BTFSS 00.0 0025: GOTO 028 0026: BTFSC 0C.0 0027: GOTO 03D 0028: MOVF 27,W 0029: MOVWF 04 002A: MOVF 28,W 002B: MOVWF 20 002C: MOVF 29,W 002D: MOVWF 21 002E: MOVF 2A,W 002F: MOVWF 22 0030: MOVF 2B,W 0031: MOVWF 23 0032: MOVF 2C,W 0033: MOVWF 24 0034: MOVF 2D,W 0035: MOVWF 0A 0036: SWAPF 26,W 0037: MOVWF 03 0038: SWAPF 7F,F 0039: SWAPF 7F,W 003A: RETFIE 003B: BCF 0A.3 003C: GOTO 46B 003D: BCF 0A.3 003E: GOTO 5B1 .................... //***************************************************************** .................... // グラフィック液晶モジュールSG12232を用いた赤外線脈波計プログラム .................... // Copyright by Tomoaki Ueda /2005/11/02/ Version 1.00 .................... // 【URL】http://www.neo-tech-lab.com .................... // CQ出版株式会社トランジスタSpecial向け 対象 PIC16F873 .................... //***************************************************************** .................... // 【内容】初期化後、10ミリ秒タイマー割り込みで30ミリ秒ごとに .................... // A/D(AN0)からサンプリングを行い、0-31の現在値xを得る。 .................... // 前回サンプリング値xpと現在値xを線分で結び、波形を描画。 .................... // 画面端まで来たら液晶画面のクリアを行い、"Neo-Tech-Lab" .................... // と表示する。以上を繰り返す。 .................... .................... #include <16F873.h> .................... //////// Standard Header file for the PIC16F873 device //////////////// .................... #device PIC16F873 .................... #list .................... .................... #device *=16, ADC=10 .................... #fuses HS, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOLVP, NOWRT .................... #use delay(clock=20000000) .................... #use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, BITS=8, PARITY=N) .................... #use fast_io(A) .................... #use fast_io(B) .................... #use fast_io(C) .................... .................... /* int8 const pix[32]= .................... {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, .................... 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, .................... 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, .................... 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 }; */ /* ドット描画用データ(このプログラムでは未使用) */ .................... /* int8 const pcm[32]= .................... {0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8,0xB8, .................... 0xB9,0xB9,0xB9,0xB9,0xB9,0xB9,0xB9,0xB9, .................... 0xBA,0xBA,0xBA,0xBA,0xBA,0xBA,0xBA,0xBA, .................... 0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB }; */ /* ドット描画用コマンド(このプログラムでは未使用) */ .................... .................... int32 const p[32]= .................... {0xffffffff,0x7fffffff,0x3fffffff,0x1fffffff, .................... 0x0fffffff,0x07ffffff,0x03ffffff,0x01ffffff, .................... 0x00ffffff,0x007fffff,0x003fffff,0x001fffff, .................... 0x000fffff,0x0007ffff,0x0003ffff,0x0001ffff, .................... 0x0000ffff,0x00007fff,0x00003fff,0x00001fff, .................... 0x00000fff,0x000007ff,0x000003ff,0x000001ff, .................... 0x000000ff,0x0000007f,0x0000003f,0x0000001f, .................... 0x0000000f,0x00000007,0x00000003,0x00000001 }; /* 線分による波形描画データ 下側 */ .................... int32 const q[32]= .................... {0x80000000,0xc0000000,0xe0000000,0xf0000000, .................... 0xf8000000,0xfc000000,0xfe000000,0xff000000, .................... 0xff800000,0xffc00000,0xffe00000,0xfff00000, .................... 0xfff80000,0xfffc0000,0xfffe0000,0xffff0000, .................... 0xffff8000,0xffffc000,0xffffe000,0xfffff000, .................... 0xfffff800,0xfffffc00,0xfffffe00,0xffffff00, .................... 0xffffff80,0xffffffc0,0xffffffe0,0xfffffff0, .................... 0xfffffff8,0xfffffffc,0xfffffffe,0xffffffff }; /* 線分による波形描画データ 上側 */ .................... int8 const Font20[128]= .................... {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00, .................... 0x00,0x00,0x02,0x01,0x02,0x01,0x00,0x00, 0x3E,0x41,0x41,0x41,0x22,0x00,0x00,0x00, .................... 0x10,0x74,0x1C,0x17,0x74,0x1C,0x17,0x04, 0x42,0x25,0x12,0x08,0x24,0x52,0x21,0x00, .................... 0x60,0x56,0x49,0x4E,0x30,0x30,0x40,0x00, 0x00,0x00,0x00,0x04,0x03,0x01,0x00,0x00, .................... 0x00,0x00,0x3E,0x41,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x41,0x3E,0x00,0x00,0x00, .................... 0x00,0x22,0x14,0x7F,0x14,0x22,0x00,0x00, 0x08,0x08,0x08,0x7F,0x08,0x08,0x08,0x00, .................... 0x00,0x00,0x80,0x60,0x20,0x00,0x00,0x00, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00, .................... 0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00, 0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00 }; /* 0x20-0x2F */ .................... int8 const Font30[128]= .................... {0x3E,0x61,0x51,0x49,0x45,0x43,0x3E,0x00, 0x00,0x00,0x40,0x42,0x7F,0x40,0x00,0x00, .................... 0x42,0x61,0x51,0x51,0x49,0x49,0x46,0x00, 0x22,0x41,0x49,0x49,0x49,0x49,0x36,0x00, .................... 0x30,0x28,0x24,0x22,0x21,0x7F,0x20,0x00, 0x47,0x45,0x45,0x45,0x45,0x45,0x39,0x00, .................... 0x3E,0x49,0x49,0x49,0x49,0x49,0x32,0x00, 0x01,0x01,0x01,0x71,0x09,0x05,0x03,0x00, .................... 0x36,0x49,0x49,0x49,0x49,0x49,0x36,0x00, 0x46,0x49,0x49,0x49,0x49,0x29,0x1E,0x00, .................... 0x00,0x00,0x00,0x24,0x24,0x00,0x00,0x00, 0x00,0x00,0x80,0x64,0x24,0x00,0x00,0x00, .................... 0x00,0x08,0x14,0x14,0x22,0x22,0x41,0x00, 0x00,0x24,0x24,0x24,0x24,0x24,0x24,0x00, .................... 0x00,0x41,0x22,0x22,0x14,0x14,0x08,0x00, 0x06,0x01,0x01,0x59,0x09,0x09,0x06,0x00 }; /* 0x30-0x3F */ .................... int8 const Font40[128]= .................... {0x3E,0x41,0x59,0x55,0x55,0x59,0x2E,0x00, 0x60,0x18,0x16,0x11,0x16,0x18,0x60,0x00, .................... 0x7F,0x49,0x49,0x49,0x49,0x4E,0x30,0x00, 0x3E,0x41,0x41,0x41,0x41,0x41,0x22,0x00, .................... 0x7F,0x41,0x41,0x41,0x41,0x41,0x3E,0x00, 0x7F,0x49,0x49,0x49,0x49,0x41,0x40,0x00, .................... 0x7F,0x09,0x09,0x09,0x09,0x01,0x01,0x00, 0x3E,0x41,0x41,0x49,0x49,0x49,0x3A,0x00, .................... 0x7F,0x08,0x08,0x08,0x08,0x08,0x7F,0x00, 0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0X00, .................... 0x30,0x40,0x41,0x41,0x3F,0x01,0x00,0x00, 0x7F,0x08,0x08,0x14,0x22,0x41,0x00,0x00, .................... 0x7F,0x40,0x40,0x40,0x40,0x40,0x00,0x00, 0x7F,0x02,0x04,0x08,0x04,0x02,0x7F,0x00, .................... 0x7F,0x02,0x04,0x08,0x10,0x20,0x7F,0x00, 0x3E,0x41,0x41,0x41,0x41,0x41,0x3E,0x00 }; /* 0x40-0x4F */ .................... int8 const Font50[128]= .................... {0x7F,0x09,0x09,0x09,0x09,0x09,0x06,0x00, 0x3E,0x41,0x41,0x71,0x49,0x49,0x3E,0x40, .................... 0x7F,0x09,0x09,0x19,0x29,0x49,0x46,0x00, 0x26,0x49,0x49,0x49,0x49,0x49,0x32,0x00, .................... 0x01,0x01,0x01,0x7F,0x01,0x01,0x01,0x00, 0x3F,0x40,0x40,0x40,0x40,0x40,0x3F,0x00, .................... 0x03,0x0C,0x30,0x40,0x30,0x0C,0x03,0x00, 0x03,0x1C,0x60,0x18,0x60,0x1C,0x03,0x00, .................... 0x41,0x22,0x14,0x08,0x14,0x22,0x41,0x00, 0x01,0x02,0x04,0x78,0x04,0x02,0x01,0x00, .................... 0x41,0x61,0x55,0x49,0x55,0x43,0x41,0x00, 0x00,0x00,0x7F,0x41,0x41,0x00,0x00,0x00, .................... 0x01,0x2A,0x2C,0x78,0x2C,0x2A,0x01,0x00, 0x00,0x00,0x41,0x41,0x7F,0x00,0x00,0x00, .................... 0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00 }; /* 0x50-0x5F */ .................... int8 const Font60[128]= .................... {0x00,0x00,0x01,0x03,0x04,0x00,0x00,0x00, 0x00,0x38,0x45,0x45,0x45,0x25,0x7E,0x00, .................... 0x7F,0x44,0x44,0x44,0x44,0x38,0x00,0x00, 0x38,0x44,0x44,0x44,0x44,0x48,0x00,0x00, .................... 0x38,0x44,0x44,0x44,0x44,0x7F,0x40,0x00, 0x38,0x54,0x54,0x54,0x54,0x58,0x00,0x00, .................... 0x04,0x04,0x7E,0x05,0x05,0x00,0x00,0x00, 0x18,0xA4,0xA4,0xA4,0xA4,0x78,0x00,0x00, .................... 0x7F,0x08,0x08,0x08,0x08,0x70,0x00,0x00, 0x00,0x00,0x00,0x7A,0x00,0x00,0x00,0x00, .................... 0x00,0x80,0x80,0x7A,0x00,0x00,0x00,0x00, 0x7F,0x10,0x18,0x24,0x44,0x00,0x00,0x00, .................... 0x00,0x00,0x00,0x7F,0x40,0x00,0x00,0x00, 0x7E,0x04,0x04,0x78,0x04,0x04,0x78,0x00, .................... 0x7E,0x04,0x04,0x04,0x04,0x78,0x40,0x00, 0x38,0x44,0x44,0x44,0x44,0x38,0x00,0x00 }; /* 0x60-0x6F */ .................... int8 const Font70[128]= .................... {0xF8,0x24,0x24,0x24,0x24,0x18,0x00,0x00, 0x18,0x24,0x24,0x24,0x24,0xF8,0x00,0x00, .................... 0x7C,0x08,0x04,0x04,0x04,0x00,0x00,0x00, 0x48,0x54,0x54,0x54,0x54,0x20,0x00,0x00, .................... 0x04,0x04,0x3F,0x44,0x44,0x00,0x00,0x00, 0x3C,0x40,0x40,0x40,0x20,0x7C,0x40,0x00, .................... 0x04,0x18,0x60,0x30,0x0C,0x04,0x00,0x00, 0x1C,0x60,0x18,0x60,0x18,0x04,0x00,0x00, .................... 0x44,0x28,0x10,0x28,0x44,0x40,0x00,0x00, 0x04,0x88,0x90,0x60,0x18,0x04,0x00,0x00, .................... 0x44,0x64,0x54,0x54,0x4C,0x44,0x00,0x00, 0x00,0x00,0x08,0x36,0x41,0x00,0x00,0x00, .................... 0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00, 0x00,0x00,0x41,0x36,0x08,0x00,0x00,0x00, .................... 0x00,0x00,0x01,0x02,0x01,0x02,0x00,0x00, 0x2A,0x55,0x2A,0x55,0x2A,0x55,0x2A,0x00 }; /* 0x70-0x7F */ .................... .................... int8 rdt; /* LCDモジュール内メモリの読出しデータ */ .................... int8 wdt; /* LCDモジュール内メモリの書込みデータ */ .................... int8 sts; /* LCDモジュールのステータス(状態)変数 */ .................... int8 cmd; /* LCDモジュールに対するコマンド変数 */ .................... int8 pat[8]; /* 文字フォント(8x8)パターンのWorking変数 */ .................... int8 col; /* 文字フォント(8x8)の描画位置 カラム(桁) */ .................... int8 row; /* 文字フォント(8x8)の描画位置 ロー(行) */ .................... int8 x; /* A/Dコンバート値を0-31の値に変換した現在値 */ .................... int8 xp; /* A/Dコンバート値を0-31の値に変換した前回値 */ .................... int32 pa; /* 測定波形の線分パターンのWorking変数 */ .................... int8 tc; /* 10mSタイマー割込回数カウンタ(0,1,2) */ .................... int8 i,j; .................... /* PIC16F873 */ .................... /* +-------u-------+ */ .................... /* +5V-->|/MCLR RB7|-->DB7 */ .................... /* Analog Input-->|AN0 RB6|-->DB6 */ .................... /* A0<--|RA1 RB5|-->DB5 */ .................... /* RES<--|RA2 RB4|-->DB4 */ .................... /* WR<--|RA3 RB3|-->DB3 */ .................... /* EEPROM_CS<--|RA4 RB2|-->DB2 */ .................... /* RD<--|RA5 RB1|-->DB1 */ .................... /* +5V===|VSS RB0|-->DB0 */ .................... /* 20.0MHz -->|CLKIN VDD|===+5V */ .................... /* ---|CLKOUT VSS|===GND */ .................... /* CS2<--|RC0 RxD|<--TORX173 */ .................... /* CS1<--|RC1 TxD|-->TOTX173 */ .................... /* CL(PWM)<--|RC2 SDO|-->EEPROM_D */ .................... /* EEPROM_C<--|SCK SDI|<--EEPROM_Q */ .................... /* +---------------+ */ .................... /* Analog Input: 赤外線脈波アンプ出力(0-5V,2.5V中心) */ .................... /* 液晶モジュール関連 */ .................... /* RES : H→Lで制御線がZ80系インターフェースに */ .................... /* DB7-0 : データバス */ .................... /* A0 : 0:制御コマンド 1:表示データ */ .................... /* WR : ↑でDB7-0をレジスタ又はメモリに書込む */ .................... /* RD : LでDB7-0にデータ又はステータスを読出し */ .................... /* CS1 : Lでチップ1(左側)をセレクト */ .................... /* CS2 : Lでチップ1(左側)をセレクト */ .................... /* 注意: Version1.00では以下の処理は含まない */ .................... /* トスリンクシリアル通信(TORX173,TOTX173) */ .................... /* EEPROM拡張フォント(CS,C,D,Q) */ .................... .................... void CS12() /* CS1=CS2=Low */ .................... { output_bit(PIN_C1,0);output_bit(PIN_C0,0); * 04A2: BCF 07.1 04A3: BCF 07.0 .................... } 04A4: RETLW 00 .................... .................... void CS1() /* CS1=Low,CS2=High */ .................... { output_bit(PIN_C1,0);output_bit(PIN_C0,1); * 046E: BCF 07.1 046F: BSF 07.0 .................... } 0470: RETLW 00 .................... .................... void CS2() /* CS1=High,CS2=Low */ .................... { output_bit(PIN_C1,1);output_bit(PIN_C0,0); 0471: BSF 07.1 0472: BCF 07.0 .................... } 0473: RETLW 00 .................... .................... void CSN() /* CS1=High,CS2=High */ .................... { output_bit(PIN_C1,1);output_bit(PIN_C0,1); .................... } .................... .................... void RSTS() /* ステータス・リード */ .................... { set_tris_B(0b11111111); /* ポートBを入力に切替 */ .................... output_bit(PIN_A1,0); /* コマンド(A0=0) */ .................... delay_us(2); /* */ .................... output_bit(PIN_A5,0); /* (RD=0) */ .................... delay_us(2); /* */ .................... sts=input_b(); /* ポートBからステータス読込 */ .................... output_bit(PIN_A5,1); /* (RD=1) */ .................... delay_us(1); /* */ .................... } .................... .................... void RDAT() /* 表示RAMからデータ読出し */ .................... { set_tris_B(0b11111111); /* ポートBを入力に切替 */ .................... output_bit(PIN_A1,1); /* 表示データ(A0=1) */ .................... delay_us(2); /* */ .................... output_bit(PIN_A5,0); /* (RD=0) */ .................... delay_us(2); /* */ .................... rdt=input_b(); /* ポートBからデータを読込む */ .................... output_bit(PIN_A5,1); /* (RD=1) */ .................... delay_us(1); /* */ .................... } .................... .................... void WCMD() /* コマンドライト */ .................... { set_tris_B(0b00000000); /* ポートBを出力に切替 */ 0474: MOVLW 00 0475: BSF 03.5 0476: MOVWF 06 .................... output_b(cmd); /* ポートBにコマンドを出力 */ 0477: BCF 03.5 0478: MOVF 32,W 0479: MOVWF 06 .................... output_bit(PIN_A1,0); /* コマンド(A0=0) */ 047A: BCF 05.1 .................... delay_us(2); /* */ 047B: MOVLW 03 047C: MOVWF 20 047D: DECFSZ 20,F 047E: GOTO 47D .................... output_bit(PIN_A3,0); /* (WR=0) */ 047F: BCF 05.3 .................... delay_us(2); /* */ 0480: MOVLW 03 0481: MOVWF 20 0482: DECFSZ 20,F 0483: GOTO 482 .................... output_bit(PIN_A3,1); /* (WR=1) */ 0484: BSF 05.3 .................... delay_us(1); /* */ 0485: NOP 0486: NOP 0487: NOP 0488: NOP 0489: NOP .................... } 048A: RETLW 00 .................... .................... void WDAT() /* 表示RAMにデータ書込み */ .................... { set_tris_B(0b00000000); /* ポートBを出力に切替 */ 048B: MOVLW 00 048C: BSF 03.5 048D: MOVWF 06 .................... output_b(wdt); /* ポートBにデータを出力する */ 048E: BCF 03.5 048F: MOVF 30,W 0490: MOVWF 06 .................... output_bit(PIN_A1,1); /* 表示データ(A0=1) */ 0491: BSF 05.1 .................... delay_us(2); /* */ 0492: MOVLW 03 0493: MOVWF 20 0494: DECFSZ 20,F 0495: GOTO 494 .................... output_bit(PIN_A3,0); /* (WR=0) */ 0496: BCF 05.3 .................... delay_us(2); /* */ 0497: MOVLW 03 0498: MOVWF 20 0499: DECFSZ 20,F 049A: GOTO 499 .................... output_bit(PIN_A3,1); /* (WR=1) */ 049B: BSF 05.3 .................... delay_us(1); /* */ 049C: NOP 049D: NOP 049E: NOP 049F: NOP 04A0: NOP .................... } 04A1: RETLW 00 .................... .................... void LCD_On() /* 液晶表示ON */ .................... { CS12(); cmd=(0b10101111); WCMD(); * 0693: CALL 4A2 0694: MOVLW AF 0695: MOVWF 32 0696: CALL 474 .................... } 0697: BCF 0A.3 0698: GOTO 6E7 (RETURN) .................... .................... void LCD_Line() /* 表示開始ゼロ行目から */ .................... { CS12(); cmd=(0b11000000); WCMD(); 0699: CALL 4A2 069A: MOVLW C0 069B: MOVWF 32 069C: CALL 474 .................... } 069D: BCF 0A.3 069E: GOTO 6E8 (RETURN) .................... .................... void LCD_Clr() /* 液晶画面クリア */ .................... { CS12(); /* 左右2チップを同時選択 */ * 04A5: CALL 4A2 .................... for (j=0;j<3;j++) /* 各ページ毎にカラム0-60をクリア */ 04A6: CLRF 45 04A7: MOVF 45,W 04A8: SUBLW 02 04A9: BTFSS 03.0 04AA: GOTO 4BD .................... { cmd=(0b10111000)|j; WCMD(); /* ページアドレス j */ 04AB: MOVF 45,W 04AC: IORLW B8 04AD: MOVWF 32 04AE: CALL 474 .................... for (i=0;i<61;i++) 04AF: CLRF 44 04B0: MOVF 44,W 04B1: SUBLW 3C 04B2: BTFSS 03.0 04B3: GOTO 4BB .................... { cmd=i; WCMD(); /* カラムアドレス 0-60 */ 04B4: MOVF 44,W 04B5: MOVWF 32 04B6: CALL 474 .................... wdt=0; WDAT(); 04B7: CLRF 30 04B8: CALL 48B .................... } 04B9: INCF 44,F 04BA: GOTO 4B0 .................... } 04BB: INCF 45,F 04BC: GOTO 4A7 .................... } 04BD: RETLW 00 .................... .................... void putD(int8 code) /* 指定文字code(Ascii)を指定位置(row,col)に描画する */ .................... { if (code<0x20 || code >0x80) break; 04BE: MOVF 49,W 04BF: SUBLW 1F 04C0: BTFSC 03.0 04C1: GOTO 4C6 04C2: MOVF 49,W 04C3: SUBLW 80 04C4: BTFSS 03.0 04C5: GOTO 4C6 .................... i=(code & 0x0F)<<3; 04C6: MOVF 49,W 04C7: ANDLW 0F 04C8: MOVWF 20 04C9: RLF 20,W 04CA: MOVWF 44 04CB: RLF 44,F 04CC: RLF 44,F 04CD: MOVLW F8 04CE: ANDWF 44,F .................... if (code>0x2F) goto cp1; 04CF: MOVF 49,W 04D0: SUBLW 2F 04D1: BTFSS 03.0 04D2: GOTO 4E4 .................... for (j=0;j<8;j++) { pat[j]=Font20[i]; i++; } 04D3: CLRF 45 04D4: MOVF 45,W 04D5: SUBLW 07 04D6: BTFSS 03.0 04D7: GOTO 4E3 04D8: MOVLW 33 04D9: ADDWF 45,W 04DA: MOVWF 04 04DB: BCF 03.7 04DC: MOVF 44,W 04DD: CALL 14A 04DE: MOVWF 21 04DF: MOVWF 00 04E0: INCF 44,F 04E1: INCF 45,F 04E2: GOTO 4D4 .................... goto cpe; 04E3: GOTO 54C .................... cp1: if (code>0x3F) goto cp2; 04E4: MOVF 49,W 04E5: SUBLW 3F 04E6: BTFSS 03.0 04E7: GOTO 4F9 .................... for (j=0;j<8;j++) { pat[j]=Font30[i]; i++; } 04E8: CLRF 45 04E9: MOVF 45,W 04EA: SUBLW 07 04EB: BTFSS 03.0 04EC: GOTO 4F8 04ED: MOVLW 33 04EE: ADDWF 45,W 04EF: MOVWF 04 04F0: BCF 03.7 04F1: MOVF 44,W 04F2: CALL 1CE 04F3: MOVWF 21 04F4: MOVWF 00 04F5: INCF 44,F 04F6: INCF 45,F 04F7: GOTO 4E9 .................... goto cpe; 04F8: GOTO 54C .................... cp2: if (code>0x4F) goto cp3; 04F9: MOVF 49,W 04FA: SUBLW 4F 04FB: BTFSS 03.0 04FC: GOTO 50E .................... for (j=0;j<8;j++) { pat[j]=Font40[i]; i++; } 04FD: CLRF 45 04FE: MOVF 45,W 04FF: SUBLW 07 0500: BTFSS 03.0 0501: GOTO 50D 0502: MOVLW 33 0503: ADDWF 45,W 0504: MOVWF 04 0505: BCF 03.7 0506: MOVF 44,W 0507: CALL 255 0508: MOVWF 21 0509: MOVWF 00 050A: INCF 44,F 050B: INCF 45,F 050C: GOTO 4FE .................... goto cpe; 050D: GOTO 54C .................... cp3: if (code>0x5F) goto cp4; 050E: MOVF 49,W 050F: SUBLW 5F 0510: BTFSS 03.0 0511: GOTO 523 .................... for (j=0;j<8;j++) { pat[j]=Font50[i]; i++; } 0512: CLRF 45 0513: MOVF 45,W 0514: SUBLW 07 0515: BTFSS 03.0 0516: GOTO 522 0517: MOVLW 33 0518: ADDWF 45,W 0519: MOVWF 04 051A: BCF 03.7 051B: MOVF 44,W 051C: CALL 2D9 051D: MOVWF 21 051E: MOVWF 00 051F: INCF 44,F 0520: INCF 45,F 0521: GOTO 513 .................... goto cpe; 0522: GOTO 54C .................... cp4: if (code>0x6F) goto cp5; 0523: MOVF 49,W 0524: SUBLW 6F 0525: BTFSS 03.0 0526: GOTO 538 .................... for (j=0;j<8;j++) { pat[j]=Font60[i]; i++; } 0527: CLRF 45 0528: MOVF 45,W 0529: SUBLW 07 052A: BTFSS 03.0 052B: GOTO 537 052C: MOVLW 33 052D: ADDWF 45,W 052E: MOVWF 04 052F: BCF 03.7 0530: MOVF 44,W 0531: CALL 360 0532: MOVWF 21 0533: MOVWF 00 0534: INCF 44,F 0535: INCF 45,F 0536: GOTO 528 .................... goto cpe; 0537: GOTO 54C .................... cp5: if (code>0x7F) goto cpe; 0538: MOVF 49,W 0539: SUBLW 7F 053A: BTFSS 03.0 053B: GOTO 54C .................... for (j=0;j<8;j++) { pat[j]=Font70[i]; i++; } 053C: CLRF 45 053D: MOVF 45,W 053E: SUBLW 07 053F: BTFSS 03.0 0540: GOTO 54C 0541: MOVLW 33 0542: ADDWF 45,W 0543: MOVWF 04 0544: BCF 03.7 0545: MOVF 44,W 0546: CALL 3E4 0547: MOVWF 21 0548: MOVWF 00 0549: INCF 44,F 054A: INCF 45,F 054B: GOTO 53D .................... cpe: if (col<61) { i=col; CS1(); } else { i=col-61; CS2(); } 054C: MOVF 3B,W 054D: SUBLW 3C 054E: BTFSS 03.0 054F: GOTO 554 0550: MOVF 3B,W 0551: MOVWF 44 0552: CALL 46E 0553: GOTO 558 0554: MOVLW 3D 0555: SUBWF 3B,W 0556: MOVWF 44 0557: CALL 471 .................... .................... if (col>120) { col=0; row++; } 0558: MOVF 3B,W 0559: SUBLW 78 055A: BTFSC 03.0 055B: GOTO 55E 055C: CLRF 3B 055D: INCF 3C,F .................... if (row>3) row=0; 055E: MOVF 3C,W 055F: SUBLW 03 0560: BTFSS 03.0 0561: CLRF 3C .................... for (j=0;j<8;j++) 0562: CLRF 45 0563: MOVF 45,W 0564: SUBLW 07 0565: BTFSS 03.0 0566: GOTO 57F .................... { cmd=(0b10111000) | row; WCMD(); /* ページアドレスx */ 0567: MOVF 3C,W 0568: IORLW B8 0569: MOVWF 32 056A: CALL 474 .................... cmd=i; WCMD(); /* カラムアドレス */ 056B: MOVF 44,W 056C: MOVWF 32 056D: CALL 474 .................... wdt=pat[j]; WDAT(); /* pattern data */ 056E: MOVLW 33 056F: ADDWF 45,W 0570: MOVWF 04 0571: BCF 03.7 0572: MOVF 00,W 0573: MOVWF 30 0574: CALL 48B .................... col++; i++; 0575: INCF 3B,F 0576: INCF 44,F .................... if (col==61) { i=0; CS2(); } 0577: MOVF 3B,W 0578: SUBLW 3D 0579: BTFSS 03.2 057A: GOTO 57D 057B: CLRF 44 057C: CALL 471 .................... } 057D: INCF 45,F 057E: GOTO 563 .................... } 057F: RETLW 00 .................... .................... void LCD_Home() /* 液晶画面ホームポジション */ .................... { row=col=0; CS1(); 0580: CLRF 3B 0581: MOVF 3B,W 0582: MOVWF 3C 0583: CALL 46E .................... cmd=(0b10111000); WCMD(); /* ページアドレス 0 */ 0584: MOVLW B8 0585: MOVWF 32 0586: CALL 474 .................... cmd=(0b00000000); WCMD(); /* カラムアドレス 0 */ 0587: CLRF 32 0588: CALL 474 .................... col=24; /* 0行24桁から"Neo-Tech-Lab"を描画する */ 0589: MOVLW 18 058A: MOVWF 3B .................... putD(0x4E); putD(0x65); putD(0x6F); putD(0x2D); 058B: MOVLW 4E 058C: MOVWF 49 058D: CALL 4BE 058E: MOVLW 65 058F: MOVWF 49 0590: CALL 4BE 0591: MOVLW 6F 0592: MOVWF 49 0593: CALL 4BE 0594: MOVLW 2D 0595: MOVWF 49 0596: CALL 4BE .................... putD(0x54); putD(0x65); putD(0x63); putD(0x68); 0597: MOVLW 54 0598: MOVWF 49 0599: CALL 4BE 059A: MOVLW 65 059B: MOVWF 49 059C: CALL 4BE 059D: MOVLW 63 059E: MOVWF 49 059F: CALL 4BE 05A0: MOVLW 68 05A1: MOVWF 49 05A2: CALL 4BE .................... putD(0x2D); putD(0x4C); putD(0x61); putD(0x62); 05A3: MOVLW 2D 05A4: MOVWF 49 05A5: CALL 4BE 05A6: MOVLW 4C 05A7: MOVWF 49 05A8: CALL 4BE 05A9: MOVLW 61 05AA: MOVWF 49 05AB: CALL 4BE 05AC: MOVLW 62 05AD: MOVWF 49 05AE: CALL 4BE .................... col=0; 05AF: CLRF 3B .................... } 05B0: RETLW 00 .................... .................... /* USART 受信割込み処理関数 */ .................... #int_rda .................... void rxd() .................... { .................... } .................... .................... //************************************************* .................... // AD変換データ上位 5 bit を取出す。 .................... //************************************************* .................... .................... /* タイマー割込み */ * 046B: BCF 0C.5 046C: BCF 0A.3 046D: GOTO 028 .................... #int_timer1 .................... void tim1() .................... { set_timer1(0x3CAF); //10mSecの割込み * 05B1: MOVLW 3C 05B2: MOVWF 0F 05B3: MOVLW AF 05B4: MOVWF 0E .................... tc++; if (tc>2) //30mSecの割込みを作る 05B5: INCF 43,F 05B6: MOVF 43,W 05B7: SUBLW 02 05B8: BTFSC 03.0 05B9: GOTO 690 .................... { tc=0; 05BA: CLRF 43 .................... x=read_adc()>>5; 05BB: BSF 1F.2 05BC: BTFSC 1F.2 05BD: GOTO 5BC 05BE: BSF 03.5 05BF: MOVF 1E,W 05C0: BCF 03.5 05C1: MOVWF 49 05C2: RRF 1E,W 05C3: MOVWF 23 05C4: RRF 49,W 05C5: MOVWF 22 05C6: RRF 23,F 05C7: RRF 22,F 05C8: RRF 23,F 05C9: RRF 22,F 05CA: RRF 23,F 05CB: RRF 22,F 05CC: RRF 23,F 05CD: RRF 22,F 05CE: MOVF 22,W 05CF: MOVWF 3D .................... if (x>xp) pa=p[xp] & q[x]; else pa=p[x] & q[xp]; 05D0: MOVF 3D,W 05D1: SUBWF 3E,W 05D2: BTFSC 03.0 05D3: GOTO 616 05D4: RLF 3E,W 05D5: MOVWF 20 05D6: RLF 20,F 05D7: MOVLW FC 05D8: ANDWF 20,F 05D9: MOVF 20,W 05DA: MOVWF 49 05DB: MOVLW 03 05DC: ADDWF 49,F 05DD: MOVF 49,W 05DE: CALL 03F 05DF: MOVWF 23 05E0: DECF 49,F 05E1: MOVF 49,W 05E2: CALL 03F 05E3: MOVWF 22 05E4: DECF 49,F 05E5: MOVF 49,W 05E6: CALL 03F 05E7: MOVWF 21 05E8: DECF 49,W 05E9: CALL 03F 05EA: MOVWF 20 05EB: MOVF 23,W 05EC: MOVWF 4D 05ED: MOVF 22,W 05EE: MOVWF 4C 05EF: MOVF 21,W 05F0: MOVWF 4B 05F1: MOVF 20,W 05F2: MOVWF 4A 05F3: RLF 3D,W 05F4: MOVWF 20 05F5: RLF 20,F 05F6: MOVLW FC 05F7: ANDWF 20,F 05F8: MOVF 20,W 05F9: MOVWF 4E 05FA: MOVLW 03 05FB: ADDWF 4E,F 05FC: MOVF 4E,W 05FD: CALL 0C3 05FE: MOVWF 23 05FF: DECF 4E,F 0600: MOVF 4E,W 0601: CALL 0C3 0602: MOVWF 22 0603: DECF 4E,F 0604: MOVF 4E,W 0605: CALL 0C3 0606: MOVWF 21 0607: DECF 4E,W 0608: CALL 0C3 0609: MOVWF 20 060A: ANDWF 4A,W 060B: MOVWF 3F 060C: MOVF 21,W 060D: ANDWF 4B,W 060E: MOVWF 40 060F: MOVF 22,W 0610: ANDWF 4C,W 0611: MOVWF 41 0612: MOVF 23,W 0613: ANDWF 4D,W 0614: MOVWF 42 0615: GOTO 657 0616: RLF 3D,W 0617: MOVWF 20 0618: RLF 20,F 0619: MOVLW FC 061A: ANDWF 20,F 061B: MOVF 20,W 061C: MOVWF 49 061D: MOVLW 03 061E: ADDWF 49,F 061F: MOVF 49,W 0620: CALL 03F 0621: MOVWF 23 0622: DECF 49,F 0623: MOVF 49,W 0624: CALL 03F 0625: MOVWF 22 0626: DECF 49,F 0627: MOVF 49,W 0628: CALL 03F 0629: MOVWF 21 062A: DECF 49,W 062B: CALL 03F 062C: MOVWF 20 062D: MOVF 23,W 062E: MOVWF 4D 062F: MOVF 22,W 0630: MOVWF 4C 0631: MOVF 21,W 0632: MOVWF 4B 0633: MOVF 20,W 0634: MOVWF 4A 0635: RLF 3E,W 0636: MOVWF 20 0637: RLF 20,F 0638: MOVLW FC 0639: ANDWF 20,F 063A: MOVF 20,W 063B: MOVWF 4E 063C: MOVLW 03 063D: ADDWF 4E,F 063E: MOVF 4E,W 063F: CALL 0C3 0640: MOVWF 23 0641: DECF 4E,F 0642: MOVF 4E,W 0643: CALL 0C3 0644: MOVWF 22 0645: DECF 4E,F 0646: MOVF 4E,W 0647: CALL 0C3 0648: MOVWF 21 0649: DECF 4E,W 064A: CALL 0C3 064B: MOVWF 20 064C: ANDWF 4A,W 064D: MOVWF 3F 064E: MOVF 21,W 064F: ANDWF 4B,W 0650: MOVWF 40 0651: MOVF 22,W 0652: ANDWF 4C,W 0653: MOVWF 41 0654: MOVF 23,W 0655: ANDWF 4D,W 0656: MOVWF 42 .................... if (col<61) { i=col; CS1(); } else { i=col-61; CS2(); } 0657: MOVF 3B,W 0658: SUBLW 3C 0659: BTFSS 03.0 065A: GOTO 65F 065B: MOVF 3B,W 065C: MOVWF 44 065D: CALL 46E 065E: GOTO 663 065F: MOVLW 3D 0660: SUBWF 3B,W 0661: MOVWF 44 0662: CALL 471 .................... cmd=(0b10111000); WCMD(); /* ページアドレス0 */ 0663: MOVLW B8 0664: MOVWF 32 0665: CALL 474 .................... cmd=i; WCMD(); /* カラムアドレス */ 0666: MOVF 44,W 0667: MOVWF 32 0668: CALL 474 .................... wdt=make8(pa,0); WDAT(); 0669: MOVF 3F,W 066A: MOVWF 30 066B: CALL 48B .................... cmd=(0b10111001); WCMD(); /* ページアドレス1 */ 066C: MOVLW B9 066D: MOVWF 32 066E: CALL 474 .................... cmd=i; WCMD(); /* カラムアドレス */ 066F: MOVF 44,W 0670: MOVWF 32 0671: CALL 474 .................... wdt=make8(pa,1); WDAT(); 0672: MOVF 40,W 0673: MOVWF 30 0674: CALL 48B .................... cmd=(0b10111010); WCMD(); /* ページアドレス2 */ 0675: MOVLW BA 0676: MOVWF 32 0677: CALL 474 .................... cmd=i; WCMD(); /* カラムアドレス */ 0678: MOVF 44,W 0679: MOVWF 32 067A: CALL 474 .................... wdt=make8(pa,2); WDAT(); 067B: MOVF 41,W 067C: MOVWF 30 067D: CALL 48B .................... cmd=(0b10111011); WCMD(); /* ページアドレス3 */ 067E: MOVLW BB 067F: MOVWF 32 0680: CALL 474 .................... cmd=i; WCMD(); /* カラムアドレス */ 0681: MOVF 44,W 0682: MOVWF 32 0683: CALL 474 .................... wdt=make8(pa,3); WDAT(); 0684: MOVF 42,W 0685: MOVWF 30 0686: CALL 48B .................... col++; if (col==122) { LCD_Clr(); LCD_Home(); } 0687: INCF 3B,F 0688: MOVF 3B,W 0689: SUBLW 7A 068A: BTFSS 03.2 068B: GOTO 68E 068C: CALL 4A5 068D: CALL 580 .................... xp=x; 068E: MOVF 3D,W 068F: MOVWF 3E .................... } .................... } .................... 0690: BCF 0C.0 0691: BCF 0A.3 0692: GOTO 028 .................... void main() .................... { * 069F: CLRF 04 06A0: BCF 03.7 06A1: MOVLW 1F 06A2: ANDWF 03,F 06A3: BSF 03.5 06A4: BSF 1F.0 06A5: BSF 1F.1 06A6: BSF 1F.2 06A7: BCF 1F.3 06A8: MOVLW 40 06A9: MOVWF 19 06AA: MOVLW 26 06AB: MOVWF 18 06AC: MOVLW 90 06AD: BCF 03.5 06AE: MOVWF 18 .................... port_b_pullups(FALSE); // No Pullup 06AF: BSF 03.5 06B0: BSF 01.7 .................... set_tris_B(0b00000000); // Port_B All Output 06B1: MOVLW 00 06B2: MOVWF 06 .................... output_a(0b00111000); // RES: pullupHigh --> Low (Z80_mode) 06B3: MOVLW 38 06B4: BCF 03.5 06B5: MOVWF 05 .................... set_tris_A(0b00000001); // Port_A 06B6: MOVLW 01 06B7: BSF 03.5 06B8: MOVWF 05 .................... output_c(0b01000011); // CS2=CS1=High 06B9: MOVLW 43 06BA: BCF 03.5 06BB: MOVWF 07 .................... set_tris_C(0b10010000); 06BC: MOVLW 90 06BD: BSF 03.5 06BE: MOVWF 07 .................... .................... /* PWMで液晶駆動クロック1.2kHzを作る */ .................... setup_ccp1(CCP_PWM); //PWM MODE 06BF: BCF 03.5 06C0: BCF 07.2 06C1: MOVLW 0C 06C2: MOVWF 17 .................... setup_timer_2(T2_DIV_BY_16,0xFF,1); //プリスケーラ16 ,PR2フルビット=FF 06C3: MOVLW 00 06C4: MOVWF 21 06C5: IORLW 06 06C6: MOVWF 12 06C7: MOVLW FF 06C8: BSF 03.5 06C9: MOVWF 12 .................... set_pwm1_duty(0x1FF); //duty=50% 3FF/2=1FF 06CA: MOVLW 7F 06CB: BCF 03.5 06CC: MOVWF 15 06CD: MOVF 17,W 06CE: ANDLW CF 06CF: IORLW 30 06D0: MOVWF 17 .................... .................... /* 内蔵A/Dコンバータ初期化 */ .................... setup_adc( ADC_CLOCK_DIV_32 ); /* 1.6usec @ 20MHz */ 06D1: BCF 1F.6 06D2: BSF 1F.7 06D3: BSF 03.5 06D4: BSF 1F.7 06D5: BCF 03.5 06D6: BSF 1F.0 .................... setup_adc_ports(AN0); /* RA0 only */ 06D7: BSF 03.5 06D8: BCF 1F.0 06D9: BSF 1F.1 06DA: BSF 1F.2 06DB: BSF 1F.3 .................... set_adc_channel(0); /* Select AN0 */ 06DC: MOVLW 00 06DD: BCF 03.5 06DE: MOVWF 21 06DF: MOVF 1F,W 06E0: ANDLW C7 06E1: IORWF 21,W 06E2: MOVWF 1F .................... .................... /* 液晶初期化 */ .................... cmd=(0b11101110); WCMD(); /* モードエンド */ 06E3: MOVLW EE 06E4: MOVWF 32 06E5: CALL 474 .................... LCD_On(); LCD_Line(); LCD_Clr(); LCD_Home(); 06E6: GOTO 693 06E7: GOTO 699 06E8: CLRF 2E 06E9: BTFSC 0B.7 06EA: BSF 2E.7 06EB: BCF 0B.7 06EC: CALL 4A5 06ED: BTFSC 2E.7 06EE: BSF 0B.7 06EF: CLRF 2E 06F0: BTFSC 0B.7 06F1: BSF 2E.7 06F2: BCF 0B.7 06F3: CALL 580 06F4: BTFSC 2E.7 06F5: BSF 0B.7 .................... x=xp=0; 06F6: CLRF 3E 06F7: MOVF 3E,W 06F8: MOVWF 3D .................... .................... /* タイマー1初期化 */ .................... setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); //プリスケーラ1 06F9: MOVLW 85 06FA: MOVWF 10 .................... set_timer1(0x3CAF); /* 10msec = (FFFF-D'50000') */ 06FB: MOVLW 3C 06FC: MOVWF 0F 06FD: MOVLW AF 06FE: MOVWF 0E .................... tc=0; 06FF: CLRF 43 .................... .................... enable_interrupts(INT_TIMER1); /* タイマー割り込み許可 */ 0700: BSF 03.5 0701: BSF 0C.0 .................... /* enable_interrupts(INT_RDA); */ .................... enable_interrupts(GLOBAL); /* 割込み許可 */ 0702: MOVLW C0 0703: BCF 03.5 0704: IORWF 0B,F .................... while(TRUE) { } 0705: GOTO 705 .................... } .................... 0706: SLEEP Configuration Fuses: Word 1: 3F3A HS NOWDT NOPUT NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT NODEBUG