打印

[有奖征文活动]我的风扇调试经历

[复制链接]
楼主: 戒指320
手机看帖
扫描二维码
随时随地手机跟帖
21
xwj| | 2009-8-8 23:01 | 只看该作者 回帖奖励 |倒序浏览
笨,三个可控硅是因为一般风扇都有3档速度
而交流电机不适合用跳周或调相的方法调速,更不可能用变频器,所以还是用3抽头交流电机,用可控硅做开关来选择其中一个。


LZ自己做的项目连这个都回答不上???

使用特权

评论回复
22
戒指320|  楼主 | 2009-8-9 16:07 | 只看该作者
反正是用这三个可控硅来控制那个马达在高 低 中 档工作

使用特权

评论回复
23
戒指320|  楼主 | 2009-8-9 17:43 | 只看该作者
貌似 21楼正解啊

使用特权

评论回复
24
乡宁09| | 2009-8-9 21:28 | 只看该作者
可以啊,做得不错么。值得鼓励

使用特权

评论回复
25
思考| | 2009-8-10 14:55 | 只看该作者
楼主,我之前一直是用的C写程序,最近很想把汇编语言练好。我觉得你这个基于事件驱动的程序结构用汇编写得很好,我现在还希望你能把在主程序中如何根据读到的事件点亮和按键复用的LED的汇编程序贴出来看看.可以吗?

使用特权

评论回复
26
badbird1234| | 2009-8-10 16:55 | 只看该作者

学习
我原先只看过一个的
是斩波调试的
启动时怕有震动采用软启动

使用特权

评论回复
27
戒指320|  楼主 | 2009-8-10 22:11 | 只看该作者
25楼 明天发吧

使用特权

评论回复
28
思考| | 2009-8-11 09:27 | 只看该作者
好的,谢谢!

使用特权

评论回复
29
戒指320|  楼主 | 2009-8-11 18:51 | 只看该作者
回复 思考:
下面是全部程序:
;---------------------------------------------------------
;File name:        wk002_V02(5593).ASM
;Author:        wang kai
;Date:                2009 07  30  15:00
;Discription:       
;                Fcpu=16MHz/8=2MHz       

;History:
;                加关机长鸣  开机默认不定时
;---------------------------------------------------------
chip        sn8p2501b
//{{SONIX_CODE_OPTION
        .Code_Option        LVD                LVD_L                ; 2.0V Reset
        .Code_Option        Reset_Pin        P11
        .Code_Option        Watch_Dog        Enable
        .Code_Option        High_Clk        IHRC_16M        ; Internal 16M RC Oscillator
        .Code_Option        Fcpu                #3     ; Fcpu = Fosc/8
        .Code_Option        Security        Enable
        .Code_Option        Noise_Filter        Enable
//}}SONIX_CODE_OPTION
.nolist
        includestd        macro1.h
        includestd        macro2.h
        includestd        macro3.h
.const       
        sda                        equ        p0.0
        scl                        equ        p1.0
        sdam                        equ        p0m.0
        sclm                        equ        p1m.0
        pursda                        equ        p0ur
        purscl                        equ        p1ur
        tc0_value                equ        131
        t0_value                equ        6
        FIFO_len                equ        4
        p_high                        equ        p2.0
        p_low                        equ        p1.3
        p_med                        equ        p1.2
       
.data
        state                        ds        1
        mul_dptr                ds        1
        nor_dptr                ds        1
        check_dptr                ds        1
        filter_dptr                ds        1               
        uo                        ds        1
        f_high                        equ        uo.0
        f_low                        equ        uo.1
        f_med                        equ        uo.2
        f_3s                        equ        uo.3
        f_rd                        equ        uo.4
        f_wr                        equ        uo.5
        B_FLAG_ERROR             equ        uo.6
        f_beep_aga                equ        uo.7       
        ui                        ds        1
        f_power                        equ        ui.0
        f_8h                        equ        ui.1
        f_4h                        equ        ui.2
        f_cleaner                equ        ui.3
        f_2h                        equ        ui.4
        f_replace                equ        ui.5
        f_key_rel                equ        ui.6
        f_beep                        equ        ui.7
        event_fifo        ds        4
        event_buf        ds        1
        writep                ds        1
        readp                ds        1
        new_key                ds        1
        old_key                ds        1
        key_cnt                ds        1
        cnt_buzz        ds        1

        time_data00        ds        1
        time_data01        ds        1
        time_data02        ds        1
        time_data03        ds        1
        time_data        ds        5
        f_cleaner_flash                equ        time_data+4.6
        f_replace_flash                equ        time_data+4.7

        flag                ds        1
        f_filter_check                equ        flag.0
        f_timer_check                equ        flag.1
        f_speed_key                equ        flag.2
        f_power_key                equ        flag.3
        f_base_filter                equ        flag.4       
        f_off_timer                equ        flag.5
        t_7                ds        1
        t_7_1                ds        1       
        num                ds        1
        wk0                ds        1
        wk1                ds        1
        wk2                ds        1
       
        wk00                ds        1
        wk01                ds        1
        R_Write_Adr         ds         1
        R_Write_Adr0        ds        1
        R_Write_Data         ds         1
        R_Write_C3        ds         1
        R_Error_Count   ds         1

        cnt_f0                ds        1
        cnt_f1                ds        1
        key_cnt0        ds        1
        key_cnt1        ds        1
        tm_ch                ds        1
        fl_ch                ds        1       
;-----------
.code
        org        00h
        jmp        reset
        org        10h
reset:
             nop
        mov     a,#0fh
        b0mov   stkp,a
        clr        y
        b0mov        z,#2fh
clr_ram:
        clr        @yz
        decms        z
        jmp        clr_ram
        clr        @yz
        call        chip_init
;---------------------------------------
main:
        call    sys_init
time_base:                        ;4ms
        bts1           ft0irq
        jmp     time_base
               bclr        ft0irq
        mov        a,#t0_value
        add        t0c,a

              call        app_process
        call        mul_process
        call        control_process
        call        wr_data
        call        time_process
        jmp     main
;--------------------------------------
app_process:
        mov        a,state
        add        pcl,a
        jmp        app_process10;0 待机模式
        jmp        app_process20;1 开机正常运行模式
        jmp        app_process30;2 自检模式
        jmp        app_process40;3 ;刚上电
app_process90:
        ret
app_process40:                ;刚上电
        mov        a,new_key
        cmprs        a,#00100110b
        jmp        $+2
        jmp        app_process40_1
        incms        num               
        mov        a,num
        sub        a,#6
        bts1        fc
        jmp        app_process40_90       
        clr        num
        clr        state
        clr        R_Write_Adr0
        jmp        app_process40_90
app_process40_1:
        incms        num               
        mov        a,num
        cmprs        a,#250
        jmp        app_process90
        clr        num
        incms        R_Write_Adr0
        bts1        R_Write_Adr0.1;2s
        jmp        app_process90               
        clr        R_Write_Adr0
        bset        f_beep
        mov        a,#2        ;进入自检模式
        mov        state,a       
app_process40_90:
        jmp        app_process90
;--------------------------------------------
app_process10:                        ;0 待机模式
        call        wait_on
        clr        r                ;按键分析
        call        rd_fifo       
        mov        a,r               
        cje        a,#1,app_process10_1;power
        jmp        app_process10_90               
app_process10_1:
        bset        f_beep_aga        ;bi 两声
        bset        f_beep
        bset        f_off_timer        ;默认无定时关机
        bset        f_high
        mov        a,#1                ;进入正常运行模式
        mov        state,a       
        mov        a,#40
        mov        cnt_f1,a
app_process10_90:
        jmp        app_process90
;--------------------------------------------
app_process20:                        ;1 开机正常运行模式
        bset        f_power
        mov        a,nor_dptr
        add        pcl,a
        jmp        app_process20_0
        jmp        app_process20_1
        jmp        app_process20_2
app_process20_0:
        bset        f_cleaner
        bset        f_replace
        incms        wk00
        mov        a,wk00
        cmprs        a,#125        ;500ms
        jmp        app_process20_2
        clr        wk00
        bclr        f_cleaner
        bclr        f_replace
        mov        a,#1
        mov        nor_dptr,a
        jmp        app_process20_2
app_process20_1:                ;3s后由 high 转为 med
        bts0        f_3s
        jmp        app_process20_2
        incms        wk00
        mov        a,wk00
        cmprs        a,#250        ;
        jmp        app_process20_2
        clr        wk00
        incms        wk01
        mov        a,wk01
        cmprs        a,#2        ;2s+1s=3s
        jmp        app_process20_2
        clr        wk01
        bclr        f_high       
        bset        f_med
        mov        a,#2
        mov        nor_dptr,a
app_process20_2:
        clr        r                ;按键分析
        call        rd_fifo       
        mov        a,r               
        cje        a,#1,app_process20_3;power
        cje        a,#2,app_process20_4;speed
        cje        a,#3,app_process20_5;timer
        cje        a,#4,app_process20_6;cleaner
        cje        a,#5,app_process20_7;replace
        jmp        app_process20_8
app_process20_3:
        bset        f_beep
        mov        a,#100
        mov        cnt_f1,a
        ;bclr        f_beep_aga
        clr        state
        jmp        app_process20_8
app_process20_4:                ;speed
        bset        f_beep
        bset        f_3s///////////
        bts1        f_high
        jmp        app_process20_4_1
        bset        f_low
        bclr        f_high
        bclr        f_med
        jmp        app_process20_8       
app_process20_4_1:
        bts1        f_low
        jmp        app_process20_4_2
        bset        f_med
        bclr        f_high
        bclr        f_low
        jmp        app_process20_8
app_process20_4_2:
        bts1        f_med
        jmp        app_process20_8
        bset        f_high
        bclr        f_low
        bclr        f_med
        jmp        app_process20_8
app_process20_5:        ;timer
        bset        f_beep
        call        clr_wk0
        bts1        f_2h
        jmp        app_process20_5_1
        bset        f_4h
        bclr        f_8h
        bclr        f_2h
        bclr        f_off_timer
        jmp        app_process20_8
app_process20_5_1:
        bts1        f_4h
        jmp        app_process20_5_2
        bset        f_8h
        bclr        f_2h
        bclr        f_4h
        bclr        f_off_timer
        jmp        app_process20_8       
app_process20_5_2:
        bts1        f_8h
        jmp        app_process20_5_3
        bset        f_off_timer
        bclr        f_4h
        bclr        f_8h
        bclr        f_2h       
        jmp        app_process20_8       
app_process20_5_3:
        bts1        f_off_timer
        jmp        app_process20_8
        bclr        f_off_timer
        bclr        f_4h
        bclr        f_8h
        bset        f_2h       
        jmp        app_process20_8       
app_process20_6:
        bset        f_beep
        call        clr_timer
        bset        f_wr
        jmp        app_process20_8       
app_process20_7:
        bset        f_beep
        call        clr_timer1
        bset        f_wr
app_process20_8:        ;公共事件 暂时无内容

                       

app_process20_90:
        jmp        app_process90
;--------------------------------------------
app_process30:                        ;2 自检模式
        clr        nor_dptr
        call        filter_check
        call        timer_check
        call        flash
        clr        r                ;按键分析
        call        rd_fifo       
        mov        a,r               
        cje        a,#1,app_process30_1;power
        cje        a,#3,app_process30_2;timer
        cje        a,#2,app_process30_3;speed
        cje        a,#4,app_process30_4;cleaner       
        cje        a,#5,app_process30_5;replace
        jmp        app_process30_90
app_process30_1:
        bts1        f_speed_key;
        jmp        app_process30_1_0;去开机、f_filter_flash=0再开机?
        bts0        f_power_key
        jmp        app_process30_1_1
        bset        f_power_key       
        bset        f_beep
        jmp        app_process30_6
app_process30_1_0:;;;;;;;;;;;;;
        bset        f_beep_aga        ;bi 两声
        bset        f_beep
        call        wait_on
        bset        f_off_timer        ;默认无定时关机
        bset        f_high
        mov        a,#1                ;进入正常运行模式
        mov        state,a       
        jmp        app_process30_6;;;;;;;;;;;;;;;
app_process30_1_1:
        bset        f_beep
        bset        f_filter_check
        bclr        f_speed_key
        bclr        f_power_key
        bset        f_power
        bset        f_med
        bset        f_base_filter
        clr        fl_ch
        clr        filter_dptr
        jmp        app_process30_6
app_process30_2:
        bset        f_beep
        bset        f_timer_check
        clr        tm_ch
        clr        check_dptr
        jmp        app_process30_6
app_process30_3:
        bset        f_beep
        bclr        f_power_key
        bset        f_speed_key
        jmp        app_process30_6
app_process30_4:
        bts1        f_cleaner_flash       
        jmp        app_process30_6
        bset        f_beep
        bclr        f_cleaner_flash               
        jmp        app_process30_6
app_process30_5:
        bts1        f_replace_flash       
        jmp        app_process30_6
        bset        f_beep
        bclr        f_replace_flash       
app_process30_6:
app_process30_90:
        jmp        app_process90
;--------------------------------------
timer_check:
        bts1        f_timer_check
        jmp        timer_check80
        bset        f_med
        incms        tm_ch
        mov        a,tm_ch
        cmprs        a,#250
        jmp        timer_check00
        clr        tm_ch
        incms        check_dptr
timer_check00:
        mov        a,check_dptr       
        @jmp_a        7
        jmp        timer_check10
        jmp        timer_check10
        jmp        timer_check30
        jmp        timer_check40
        jmp        timer_check50
        jmp        timer_check60
        jmp        timer_check70
timer_check10:
        bset        f_8h
        bclr        f_4h
        bclr        f_2h
        jmp        timer_check90
;timer_check20:
;        jmp        timer_check90
timer_check30:
        bset        f_4h
        bclr        f_8h
        ;bclr        f_2h
        jmp        timer_check90
timer_check40:
        bset        f_2h
        ;bclr        f_8h
        bclr        f_4h
        jmp        timer_check90
timer_check50:
        bclr        f_2h
        bclr        f_8h
        ;bclr        f_4h
        jmp        timer_check90
timer_check60:
        jmp        timer_check90
timer_check70:
        bclr        f_timer_check
        jmp        timer_check90
timer_check80:
        bts1        f_base_filter
        bclr        f_med
        bset        f_8h
        bset        f_4h
        bset        f_2h
timer_check90:
        ret
;--------------------------------------
filter_check:
        bts1        f_filter_check
        jmp        filter_check80
        incms        fl_ch
        mov        a,fl_ch
        cmprs        a,#250
        jmp        timer_check00
        clr        fl_ch
        incms        filter_dptr
filter_check00:
        mov        a,filter_dptr       
        @jmp_a        23        ;ram不够用 用rom省下ram
        jmp        filter_check10
        jmp        filter_check10
        jmp        filter_check10
        jmp        filter_check10        ;4s
        jmp        filter_check10_1
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20
        jmp        filter_check20_1;22s
filter_check10:
        bclr        f_cleaner_flash
        bclr        f_replace_flash
        jmp        filter_check90
filter_check10_1:
        bset        f_cleaner_flash       
        bclr        f_replace_flash       
        jmp        filter_check90
filter_check20:
        jmp        filter_check90
filter_check20_1:
        bclr        f_power
        bclr        f_filter_check
        bset        f_replace_flash
        jmp        filter_check90
filter_check80:
filter_check90:
        ret

使用特权

评论回复
30
戒指320|  楼主 | 2009-8-11 18:52 | 只看该作者
;--------------------------------------
wait_on:
        bclr        f_high               
        bclr        f_low
        bclr        f_med
        bclr        f_power
        bclr        f_8h
        bclr        f_4h
        bclr        f_2h
        bclr        f_cleaner
        bclr        f_replace
        bclr        f_off_timer
        clr        nor_dptr
        clr        wk00
        clr        wk01
        call        clr_wk0
        bclr        f_3s
        ret
;--------------------------------------
time_process:
        mov        a,state
        cmprs        a,#1
        jmp        time_process90
        call        rd_data
        call        flash
        incms        time_data00
        mov        a,time_data00
        cmprs        a,#250;1s
        jmp        time_process10       
        clr        time_data00
        incms        time_data01
        mov        a,time_data01
        cmprs        a,#240;4min
        jmp        time_process10       
        clr        time_data01
        bset        f_wr        ;4min写一次
        incms        time_data
        mov        a,time_data
        cmprs        a,#150;10 hour
        jmp        time_process10       
        clr        time_data
        incms        time_data+1
        mov        a,time_data+1
        cmprs        a,#72        ;720 hour
        jmp        time_process10       
        clr        time_data+1
        bset        f_cleaner_flash///////////
        bset        f_wr        ;写一次
time_process10:

        incms        time_data02
        mov        a,time_data02
        cmprs        a,#250;1s
        jmp        time_process90       
        clr        time_data02
        incms        time_data03
        mov        a,time_data03
        cmprs        a,#240;4min
        jmp        time_process90       
        clr        time_data03
        bset        f_wr        ;4min写一次
        incms        time_data+2
        mov        a,time_data+2
        cmprs        a,#255;17 hour
        jmp        time_process90       
        clr        time_data+2
        incms        time_data+3
        mov        a,time_data+3
        cmprs        a,#254        ;4318 hour
        jmp        time_process90       
        clr        time_data+3
        bset        f_replace_flash///////////
        bset        f_wr        ;写一次
time_process90:
        ret
;--------------------------------------
flash:
        incms        cnt_f0
        mov        a,cnt_f0
        cmprs        a,#63
        jmp        flash90
        clr        cnt_f0
        bts1        f_cleaner_flash
        jmp        flash10
        mov        a,#00001000b
        xor        ui,a
        jmp        flash20       
flash10:
        bclr        f_cleaner
flash20:       
        bts1        f_replace_flash
        jmp        flash30
        mov        a,#00100000b
        xor        ui,a
        jmp        flash90       
flash30:
        bclr        f_replace
flash90:
        ret
;------------------------------------
rd_data:
        bts0        f_rd
        jmp        rd_data90
        mov        a,t_7_1
        cmprs        a,#5
        jmp        rd_data10
        clr        t_7_1
        bset        f_rd
        mov        a,time_data+4
        and        a,#00111111B
        cmprs        a,#08h/
        jmp        rd_data00
        jmp        rd_data90
rd_data00:
        call        clr_timer
        call        clr_timer1
        jmp        rd_data90
rd_data10:
        mov        a,t_7_1
        mov        R_Write_Adr0,a
        call        read_AT
        b0mov        y,#time_data$m
        b0mov        z,#time_data$l
        mov        a,t_7_1
        add        z,a
        bts0        fc
        incms        y
        mov        a,r
        mov        @yz,a
        nop
        incms        t_7_1
rd_data90:
        ret
;---------------------------------
wr_data:
        bts1        f_wr
        jmp        wr_data90
        mov        a,#11000000b
        and        time_data+4,a
        bset        time_data+4.3;08h
        mov        a,t_7
        cmprs        a,#5
        jmp        wr_data10
        clr        t_7
        bclr        f_wr
        jmp        wr_data90       
wr_data10:
        mov        a,t_7       
        b0mov        y,#time_data$m
        b0mov        z,#time_data$l
        add        z,a
        bts0        fc
        incms        y
        mov        a,@yz
        mov        R_Write_data,a
        mov        a,t_7
        mov        R_Write_Adr,a;
        call        Write_AT
        nop
        incms        t_7
wr_data90:
        ret
;---------------------
clr_timer:       
        clr        time_data00
        clr        time_data01
        clr        time_data
        clr        time_data+1
        bclr        f_cleaner_flash
        ret
clr_timer1:
        clr        time_data02
        clr        time_data03
        clr        time_data+2
        clr        time_data+3
        bclr        f_replace_flash
        ret
;==================================
;R_Write_Adr  读写地址
;读的数据在R里保存着
;R_Write_Data 要写的数据
Read_AT:                        ;随机地址读
        CALL        Start_bit
        b0MOV        R,#0a0h                  ;器件地址  
        CALL        Write_8bit
        CALL        Ack_bit
        BTS0        B_FLAG_ERROR
        JMP        R_1B                ;没应答

        MOV        A,R_Write_Adr0  ;有应答
        MOV        R,A
        CALL        Write_8bit
        CALL        Ack_bit
        BTS0        B_FLAG_ERROR
        JMP        R_1B
        CALL        Start_bit
        b0MOV        R,#0a1h                ;读的地址
        CALL        Write_8bit
        CALL        Ack_bit
          BTS0        B_FLAG_ERROR
        JMP        R_1B
        JMP        $+1                ;相当于延时
        JMP        $+1
        JMP        $+1
        CALL        Read_8bit
;        CALL        tAck_bit        ;
R_1B:
        CALL        Stop_bit
        BTS1        B_Flag_Error
        RET
        BCLR        B_Flag_Error
        INCMS        R_Error_Count        ;有多少次错误
        MOV        A,R_Error_Count
        CMPRS        A,#5
        NOP
        BTS1        FC
        JMP        Read_At
        CLR        R_Error_Count
        RET
;=======================================================;
Write_AT:                ;字节写
        CALL        Start_bit
        b0MOV        R,#0a0h
        CALL        Write_8bit
        CALL        Ack_bit
        BTS0        B_FLAG_ERROR
        JMP        W_1B
        MOV        A,R_Write_Adr
        MOV        R,A
        CALL        Write_8bit
        CALL        Ack_bit
        BTS0        B_FLAG_ERROR
        JMP        W_1B
        MOV        A,R_Write_Data        ;要写数据了
        MOV        R,A
        CALL        Write_8bit
        CALL        Ack_bit
W_1B:
        CALL        Stop_bit
        BTS1        B_FLAG_ERROR
        RET
        BCLR        B_FLAG_ERROR
        INCMS        R_Error_Count
        MOV        A,R_Error_Count
        CMPRS        A,#5
        NOP
        BTS1        FC
        JMP        WRITE_AT
        CLR        R_Error_Count
        RET
;=======================================================;
Start_Bit:
        BSET        Sdam
        BSET        Sclm
        BSET        Sda
        BSET        Scl
        JMP        $+1
        JMP        $+1
        Bclr        Sda
        JMP        $+1
        JMP        $+1
        Bclr        Scl
        RET
;=======================================================;
Stop_Bit:
        BSET        Sdam
        BSET        Sclm
        BCLR        Sda
        JMP        $+1
        JMP        $+1
        BSET        Scl
        JMP        $+1
        JMP        $+1
        BSET        Sda
        JMP        $+1
        JMP        $+1
        RET
;=======================================================;
Ack_bit:
        BCLR        Sdam
        BSET        Sclm
        BSET        Sda
        BSET        Scl
        MOV        A,#20H
        MOV        R_Write_C3,A
A_B1:
        BCLR        SDAM
        BTS1        SDA
        JMP        A_B2
        DECMS        R_Write_C3
        JMP        A_B1
        BSET        B_FLAG_ERROR
        RET
A_B2:
        Bclr        B_FLAG_ERROR
        Bclr        Scl
        RET
;=======================================================;
tAck_bit:
        BSET        Sdam
        BSET        Sclm
        Bclr        Sda
        BSET        Scl
        JMP        $+1
        JMP        $+1
        Bclr        Scl
        RET
;=======================================================;
Write_8bit:
        BSET        Sclm
        BSET        Sdam
        MOV        A,#8
        MOV        R_Write_C3,A
W_8:
        RLCM        R
        BCLR        Sda
        BTS0        FC
        BSET        Sda
        JMP        $+1
        JMP        $+1
        BSET        Scl
        JMP        $+1
        JMP        $+1
        Bclr         Scl
        JMP        $+1
        JMP        $+1
        DECMS        R_Write_C3
        JMP        W_8
        RET
;=======================================================;
Read_8bit:
        BCLR        Sdam
        BSET        Sclm
        MOV        A,#8
        MOV        R_Write_C3,A
R_8:
        BSET        Scl
        JMP        $+1
        JMP        $+1
        BCLR        FC
        BTS0        Sda
        BSET        FC
        RLCM        R
        Bclr        Scl
        JMP        $+1
        JMP        $+1
        DECMS        R_Write_C3
        JMP        R_8
        RET
;--------------------------------------
control_process:
        bts1        f_beep_aga
        jmp        control_process10
        incms        R_Write_Adr0
        mov        a,R_Write_Adr0
        cmprs        a,#60
        jmp        control_process10
        clr        R_Write_Adr0
        bset        f_beep
        bclr        f_beep_aga       
control_process10:
        bts1        f_high
        jmp        control_process11        ;motor
        jmp        control_process12
control_process11:
        bset        p_high
        jmp        control_process20
control_process12:
        bclr        p_high       
control_process20:
        bts1        f_low
        jmp        control_process21
        jmp        control_process22
control_process21:
        bset        p_low
        jmp        control_process30
control_process22:
        bclr        p_low       
control_process30:
        bts1        f_med
        jmp        control_process31
        jmp        control_process32
control_process31:
        bset        p_med
        jmp        control_process40
control_process32:
        bclr        p_med
control_process40:
        bts1        f_beep
        jmp        control_process41
        jmp        control_process42       
control_process41:
        bclr        tc0m.1
        jmp        control_process50       
control_process42:
        bset        tc0m.1
        incms        cnt_buzz
        mov        a,cnt_buzz
        sub        a,cnt_f1
        bts1        fc
        jmp        control_process50       
        clr        cnt_buzz
        bclr        f_beep
control_process50:
        bts1        f_off_timer
        jmp        control_process50_1
        ;call        clr_wk0       
        jmp        control_process90
control_process50_1:                        ;定时关机
        bts1        f_8h
        jmp        control_process60
        incms        wk0
        mov        a,wk0
        cmprs        a,#250        ;1s///////////////////1
        jmp        control_process90       
        clr        wk0
        incms        wk1
        mov        a,wk1
        cmprs        a,#60        ;1min////////////////2
        jmp        control_process90       
        clr        wk1
        incms        wk2
        mov        a,wk2
        cmprs        a,#240        ;4 hour
        jmp        control_process90       
        clr        wk2
        bclr        f_8h
        bset        f_4h
        jmp        control_process90
control_process60:
        bts1        f_4h
        jmp        control_process70
        incms        wk0
        mov        a,wk0
        cmprs        a,#250        ;1s//////////////////3
        jmp        control_process90       
        clr        wk0
        incms        wk1
        mov        a,wk1
        cmprs        a,#60        ;1min/////////////////4
        jmp        control_process90       
        clr        wk1
        incms        wk2
        mov        a,wk2
        cmprs        a,#120        ;2 hour
        jmp        control_process90       
        clr        wk2
        bclr        f_4h
        bset        f_2h
        jmp        control_process90
control_process70:
        bts1        f_2h
        jmp        control_process90
        incms        wk0
        mov        a,wk0
        cmprs        a,#250        ;1s//////////////////////5
        jmp        control_process90       
        clr        wk0
        incms        wk1
        mov        a,wk1
        cmprs        a,#60        ;1min//////////////////////6
        jmp        control_process90       
        clr        wk1
        incms        wk2
        mov        a,wk2
        cmprs        a,#120        ;2 hour
        jmp        control_process90       
        clr        wk2
        bset        f_beep        ;自动关机
        clr        state
control_process90:
        ret
;------
clr_wk0:
        clr        wk0
        clr        wk1
        clr        wk2       
        ret

使用特权

评论回复
31
戒指320|  楼主 | 2009-8-11 18:53 | 只看该作者
;------------------------------------------------
mul_process:                ;8ms
        call        key_scan
        mov        a,mul_dptr
        incms        mul_dptr
        add        pcl,a
        jmp        led_display10        ;led
        jmp        led_display20
key_scan:
        mov        a,#00001110b
        mov        p2ur,a
        mov     a,#00110000b
        or     p2,a
        mov        a,#11110001b
        mov        p2m,a
        b0mov   r,#30
        decms   r
        jmp     $-1
        mov        a,p2
        and        a,#00001110b
        mov        new_key,a
        mov        a,#00110000b
        mov        p2ur,a
        mov        a,#11001111b;0001
        mov         p2m,a
        mov        a,#11110001b
        and        p2,a
        b0mov   r,#30
        decms   r
        jmp     $-1
        mov        a,p2
        and        a,#00110000b
        or        new_key,a
        bts0        f_key_rel       
        jmp        key_scan10        ;检测放键
        jmp        key_scan20        ;检测按键
key_scan10:
        mov        a,new_key
        cmprs        a,#00111110b
        jmp        key_scan30
        incms        key_cnt
        mov        a,key_cnt
        cmprs        a,#5                ;20ms
        jmp        key_scan90
        bclr        f_key_rel
        jmp        key_scan30
key_scan20:
        mov        a,new_key
        cmprs        a,old_key
        jmp        key_scan21
        incms        key_cnt
        mov        a,key_cnt
        cmprs        a,#8                ;32ms
        jmp        key_scan90
        clr        key_cnt
        jmp        key_scan40
key_scan21:
        mov_        old_key,new_key
key_scan30:
        clr        key_cnt
        jmp        key_scan90
key_scan40:
;--
        mov        a,new_key               
        cmprs        a,#00011110b
        jmp        key_scan40_0
        incms        key_cnt0
        mov        a,key_cnt0
        cmprs        a,#80
        jmp        key_scan90
        clr        key_cnt0
        jmp        key_scan44
key_scan40_0:
        clr        key_cnt0
        mov        a,new_key               
        cmprs        a,#00111010b
        jmp        key_scan40_1
        incms        key_cnt1
        mov        a,key_cnt1
        cmprs        a,#80
        jmp        key_scan90
        clr        key_cnt1
        jmp        key_scan45
key_scan40_1:
        clr        key_cnt1
;---
        mov        a,new_key               
        cje        a,#00111110b,key_scan90        ;无键按下不作处理
        cje        a,#00111100b,key_scan41
        cje        a,#00101110b,key_scan42
        cje        a,#00110110b,key_scan43
        ;cje        a,#00011110b,key_scan44
        ;cje        a,#00111010b,key_scan45
        ;cje        a,#00100110b,key_scan46/////
        jmp        key_scan90               
key_scan41:
        mov_        event_buf,#1                ;POWER键键值1
        jmp        key_scan80
key_scan42:
        mov_        event_buf,#2                ;speed键键值2
        jmp        key_scan80
key_scan43:
        mov_        event_buf,#3                ;timer键键值3
        jmp        key_scan80
key_scan44:
        mov_        event_buf,#4                ;cleaner键值4
        jmp        key_scan80
key_scan45:
        mov_        event_buf,#5                ;replace键键值5
        jmp        key_scan80
;key_scan46:
;        mov_        event_buf,#6                ;speed+timer键键值6////
;        jmp        key_scan80
key_scan80:
        bset        f_key_rel
        call        wrt_FIFO                ;将键值写入event_FIFO
key_scan90:
        ret
;---------------------------------------
led_display10:       
        mov        a,#0                ;去掉上拉,不然会有影响
        mov        p2ur,a               
        mov        a,#11100001b       
        mov        p2m,a
        bset        p2.5
        bclr        p2.4
        bts1        f_power
        jmp        led_display10_1
        bset        p2m.4
        bset        p2m.3
        bset        p2.3       
led_display10_1:
        bts1        f_8h
        jmp        led_display10_2
        bset        p2m.4
        bset        p2m.2
        bset        p2.2
led_display10_2:
        bts1        f_4h
        jmp        mul_process90
        bset        p2m.4
        bset        p2m.1
        bset        p2.1
        jmp        mul_process90       
;--------------------------------
led_display20:
        mov        a,#0                ;去掉上拉,不然会有影响
        mov        p2ur,a       
        mov        a,#11010001b       
        mov        p2m,a
        bset        p2.4
        bclr        p2.5
        bts1        f_cleaner
        jmp        led_display20_1
        bset        p2m.5
        bset        p2m.3
        bset        p2.3       
led_display20_1:
        bts1        f_2h
        jmp        led_display20_2
        bset        p2m.5
        bset        p2m.2
        bset        p2.2
led_display20_2:
        bts1        f_replace
        jmp        led_display20_3
        bset        p2m.5
        bset        p2m.1
        bset        p2.1
led_display20_3:
        clr        mul_dptr
mul_process90:
        ret
;----------------------------------------
;----------------------------------------
wrt_FIFO:
        b0mov        y,#event_FIFO$m               
        b0mov        z,#event_FIFO$l                ;取首地址
        mov        a,writep                ;计算当前地址
        b0add        z,a                        ;写表的高位地址
        mov        a,event_buf
        mov        @yz,a                        ;存键值
        incms        writep
        mov        a,writep
        cje        a,#FIFO_len,wrt_FIFO10        ;到底部writep清0
        jmp        wrt_FIFO90                ;没有到底部退出       
wrt_FIFO10:
        clr        writep
wrt_FIFO90:
        ret
;---------------
rd_FIFO:
        mov        a,writep                ;读写指针相等没有数据写入,退出
        cje        a,readp,rd_FIFO90        ;读写指针不等,读event_FIFO
        b0mov        y,#event_FIFO$m               
        b0mov        z,#event_FIFO$l                ;取首地址
        mov        a,readp                        ;计算当前地址
        b0add        z,a                        ;读表的高位地址
        mov_        r,@yz                        ;存键值
        incms        readp
        mov        a,readp
        cje        a,#FIFO_len,rd_FIFO10        ;到底部readp清0
        jmp        rd_FIFO90                ;没有到底部退出       
rd_FIFO10:
        clr        readp
rd_FIFO90:
        ret
;----------------------------------------------
chip_init:
        call        sys_init
        bset        P_high                ;关输出
        bset        P_low
        bset        P_med
;------------------------------------buzzer init
        clr        intrq
        mov        a,#11110100b        ;4k 131 : 2k 6
        mov        tc0m,a
        mov        a,#tc0_value        ;
        mov        tc0c,a
        mov        tc0r,a
;--------------------------------------t0 init
        mov        a,#10110000b        ;32
        mov        t0m,a
        mov        a,#t0_value        ;4ms
        mov        t0c,a
        mov        a,#3
        mov        state,a       
        mov        a,#40
        mov        cnt_f1,a
        ret
;-----------------------------------------------
sys_init:
        clr     oscm
        mov     a,#5ah
        b0mov   wdtr,a
              mov        a,#10110000b        ;32
        mov        t0m,a        
        mov        a,#11110100b        ;2
        or        tc0m,a               
        mov     a,#00000000b
        b0mov   inten,a
        mov        a,#00001100b
        or        p1m,a
        bset        p2m.0       
        ret

使用特权

评论回复
32
koreawind| | 2009-8-11 18:54 | 只看该作者
你就说 ,学习了  就行了

使用特权

评论回复
33
chenmeng11| | 2009-8-12 11:06 | 只看该作者
不错不错,楼主真强悍啊,如果能在改进一下就更好了 ,学习了 1# 戒指320

使用特权

评论回复
34
思考| | 2009-8-12 12:48 | 只看该作者
好人!

使用特权

评论回复
35
戒指320|  楼主 | 2009-8-12 19:30 | 只看该作者
改什么地方呢?

使用特权

评论回复
36
chenmeng11| | 2009-8-13 09:41 | 只看该作者
21楼的貌似更有道理! 35# 戒指320

使用特权

评论回复
37
我是大哥强| | 2009-8-13 09:46 | 只看该作者
楼主的汇编貌似很强,能不能留个联系方式请教一下

使用特权

评论回复
38
xuwanmin| | 2009-8-13 14:23 | 只看该作者
楼主的汇编很强很悍,上面的程序加在一起有几百行到上千行了。我没数过,十分钦佩。。。。。。。

使用特权

评论回复
39
戒指320|  楼主 | 2009-8-13 18:40 | 只看该作者
哪里啊,我只是刚入门而以。

使用特权

评论回复
40
cauhorse| | 2009-8-14 12:30 | 只看该作者
驱动双向可控硅。。我一般就用可控硅触发光耦,MOC302X/304X/306X之类的。驱动阻性负载好办,一般就直接连上了;要是驱动感性负载,尤其是电机一类的东西,就加阻容缓冲网络。这个东西在低成本的调光调速器里出现得很多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则