PIC12C508单片机控制灯光源程序
;以上程序使用PIC12C508单片机,内部4MHZ时钟,4脚输入50HZ脉冲信号,7,6,3脚(GP0,GP1,GP4端口)为输出口。其中渐变部分是让灯慢慢的变亮(或灭)。不知道以上程序有没错误,有错误之处请大家多多给意见。谢谢
;程序如下:
GPI0 EQU 6
COUNT1 EQU 11
COUNT2 EQU 12
COUNT3 EQU 13
COUNT4 EQU 14
COUNT5 EQU 15
POINTER EQU 16
POINTER1 EQU 17
ORG 00H
MOVLW 07H ;设定时钟参数1:256分频
OPTION
MOVLW 2CH ;输出端口设定 0,1,4输出,3输入50HZ
TRIS 6
;-------------------------------
START:
;对3端口扫描 扫描0低电位
MOVF GPI0,W
MOVWF COUNT1
BTFSC COUNT1,3
GOTO START
NEXT: ;对3端口扫描 扫描1高电位
MOVF GPI0,W
MOVWF COUNT1
BTFSS COUNT1,3
GOTO NEXT
INCF COUNT2
MOVLW 100
DECFSZ COUNT2,1
GOTO START ;------外接50HZ信号,扫描100次,延时2秒
;-----------------------------------------------------------
JB:
CLRF TMR0
MOVLW 250
MOVWF COUNT4
MOVWF COUNT5
INCF POINTER,F
MOVF POINTER,0
MOVWF POINTER1
MOVLW TABLE
ADDWF POINTER,0
CALL AA
MOVWF 6 ;返回,输出-----亮
CHANGE:
MOVF TMR0,0
MOVWF COUNT3
SUBWF COUNT4,1
BTFSS STATUS,Z ;TMR0=250? 'N'空循环TMR0次 'Y'跳出重新开始渐变
GOTO NOPDELAY1
GOTO OUT
NOPDELAY1:
NOP
DECFSZ COUNT3,1
GOTO NOPDELAY1
DECF POINTER1,F ; <----------|
MOVLW TABLE ; |
ADDWF POINTER1,0 ; |
CALL AA ; |
MOVWF 6 ;返回上一次显示数据,输出到GP端口---灭 <--|
NOPDELAY2:
NOP
DECFSZ COUNT4,1
GOTO NOPDELAY2
GOTO CHANGE
;-----渐-----变-----------------------------------------------
OUT:
MOVLW 9 ;取表9次
SUBWF POINTER,0
BTFSS STATUS,Z
GOTO JB
GOTO START
AA: MOVWF 2
TABLE:RETLW 2CH
RETLW 3CH
RETLW 2DH
RETLW 2EH
RETLW 2FH
RETLW 3DH
RETLW 3EH
RETLW 2CH
RETLW 3FH
ORG 1FFH
MOVWF OSCCAL
END