單片機應用領域交流......
本人正用單片機做電池充電器控制程序,不知道各位同行都用單片機作些什么?單片機有前途嗎?
全部回復(8)
正序查看
倒序查看
@zb980124
我用的是MAPLAB5.9,PIC單片機用的,以前學89C51用過一個很小的妨真軟件,記不得了..
24小時精確循環定時器
大家利用這個程序,略加改動,就可以實現各種時間精確定時的目的
;24小時循環定時器
;*************************************
LIST P=PIC16F84A
#INCLUDE P16F84A.INC ;選定芯片型號
;*************************************
COUNTER1 EQU 1FH ;選定RAM內部地址用作計時的儲存器
COUNTER2 EQU 1EH ;命名為計數器
COUNTER3 EQU 1DH
COUNTER4 EQU 1CH
COUNTER5 EQU 1BH
COUNTER6 EQU 1AH
COUNTER7 EQU 19H
ORG 0 ;復位矢量
GOTO START
ORG D'12' ;從地址12開始存放程序
START MOVLW 0
BSF STATUS,RP0 ;選體1
MOVWF TRISB ;設B口為輸出
MOVLW B'00000001' ;設A口的0位為輸入
MOVWF TRISA
BCF STATUS,RP0 ;恢復到體0
CLRF PORTB
CLRW
CLRF COUNTER1
CLRF COUNTER2 ;選定的計數器清零
CLRF COUNTER3
CLRF COUNTER4
CLRF COUNTER5
CLRF COUNTER6
CLRF COUNTER7
;*********************************
LOOP0 BTFSC PORTA,0 ;按鍵按下,24小時定時開始
GOTO LOOP0
LOOPE CLRF COUNTER5 ;24小時定時一到,一次清零
MOVLW D'24'
MOVWF COUNTER6 ;設定24小時定時量
CLRF PORTB
HOUR CLRW
MOVLW D'60'
MOVWF COUNTER4 ;每小時的定時值
LOOPD MOVLW D'60'
MOVWF COUNTER7 ;每分的定時值
MIN CALL SECOND ;調用秒計時子程序
DECFSZ COUNTER7,1 ;積60秒(1分)
GOTO MIN
DECFSZ COUNTER4,1 ;積60分(1小時)
GOTO LOOPD
INCF COUNTER5,1 ;小時2進制計數
MOVF COUNTER5,0
MOVWF PORTB ;送B口LED顯示
DECFSZ COUNTER6,1
GOTO HOUR ;B口小時循環
GOTO LOOPE ;24小時到,跳到標號處從新循環
;*************************************
SECOND ORG D'80' ;秒定時子程序
BSF PORTB,7
LOOPT DECFSZ COUNTER1,1
GOTO LOOPT
DECFSZ COUNTER2,1
GOTO LOOPT
BCF PORTB,7
LOOPF INCFSZ COUNTER1,1
GOTO LOOPF
INCFSZ COUNTER2,1
GOTO LOOPF
CLRW
MOVLW 0X89
MOVWF COUNTER3
LOOPN INCFSZ COUNTER1,1
GOTO LOOPN
INCFSZ COUNTER3,1
GOTO LOOPN
MOVLW D'82'
MOVWF COUNTER1
LOOPV DECFSZ COUNTER1,1
GOTO LOOPV
RETURN
END
大家利用這個程序,略加改動,就可以實現各種時間精確定時的目的
;24小時循環定時器
;*************************************
LIST P=PIC16F84A
#INCLUDE P16F84A.INC ;選定芯片型號
;*************************************
COUNTER1 EQU 1FH ;選定RAM內部地址用作計時的儲存器
COUNTER2 EQU 1EH ;命名為計數器
COUNTER3 EQU 1DH
COUNTER4 EQU 1CH
COUNTER5 EQU 1BH
COUNTER6 EQU 1AH
COUNTER7 EQU 19H
ORG 0 ;復位矢量
GOTO START
ORG D'12' ;從地址12開始存放程序
START MOVLW 0
BSF STATUS,RP0 ;選體1
MOVWF TRISB ;設B口為輸出
MOVLW B'00000001' ;設A口的0位為輸入
MOVWF TRISA
BCF STATUS,RP0 ;恢復到體0
CLRF PORTB
CLRW
CLRF COUNTER1
CLRF COUNTER2 ;選定的計數器清零
CLRF COUNTER3
CLRF COUNTER4
CLRF COUNTER5
CLRF COUNTER6
CLRF COUNTER7
;*********************************
LOOP0 BTFSC PORTA,0 ;按鍵按下,24小時定時開始
GOTO LOOP0
LOOPE CLRF COUNTER5 ;24小時定時一到,一次清零
MOVLW D'24'
MOVWF COUNTER6 ;設定24小時定時量
CLRF PORTB
HOUR CLRW
MOVLW D'60'
MOVWF COUNTER4 ;每小時的定時值
LOOPD MOVLW D'60'
MOVWF COUNTER7 ;每分的定時值
MIN CALL SECOND ;調用秒計時子程序
DECFSZ COUNTER7,1 ;積60秒(1分)
GOTO MIN
DECFSZ COUNTER4,1 ;積60分(1小時)
GOTO LOOPD
INCF COUNTER5,1 ;小時2進制計數
MOVF COUNTER5,0
MOVWF PORTB ;送B口LED顯示
DECFSZ COUNTER6,1
GOTO HOUR ;B口小時循環
GOTO LOOPE ;24小時到,跳到標號處從新循環
;*************************************
SECOND ORG D'80' ;秒定時子程序
BSF PORTB,7
LOOPT DECFSZ COUNTER1,1
GOTO LOOPT
DECFSZ COUNTER2,1
GOTO LOOPT
BCF PORTB,7
LOOPF INCFSZ COUNTER1,1
GOTO LOOPF
INCFSZ COUNTER2,1
GOTO LOOPF
CLRW
MOVLW 0X89
MOVWF COUNTER3
LOOPN INCFSZ COUNTER1,1
GOTO LOOPN
INCFSZ COUNTER3,1
GOTO LOOPN
MOVLW D'82'
MOVWF COUNTER1
LOOPV DECFSZ COUNTER1,1
GOTO LOOPV
RETURN
END
0
回復