;これをズルーーーーンとコピペしてasmファイルにしてね。
;使用部品:PIC12F675(629でも可) 10MHzセラロック(20MHzでも可)
; 抵抗10KΩ3個 コンデンサ0.1μF3個
;配線方法はコピペすれば解るぜ
;わっはっはっはっはははっははははははっはっははははははっはっはっは
; PIC12F675 SIN波形
; _____________
; VDD 5V =1; ;8= 0V VSS
; 10MHz =2;(GP5) (GP0);7= OUT____10KΩ____10KΩ____10KΩ____OUTPUT
; 10MHz =3;(GP4) (GP1);6= T T T
; =4;(GP3) (AN2);5= 0.1μF 0.1μF 0.1μF
; ______________ T T T
; GND GND GND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
list p=12f675 ; 翻訳時にリストファイルを作ります
#include <p12f675.inc> ; 12F675用定義ファイルを読み込みます
;ASMファイルでは「;」より右側は読み取りませんので注意書きなり落書きが可能です。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _MCLRE_OFF & _PWRTE_ON & _HS_OSC ;10MHz
; _INTRC_OSC_NOCLKOUT ;4MHz
;↑↑動かす条件です。機種によっていろいろ取り決めはありますが、これらは理屈抜きに覚えてください。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
errorlevel -302 ; 翻訳時に302エラーが出ないようにします
radix dec ; 省略時の数値表現を10進数にします。
ORG 000H
GOTO INIT
DATA_0 EQU 20H ;
DATA_1 EQU 21H ;
DATA_1A EQU 22H ;
CNT EQU 23H ;
SPEED_1 EQU 24H ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<<<初期化ルーチン>>>
INIT:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;プログラムは「GOTO」などの命令がない限り下へ下へと降りて行きます。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,RP0 ;BANK1に切り替え STATUS,RP0を1にするという意味
MOVLW B'00000000'
MOVWF TRISIO ;GPIO
MOVLW B'10000111' ;
MOVWF OPTION_REG ;
CLRF ANSEL
BCF STATUS,RP0 ;BANK0に切り替え STATUS,RP0を0にするという意味
MOVLW B'00000111' ;GP2,GP1,GP0,
MOVWF CMCON
CLRF DATA_0
CLRF DATA_1
CLRF DATA_1A
CLRF CNT
CLRF SPEED_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN0
CALL PTN_DATA ;データパターンへ
MOVWF DATA_1 ;<<PWM分子入力>>
INCF CNT,F ;データカウント更新
MOVLW D'64' ;データ総数
SUBWF CNT,W
BTFSC STATUS,C ;データ総数カウント完了?
CLRF CNT ;YES
;NO
MAIN1 ;<<PWM分母入力>>
MOVLW D'64'
MOVWF DATA_0
;<<PWM分母入力>>
MOVF DATA_1,W
MOVWF DATA_1A
;<<データ値0チェック>>
MOVF DATA_1,F ;DATA_1=0?
BTFSS STATUS,Z ;
GOTO MAIN2 ;NO
BCF GPIO,0 ;YES
GOTO MAIN3
MAIN2 ;<<分子減少>>
BSF GPIO,0
DECFSZ DATA_1A ;分子-1=0?
GOTO MAIN3 ;NO
BCF GPIO,0 ;YES
MAIN3 ;<<分母減少>>
DECFSZ DATA_0,F ;分母-1=0?
GOTO MAIN4 ;NO
;YES
;<<SPEED_1値0チェック>>
DECFSZ SPEED_1,F ;SPEED_1-1=0?
GOTO MAIN1 ;N0
;YES
MOVLW D'1'
MOVWF SPEED_1
GOTO MAIN0
MAIN4 ;<<GP0オフチェック >>
BTFSC GPIO,0 ;GP0 ON?
GOTO MAIN2 ;YES
NOP ;NO
NOP
NOP
GOTO MAIN3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PTN_DATA
MOVF CNT,W
ADDWF PCL,F
RETLW D'32'
RETLW D'35'
RETLW D'38'
RETLW D'41'
RETLW D'44'
RETLW D'47'
RETLW D'50'
RETLW D'52'
RETLW D'55'
RETLW D'57'
RETLW D'59'
RETLW D'60'
RETLW D'62'
RETLW D'63'
RETLW D'63'
RETLW D'64'
RETLW D'64'
RETLW D'64'
RETLW D'63'
RETLW D'63'
RETLW D'62'
RETLW D'60'
RETLW D'59'
RETLW D'57'
RETLW D'55'
RETLW D'52'
RETLW D'50'
RETLW D'47'
RETLW D'44'
RETLW D'41'
RETLW D'38'
RETLW D'35'
RETLW D'32'
RETLW D'29'
RETLW D'26'
RETLW D'23'
RETLW D'20'
RETLW D'17'
RETLW D'14'
RETLW D'12'
RETLW D'9'
RETLW D'7'
RETLW D'5'
RETLW D'4'
RETLW D'2'
RETLW D'1'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'1'
RETLW D'1'
RETLW D'2'
RETLW D'4'
RETLW D'5'
RETLW D'7'
RETLW D'9'
RETLW D'12'
RETLW D'14'
RETLW D'17'
RETLW D'20'
RETLW D'23'
RETLW D'26'
RETLW D'29'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;