Här är programet jag testat med:
Kod: Markera allt
; Assign your microcontroller
LIST P=16F628A
; This include file makes programming more understandeble
include <P16F628A.INC>
__CONFIG _CP_OFF & _DATA_CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _LVP_OFF
; save on free ram in bank0
delay2_var1 equ 20h
delay2_var2 equ 21h
delay2_var3 equ 22h
;***
delay_var1 equ 23h
delay_var2 equ 24h
delay_var3 equ 25h
;***
pause_var1 equ 26h
;***
time equ 27h
sens_flags equ 30h
;define flags m.m.
#DEFINE FLAG1 sens_flags, 0 ;**************************
#DEFINE FLAG2 sens_flags, 1 ;
#DEFINE FLAG3 sens_flags, 2 ;
#DEFINE FLAG4 sens_flags, 3 ;Define a name on each flag.
#DEFINE FLAG5 sens_flags, 4 ;
#DEFINE FLAG6 sens_flags, 5 ;
#DEFINE FLAG7 sens_flags, 6 ;
#DEFINE FLAG8 sens_flags, 7 ;**************************
;define pinouts
#define _G PORTA,0
#define _F PORTA,1
#define _A PORTA,2
#define _B PORTA,3
#define _E PORTA,4
#define _D PORTA,6
#define _C PORTA,7
#define __ PORTB,0
#define ___ PORTB,2
#define ____ PORTB,3
#define _____ PORTB,4
#define sens1 PORTB,5
;startadres of the controller
org 0x0000
; For using A0-A3 as digital I/O
movlw D'7' ;
movwf CMCON ; Comparators off, all pins digital I/O
; Reset Port values
clrf PORTA
clrf PORTB
; define your pin direction (input/output)
bsf STATUS, RP0 ; Switch to bank 1
movlw b'00000000' ;
movwf TRISA ; PORTA = all outputs (not MCLRE)
movlw b'00000000' ;
movwf TRISB ; PORTB = all outputs
bcf OPTION_REG,7 ;sätt på weak pull-ups
bcf STATUS, RP0 ; Switch to bank 0
;************************************
Goto watch_resistans
;************************************
;**** subroutins *******
;***********************
;**** Main program *****
watch_resistans
bsf _E
call delay1
goto watch_resistans
mov
RLF PORTA,1
call delay1
goto mov
; Delay routine
; This code uses about 5 x 99975 instructions. At 4Mhz this is approx 500 milliseconds.
delay1 movlw h'10' ;***************
movwf delay2_var3 ;
delay11 movlw h'30' ;
movwf delay2_var2 ;Gör en låång pause
delay12 movlw h'FF' ;
movwf delay2_var1 ;
delay13 decfsz delay2_var1, f ;
goto delay13 ;
decfsz delay2_var2, f ;
goto delay12 ;
decfsz delay2_var3, f ;
goto delay11 ;
return ;***************
pause movlw d'50' ;****************
movwf pause_var1 ;gör en kort pause
pause2 decfsz pause_var1,1 ;
goto pause2 ;
return ;*****************
delay movlw 0x5 ;*****************
movwf delay_var3 ;
delay21 movlw 0x5 ;
movwf delay_var2 ;gör en mellan pause
delay22 movlw 0xFF ;
movwf delay_var1 ;
delay23 decfsz delay_var1, f ;
goto delay23 ;
decfsz delay_var2, f ;
goto delay22 ;
decfsz delay_var3, f ;
goto delay21 ;
return ;******************
END
Tack på förhand!
//Daniel A