单片机应用领域交流......
本人正用单片机做电池充电器控制程序,不知道各位同行都用单片机作些什么?单片机有前途吗?
全部回复(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
回复
提示