非常に苦労してやっとコンパイルが通ったのでメモ。
使用するのはPICC(Hitech C compiler)ではなく、純正のMPLABアセンブラ(mpasm)。
設定。
使用するコードはこちら。
;16F877でPWM ;********************************************* LIST P=PIC16F877 ; INCLUDE "P16f877.inc" ;標準ヘッダ定義ファイル __CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF & _LVP_OFF ;********************************************* SWDT EQU 020H ;スイッチ読み込み SWDTDIR EQU 021H ;スイッチ正逆(最上位ビット) SWDTSP EQU 022H ;スイッチ速度データ(3ビット) TIMCNT EQU 024H ;タイマ用カウンタ TIM2CNT EQU 025H TIM5CNT EQU 026H T200CNT EQU 027H ;*********************** ; メインルーチン ;*********************** ORG 0 ;Reset Start GOTO INIT ;********************************************************* ;初期処理 INIT BSF STATUS,RP0 ;バンク1へ切替 BCF INTCON,GIE ;割り込み禁止 MOVLW 07H MOVWF ADCON1 ;A/D用ピンをすべてデジタルI/Oに MOVLW 01H MOVWF TRISA ;とりあえずポートAをRA0入力、他は出力モード設定 ;今回は不使用 MOVLW 0FFH MOVWF TRISB ;ポートBを入力モードに設定 CLRF TRISC ;ポートCを出力モードに設定 ;CCP1(RC2),CCP2(RC1)ピンをPWMに使用するためには ;出力に設定しておく必要がある CLRF TRISD ;とりあえずポートDを出力モードに設定 CLRF TRISE ;とりあえずポートEを出力モードに設定 MOVLW 0FFH MOVWF PR2 ;タイマ2周期レジスタに0FFH ;(プリスケーラ1で19.53kHz) BCF STATUS,RP0 ;バンク0に戻す MOVLW 0CH MOVWF CCP1CON MOVWF CCP2CON ;CCPモードセレクトをPWMモードに ;(デューティ下位2ビットは0とする) CLRF CCPR1L ;初期デューティ0とする CLRF CCPR2L MAIN MOVF PORTB,W ;スイッチ読み込み ANDLW 0FH MOVWF SWDT ;スイッチデータ保存 MOVWF SWDTSP ;このうち下位Bit2:0の3ビットが RLF SWDTSP,F ;デューティとして有効 SWAPF SWDTSP,F ; (Bit7:5に移動) MOVF SWDTSP,W ;方向ビットおよびCフラグの影響を ANDLW 0E0H ;なくすため上位Bit7:5の3ビット MOVWF SWDTSP ;のみ有効にする(下位は0とみなす) MOVF SWDT,W ;スイッチデータのBit3を方向データとする MOVWF SWDTDIR SWAPF SWDTDIR,F RLF SWDTDIR,F BC REVERSE ;1で逆転 FORWARD ;正転 CLRF CCPR2L MOVF SWDTSP,W MOVWF CCPR1L ;デューティセット MOVLW 04H MOVWF T2CON ;プリスケール1でタイマ2ON GOTO WAIT REVERSE CLRF CCPR1L MOVF SWDTSP,W MOVWF CCPR2L ;デューティセット MOVLW 04H MOVWF T2CON ;プリスケール1でタイマ2ON GOTO WAIT WAIT CALL TIM200 GOTO MAIN ;************************************************************ ;タイマ TIM20 ;約20μSECタイマ MOVLW 012H MOVWF TIMCNT TIMLP DECFSZ TIMCNT,F GOTO TIMLP RETURN TIM02 ;約0.2mSECタイマ MOVLW 0FFH MOVWF TIM2CNT TIM2LP NOP DECFSZ TIM2CNT,F GOTO TIM2LP RETURN TIM5 ;約5msecタイマ MOVLW 019H MOVWF TIM5CNT TIM5LP CALL TIM02 DECFSZ TIM5CNT,F GOTO TIM5LP RETURN TIM200 ;0.2SECタイマ MOVLW 019H MOVWF T200CNT T200LP CALL TIM5 DECFSZ T200CNT,F GOTO T200LP RETURN ;********************************************************* END
No rule to make target というエラーがでて小一時間悩んだ結果、
拡張子を.asmにするとうまくいった。
https://www.microchip.com/forums/m623907-print.aspx
(写真)https://www.microchip.com/forums/download.axd?file=0;624566
IDEで拡張子を自由に選択できるようになってるのを何とかしてほしい(自動的に.asmを補完するとか)。ここはハマる。