;****************************************************************************************** ; PIC10F322 Sample Program ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H24.06.06 ; Replace date : ; History : ; Laungage : MPLAB MPASM ;****************************************************************************************** ; Description ; ;****************************************************************************************** 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 ; ; Define General Purpose Registers (64 bytes maximum ; 40h-7fh) ; Bank 0 Only ; LP0 EQU 40H LP1 EQU 41H LP2 EQU 42H ORG 0 GOTO START ORG 4 GOTO START ; ********************************** ; 1.Initialized Segment ; ********************************** START ; (1)Select Bank 0 SELBNK0 ; (2)Define OSC (Internal OSC 16MHz) MOVLW B'01110000' 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' MOVWF TRISA CLRF PORTA CLRF LATA ; (8)Initialized NCO Module CALL INITNCO ; (9)Initialized CLC Module CALL INITCLC ; ********************************** ; 2.Main Program ; ********************************** MAIN 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):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 MOVLW H'00' MOVWF NCO1INCH MOVLW H'83' 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' 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 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' 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' 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 END