//****************************************************************************************** // PIC10F322 Sample Program // Project : // Program Name : // Programer : // Create date : Version 1.0 H24.06.05 // Replace date : // History : // Laungage : HI_TECH PICC C Laungage Version 9.83 //****************************************************************************************** // Description // OSC : External OSC 12.8000MHz Crystal //****************************************************************************************** #include //__CONFIG( FOSC_INTOSC & BOREN_OFF & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF & LVP_OFF & LPBOR_OFF & BORV_HI & WRT_OFF); __CONFIG( FOSC_EC & BOREN_OFF & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CP_OFF & LVP_OFF & LPBOR_OFF & BORV_HI & WRT_OFF); void Init_NCO(void); void main() { // ******************************** // 1.Initialized Segment // ******************************** // (1)Define OSC (Internal OSC 16MHz) // OSCCON = 0b01110000; // (2)Define CLKRCON (Clock output disable) CLKRCONbits.CLKROE = 0; // (3)Define ANSELA Register (All Degital port) ANSELA = 0b00000000; // (4)Define WPUA Register (All Pull-UP disable) WPUA = 0b00000000; // (5)Define I/O interrupt (All interrupt disable) IOCAP = 0b00000000; IOCAN = 0b00000000; IOCAF = 0b00000000; // (6)Define I/O PORT PORTA = 0b00000000; TRISA = 0b00111011; LATA = 0b00000000; // (7)Initialized NCO Module Init_NCO(); // ******************************** // 2.Program main // ******************************** while(1); } //******************************************************************************************* // Function Name : Init_NCO     // Function : Initialize NCO Module // Input : // Output : // Description : //******************************************************************************************* void Init_NCO(void) { // ********************************** // 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 を固定デューティ サイクル モードで動作させる // ********************************** NCO1CON = 0b11000000; // ********************************** // 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 // ********************************** NCO1CLK = 0b00000000; // ********************************** // 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> // ********************************** NCO1ACCU = 0x00; NCO1ACCH = 0x00; NCO1ACCL = 0x00; // ********************************** // 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)=12.8MHz*(NCO1INCL)/(2^21) ==> F(Hz)=(NCO1INCL)*6.103515625 ==> NCO1INCL=F(Hz)/6.103515625 // F(Hz):50KHz 50KHz /6.103515625=>0d8192 =>0x2000 // F(Hz):100KHz 100KHz/6.103515625=>0d16384=>0x4000 NCO1INCH = 0x40; NCO1INCL = 0x00; }