Ich weiss aber nicht mit welchen Befehlen man den TMO hochzählen
lässt.und für den beiden Befehlen weiss ich nicht wo?
Ich habe dass Programm auch als Assemblercode:
; CC5X Version 3.2F, Copyright (c) B Knudsen Data
; C compiler for the PICmicro family
; ************ 15. Jun 2005 12:07 *************
processor 16F84A
radix DEC
TMR0 EQU 0x01
PORTB EQU 0x06
TRISB EQU 0x86
Carry EQU 0
Zero_ EQU 2
RP0 EQU 5
OPTION_REG EQU 0x81
i EQU 0x0E
ms EQU 0x0C
A0 EQU 0
A1 EQU 1
A2 EQU 2
A3 EQU 3
GOTO main
; FILE Test2.c
;
;
;#include<C:\cc5\16F84A.h>
;#pragma config |= 0b.1111.1111.0010
;
;
;char i; // Variable "i" deklariren ist für alle
unterprogramme bekant
;
;void pause(uns16 ms) // Unterprogramm zum abwarten
angegebener
anzahl von Milisekunden
;{
pause
; while(ms)
m001 MOVF ms,W
IORWF ms+1,W
BTFSC 0x03,Zero_
GOTO m004
; // Schleife verlassen wenn ms=0 ist
;
; {
; OPTION = 2; // Vorteiler auf 8 einstellen
MOVLW .2
BSF 0x03,RP0
MOVWF OPTION_REG
; TMR0 = 131; // 125 * 8 = 1000 (= 1 ms)
MOVLW .131
BCF 0x03,RP0
MOVWF TMR0
; while (TMR0); // Schleife, solange bis TMR0=0 wird
m002 BCF 0x03,RP0
MOVF TMR0,W
BTFSC 0x03,Zero_
GOTO m003
GOTO m002
;
; ms--; // "ms" mit jeder 1ms ernidrigen
m003 DECF ms,1
INCF ms,W
BTFSC 0x03,Zero_
DECF ms+1,1
; }
GOTO m001
;}
m004 RETURN
;
;
;void main (void)
;
;{
main
;
; TRISB =0b.0000.0000; // RA0..7 als
Ausgänge
BSF 0x03,RP0
CLRF TRISB
; bit A0 @ PORTA.0; // RA0..3 als
Eingänge
; bit A1 @ PORTA.1;
; bit A2 @ PORTA.2;
; bit A3 @ PORTA.3;
;
;while(1)
;{
; if (A3) // PORTB an nach
30sec
aus
m005 BCF 0x03,RP0
BTFSS 0x05,A3
GOTO m006
; {
; PORTB=0;
CLRF PORTB
; pause(30000);
MOVLW .48
MOVWF ms
MOVLW .117
MOVWF ms+1
CALL pause
; PORTB=1;
MOVLW .1
BCF 0x03,RP0
MOVWF PORTB
; }
;
; if (A0 && A3) // PORTB an nach
60sec
aus
m006 BCF 0x03,RP0
BTFSS 0x05,A0
GOTO m009
BTFSS 0x05,A3
GOTO m009
; {
; PORTB=0;
CLRF PORTB
; for(i=0;i<2;i++)
CLRF i
m007 MOVLW .2
SUBWF i,W
BTFSC 0x03,Carry
GOTO m008
; {
; pause(30000);
MOVLW .48
MOVWF ms
MOVLW .117
MOVWF ms+1
CALL pause
; }
INCF i,1
GOTO m007
; PORTB=1;
m008 MOVLW .1
BCF 0x03,RP0
MOVWF PORTB
; }
;
; if (A1 && A3) // PORTB an nach 3min
aus
m009 BCF 0x03,RP0
BTFSS 0x05,A1
GOTO m012
BTFSS 0x05,A3
GOTO m012
; {
; PORTB=0;
CLRF PORTB
; for(i=0;i<6;i++)
CLRF i
m010 MOVLW .6
SUBWF i,W
BTFSC 0x03,Carry
GOTO m011
; {
; pause(30000);
MOVLW .48
MOVWF ms
MOVLW .117
MOVWF ms+1
CALL pause
; }
INCF i,1
GOTO m010
; PORTB=1;
m011 MOVLW .1
BCF 0x03,RP0
MOVWF PORTB
; }
;
; if (A0 && A1 && A3) // PORTB an nach
6min
aus
m012 BCF 0x03,RP0
BTFSS 0x05,A0
GOTO m015
BTFSS 0x05,A1
GOTO m015
BTFSS 0x05,A3
GOTO m015
; {
; PORTB=0;
CLRF PORTB
; for(i=0;i<12;i++)
CLRF i
m013 MOVLW .12
SUBWF i,W
BTFSC 0x03,Carry
GOTO m014
; {
; pause(30000);
MOVLW .48
MOVWF ms
MOVLW .117
MOVWF ms+1
CALL pause
; }
INCF i,1
GOTO m013
; PORTB=1;
m014 MOVLW .1
BCF 0x03,RP0
MOVWF PORTB
; }
;
; if (A3 && A2) // PORTB an nach
15min
aus
m015 BCF 0x03,RP0
BTFSS 0x05,A3
GOTO m018
BTFSS 0x05,A2
GOTO m018
; {
; PORTB=0;
CLRF PORTB
; for(i=0;i<30;i++)
CLRF i
m016 MOVLW .30
SUBWF i,W
BTFSC 0x03,Carry
GOTO m017
; {
; pause(30000);
MOVLW .48
MOVWF ms
MOVLW .117
MOVWF ms+1
CALL pause
; }
INCF i,1
GOTO m016
; PORTB=1;
m017 MOVLW .1
BCF 0x03,RP0
MOVWF PORTB
; }
;
; if (A0 && A2 && A3) // PORTB an nach
30min
aus
m018 BCF 0x03,RP0
BTFSS 0x05,A0
GOTO m021
BTFSS 0x05,A2
GOTO m021
BTFSS 0x05,A3
GOTO m021
; {
; PORTB=0;
CLRF PORTB
; for(i=0;i<60;i++)
CLRF i
m019 MOVLW .60
SUBWF i,W
BTFSC 0x03,Carry
GOTO m020
; {
; pause(30000);
MOVLW .48
MOVWF ms
MOVLW .117
MOVWF ms+1
CALL pause
; }
INCF i,1
GOTO m019
; PORTB=1;
m020 MOVLW .1
BCF 0x03,RP0
MOVWF PORTB
; }
;
; if (A1 && A2 && A3) // PORTB an nach
90min
aus
m021 BCF 0x03,RP0
BTFSS 0x05,A1
GOTO m024
BTFSS 0x05,A2
GOTO m024
BTFSS 0x05,A3
GOTO m024
; {
; PORTB=0;
CLRF PORTB
; for(i=0;i<180;i++);
CLRF i
m022 MOVLW .180
SUBWF i,W
BTFSC 0x03,Carry
GOTO m023
INCF i,1
GOTO m022
; {
; pause(30000);
m023 MOVLW .48
MOVWF ms
MOVLW .117
MOVWF ms+1
CALL pause
; }
; PORTB=1;
MOVLW .1
BCF 0x03,RP0
MOVWF PORTB
; }
;
; if (A1 && A2 && A3 && A0) // PORTB an nach
180min
aus
m024 BCF 0x03,RP0
BTFSS 0x05,A1
GOTO m027
BTFSS 0x05,A2
GOTO m027
BTFSS 0x05,A3
GOTO m027
BTFSS 0x05,A0
GOTO m027
; {
; PORTB=0;
CLRF PORTB
; for(i=0;i<360;i++)
CLRF i
; {
; pause(30000);
m025 MOVLW .48
MOVWF ms
MOVLW .117
MOVWF ms+1
CALL pause
; }
INCF i,1
GOTO m025
; PORTB=1;
m026 MOVLW .1
BCF 0x03,RP0
MOVWF PORTB
; }
; }
m027 GOTO m005
ORG 00
;DATA 0FF2H
END
; *** KEY INFO ***
; 0x0001 21 word(s) 2 % : pause
; 0x0016 168 word(s) 16 % : main
; RAM usage: 3 bytes (2 local), 65 bytes free
; Maximum call level: 1
; Total of 190 code words (18 %)