;****************************************************************************************** ; PIC10F322 Sample Program ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H24.10.10 ; Replace date : ; History : ; Laungage : MPLAB MPASM ;****************************************************************************************** ; Description ; 平均律音階 ; 中心の“ラ”の音の周波数が440Hz,その1オクターブ低い“ラ”の音が220Hz ; 音階の周波数=220×2^(n/12) nは,1から12の整数 ; 周波数   NCO値() 16進数 ; ド :261.6256Hz (548.6686) 0225 ; レ :293.6648Hz (615.8597) 0268 ; ミ :329.6276Hz (691.2791) 02B3 ; ファ:349.2282Hz (732.3847) 02DC ; ソ :392.9954Hz (882.0740) 0336 ; ラ :440 Hz (922.7469) 039B ; シ :493.8833Hz (1035.748) 040C ; ド :523.2511Hz (1097.337) 0449 ; ;****************************************************************************************** LIST P=PIC10F322 INCLUDE "P10F322.inc" __CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _LVP_OFF & _LPBOR_OFF & _BORV_HI & _WRT_OFF ; ; Define Macro ; SELBNK0 MACRO BCF STATUS,RP0 BCF STATUS,RP1 ENDM PLAY MACRO #M_H,#M_L MOVLW #M_H MOVWF NCO1INCH MOVLW #M_L MOVWF NCO1INCL MOVLW H'02' CALL WAIT01 MOVLW H'00' MOVWF NCO1INCH MOVLW H'01' MOVWF NCO1INCL MOVLW H'03' CALL WAIT01 ENDM STP MACRO PLAY H'00',H'01' ENDM DO MACRO PLAY H'02',H'25' ENDM RE MACRO PLAY H'02',H'68' ENDM MI MACRO PLAY H'02',H'B3' ENDM FA MACRO PLAY H'02',H'DC' ENDM SO MACRO PLAY H'03',H'36' ENDM RA MACRO PLAY H'03',H'9B' ENDM SI MACRO PLAY H'04',H'0C' ENDM DO1 MACRO PLAY H'04',H'49' ENDM ; ; Define General Purpose Registers (64 bytes maximum ; 40h-7fh) ; Bank 0 Only ; LP0 EQU 40H LP1 EQU 41H LP2 EQU 42H NCO_H EQU 43H NCO_L EQU 44H ORG 0 GOTO START ORG 4 GOTO START ; ********************************** ; 1.Initialized ; ********************************** START ; (1)Select Bank 0 SELBNK0 ; (2)Define OSC (Internal OSC 1MHz) ; MOVLW B'01110000' ; OSC 16MHz MOVLW B'00110000' ; OSC 1MHz MOVWF OSCCON ; (3)Define CLKRCON (Clock output disable) BCF CLKRCON,CLKROE ; (4)Define ANSELA Register (All Degital port) CLRF ANSELA ; (5)Define WPUA Register (All Pull-UP disable) CLRF WPUA ; (6)Define I/O interrupt (All interrupt disable) CLRF IOCAP CLRF IOCAN CLRF IOCAF ; (7)Define PORTA Register MOVLW B'00111101' ; CLC MOVWF TRISA CLRF PORTA CLRF LATA ; (8)Initialized NCO Module CALL INITNCO ; (9)Initialized CLC Module CALL INITCLC ; ********************************** ; 2.Main Program ; ********************************** MAIN ; ドレミファソラシド DO RE MI FA SO RA SI DO1 STP STP ; ドシラソファミレド DO1 SI RA SO FA MI RE DO STP STP GOTO MAIN ;******************************************************************************************* ; Function Name : INITNCO     ; Function : Initialize NCO Module ; Input : ; Output : ; Description : ;******************************************************************************************* INITNCO ; ********************************** ; 1.NCOxCON: NCOx 制御レジスタの定義 ; NCOxCON[7] NxEN: NCOx イネーブルビット ; 1 = NCOx モジュールを有効にする ; 0 = NCOx モジュールを無効にする ; NCOxCON[6] NxOE: NCOx 出力イネーブルビット ; 1 = NCOx 出力ピンを有効にする ; 0 = NCOx 出力ピンを無効にする ; NCOxCON[5] NxOUT: NCOx 出力ビット ; 1 = NCOx 出力がHigh である ; 0 = NCOx 出力がLow である ; NCOxCON[4] NxPOL: NCOx 極性ビット ; 1 = NCOx 出力信号をアクティブHigh にする ; 0 = NCOx 出力信号をアクティブLow にする ; NCOxCON[3-1] 未実装: 「0」として読み出し ; NCOxCON[0] NxPFM: NCOx パルス周波数モードビット ; 1 = NCOx をパルス周波数モードで動作させる ; 0 = NCOx を固定デューティ サイクル モードで動作させる ; ********************************** MOVLW B'11000000' MOVWF NCO1CON ; ********************************** ; 2.NCOxCLK: NCOx 入力クロック制御レジスタの定義 ; NCOxCLK[7-5] NxPWS<2:0>: NCOx 出力パルス幅選択ビット(1, 2) ; 111 = NCOx クロック128 周期 ; 110 = NCOx クロック64 周期 ; 101 = NCOx クロック32 周期 ; 100 = NCOx クロック16 周期 ; 011 = NCOx クロック8 周期 ; 010 = NCOx クロック4 周期 ; 001 = NCOx クロック2 周期 ; 000 = NCOx クロック1 周期 ; NCOxCLK[4-2] 未実装: 「0」として読み出し ; NCOxCLK[1-0] NxCKS<1:0>: NCOx クロック源選択ビット ; 11 = LC1OUT ; 10 = HFINTOSC ; 01 = Fosc ; 00 = NCO1CLK ; ********************************** MOVLW B'00000001' MOVWF NCO1CLK ; ********************************** ; 3.NCOxACCU: NCOx アキュムレータ レジスタ - 最上位バイトの定義 ; NCOxACCU[3-0] NCOx アキュムレータ、最上位バイト NCOxACC<19:16> ; NCOxACCH: NCOx アキュムレータ レジスタ - 上位バイトの定義 ; NCOxACCH[7-0] NCOx アキュムレータ、上位バイト NCOxACC<15:8> ; NCOxACCL: NCOx アキュムレータ レジスタ - 下位バイトの定義 ; NCOxACCL[7-0] NCOx アキュムレータ、下位バイト NCOxACC<7:0> ; ********************************** MOVLW H'00' MOVWF NCO1ACCU MOVLW H'00' MOVWF NCO1ACCH MOVLW H'00' MOVWF NCO1ACCL ; ********************************** ; 4.NCOxINCH: NCOx インクリメント レジスタ - 上位バイトの定義 ; NCOxINCH[7-0] NCOxINC<15:8>: NCOx インクリメント レジスタ - 上位バイト ; NCOxINCL: NCOx インクリメント レジスタ - 下位バイトの定義 ; NCOxINCL[7-0] NCOxINC<7:0>: NCOx インクリメント レジスタ - 下位バイト ; 注)NCOxINCレジスタは、NCOxINCH=>NCOxINCLの順に設定する必要がある!!! ; ********************************** ; F(Hz)=16MHz*(NCO1INCL)/(2^21) ==> F(Hz)=(NCO1INCL)*7.629394531 ==> NCO1INCL=F(Hz)/7.629394531 ; F(Hz)=1MHz *(NCO1INCL)/(2^21) ==> F(Hz)=(NCO1INCL)*0.4768371582 ==> NCO1INCL=F(Hz)/0.4768371582 ; F(Hz):50Hz 50Hz /7.629394531=>0d6.5536 =>0x0007 ; F(Hz):100Hz 100Hz /7.629394531=>0d13.1072=>0x000D ; F(Hz):1KHz 1KHz /7.629394531=>0d131.072=>0x0083 ; F(Hz):10KHz 10KHz /7.629394531=>0d1310.72=>0x051F ; F(Hz):100KHz 100KHz/7.629394531=>0d13107.2=>0x3333 ; F(Hz):500KHz 500KHz/7.629394531=>0d65536 =>0x10000 ; F(Hz):1KHz 1KHz /0.4768371582=>0d2097 =>0x0831 ; F(Hz):20Hz 20Hz /0.4768371582=>0d2097 =>0x0831 MOVLW H'08' MOVWF NCO1INCH MOVLW H'31' MOVWF NCO1INCL RETURN ;******************************************************************************************* ; Function Name : INITCLC   ; Function : Initialize CLC Module ; Input : ; Output : ; Description : ;******************************************************************************************* INITCLC ; ********************************** ; 1.CLCxGLS0: ゲート1 ロジック選択レジスタ ; CLCxGLS0[7] LCxG1D4T: ゲート1 データ4 True ( 非反転) ビット ; 1 = lcxd4T をlcxg1 にゲーティングする ; 0 = lcxd4T をlcxg1 にゲーティングしない ; CLCxGLS0[6] LCxG1D4N: ゲート1 データ4 Negated ( 反転) ビット ; 1 = lcxd4N をlcxg1 にゲーティングする ; 0 = lcxd4N をlcxg1 にゲーティングしない ; CLCxGLS0[5] LCxG1D3T: ゲート1 データ3 True ( 非反転) ビット ; 1 = lcxd3T をlcxg1 にゲーティングする ; 0 = lcxd3T をlcxg1 にゲーティングしない ; CLCxGLS0[4] LCxG1D3N: ゲート1 データ3 Negated ( 反転) ビット ; 1 = lcxd3N をlcxg1 にゲーティングする ; 0 = lcxd3N をlcxg1 にゲーティングしない ; CLCxGLS0[3] LCxG1D2T: ゲート1 データ2 True ( 非反転) ビット ; 1 = lcxd2T をlcxg1 にゲーティングする ; 0 = lcxd2T をlcxg1 にゲーティングしない ; CLCxGLS0[2] LCxG1D2N: ゲート1 データ2 Negated ( 反転) ビット ; 1 = lcxd2N をlcxg1 にゲーティングする ; 0 = lcxd2N をlcxg1 にゲーティングしない ; CLCxGLS0[1] LCxG1D1T: ゲート1 データ1 True ( 非反転) ビット ; 1 = lcxd1T をlcxg1 にゲーティングする ; 0 = lcxd1T をlcxg1 にゲーティングしない ; CLCxGLS0[0] LCxG1D1N: ゲート1 データ1 Negated ( 反転) ビット ; 1 = lcxd1N をlcxg1 にゲーティングする ; 0 = lcxd1N をlcxg1 にゲーティングしない ; ********************************** ; MOVLW B'00001010' MOVLW B'00000110' ; MOVLW B'00010110' MOVWF CLC1GLS0 ; ********************************** ; 2.CLCxGLS1: ゲート2 ロジック選択レジスタ ; CLCxGLS1[7] LCxG2D4T: ゲート2 データ4 True ( 非反転) ビット ; 1 = lcxd4T をlcxg2 にゲーティングする ; 0 = lcxd4T をlcxg2 にゲーティングしない ; CLCxGLS1[6] LCxG2D4N: ゲート2 データ4 Negated ( 反転) ビット ; 1 = lcxd4N をlcxg2 にゲーティングする ; 0 = lcxd4N をlcxg2 にゲーティングしない ; CLCxGLS1[5] LCxG2D3T: ゲート2 データ3 True ( 非反転) ビット ; 1 = lcxd3T をlcxg2 にゲーティングする ; 0 = lcxd3T をlcxg2 にゲーティングしない ; CLCxGLS1[4] LCxG2D3N: ゲート2 データ3 Negated ( 反転) ビット ; 1 = lcxd3N をlcxg2 にゲーティングする ; 0 = lcxd3N をlcxg2 にゲーティングしない ; CLCxGLS1[3] LCxG2D2T: ゲート2 データ2 True ( 非反転) ビット ; 1 = lcxd2T をlcxg2 にゲーティングする ; 0 = lcxd2T をlcxg2 にゲーティングしない ; CLCxGLS1[2] LCxG2D2N: ゲート2 データ2 Negated ( 反転) ビット ; 1 = lcxd2N をlcxg2 にゲーティングする ; 0 = lcxd2N をlcxg2 にゲーティングしない ; CLCxGLS1[1] LCxG2D1T: ゲート2 データ1 True ( 非反転) ビット ; 1 = lcxd1T をlcxg2 にゲーティングする ; 0 = lcxd1T をlcxg2 にゲーティングしない ; CLCxGLS1[0] LCxG2D1N: ゲート2 データ1 Negated ( 反転) ビット ; 1 = lcxd1N をlcxg2 にゲーティングする ; 0 = lcxd1N をlcxg2 にゲーティングしない ; ********************************** MOVLW B'00000000' MOVWF CLC1GLS1 ; ********************************** ; 3.CLCxGLS2: ゲート3 ロジック選択レジスタ ; CLCxGLS2[7] LCxG3D4T: ゲート3 データ4 True ( 非反転) ビット ; 1 = lcxd4T をlcxg3 にゲーティングする ; 0 = lcxd4T をlcxg3 にゲーティングしない ; CLCxGLS2[6] LCxG3D4N: ゲート3 データ4 Negated ( 反転) ビット ; 1 = lcxd4N をlcxg3 にゲーティングする ; 0 = lcxd4N をlcxg3 にゲーティングしない ; CLCxGLS2[5] LCxG3D3T: ゲート3 データ3 True ( 非反転) ビット ; 1 = lcxd3T をlcxg3 にゲーティングする ; 0 = lcxd3T をlcxg3 にゲーティングしない ; CLCxGLS2[4] LCxG3D3N: ゲート3 データ3 Negated ( 反転) ビット ; 1 = lcxd3N をlcxg3 にゲーティングする ; 0 = lcxd3N をlcxg3 にゲーティングしない ; CLCxGLS2[3] LCxG3D2T: ゲート3 データ2 True ( 非反転) ビット ; 1 = lcxd2T をlcxg3 にゲーティングする ; 0 = lcxd2T をlcxg3 にゲーティングしない ; CLCxGLS2[2] LCxG3D2N: ゲート3 データ2 Negated ( 反転) ビット ; 1 = lcxd2N をlcxg3 にゲーティングする ; 0 = lcxd2N をlcxg3 にゲーティングしない ; CLCxGLS2[1] LCxG3D1T: ゲート3 データ1 True ( 非反転) ビット ; 1 = lcxd1T をlcxg3 にゲーティングする ; 0 = lcxd1T をlcxg3 にゲーティングしない ; CLCxGLS2[0] LCxG3D1N: ゲート3 データ1 Negated ( 反転) ビット ; 1 = lcxd1N をlcxg3 にゲーティングする ; 0 = lcxd1N をlcxg3 にゲーティングしない ; ********************************** MOVLW B'00000000' MOVWF CLC1GLS2 ; ********************************** ; 4.CLCxGLS3: ゲート4 ロジック選択レジスタ ; CLCxGLS3[7] LCxG4D4T: ゲート4 データ4 True ( 非反転) ビット ; 1 = lcxd4T をlcxg4 にゲーティングする ; 0 = lcxd4T をlcxg4 にゲーティングしない ; CLCxGLS3[6] LCxG4D4N: ゲート4 データ4 Negated ( 反転) ビット ; 1 = lcxd4N をlcxg4 にゲーティングする ; 0 = lcxd4N をlcxg4 にゲーティングしない ; CLCxGLS3[5] LCxG4D3T: ゲート4 データ3 True ( 非反転) ビット ; 1 = lcxd3T をlcxg4 にゲーティングする ; 0 = lcxd3T をlcxg4 にゲーティングしない ; CLCxGLS3[4] LCxG4D3N: ゲート4 データ3 Negated ( 反転) ビット ; 1 = lcxd3N をlcxg4 にゲーティングする ; 0 = lcxd3N をlcxg4 にゲーティングしない ; CLCxGLS3[3] LCxG4D2T: ゲート4 データ2 True ( 非反転) ビット ; 1 = lcxd2T をlcxg4 にゲーティングする ; 0 = lcxd2T をlcxg4 にゲーティングしない ; CLCxGLS3[2] LCxG4D2N: ゲート4 データ2 Negated ( 反転) ビット ; 1 = lcxd2N をlcxg4 にゲーティングする ; 0 = lcxd2N をlcxg4 にゲーティングしない ; CLCxGLS3[1] LCxG4D1T: ゲート4 データ1 True ( 非反転) ビット ; 1 = lcxd1T をlcxg4 にゲーティングする ; 0 = lcxd1T をlcxg4 にゲーティングしない ; CLCxGLS3[0] LCxG4D1N: ゲート4 データ1 Negated ( 反転) ビット ; 1 = lcxd1N をlcxg4 にゲーティングする ; 0 = lcxd1N をlcxg4 にゲーティングしない ; ********************************** MOVLW B'00000000' MOVWF CLC1GLS3 ; ********************************** ; 5.CLCxSEL0: マルチプレクサ データ1/2 選択レジスタ ; CLCxSEL0[7] 未実装: 「0」として読み出し ; CLCxSEL0[6-4] LCxD2S<2:0>: 入力データ2 選択制御ビット(1) ; 111 = lcxd2 にCLCxIN[7] を選択する ; 110 = lcxd2 にCLCxIN[6] を選択する ; 101 = lcxd2 にCLCxIN[5] を選択する ; 100 = lcxd2 にCLCxIN[4] を選択する ; 011 = lcxd2 にCLCxIN[3] を選択する ; 010 = lcxd2 にCLCxIN[2] を選択する ; 001 = lcxd2 にCLCxIN[1] を選択する ; 000 = lcxd2 にCLCxIN[0] を選択する ; CLCxSEL0[3] 未実装: 「0」として読み出し ; CLCxSEL0[2-0] LCxD1S<2:0>: 入力データ1 選択制御ビット(1) ; 111 = lcxd1 にCLCxIN[7] を選択する ; 110 = lcxd1 にCLCxIN[6] を選択する ; 101 = lcxd1 にCLCxIN[5] を選択する ; 100 = lcxd1 にCLCxIN[4] を選択する ; 011 = lcxd1 にCLCxIN[3] を選択する ; 010 = lcxd1 にCLCxIN[2] を選択する ; 001 = lcxd1 にCLCxIN[1] を選択する ; 000 = lcxd1 にCLCxIN[0] を選択する ; ********************************** ; CLC INPUT ; CLCxIN[0] 000 CLCx ; CLCxIN[1] 001 CLCxIN1 ; CLCxIN[2] 010 CLCxIN2 ; CLCxIN[3] 011 PWM1 ; CLCxIN[4] 100 PWM2 ; CLCxIN[5] 101 NCOx ; CLCxIN[6] 110 FOSC ; CLCxIN[7] 111 LFINTOSC ; ********************************** ; MOVLW B'00100001' ;Input CLCxIN2 and CLCxIN1 ; MOVLW B'01100101' ;Input FOSC and NCOx ; MOVLW B'00010101' ;Input CLCxIN1 and NCOx ; MOVLW B'00010011' ;Input CLCxIN1 and PWM1 ; MOVLW B'00110101' ;Input PWM1 and NCOx MOVLW B'01100101' ;Input FOSC and NCOx MOVWF CLC1SEL0 ; ********************************** ; 6.CLCxSEL1: マルチプレクサ データ3/4 選択レジスタ ; CLCxSEL1[7] 未実装: 「0」として読み出し ; CLCxSEL1[6-4] LCxD4S<2:0>: 入力データ4 選択制御ビット(1) ; 111 = lcxd4 にCLCxIN[7] を選択する ; 110 = lcxd4 にCLCxIN[6] を選択する ; 101 = lcxd4 にCLCxIN[5] を選択する ; 100 = lcxd4 にCLCxIN[4] を選択する ; 011 = lcxd4 にCLCxIN[3] を選択する ; 010 = lcxd4 にCLCxIN[2] を選択する ; 001 = lcxd4 にCLCxIN[1] を選択する ; 000 = lcxd4 にCLCxIN[0] を選択する ; CLCxSEL1[3] 未実装: 「0」として読み出し ; CLCxSEL1[2-0] LCxD3S<2:0>: 入力データ3 選択制御ビット(1) ; 111 = lcxd3 にCLCxIN[7] を選択する ; 110 = lcxd3 にCLCxIN[6] を選択する ; 101 = lcxd3 にCLCxIN[5] を選択する ; 100 = lcxd3 にCLCxIN[4] を選択する ; 011 = lcxd3 にCLCxIN[3] を選択する ; 010 = lcxd3 にCLCxIN[2] を選択する ; 001 = lcxd3 にCLCxIN[1] を選択する ; 000 = lcxd3 にCLCxIN[0] を選択する ; ********************************** MOVLW B'00000000' ; MOVLW B'00000001' ; CLCxIN1 MOVWF CLC1SEL1 ; ********************************** ; 7.CLCxPOL: 信号極性制御レジスタ ; CLCxPOL[7] LCxPOL: LCOUT 極性制御ビット ; 1 = ロジックセルの出力を反転する ; 0 = ロジックセルの出力を反転しない ; CLCxPOL[6-4] 未実装: 「0」として読み出し ; CLCxPOL[3] LCxG4POL: ゲート4 出力極性制御ビット ; 1 = ロジックセルへの入力時にゲート4 の出力を反転する ; 0 = ゲート4 の出力を反転しない ; CLCxPOL[2] LCxG3POL: ゲート3 出力極性制御ビット ; 1 = ロジックセルへの入力時にゲート3 の出力を反転する ; 0 = ゲート3 の出力を反転しない ; CLCxPOL[1] LCxG2POL: ゲート2 出力極性制御ビット ; 1 = ロジックセルへの入力時にゲート2 の出力を反転する ; 0 = ゲート2 の出力を反転しない ; CLCxPOL[0] LCxG1POL: ゲート1 出力極性制御ビット ; 1 = ロジックセルへの入力時にゲート1 の出力を反転する ; 0 = ゲート1 の出力を反転しない ; ********************************** MOVLW B'00000000' ; MOVLW B'00000001' ; MOVLW B'10000000' MOVWF CLC1POL ; ********************************** ; 8.CLCxCON: 構成可能なロジックセル制御レジスタ ; CLCxCON[7] LCxEN: 構成可能なロジックセル イネーブルビット ; 1 = 構成可能なロジックセルを有効にして入力信号を組み合わせる ; 0 = 構成可能なロジックセルを無効にしてロジック0 を出力する ; CLCxCON[6] LCxOE: 構成可能なロジックセル出力イネーブルビット ; 1 = 構成可能なロジックセルのポートピン出力を有効にする ; 0 = 構成可能なロジックセルのポートピン出力を無効にする ; CLCxCON[5] LCxOUT: 構成可能なロジックセル データ出力ビット ; 読み出し専用: LCxPOL による操作後のロジックセル出力データ(lcx_out 配線よりサンプリング) ; CLCxCON[4] LCxINTP: 構成可能なロジックセル立ち上がりエッジ割り込みイネーブルビット ; 1 = lcx_out に立ち上がりエッジが発生した場合にCLCxIF をセットする ; 0 = CLCxIF をセットしない ; CLCxCON[3] LCxINTN: 構成可能なロジックセル立ち下がりエッジ割り込みイネーブルビット ; 1 = lcx_out に立ち下がりエッジが発生した場合にCLCxIF をセットする ; 0 = CLCxIF をセットしない ; CLCxCON[2-0] LCxMODE<2:0>: 構成可能なロジックセル機能モードビット ; 111 = セルを1 入力のセット/ リセット付き透過ラッチに設定する ; 110 = セルをリセット付きJ-K フリップフロップに設定する ; 101 = セルをリセット付き2 入力D フリップフロップに設定する ; 100 = セルをセット/ リセット付き1 入力D フリップフロップに設定する ; 011 = セルをセット/ リセットラッチに設定する ; 010 = セルを4 入力AND に設定する ; 001 = セルをOR-XOR に設定する ; 000 = セルをAND-OR に設定する ; ********************************** MOVLW B'00000001' ; OR MOVWF CLC1CON ; ********************************** ; 9.CLCをイネーブルにする ; ********************************** BSF CLC1CON,LC1OE BSF CLC1CON,LC1EN RETURN ;******************************************************************************************* ; Function Name : WAIT01  ; Function : Wait 0.1[S] ; Input : W-REG ; Output : ; Description : ;******************************************************************************************* WAIT01 MOVWF LP0 WAIT01A CALL TIMER DECFSZ LP0,F GOTO WAIT01A RETURN ;******************************************************************************************* ; Function Name : TIMER   ; Function : Wait 0.1[S] ; Input : ; Output : ;******************************************************************************************* TIMER ; ******************************************************* ; 1.OPTION_REG:OPTION レジスタの定義 ; ******************************************************* ; OPTION_REG[7] WPUEN: 弱プルアップ イネーブルビット ; 1 = 弱プルアップを無効にする ; 0 = 各PORT ラッチの値に応じて弱プルアップを有効にする ; OPTION_REG[6] INTEDG: 割り込みエッジ選択ビット ; 1 = INT ピンの立ち上がりエッジで割り込み ; 0 = INT ピンの立ち下がりエッジで割り込み ; OPTION_REG[5] T0CS:TMR0 クロック源選択ビット ; 1 = T0CKI ピンの遷移 ; 0 = 内部命令サイクルクロック(FOSC/4) ; OPTION_REG[4] T0SE: TMR0 信号源エッジ選択ビット ; 1 = T0CKI ピンのHigh からLow への遷移時にインクリメントする ; 0 = T0CKI ピンのLow からHigh への遷移時にインクリメントする ; OPTION_REG[3] PSA: プリスケーラ割り当てビット ; 1 = プリスケーラは非アクティブでTimer0 モジュールに影響を与えない ; 0 = プリスケーラをTimer0 モジュールに割り当てる ; OPTION_REG[2-0] PS<2:0>: プリスケーラ比選択ビット ; 000 1 : 2 ; 001 1 : 4 ; 010 1 : 8 ; 011 1 : 16 ; 100 1 : 32 ; 101 1 : 64 ; 110 1 : 128 ; 111 1 : 256 MOVLW B'00000111' MOVWF OPTION_REG ; ******************************************************* ; 2.TIMER0:モジュール ; ******************************************************* ; TMR1 data ( OSC:1MHz, 1:256 Prescale value, 0.1[S];10Hz ) ; 100mS(10Hz): 1MHz / 4(PIC) / 256(Prescale) / 10(10Hz)==> 0d98(Count) ; TMR1 = 0d255(0xFF) - 0d98 ==> 0d157 ==> 0x9D ; MOVLW H'9D' MOVWF TMR0 ; ******************************************************* ; 3.INTCON:割り込み制御レジスタ ; ******************************************************* ; INTCON[7] GIE: グローバル割り込みイネーブルビット ; 1 = 全てのアクティブな割り込みを有効にする ; 0 = 全ての割り込みを無効にする ; INTCON[6] PEIE: 周辺機能割り込みイネーブルビット ; 1 = 全てのアクティブな周辺機能割り込みを有効にする ; 0 = 全ての周辺機能割り込みを無効にする ; INTCON[5] TMR0IE: Timer0 オーバーフロー割り込みイネーブルビット ; 1 = Timer0 割り込みを有効にする ; 0 = Timer0 割り込みを無効にする ; INTCON[4] INTE: INT 外部割り込みイネーブルビット ; 1 = INT 外部割り込みを有効にする ; 0 = INT 外部割り込みを無効にする ; INTCON[3] IOCIE: 状態変化割り込みイネーブルビット ; 1 = 状態変化割り込みを有効にする ; 0 = 状態変化割り込みを無効にする ; INTCON[2] TMR0IF: Timer0 オーバーフロー割り込みフラグビット ; 1 = TMR0 レジスタがオーバーフローした ; 0 = TMR0 レジスタはオーバーフローしていない ; INTCON[1] INTF: INT 外部割り込みフラグビット ; 1 = INT 外部割り込みが発生した ; 0 = INT 外部割り込みは発生していない ; INTCON[0] IOCIF: 状態変化割り込みフラグビット(1) ; 1 = 状態変化割り込みピンの少なくとも1 つの状態が変化した ; 0 = 状態変化割り込みピンの状態は変化していない BCF INTCON,TMR0IF BTFSS INTCON,TMR0IF GOTO $-1 RETURN END