用12C508实现LED三路七彩调光

;**********************************************************************
list p="12c508"
#include 【用12C508实现LED三路七彩调光】
__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 ;片内震荡校正系数送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 ;调用红色常亮,绿色渐亮子程序
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 ;保持静止色子程序地址送转移指针
movwf rep_d
retlw 0x00
rep_1: ;红色绿色静止色保持节拍
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 ;保持静止色子程序地址送转移指针
movwf rep_d
retlw 0x00
rep_3: ;绿色静止色保持节拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_4
movwf rep_d
retlw 0x00

rep_4: ;绿色常亮,蓝色渐亮
incfsz ch_b,f ;判断绿色是否最亮
retlw 0x00 ;否
decf ch_b,f ;是则绿色重置0xff
movlw rep_5 ;保持静止色子程序地址送转移指针
movwf rep_d
retlw 0x00
rep_5: ;绿色蓝色静止色保持节拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_6
movwf rep_d
retlw 0x00

rep_6: ;蓝色常亮,绿色渐渐灭
decfsz ch_g,f ;判断绿色是否最暗
retlw 0x00 ;否
movlw rep_7 ;保持静止色子程序地址送转移指针
movwf rep_d
retlw 0x00
rep_7: ;绿色静止色保持节拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_8
movwf rep_d
retlw 0x00

rep_8: ;蓝色常亮,红色渐亮
incfsz ch_r,f ;判断红色是否最亮
retlw 0x00 ;否
decf ch_r,f ;是则绿色重置0xff
movlw rep_9 ;保持静止色子程序地址送转移指针
movwf rep_d
retlw 0x00
rep_9: ;红色蓝色静止色保持节拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_10
movwf rep_d
retlw 0x00

rep_10: ;红色蓝色常亮,绿色渐亮
incfsz ch_g,f ;判断绿色是否最暗
retlw 0x00 ;否
decf ch_g,f
movlw rep_11 ;保持静止色子程序地址送转移指针
movwf rep_d
retlw 0x00
rep_11: ;红色,绿色,蓝色静止色保持节拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_12
movwf rep_d
retlw 0x00

rep_12: ;红色常亮,绿色蓝色渐渐灭
decf ch_g,f ;判断绿色是否最暗
decfsz ch_b,f
retlw 0x00 ;否
movlw rep_13 ;保持静止色子程序地址送转移指针
movwf rep_d
retlw 0x00
rep_13: ;红色静止色保持节拍
decfsz rep_c,f
retlw 0x00
movlw rep_b
movwf rep_c
movlw rep_0
movwf rep_d
retlw 0x00

    推荐阅读