PIC16F18857 Timero割り込み

このQ&Aのポイント
  • PIC16F18857のTimer0の割り込みが掛からず困っています。
  • マニュアルに書かれている項目の設定はしているつもりですが、何かが抜けているように思います。
  • ご教授お願いします。
回答を見る
  • 締切済み

PIC16F18857 Timero割り込み

PIC16F18857 Timer0の割り込みが掛からず困っています。 マニュアルに書かれている項目の設定はしているつもりですが 何かが抜けているように思います。 ご教授下さい。

  • 開発
  • 回答数2
  • ありがとう数0

みんなの回答

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.2

肝心の、TMR0設定、割り込み処理が未記載です _CSWEN_OFF ; The NOSC and NDIV bits cannot be changed by user software BANKSELOSCCON1 MOVLWB'01100101'; <NOSC><NDIV>Clock 1Mhz MOVWFOSCCON1 BANKSELOSCCON2 MOVLWB'01100101'; <COSC><CDIV>Clock READ ONLY 設定が矛盾しています 参考 TMR0_BLINK RA2 processor 16F18857 #include "P16F18857.INC" __CONFIG _CONFIG1 , _FEXTOSC_OFF & _RSTOSC_HFINT32 & _CLKOUTEN_ON & _CSWEN_ON & _FCMEN_ON __CONFIG _CONFIG2 , _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & _BORV_LO & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF __CONFIG _CONFIG3 , _WDTCPS_WDTCPS_31 & _WDTE_OFF & _WDTCWS_WDTCWS_7 & _WDTCCS_SC __CONFIG _CONFIG4 , _WRT_OFF & _SCANE_not_available & _LVP_OFF __CONFIG _CONFIG5 , _CP_OFF & _CPD_OFF ORG 0 GOTO MAIN ORG 4 BANKSEL PIE0 BTFSS PIE0,TMR0IE BRA INT_R BANKSEL PIR0 BTFSS PIR0,TMR0IF BRA INT_R BCF PIR0,TMR0IF BANKSEL LATA MOVLW 0x04 ; RA2 BLINK XORWF LATA,F INT_R RETFIE MAIN BANKSEL OSCCON1 MOVLW 0x02 ; HFINT32 , 32MHz / 4 = 8MHz (FOSC) IORWF OSCCON1,F BANKSEL ANSELA ; RA2 OUTPUT BCF ANSELA,ANSA2 BANKSEL TRISA BCF TRISA,TRISA2 BANKSEL T0CON1 MOVLW 0x4C ; FOSC/4 , 1:4096 MOVWF T0CON1 ; 2MHz / 4096 / 256 = 1.9Hz BSF T0CON0,T0EN ; TMR0 START BANKSEL PIE0 BSF PIE0,TMR0IE ; Enables the TMR0 interrupt BSF INTCON,GIE ; Enables all active interrupts BRA $ ; STOP END

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.1

具体的な環境、プログラムの提示がないと 答えようがありません。

tomcat1032
質問者

補足

以下のファイルです。 ;***************************************************************** ; Filename: Shanp100 * ; Date: 2019.5.21 * ; File Version: 0.9 * ; Author: Hayashi Masahiro * ; Description: * ; * ;**************************************************************** ;**************************************************************** ; * ; Revision History: * ; * ;**************************************************************** ;**************************************************************** ; MAIN PROGRAM ;**************************************************************** LIST P=PIC16F18857 #INCLUDE "p16f18857.inc" ; CONFIG1 ; __config 0x17EC __CONFIG _CONFIG1, _FEXTOSC_OFF & _RSTOSC_HFINT1 & _CLKOUTEN_OFF & _CSWEN_OFF & _FCMEN_OFF ; CONFIG2 ; __config 0x373F __CONFIG _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_OFF & _BORV_LO & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON ; CONFIG3 ; __config 0x3AA __CONFIG _CONFIG3, _WDTCPS_WDTCPS_10 & _WDTE_SWDTEN & _WDTCWS_WDTCWS_3 & _WDTCCS_LFINTOSC ; CONFIG4 ; __config 0x2FFF __CONFIG _CONFIG4, _WRT_OFF & _SCANE_not_available & _LVP_ON ; CONFIG5 ; __config 0x3FFF __CONFIG _CONFIG5, _CP_OFF & _CPD_OFF ; ; ;******************************************************************************* ; EQU ;******************************************************************************* ; ;========================================================================== ; ; Register Definitions ; ;========================================================================== ; ;------User setting ----------------------------------------------------- ; USER_FLG EQU 0030H INT_FLG EQU 0031H HOLD_FLG EQU 0032H MOVE_FLG EQU 0033H MANU_FLG EQU 0034H MANUA_FLG EQU 0035H MANUB_FLG EQU 0036H MANUC_FLG EQU 0037H Dummy_FLG EQU 0038H INT_TMP EQU 0039H PORTAA EQU 003AH PORTA1 EQU 003BH PORTA2 EQU 003CH PORTA3 EQU 003DH PORTBA EQU 003EH PORTB1 EQU 003FH PORTB2 EQU 0040H PORTB3 EQU 0041H PORTCA EQU 0042H PORTC1 EQU 0043H PORTC2 EQU 0044H PORTC3 EQU 0045H TIM_BUFF EQU 004AH ; unused TIM_BUF1 EQU 004BH TIM_BUF2 EQU 004CH TIM_BUF3 EQU 004DH TIM_BUF4 EQU 004EH TIM_BUF5 EQU 004FH TIM_BUF6 EQU 0050H TIM_BUF7 EQU 0051H TIM_BUF8 EQU 0052H TIM_BUF9 EQU 0053H TIM_BUFA EQU 0054H TIM_BUFB EQU 0055H TIM_BUFC EQU 0056H ; unused Timer0_ON EQU B'00100000' Timer0_OFF EQU B'00000000' GIE_ON EQU B'11000000' GIE_OFF EQU B'00000000' SEC_2STEP EQU 5 ; 400msec Count SEC_1 EQU 5 ; 1sec Count SEC_30 EQU 5*30 ; 30sec Count ; ; ;------------------------------------------------------------------------ ; ; Program Start ; ;------------------------------------------------------------------------ ORG 00H GOTO INITAL ; Reset Vector ORG 04H GOTO INTERVAL ; Interrupt Vector ORG 08H MAIN_PROG CODE ; let linker place main program INITAL CLRW MOVLW H'00' MOVWF BSR ; Bank0 Select CLRF USER_FLG CLRF INT_FLG CLRF HOLD_FLG CLRF MOVE_FLG CLRF MANU_FLG CLRF MANUA_FLG CLRF MANUB_FLG CLRF MANUC_FLG CLRF INT_TMP CLRF PORTAA CLRF PORTA1 CLRF PORTA2 CLRF PORTA3 CLRF PORTBA CLRF PORTB1 CLRF PORTB2 CLRF PORTB3 CLRF PORTCA CLRF PORTC1 CLRF PORTC2 CLRF PORTC3 CLRF TIM_BUFF CLRF TIM_BUF1 CLRF TIM_BUF2 CLRF TIM_BUF3 CLRF TIM_BUF4 CLRF TIM_BUF5 CLRF TIM_BUF6 CLRF TIM_BUF7 CLRF TIM_BUF8 CLRF TIM_BUF9 CLRF TIM_BUFA CLRF TIM_BUFB CLRF TIM_BUFC BANKSEL TRISA MOVLW B'00111011' ; OOIIXOII MOVWF TRISA ; PORTA BANKSEL TRISB MOVLW B'11111111' ; XXIIXXII MOVWF TRISB ; PORTB BANKSEL TRISC MOVLW B'11111100' ; IIIIIXOO MOVWF TRISC ; PORTC BANKSEL OSCCON1 MOVLW B'01100101' ; <NOSC><NDIV>Clock 1Mhz MOVWF OSCCON1 BANKSEL OSCCON2 MOVLW B'01100101' ; <COSC><CDIV>Clock

関連するQ&A

  • PIC16F18857 Timer0割り込みせず

    前回の質問、抽象過ぎ、また要点を得ていませんでした。 PIC16FXXXXXのシリーズでXが5桁のPIC16Fは、オプションレジスタが無くなっています。その設定すべき内容が他のレジスタに移ったようですが、マニュアル見てTimer0の割り込みを設定しているのですが、割り込みが働きません。 何処か大事な点を見落としているように思います。 経験された方からのアドバイスをお願い致します。

  • PIC16F88 内部オシレータ使用による割り込み

    PIC16F88を内部オシレータで発振させて使用しています。 問題は、TIMER0割り込みが計算通りに動かないことです。 外部にオシレータを付けると計算通りのタイミングで割り込みが発生するのですが、内部オシレータ使用の場合は、その間隔よりもかなり長くなってしまいます。(0.01秒間隔で割り込みをかけるつもりが、3秒間隔ぐらいになってしまいます。) 何が原因なのでしょうか? 完全な答えでなくても色々試してみますので、何か気になる部分が御座いましたら、教えて下さい。

  • PIC16F1827の外部割込み

    PIC16F1827のRB0を 外部割込みとして入力の立上りで割込みを発生するように 設定します。 1.割込み禁止 2.プログラムAスタート 3.RB0に立上り入力あり 4.プログラムA終了 5.割込み許可 ・・・のような場合 5.以降に割込みが発生するでしょうか? ご教授お願いします。

  • PIC12F675のRB割込みミス(?)

    PIC12F675を20MHzでポート変化割込みを使用しています。 A.割込みルーチン内では BTFSC 05.3とラストリードし、bit出力(オシロでのチェック用)をするのみ (ポート変化割込に使用しているbitへの入力は約500Hz) B.メインルーチン内では MOVWF 05という形で無限ループでGPIOに出力し続けるのみ。 (出力周期は約600KHz) オシロでみると、入力が変化しても割込みが発生しないミスがかなりあります。 ここでB.の出力にディレイを入れて出力周期を約1KHzに下げると割込みミスは減少します。 Q1. マニュアルによれば、ポート変化割込みはラストリードから入力が変化とき 発生するとあります。 ラストリードはA.の割り込みルーチン内でしかしていません。 したがってB.で出力しても(出力にBCF,BSFは使用していません) 割り込みの発生には関係ないはずですが 現実は出力周期が割り込みの発生に大きく関係しています。 どういう理由でしょうか? Q2. ここまで述べてくると PIC12F675では、ポート出力をしているときはポート変化割込み ミスがある???ということになってしまいます。 これは正しいのでしょうか? 入力の変化を見落とさないために、ソフトウェアプログラムではなく割り込みを使用しているのですが・・・。

  • usartによるpic18fからpic16fへの…

    usartによるpic18fからpic16fへのデータの受け渡しについて いつもお世話になります。 pic18f2680からpic16f690へデータを渡すためにusartを使用して行おうとしていますがうまくいきません。 送り側(18f2680)で i=3 itoa(i,f);//int f,char i putsUSART(f); 上記のように送信し, 受け側(16f690)で     c= getc();//int c printf("%u",c); と、受けたところ000000000000000000000000510と表示されてしまいます。 printfなどの書式を変えても問題が治りません。 どなたかお詳しい方がいらっしゃいましたらご教授よろしくお願い致します。

  • PICでUSARTとステッパのドライブ方法について

    PIC16F873を使用して、USARTでデータを送受信しながら、ステッピングモータをドライブしたい。 ステッピングモータのドライブ用にTIMER0の割込みを使用すると、USARTの割込みができず。   USARTで送受信しながら、ステッピングモータドライブ用に一定周期のパルスを 出力したいのですが、いい方法を教えてください。  ちなみにUSARTはステッピングモータをドライブするパラメータを送受信します。  PIC-Cを使用していますのでプログラムベース 大歓迎です。

  • interruptの使い方? PIC10F200

    10F200でRCサーボの勉強をしたいのですが XC8コンパイラーを使用していて interrupt functions not implemented for 12 bit PIC というエラーメッセージで割り込みが 使えないようなんですが、 10F200では使えなくて 別の方法があるのでしょうか? 高校で基本を学んだ程度の初心者なので、 分からないことだらけです おねがいします

  • PIC 16F883について

    PIC16F883のコンパレータを不使用にしたいのですが下記のようなプログラムでビルド時に CMCONの行でエラーが出ます エディタはMIKROBASICです 対処方法をよろしくお願いします エラー内容 227 303 Identifier "CMCON" was not declared Datawave_16F883.mbas プログラム Main: 'メインプログラム ************************************** TRISA=%00000011 TRISC=0 CMCON=%00000111 'コンパレータ不使用 OPTION_REG=%00000111 'PS0,1,2,の設定(256分周) INTCON=%10100000 'TMR0の割り込みを使用 UART1_Init(9600) 'UARTイニシャル9600/8/N/1 I2C1_Init(100000) 'I2Cイニシャル MS=0 End.

  • PIC 16F54 でTMR0割り込みを使いたい。

    最近PICによる電子工作を学び始めた初心者です。 値段が安いことにひかれて 16F54 を使っていろいろ学んでいこうと思ったのですが、TMR0割り込みを使ったプログラムを組もうとしたところ、行き詰まってしまいました。 他の 16F84A やその他のネットで紹介されている PIC の場合、INTCONレジスタのT0IEをセットしたり、T0IFをクリアにしたり、RETFIEで元の位置に戻ったりすると思うのですが、16F54にはINTCONレジスタも RETFIE命令もありません。 試しに、MPLABでINTCONレジスタの設定は無しにして、RETFIE命令は書き込んでアッセンブルしてみたらRETFIE命令に警告が出たものの、どうにか成功しました。 そこで試しにデバックしてみると、T0IEをセットしていないので当然なのですが、TMR0はカウントされるものの、割り込みは発生しませんでした。16F84Aや16F88等のPICも数百円で買えるので素直にこれらをチョイスすれば良いのでしょうが、百円を切る低コストの16F54に魅力を感じるし、何より疑問を解決しないまま、財力に任せて解決とすることに抵抗があります。 どなたかこんな私を助けてください。

  • PIC16F628Aのタイマー機能について

    PIC16F628Aでタイマー0とタイマー1を同時に使用することは可能でしょうか?カウント時間は異なりますがどちらも終了時に割り込みを発生させます。使用可能な場合なにか注意点とかあるのでしょうか?よろしくお願いします。