;****************************************************************************************** ; PIC16F785 Sample Program ; Project : ; Program Name : ; Programer : ; Create date : Version 1.0 H22.11.01 ; History : ; Laungage : MPASM ;****************************************************************************************** ; (1)Description ; OSC : Internal Oscirator 8MHz ; IOPORT ; OP1 ; OPERATIONAL AMPLIFIER Output ; OP1- ; OPERATIONAL AMPLIFIER - ; OP1+ ; OPERATIONAL AMPLIFIER + ; PORTC(5) ; Input ; PORTC(4) ; Power Supply ; PORTC(0) ; Speaker ; PORTC(1) ; LED 1 ; PORTC(2) ; LED 2 ;****************************************************************************************** LIST P=PIC16F785,ST=OFF,R=DEC INCLUDE "P16F785.inc" __CONFIG _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_OFF &_WDT_OFF & _INTRC_OSC_NOCLKOUT & _INTOSCIO & _EXTRCIO ; _INTOSC : The OSC1 pin is available for general purpose I/O. ; The OSC2/CLKOUT pin outputs the selected internal oscillator frequency divided by 4. ; The CLKOUT signal may be used to provide a clock for external circuitry, synchronization, calibration, test or other application requirements ; _INTOSCIO : the OSC1 and OSC2 pins are available for general purpose I/O LPWATA EQU 20H LPARM EQU 21H CHKCNT EQU 22H LPWAT20 EQU 23H ORG 0h GOTO START ORG 4h GOTO START START ; ********************************************** ; 1-1.初期化(1) ; ********************************************** ; (1)Bank0での設定 BCF STATUS,RP0 ; SET BANK0 BCF STATUS,RP1 ; SET BANK0 ; 1-1)PORTの設定 CLRF PORTA CLRF PORTB CLRF PORTC ; (2)Bank1での設定 BSF STATUS,RP0 ; SET BANK1 BCF STATUS,RP1 ; SET BANK1 ; 2-1)PORTの設定 MOVLW B'11111111' MOVWF TRISA MOVLW B'11111111' MOVWF TRISB MOVLW B'11101000' MOVWF TRISC ; 2-2)OSCの設定(内部8MHz) BSF OSCCON,IRCF2 BSF OSCCON,IRCF1 BSF OSCCON,IRCF0 ; 2-3)A/D Converterの設定(Degital Portにする) CLRF ANSEL0 CLRF ANSEL1 ; (3)Bank2での設定 BCF STATUS,RP0 ; SET BANK2 BSF STATUS,RP1 ; SET BANK2 ; (4)Bank3での設定 BSF STATUS,RP0 ; SET BANK3 BSF STATUS,RP1 ; SET BANK3 ; (5)Bank0に戻す BCF STATUS,RP0 ; SET BANK0 BCF STATUS,RP1 ; SET BANK0 ; (6)OP-AMPの設定 BCF STATUS,RP0 ; SET BANK2 BSF STATUS,RP1 ; SET BANK2 BSF OPA1CON,OPAON ; OP-AMP(1)を使用する BCF STATUS,RP0 ; SET BANK0 BCF STATUS,RP1 ; SET BANK0 ; ********************************************** ; 2.プログラム ; ********************************************** MAIN: ; (1)初期化 MOVLW H'64' MOVWF CHKCNT ; (2)供給ON BSF PORTC,4 ; (3)WAIT CALL WATN20 MAIN1: ; (4)導通チェック BTFSS PORTC,5 GOTO MAINON ; (5)WAIT CALL WATN20 ; (6)チェック回数 DECFSZ CHKCNT,F GOTO MAIN1 ; (7)断線の時の処理 BCF PORTC,4 CALL NARM GOTO MAIN ; (8)導通の時の処理 MAINON: BCF PORTC,4 BSF PORTC,1 BSF PORTC,2 CALL ARM BCF PORTC,1 BCF PORTC,2 GOTO MAIN ;****************************************************************************************** ; Function Name : WATN20 ; Title : ; Input : ; Output : ;****************************************************************************************** WATN20 MOVLW H'04' MOVWF LPWAT20 WATN20A NOP NOP DECFSZ LPWAT20,F GOTO WATN20A RETURN ;****************************************************************************************** ; Function Name : NARM ; Title : ; Input : ; Output : ;****************************************************************************************** NARM MOVLW H'32' MOVWF LPARM NARM1 CALL WAIT001 CALL WAIT001 DECFSZ LPARM,F GOTO NARM1 RETURN ;****************************************************************************************** ; Function Name : ARM ; Title : ; Input : ; Output : ;****************************************************************************************** ARM MOVLW H'32' MOVWF LPARM ARM1 BSF PORTC,0 CALL WAIT001 BCF PORTC,0 CALL WAIT001 DECFSZ LPARM,F GOTO ARM1 RETURN ;****************************************************************************************** ; Function Name : WAT ; Title : ; Input : W-Reg ; n (Wait times = 0.001[S] * n) ; Output : ;****************************************************************************************** WAT MOVWF LPWATA WATA CALL WAIT001 DECFSZ LPWATA,F GOTO WATA RETURN ;************************************************************************************ ; Function Name : WAIT001 ; Title : Wait 0.001[S] ; Input : ; Output : ;************************************************************************************ WAIT001 ; ; 1.Set Register ; (1)T1CON Register ; T1CON[7] T1GINV: Timer1 Gate Invert bit(1) ; 1 = Timer1 gate is high true (see bit 6) ; 0 = Timer1 gate is low true (see bit 6) ; T1CON[6] TMR1GE: Timer1 Gate Enable bit(2) ; If TMR1ON = 0: This bit is ignored. ; If TMR1ON = 1: ; 1 = Timer1 is on if Timer1 gate is true (see bit 7) ; 0 = Timer1 is on independent of Timer1 gate ; T1CON[5-4] T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits ; 11 = 1:8 Prescale Value ; 10 = 1:4 Prescale Value ; 01 = 1:2 Prescale Value ; 00 = 1:1 Prescale Value ; T1CON[3] T1OSCEN: LP Oscillator Enable Control bit ; If System Clock is INTOSC without CLKOUT or LP mode ; 1 = LP oscillator is enabled for Timer1 clock ; 0 = LP oscillator is off ; Else: This bit is ignored. ; T1CON[2] T1SYNC: Timer1 External Clock Input Synchronization Control bit ; TMR1CS = 1: ; 1 = Do not synchronize external clock input ; 0 = Synchronize external clock input ; TMR1CS = 0: ; This bit is ignored. Timer1 uses the internal clock. ; T1CON[1] TMR1CS: Timer1 Clock Source Select bit ; 1 = External clock from T1CKI pin (on the rising edge) ; 0 = Internal clock (FOSC/4) ; T1CON[0] TMR1ON: Timer1 On bit ; 1 = Enables Timer1 ; 0 = Stops Timer1 ; MOVLW B'00000101' MOVWF T1CON ; (2)Set TMR1 Value ; 8000000Hz(Int_OSC)/4/8(Prescale)/10(0.1[S]) => 0d25000(0x61A8) ; 0xFFFF(-)0xF424 => 0d40535(0x9E57) ; 8000000Hz(Int_OSC)/4/1(Prescale)/1000(0.001[S]) => 0d2000(0x7D0) ; 0xFFFF(-)0x07D0 => 0d63535(0xF82F) ; MOVLW H'F8' ; *TMR1 MOVWF TMR1H ; *TMR1 MOVLW H'2F' ; *TMR1 MOVWF TMR1L ; *TMR1 ; 2.Timer BCF PIR1,TMR1IF BTFSS PIR1,TMR1IF GOTO $-1 RETURN END