用12C508實(shí)現(xiàn)LED三路七彩調(diào)光
;**********************************************************************
list p="12c508"
#include
__CONFIG _MCLRE_OFF&_CP_ON&_WDT_OFF&_IntRC_OSC
errorlevel 0,-207
;**********************************************************************
;變量和名稱定義
#define led_r GPIO,0
#define led_g GPIO,1
#define led_b GPIO,2
#define gl GPIO,3
#define sd_1 GPIO,4
#define sd_2 GPIO,5
#define rep_b d'50'
cotc equ 07h
cotc_c equ 08h
cots equ 09h
ch_r equ 0ah
ch_g equ 0bh
ch_b equ 0ch
glcs equ 0dh
rep_d equ 0eh
rep_c equ 0fh
;**********************************************************************
;
org 0x00
movwf OSCCAL ;片內(nèi)震蕩校正系數(shù)送OSCCAL
;---------------------------
;RAM清0子程序
movlw 0x08
movwf FSR
movlw d'24'
movwf cotc
movlw 0x00
movwf INDF
incf FSR,f
decfsz cotc,f
goto $-3
;-----------------------------
;
main:
movlw b'00111000' ;
TRIS GPIO
movlw b'11111111' ;
movwf GPIO
bcf STATUS,PA0 ;
movlw 0x00 ;起始輸出最暗
movwf ch_r
movwf ch_g
movwf ch_b
movlw rep_b
movwf rep_c
movlw rep_0 ;調(diào)用紅色常亮,綠色漸亮子程序
movwf rep_d
call reprom
goto $-1
;
reprom:
movf rep_d,w
movwf PCL
rep_0:
movlw 0xff ;紅色常亮,綠色漸亮
movwf ch_r ;
incfsz ch_g,f ;判斷綠色是否最亮
retlw 0x00 ;否
decf ch_g,f ;是則綠色重置0xff
movlw rep_1 ;保持靜止色子程序地址送轉(zhuǎn)移指針
movwf rep_d
retlw 0x00
rep_1: ;紅色綠色靜止色保持節(jié)拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_2
movwf rep_d
retlw 0x00
rep_2: ;綠色常亮,紅色漸漸滅
decfsz ch_r,f ;判斷綠色是否最暗
retlw 0x00 ;否
movlw rep_3 ;保持靜止色子程序地址送轉(zhuǎn)移指針
movwf rep_d
retlw 0x00
rep_3: ;綠色靜止色保持節(jié)拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_4
movwf rep_d
retlw 0x00
rep_4: ;綠色常亮,藍(lán)色漸亮
incfsz ch_b,f ;判斷綠色是否最亮
retlw 0x00 ;否
decf ch_b,f ;是則綠色重置0xff
movlw rep_5 ;保持靜止色子程序地址送轉(zhuǎn)移指針
movwf rep_d
retlw 0x00
rep_5: ;綠色藍(lán)色靜止色保持節(jié)拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_6
movwf rep_d
retlw 0x00
rep_6: ;藍(lán)色常亮,綠色漸漸滅
decfsz ch_g,f ;判斷綠色是否最暗
retlw 0x00 ;否
movlw rep_7 ;保持靜止色子程序地址送轉(zhuǎn)移指針
movwf rep_d
retlw 0x00
rep_7: ;綠色靜止色保持節(jié)拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_8
movwf rep_d
retlw 0x00
rep_8: ;藍(lán)色常亮,紅色漸亮
incfsz ch_r,f ;判斷紅色是否最亮
retlw 0x00 ;否
decf ch_r,f ;是則綠色重置0xff
movlw rep_9 ;保持靜止色子程序地址送轉(zhuǎn)移指針
movwf rep_d
retlw 0x00
rep_9: ;紅色藍(lán)色靜止色保持節(jié)拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_10
movwf rep_d
retlw 0x00
rep_10: ;紅色藍(lán)色常亮,綠色漸亮
incfsz ch_g,f ;判斷綠色是否最暗
retlw 0x00 ;否
decf ch_g,f
movlw rep_11 ;保持靜止色子程序地址送轉(zhuǎn)移指針
movwf rep_d
retlw 0x00
rep_11: ;紅色,綠色,藍(lán)色靜止色保持節(jié)拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_12
movwf rep_d
retlw 0x00
rep_12: ;紅色常亮,綠色藍(lán)色漸漸滅
decf ch_g,f ;判斷綠色是否最暗
decfsz ch_b,f
retlw 0x00 ;否
movlw rep_13 ;保持靜止色子程序地址送轉(zhuǎn)移指針
movwf rep_d
retlw 0x00
rep_13: ;紅色靜止色保持節(jié)拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_0
movwf rep_d
retlw 0x00