MPASM 03.80.04 Internal GAME02.ASM 6-24-2005 0:35:11 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 00002 ;================================================ 00003 ; test_program_Ver1.15 00004 ; 00005 ; 00006 ; 00007 ; 2005年6月24日 00008 ; 00009 ; 00010 ;================================================ 00011 ; 00012 ; 端子配列 00013 ; 00014 ; 00015 ; +----------------------------+ 00016 ; Pull up-|MCLR/Vpp/THV RB7/PGD|-BL3 00017 ; PATROL-|RA0/AN0 RB6/PGC|-BL2 00018 ; FLASH-|RA1/AN1 RB5|-BL1 00019 ; SPOT-|RA2/AN2/VREF- RB4|-RST 00020 ; NC-|RA3/AN3/VREF+ RB3/PGM|-B 00021 ; NC-|RA4/T0CKI RB2|-A 00022 ; NC-|RA5/AN4/SS RB1|-F_OUT 00023 ; GND-|VSS RB0/INT|-G_START 00024 ; XTAL 10MHz-|OSC1/CLKIN VDD|-5V 00025 ; XTAL 10MHz-|OSC2/CLKOUT VSS|-GND 00026 ; CNTDWN_1-|RC0/T1OSO/T1CKI RC7/RX/DT|-RED1 00027 ; CNTDWN_2-|RC1/T1OSI/CCP2 RC6/TX/CK|-RED2 00028 ; CNTDWN_3-|RC2/CCP1 RC5/SDO|-RED3 00029 ; CNTDWN_4-|RC3/SCK/SCL RC4/SDI/SDA|-CNTDWN_5 00030 ; +----------------------------+ 00031 ; 00032 ; 00033 ; F_OUT = ファイナルアウトスイッチ 00034 ; START = スタートスイッチ 00035 ; A = A側得点 00036 ; B = B側得点 00037 ; RST = リセットスイッチ 00038 ; 00039 ; PATROL = パトロールライト点灯 00040 ; FLASH = フラッシュライト点灯 00041 ; SPOT = スポットライト点灯 00042 ; CNTDWN_1 = カウントダウン表示1点灯 00043 ; CNTDWN_2 = カウントダウン表示2点灯 00044 ; CNTDWN_3 = カウントダウン表示3点灯 00045 ; CNTDWN_4 = カウントダウン表示4点灯 00046 ; CNTDWN_5 = カウントダウン表示5点灯 00047 ; RED1 = A側(1点目) 00048 ; RED2 = A側(2点目) 00049 ; RED3 = A側(3点目) 00050 ; BLUE1 = B側(1点目) 00051 ; BLUE2 = B側(2点目) 00052 ; BLUE3 = B側(3点目); 00053 ; MPASM 03.80.04 Internal GAME02.ASM 6-24-2005 0:35:11 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00054 ; 00055 ; 00056 ; 00057 LIST P=16F876,ST=OFF,R=DEC ;選択デバイス16F876 00058 ;シンボルテーブル非表示 00059 ;デフォルト数値は10進 00060 INCLUDE P16F876.INC ;選択デバイスのテーブル読込 00001 LIST 00002 ; P16F876.INC Standard Header File, Version 1.00 Microchip Technology, Inc. 00359 LIST 00061 ERRORLEVEL -302,-306 ;-302=バンク0エラー無視 00062 ;-306=ページ境界エラー無視 00063 2007 3F72 00064 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC & _LVP_OFF 00065 ;_CP_OFF=コードプロテクト無し 00066 ;_PWRTE_ON=パワーONタイマ有効 00067 ;_WDT_OFF=ウォッチドッグタイマ無効 00068 ;_HS_OSC=高速水晶モード 00069 ; =10MHz 00070 ;_LVP_OFF=低電圧書込みモードなし 00071 ; = 2000 000F 000F 000F 00072 __IDLOCS H'FFFF' ;ID番号、特に指定無し 000F 00073 00074 00075 ;================================================ 00076 ; 端子名の定義 00077 ;================================================ 00078 ; 00079 ;入力 00000001 00080 F_OUT EQU 1 ;F_OUT端子はRB1 00000000 00081 G_START EQU 0 ;START端子はRB0 00000002 00082 ASW EQU 2 ;A端子はRB2 00000003 00083 BSW EQU 3 ;B端子はRB3 00000004 00084 RST EQU 4 ;RST端子はRB4 00085 00086 ;出力 00000000 00087 PATROL EQU 0 ;PATROL端子はRA0 00000001 00088 FLASH EQU 1 ;FLASH端子はRA1 00000002 00089 SPOT EQU 2 ;SPOT端子はRA2 00000000 00090 CNTDWN_1 EQU 0 ;CNTDWN_1端子はRC0 00000001 00091 CNTDWN_2 EQU 1 ;CNTDWN_2端子はRC1 00000002 00092 CNTDWN_3 EQU 2 ;CNTDWN_3端子はRC2 00000003 00093 CNTDWN_4 EQU 3 ;CNTDWN_4端子はRC3 00000004 00094 CNTDWN_5 EQU 4 ;CNTDWN_5端子はRC4 00000007 00095 RED1 EQU 7 ;RED1端子はRC7 00000006 00096 RED2 EQU 6 ;RED2端子はRC6 00000005 00097 RED3 EQU 5 ;RED3端子はRC5 00000005 00098 BL1 EQU 5 ;BL1端子はRB5 00000006 00099 BL2 EQU 6 ;BL2端子はRB6 00000007 00100 BL3 EQU 7 ;BL3端子はRB7 00101 00102 ; MPASM 03.80.04 Internal GAME02.ASM 6-24-2005 0:35:11 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00103 ;================================================ 00104 ; レジスタ 00105 ;================================================ 00106 ;メインルーチン用 00000020 00107 F_OUT_P EQU 020H ;F_OUTの現在状態データ 00000021 00108 F_OUT_C EQU 021H ;F_OUTの現在状態データと異なる状態のカウント値 00000022 00109 F_OUT_A EQU 022H ;F_OUTの動作開始フラグ 00110 ; 00000023 00111 START_P EQU 023H ;STARTの現在状態データ 00000024 00112 START_C EQU 024H ;STARTの現在状態データと異なる状態のカウント値 00000025 00113 START_A EQU 025H ;START_Aの動作開始フラグ 00000026 00114 START_S EQU 026H ;STARTスイッチ押し回数 00115 ; 00000027 00116 ASW_P EQU 027H ;Aの現在状態データ 00000028 00117 ASW_C EQU 028H ;Aの現在状態データと異なる状態のカウント値 00000029 00118 ASW_A EQU 029H ;Aの動作開始フラグ 00119 ; 0000002A 00120 BSW_P EQU 02AH ;Aの現在状態データ 0000002B 00121 BSW_C EQU 02BH ;Aの現在状態データと異なる状態のカウント値 0000002C 00122 BSW_A EQU 02CH ;Bの動作開始フラグ 00123 ; 0000002D 00124 RST_P EQU 02DH ;RSTの現在状態データ 0000002E 00125 RST_C EQU 02EH ;RSTの現在状態データと異なる状態のカウント値 0000002F 00126 RST_A EQU 02FH ;RSTの動作開始フラグ 00127 ; 00000030 00128 CNT0P1 EQU 030H ;0.1msecカウンタで100回カウント用 00129 00000031 00130 PORTB_D EQU 031H ;ポートBの内容格納用 00131 00000032 00132 T0P5 EQU 032H ;0.5秒カウンタ 00000033 00133 TREE_CNT_D EQU 033H ;ツリーカウントダウン制御 00134 00000034 00135 A_CNT EQU 034H ;A側(赤)の勝カウント 00000035 00136 B_CNT EQU 035H ;B側(青)の勝カウント 00137 00000036 00138 WAIT1_A EQU 036H ;勝3ポイントになったときの1秒タイマ起動 00000037 00139 WAIT1S EQU 037H ;1秒カウント用 00140 00000039 00141 ONOFF_A EQU 039H ;点滅制御用 00000039 00142 ONOFF_C EQU 039H 0000003A 00143 ONOFF_D EQU 03AH 00144 00145 00146 00147 ; 00148 00149 ;================================================ 00150 ; 変数 00151 ;================================================ 00152 ;メインルーチン用 0000000A 00153 CHAT EQU 010 ;10msec*10=0.1秒間がチャタリング時間 00000000 00154 RA0 EQU 0 ;RA0はレジスタの第0ビット 00155 ; MPASM 03.80.04 Internal GAME02.ASM 6-24-2005 0:35:11 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00156 ;================================================ 00157 ; 制御レジスタの設定 00158 ;================================================ 0000 00159 ORG 0x0000 0000 2A00 00160 GOTO STRT 00161 0200 00162 ORG 0x0200 00163 0200 00164 STRT 0200 1303 00165 BCF STATUS,RP1 ;バンク0選択 0201 1283 00166 BCF STATUS,RP0 00167 0202 0185 00168 CLRF PORTA ;ポートAクリア 0203 0186 00169 CLRF PORTB ;ポートBクリア 0204 0187 00170 CLRF PORTC ;ポートCクリア 00171 00172 00173 ;STATUS REGISTER 00174 ;0xxx xxxx IRP : バンク 0,1(間接アドレス用) 00175 ;1xxx xxxx IRP : バンク 2,3〃 00176 ;x00x xxxx RP1:RP0 : バンク0(直接アドレス用) 00177 ;x01x xxxx 〃 : バンク1〃 00178 ;x10x xxxx 〃 : バンク2〃 00179 ;x11x xxxx 〃 : バンク3〃 00180 ;xxx0 xxxx NOT_TO : WDTタイムアウト発生 00181 ;xxx1 xxxx 〃 : 電源ON後等 00182 ;xxxx 0xxx NOT_PD : SLEEP命令の実行による 00183 ;xxxx 1xxx 〃 : 電源ON後等 00184 ;xxxx x0xx Z  : 演算結果が0でない 00185 ;xxxx x1xx 〃 : 演算結果が0 00186 ;xxxx xx0x DC : 下位4ビットからのキャリー無し 00187 ;xxxx xx1x 〃 : 下位4ビットからのキャリー発生 00188 ;xxxx xxx0 C : 最上位ビットのキャリー無し 00189 ;xxxx xxx1 〃: 最上位ビットのキャリー発生 00190 00191 00192 ;INTCON REGISTER 00193 ;0xxx xxxx GIE : 全割込み禁止 00194 ;1xxx xxxx 〃 : 許可された割込みは割込み可 00195 ;x0xx xxxx PEIE : 周辺機能割込み禁止 00196 ;x1xx xxxx 〃 : 周辺機能割込み許可 00197 ;xx0x xxxx T0IE : TMR0割込み禁止 00198 ;xx1x xxxx 〃 : TMR0割込み許可 00199 ;xxx0 xxxx INTE : RB0/INT割込み禁止 00200 ;xxx1 xxxx 〃 : RB0/INT割込み許可 00201 ;xxxx 0xxx RBIE : RBポート変化割込み禁止 00202 ;xxxx 1xxx 〃  : RBポート変化割込み許可 00203 ;xxxx x0xx T0IF : TMR0オーバーフローせず 00204 ;xxxx x1xx 〃  : TMR0オーバーフロー(要クリア) 00205 ;xxxx xx0x INTF : RB0/INT割込み発生せず 00206 ;xxxx xx1x 〃 : RB0/INT割込み発生(要クリア) 00207 ;xxxx xxx0 RBIF : RBポート割込み発生せず 00208 ;xxxx xxx1 〃  : RBポート割込み発生(要クリア) MPASM 03.80.04 Internal GAME02.ASM 6-24-2005 0:35:11 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00209 ;注 RBポート割込みはRB7:RB4のピン状態の変化で発生 00210 0205 3000 00211 MOVLW B'00000000' 0206 008B 00212 MOVWF INTCON ;初期はすべての割込み禁止 00213 ; 00214 00215 ;OPTION REGISTER 00216 ;0xxx xxxx NOT_RBPU : PORT Bはプルアップする 00217 ;1xxx xxxx 〃    : PORT Bはプルアップせず 00218 ;x0xx xxxx INTEDG : RB0/INTは立上りエッジ割込み 00219 ;x1xx xxxx 〃 : RB0/INTは立下りエッジ割込み 00220 ;xx0x xxxx T0CS : タイマのクロックソースは内部 00221 ;xx1x xxxx 〃 : タイマのクロックソースはRA4 00222 ;xxx0 xxxx TOSE : TMR0はRA4のLからHで増加 00223 ;xxx1 xxxx 〃  : TMR0はRA4のHからLで増加 00224 ;xxxx 0xxx PSA : プリスケーラはTMR0へ割当 00225 ;xxxx 1xxx 〃 : プリスケーラはWDTへ割当 00226 ;xxxx xABC プリスケーラ分周比 00227 ; A=PS2 B=PS1 C=PS0 00228 ; ABC TMR WDT 00229 ; 000 1:2 1:1 00230 ; 001 1:4 1:2 00231 ; 010 1:8 1:4 00232 ; 011 1:16 1:8 00233 ; 100 1:32 1:16 00234 ; 101 1:64 1:32 00235 ; 110 1:128 1:64 00236 ; 111 1:256 1:128 00237 0207 1683 00238 BSF STATUS,RP0 ;バンク1選択 0208 3001 00239 MOVLW B'00000001' 0209 0081 00240 MOVWF OPTION_REG ;PORT Bプルアップ 00241 ;プリスケーラはタイマが使用 00242 ;分周比は4 00243 ;タイマは10M/4/4=0.625MHz 00244 ;0hからカウントしてオーバーフローは 00245 ;256カウント(0.4msec) 00246 ;それが20回カウントされると約10msec 00247 ;さらにそれが122回カウントされると1秒 00248 00249 00250 00251 ;TRISA REGISTER 00252 ;--0x xxxx : RA5は出力ピン 00253 ;--1x xxxx : RA5は入力ピン 00254 ;--x0 xxxx : RA4は出力ピン 00255 ;--x1 xxxx : RA4は入力ピン 00256 ;--xx 0xxx : RA3は出力ピン 00257 ;--xx 1xxx : RA3は入力ピン 00258 ;--xx x0xx : RA2は出力ピン 00259 ;--xx x1xx : RA2は入力ピン 00260 ;--xx xx0x : RA1は出力ピン 00261 ;--xx xx1x : RA1は入力ピン MPASM 03.80.04 Internal GAME02.ASM 6-24-2005 0:35:11 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00262 ;--xx xxx0 : RA0は出力ピン 00263 ;--xx xxx1 : RA0は入力ピン  020A 00264   020A 3000 00265 MOVLW B'00000000' ;RA0-5=出力 020B 0085 00266 MOVWF TRISA ; 00267 00268 ;TRISB REGISTER 00269 ;0xxx xxxx : RB7は出力ピン 00270 ;1xxx xxxx : RB7は入力ピン 00271 ;x0xx xxxx : RB6は出力ピン 00272 ;x1xx xxxx : RB6は入力ピン 00273 ;xx0x xxxx : RB5は出力ピン 00274 ;xx1x xxxx : RB5は入力ピン 00275 ;xxx0 xxxx : RB4は出力ピン 00276 ;xxx1 xxxx : RB4は入力ピン 00277 ;xxxx 0xxx : RB3は出力ピン 00278 ;xxxx 1xxx : RB3は入力ピン 00279 ;xxxx x0xx : RB2は出力ピン 00280 ;xxxx x1xx : RB2は入力ピン 00281 ;xxxx xx0x : RB1は出力ピン 00282 ;xxxx xx1x : RB1は入力ピン 00283 ;xxxx xxx0 : RB0は出力ピン 00284 ;xxxx xxx1 : RB0は入力ピン  00285 00286 00287 020C 301F 00288 MOVLW B'00011111' ;RB0-4=入力 020D 0086 00289 MOVWF TRISB ;RB5-7=出力 00290 00291 ;TRISC REGISTER 00292 ;0xxx xxxx : RC7は出力ピン 00293 ;1xxx xxxx : RC7は入力ピン 00294 ;x0xx xxxx : RC6は出力ピン 00295 ;x1xx xxxx : RC6は入力ピン 00296 ;xx0x xxxx : RC5は出力ピン 00297 ;xx1x xxxx : RC5は入力ピン 00298 ;xxx0 xxxx : RC4は出力ピン 00299 ;xxx1 xxxx : RC4は入力ピン 00300 ;xxxx 0xxx : RC3は出力ピン 00301 ;xxxx 1xxx : RC3は入力ピン 00302 ;xxxx x0xx : RC2は出力ピン 00303 ;xxxx x1xx : RC2は入力ピン 00304 ;xxxx xx0x : RC1は出力ピン 00305 ;xxxx xx1x : RC1は入力ピン 00306 ;xxxx xxx0 : RC0は出力ピン 00307 ;xxxx xxx1 : RC0は入力ピン  020E 3000 00308 MOVLW B'00000000' ;RCは全て出力 020F 0087 00309 MOVWF TRISC ; 00310 00311 ;ADCON1 REGISTER 00312 ;1xxx xxxx ADFM : 結果を右詰格納 ADRESH 6MSBは0 00313 ;0xxx xxxx 〃 : 結果を左詰格納 ADRESL 6LSBは0 00314 ;xxxx ABCD A/D変換ピンの配置 MPASM 03.80.04 Internal GAME02.ASM 6-24-2005 0:35:11 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00315 ; A=PCFG3 B=PCFG2 C=PCFG1 D=PCFG0 00316 ; ABCD RA5 RA3 RA2 RA1 RA0 00317 ; 0000 A A A A A 00318 ; 0001 A R+ A A A 00319 ; 0010 A A A A A 00320 ; 0011 A R+ A A A 00321 ; 0100 D A D A A 00322 ; 0101 D R+ D A A 00323 ; 0110 D D D D D 00324 ; 0111 D D D D D 00325 ; 1000 A R+ R- A A 00326 ; 1001 A A A A A 00327 ; 1010 A R+ A A A 00328 ; 1011 A R+ R- A A 00329 ; 1100 A R+ R- A A 00330 ; 1101 D R+ R- A A 00331 ; 1110 D D D D A 00332 ; 1111 D R+ R- D A 00333 ; 00334 ; A=アナログ入力 D=デジタル入力 00335 ; R+=VREF+入力  R-=VREF-入力 0210 3007 00336 MOVLW B'00000111' ;すべてデジタルピンとして選択 0211 009F 00337 MOVWF ADCON1 ; 00338 00339 00340 ;================================================ 00341 ; 制御メイン 00342 ;================================================ 00343 ; 00344 ; 00345 0212 1283 00346 INIT BCF STATUS,RP0 ;バンク0選択 0213 1303 00347 BCF STATUS,RP1 00348 0214 2218 00349 CALL REG_INIT ;レジスタ値を初期化 0215 2232 00350 CALL TIMER_INIT ;タイマ初期化 0216 2235 00351 CALL TIMER_ACTV ;タイマ動作 0217 00352 MAIN 00353 00354 0217 2A17 00355 GOTO MAIN 00356 00357 00358 00359 00360 00361 ;================================================