28里面差不多20块钱卖的是调光程序,比盗版光盘贵很多。
xiewg 发表于 2009-12-11 20:55 http://www.shoudian.org/images/common/back.gif调光程序没多少行,主要看点是控制策略... #include "P12F683.INC"
__CONFIG _BOD_OFF&_CPD_ON&_CP_ON&_MCLRE_OFF&_PWRTE_OFF&_WDT_OFF&_INTOSCIO&_FCMEN_OFF&_IESO_OFF
EEADDRA EQU 20H ;定义EEPROM A地址
EEADDRB EQU 21H ;定义EEPROM B地址
TEMP EQU 22H ;定义临时变量
EEREADA EQU 23H ;定义EEPROM A预写
EEREADB EQU 24H ;定义EEPROM B预写
DELY1 EQU 25H ;定义延时变量1
DELY2 EQU 26H ;定义延时变量2
DELY3 EQU 27H ;定义延时变量3
TEMP1 EQU 28H ;定义临时变量1
AA EQU 29H ;定义PWM低电平时间常数
BB EQU 2AH ;定义PWM低电平时间常数
COUNT0 EQU 2BH ;定义定时器延时常数
COUNT1 EQU 2CH
EEADDRC EQU 2DH
EEADDRG EQU 2EH
EEREADC EQU 2FH
EEREADG EQU 30H
GL EQU 31H
DF EQU 32H
EEADDRH EQU 33H
EEREADH EQU 34H
EEADDRCC EQU 35H
EEREADCC EQU 36H
EEADDRI EQU 37H
EEREADI EQU 38H
SETFLAG EQU 39H
WTEMP EQU 3AH
STATUSTMP EQU 3BH
;----------------------------------------------------------
ORG 00H ;复位向量地址
CLRWDT
GOTO STAR ;转向主程序
;----------------------------------------------------------
ORG 04H ;中断向量地址
GOTO GPINT
;----------------------------------------------------------
ORG 05H ;主程序起始地址
STAR
BCF STATUS,RP0 ;体选择BANK0
MOVLW 00H
MOVWF EEADDRA ;初始化EEPROM A地址
MOVLW 01H
MOVWF EEADDRB ;初始化EEPROM B地址
MOVLW 02H
MOVWF EEADDRC
MOVLW 03H
MOVWF EEADDRG
MOVLW 04H
MOVWF EEADDRH
MOVLW 05H
MOVWF EEADDRCC
MOVLW 06H
MOVWF EEADDRI
MOVLW 3BH
MOVWF COUNT0
CLRF EEREADA
;----------------------------------------------------------
BSF STATUS,RP0
;BSF OSCCON,IRCF0 ;设置频率为8MHz
MOVLW 07H
MOVWF OPTION_REG ;允许上拉
;----------------------------------------------------------
MOVLW 38H
MOVWF TRISIO
MOVLW 30H
MOVWF WPU ;设置GP4、GP5弱上拉
MOVWF IOC ;设置GP4、GP5允许端口电平变化中断
;----------------------------------------------------------
CLRF ANSEL ;清除模拟选择寄存器********************
;----------------------------------------------------------
BCF STATUS,RP0
MOVLW 07H
MOVWF CMCON0 ;关闭比较器
;----------------------------------------------------------
MOVLW 0A8H
MOVWF INTCON
;----------------------------------------------------------
CLRF GPIO
;----------------------------------------------------------
MAINLOOP
BCF STATUS,RP0
MOVF EEREADA,W
XORLW 01H
BTFSC STATUS,Z
GOTO SET01
ML02 MOVF EEREADA,W
XORLW 02H
BTFSC STATUS,Z
GOTO SET02
ML03 MOVF EEREADA,W
XORLW 03H
BTFSC STATUS,Z
GOTO SET03
CLRF EEREADA
;----------------------------------------------------------
CLRF T2CON
;----------------------------------------------------------
CLRF GPIO
SLEEP
GOTO MAINLOOP
;----------------------------------------------------------
SET01
MOVF SETFLAG,F
BTFSS STATUS,Z
GOTO MAINLOOP
MOVLW 04H
MOVWF T2CON ;使能T2CON,预分频比1
;----------------------------------------------------------
BSF STATUS,RP0
MOVLW 0FFH
MOVWF PR2 ;设置PR2,PWM周期,默认4M振荡输出PWM频率约15.6KHz
;----------------------------------------------------------
BCF STATUS,RP0
MOVLW 0CBH
MOVWF CCPR1L ;20%
MOVLW 0FH
MOVWF CCP1CON
MOVWF SETFLAG
GOTO MAINLOOP
;----------------------------------------------------------
SET02
MOVLW 04H
MOVWF T2CON ;使能T2CON,预分频比1
;----------------------------------------------------------
BSF STATUS,RP0
MOVLW 0FFH
MOVWF PR2 ;设置PR2,PWM周期,默认4M振荡输出PWM频率约15.6KHz
;----------------------------------------------------------
BCF STATUS,RP0
CLRF CCPR1L
MOVLW 0FH
MOVWF CCP1CON
MOVWF SETFLAG
GOTO MAINLOOP
;----------------------------------------------------------
SET03
MOVLW 04H
MOVWF T2CON ;使能T2CON,预分频比1
;----------------------------------------------------------
BSF STATUS,RP0
MOVLW 0FFH
MOVWF PR2 ;设置PR2,PWM周期,默认4M振荡输出PWM频率约15.6KHz
;----------------------------------------------------------
BCF STATUS,RP0
CLRF CCPR1L
MOVLW 0FH
MOVWF CCP1CON
CALL DELAY30MS
MOVLW 0FFH
MOVWF CCPR1L
MOVLW 3FH
MOVWF CCP1CON
CALL DELAY30MS
GOTO MAINLOOP
;**********************************************************************
GPINT
BCF STATUS,RP0
MOVWF WTEMP
SWAPF STATUS,W
MOVWF STATUSTMP ;现场保护
;----------------------------------------------------------
BTFSC GPIO,04H
GOTO LOWBAT
CALL DELAY10MS
BTFSC GPIO,04H
GOTO LOWBAT
MOVF EEREADA,W
XORLW 03H
BTFSS STATUS,Z
GOTO RB4
MOVLW 0FFH
MOVWF CCPR1L
MOVLW 3FH
MOVWF CCP1CON
RB4 BTFSS GPIO,04H
GOTO $-1
INCF EEREADA,F
CLRF INTCON
CLRF SETFLAG
;----------------------------------------------------------
RETIE
BCF STATUS,RP0
MOVLW 28H
MOVWF INTCON
MOVLW 3BH
MOVWF COUNT0
RETE
CLRF TMR0
SWAPF STATUSTMP,W
MOVWF STATUS
SWAPF WTEMP,F
SWAPF WTEMP,W
RETFIE
;----------------------------------------------------------
LOWBAT
BTFSC GPIO,05H
GOTO RETIE
MOVF COUNT0,F
BTFSS STATUS,Z
GOTO DECFCOUNT0
GOTO GPBAT
;----------------------------------------------------------
DECFCOUNT0
DECF COUNT0,F
GOTO RETE
;----------------------------------------------------------
GPBAT
BCF STATUS,RP0
;----------------------------------------------------------
GPBAT01
INCF CCPR1L,F
CALL DELAY10MS
MOVF CCPR1L,W
XORLW 0F2H
BTFSS STATUS,Z
GOTO GPBAT01
;----------------------------------------------------------
LBATLOOP
CALL DELAY500MS
CALL DELAY500MS
CALL DELAY500MS
CALL DELAY500MS
MOVLW 0FBH
MOVWF CCPR1L
CALL DELAY166MS
MOVLW 0F2H
MOVWF CCPR1L
DECFSZ COUNT1,F
GOTO LBATLOOP
CLRF EEREADA
GOTO RETIE
;**********************************************************************
;**********************************************************************
EEREAD_A ;读取EEPROM A
BCF STATUS,RP0
MOVF EEADDRA,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF EEREADA
RETURN
;----------------------------------------------------------
EEREAD_B ;读取EEPROM B
BCF STATUS,RP0
MOVF EEADDRB,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF EEREADB
RETURN
;----------------------------------------------------------
EEREAD_CC ;读取EEPROM CCPR1L寄存值
BCF STATUS,RP0
MOVF EEADDRCC,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF CCPR1L
RETURN
;----------------------------------------------------------
EEREAD_H ;读取EEPROM H
BCF STATUS,RP0
MOVF EEADDRH,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF EEREADH
RETURN
;----------------------------------------------------------
EEREAD_I ;读取EEPROM I
BCF STATUS,RP0
MOVF EEADDRI,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF EEREADI
RETURN
;----------------------------------------------------------
EEREAD ;读取EEPROM A、B、C、G
BCF STATUS,RP0
MOVF EEADDRA,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF EEREADA ;取得A
MOVF EEADDRB,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF EEREADB ;取得B
MOVF EEADDRC,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF EEREADC ;取得C
MOVF EEADDRG,W
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
BCF STATUS,RP0
MOVWF EEREADG ;取得G
RETURN
;---------------------------------------------------------- WREEA ;写EEPROM A,TEMP传送写入数据
BCF STATUS,RP0 ;取BANK0
MOVF EEADDRA,W ;取A地址
BSF STATUS,RP0 ;取BANK1
MOVWF EEADR ;A地址进入EEADR
BCF STATUS,RP0 ;取BANK0
MOVF TEMP,W ;取写入数据
BSF STATUS,RP0 ;取BANK1
MOVWF EEDATA ;待写数据进入EEDATA
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF STATUS,RP0
WWRA BTFSS PIR1,EEIF
GOTO WWRA
CLRF PIR1
RETURN
;----------------------------------------------------------
WREEB ;写EEPROM B,TEMP传送写入数据
BCF STATUS,RP0 ;取BANK0
MOVF EEADDRB,W ;取B地址
BSF STATUS,RP0 ;取BANK1
MOVWF EEADR ;B地址进入EEADR
BCF STATUS,RP0 ;取BANK0
MOVF TEMP,W ;取写入数据
BSF STATUS,RP0 ;取BANK1
MOVWF EEDATA ;待写数据进入EEDATA
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF STATUS,RP0
WWRB BTFSS PIR1,EEIF
GOTO WWRB
CLRF PIR1
RETURN
;----------------------------------------------------------
WREEC ;写EEPROM C,TEMP传送写入数据
BCF STATUS,RP0 ;取BANK0
MOVF EEADDRC,W ;取C地址
BSF STATUS,RP0 ;取BANK1
MOVWF EEADR ;B地址进入EEADR
BCF STATUS,RP0 ;取BANK0
MOVF TEMP,W ;取写入数据
BSF STATUS,RP0 ;取BANK1
MOVWF EEDATA ;待写数据进入EEDATA
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF STATUS,RP0
WWRC BTFSS PIR1,EEIF
GOTO WWRC
CLRF PIR1
RETURN
;----------------------------------------------------------
WREEG ;写EEPROM B,TEMP传送写入数据
BCF STATUS,RP0 ;取BANK0
MOVF EEADDRG,W ;取B地址
BSF STATUS,RP0 ;取BANK1
MOVWF EEADR ;B地址进入EEADR
BCF STATUS,RP0 ;取BANK0
MOVF TEMP,W ;取写入数据
BSF STATUS,RP0 ;取BANK1
MOVWF EEDATA ;待写数据进入EEDATA
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF STATUS,RP0
WWRG BTFSS PIR1,EEIF
GOTO WWRG
CLRF PIR1
RETURN
;----------------------------------------------------------
WREECC ;写EEPROM CC,TEMP传送写入数据
BCF STATUS,RP0 ;取BANK0
MOVF EEADDRCC,W ;取CC地址
BSF STATUS,RP0 ;取BANK1
MOVWF EEADR ;CC地址进入EEADR
BCF STATUS,RP0 ;取BANK0
MOVF TEMP,W ;取写入数据
BSF STATUS,RP0 ;取BANK1
MOVWF EEDATA ;待写数据进入EEDATA
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF STATUS,RP0
WWRCC BTFSS PIR1,EEIF
GOTO WWRCC
CLRF PIR1
RETURN
;----------------------------------------------------------
WREEH ;写EEPROM H,TEMP传送写入数据
BCF STATUS,RP0 ;取BANK0
MOVF EEADDRH,W ;取H地址
BSF STATUS,RP0 ;取BANK1
MOVWF EEADR ;H地址进入EEADR
BCF STATUS,RP0 ;取BANK0
MOVF TEMP,W ;取写入数据
BSF STATUS,RP0 ;取BANK1
MOVWF EEDATA ;待写数据进入EEDATA
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF STATUS,RP0
WWRH BTFSS PIR1,EEIF
GOTO WWRH
CLRF PIR1
RETURN
;----------------------------------------------------------
WREEI ;写EEPROM I,TEMP传送写入数据
BCF STATUS,RP0 ;取BANK0
MOVF EEADDRI,W ;取I地址
BSF STATUS,RP0 ;取BANK1
MOVWF EEADR ;I地址进入EEADR
BCF STATUS,RP0 ;取BANK0
MOVF TEMP,W ;取写入数据
BSF STATUS,RP0 ;取BANK1
MOVWF EEDATA ;待写数据进入EEDATA
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF STATUS,RP0
WWRI BTFSS PIR1,EEIF
GOTO WWRI
CLRF PIR1
RETURN
;----------------------------------------------------------
SOSDEYMOVLW 0D8H ;外循环常数
MOVWF DELY1 ;外循环寄存器
SOSDE0 MOVLW 0FFH ;中循环常数
MOVWF DELY2 ;中循环寄存器
SOSDE1 DECFSZ DELY2,F ;中循环寄存器递减
GOTO SOSDE1 ;继续中循环
DECFSZ DELY1,F ;外循环寄存器递减
GOTO SOSDE0 ;继续外循环
RETURN
;----------------------------------------------------------
DELAY10US
NOP
NOP
NOP
NOP
RETURN
;----------------------------------------------------------
DELAY500MS
MOVLW 03H ;外循环常数
MOVWF DELY1 ;外循环寄存器
LP110
MOVLW 0EBH ;中循环常数
MOVWF DELY2 ;中循环寄存器
LP210
MOVLW 0EBH ;内循环常数
MOVWF DELY3 ;内循环寄存器
LP310
DECFSZ DELY3 ;内循环寄存器递减
GOTO LP310 ;继续内循环
DECFSZ DELY2 ;中循环寄存器递减
GOTO LP210 ;继续中循环
DECFSZ DELY1 ;外循环寄存器递减
GOTO LP110 ;继续外循环
RETURN
;----------------------------------------------------------
DELAY166MS
MOVLW 01H ;外循环常数
MOVWF DELY1 ;外循环寄存器
LP330
MOVLW 0EFH ;中循环常数
MOVWF DELY2 ;中循环寄存器
LP331
MOVLW 0FCH ;内循环常数
MOVWF DELY3 ;内循环寄存器
LP332 CLRWDT
DECFSZ DELY3 ;内循环寄存器递减
GOTO LP332 ;继续内循环
DECFSZ DELY2 ;中循环寄存器递减
GOTO LP331 ;继续中循环
DECFSZ DELY1 ;外循环寄存器递减
GOTO LP330 ;继续外循环
RETURN
;----------------------------------------------------------
DELAY100MS
MOVLW 90H
MOVWF DELY1
L100MS2
MOVLW 0E6H
MOVWF DELY2
L100MS1
DECFSZ DELY2,F
GOTO L100MS1
DECFSZ DELY1,F
GOTO L100MS2
RETURN
;----------------------------------------------------------
DELAY10MS
MOVLW 0BH
MOVWF DELY1
L33MS2
MOVLW 0E6H
MOVWF DELY2
L33MS1 CLRWDT
DECFSZ DELY2,F
GOTO L33MS1
DECFSZ DELY1,F
GOTO L33MS2
RETURN
;----------------------------------------------------------
MIDLIGHT
MOVLW 40H
MOVWF DELY1
DL0 MOVLW 0FFH
MOVWF DELY2
CLRF TEMP1
DL1 DECFSZ DELY2
GOTO DL1
MOVF TEMP1
BTFSS STATUS,Z
GOTO DS1
BCF GPIO,00H
COMF TEMP1
DS0 DECFSZ DELY1
GOTO DL0
BCF GPIO,00H
RETURN
DS1 BSF GPIO,00H
CLRF TEMP1
GOTO DS0
;----------------------------------------------------------
DELAY50MS
MOVLW 48H
MOVWF DELY1
L50MS2
MOVLW 0E6H
MOVWF DELY2
L50MS1
DECFSZ DELY2,F
GOTO L50MS1
DECFSZ DELY1,F
GOTO L50MS2
RETURN
;----------------------------------------------------------
DELAY30MS
MOVLW 30H
MOVWF DELY1
L30MS2
MOVLW 0E6H
MOVWF DELY2
L30MS1
DECFSZ DELY2,F
GOTO L30MS1
DECFSZ DELY1,F
GOTO L30MS2
RETURN
;----------------------------------------------------------
END tiny2313可不是8pin的。。。 本帖最后由 lxq 于 2009-12-11 21:30 编辑
轻触开关控制小程序
应网友要求搞了个轻触开关控制的小程序,按一下开机,中亮;再按,高亮;再按,暴闪;再按关闭,关闭休眠待机电流很小。按键用GP04端口,GP05外接MAX809S做欠压警示,欠压后由当前亮度无级变化到微亮,然后微亮慢闪。
可以将现有7135板改造,变成轻触开关控制。
程序很简单,懂编程的看过就会笑了,原来东成编程这么小儿科。不过小儿科归小儿科,开放、共享却是不容易做到的,很多人懂却不说,我虽然不是很懂,但希望更多人参与进来,到这里畅所欲言,或许哪天高手多了,大家会看到更多优秀的设计。 懂编程从来就知道手电里的调光程序很简单。。。不懂程序的还要知道怎么编译和烧录~不如30楼开贴教一下PIC和AVR的编译器以及如何下载程序吧 31# twoperson
看来 兄弟 不认识 东成 {:1_217:} 看看 小程序来说ASM比C强不是一般的多.... 但是手电这种对于程序效率要求不是特别高的地方没必要用汇编啊,相信编译器就行 顶诚实,公开的东成兄!
别的就酸了. 顶诚实,公开的东成兄!
别的就酸了.
mioa 发表于 2009-12-11 22:57 http://www.shoudian.org/images/common/back.gif
东成老大的高度目前在坛子里面无人能够企及{:1_268:}
页:
1
[2]