查看: 94|回复: 4
收起左侧

用汇编调了一天都没弄出来

[复制链接]

511

主题

4111

帖子

1万

积分

资深工程师

 楼主| 发表于 2017-7-15 22:19 | 显示全部楼层 |返回版面|阅读模式
P1.0~P1.6接七只发光二极管循环点亮,低电平有效,间隔时间可以改,,P3.4为开工启动开关,低电平启动,P3.3为外部故障输入模拟开关,低电平报警,P1.7为报警输出, 用中断和定时器实现。用汇编,调了一天都没弄出来,求大神出手

514

主题

4347

帖子

1万

积分

资深工程师

发表于 2017-7-15 22:21 | 显示全部楼层 |返回版面

吃饱了撑的,闲得发慌可以这么做

506

主题

4389

帖子

1万

积分

资深工程师

发表于 2017-7-15 22:23 | 显示全部楼层 |返回版面

汇编基本忘掉  建议楼主自己在纸上画个 流程图 问题或许就解决了

488

主题

3926

帖子

1万

积分

资深工程师

发表于 2017-7-15 22:36 | 显示全部楼层 |返回版面


; 说明:
;        开机LED移动速度为500MS,通过按键修改,时间范围在100MS~2500MS之间,
;        启动开关控制LED启停,低运行,高暂停
;        报警输出高电平有效
;        按键修改LED时间,在100MS~2500MS之间,按键按下低电平有效,每按下一次时间增加10MS


$include (reg52.inc)

        gpio_led1        equ                p1.0
        gpio_led2        equ                p1.1
        gpio_led3        equ                p1.2
        gpio_led4        equ                p1.3
        gpio_led5        equ                p1.4
        gpio_led6        equ                p1.5
        gpio_led7        equ                p1.6

        gpio_start                equ        p3.4
        gpio_alarm_in        equ        p3.3
        gpio_alarm_out        equ        p3.7

        gpio_key1        equ                p1.7


        bseg        at        0
flag_10ms:
        dbit                1
flag_led:
        dbit                1

        dseg        at        030h
led_peroid:
        ds                1
const_led_peroid:
        ds                1

key_number:
        ds                1
key_delay:
        ds                1

        cseg        at        0
        jmp                start

        cseg        at        00bh
        jmp                isr_t0

start:
        call        sys_init

;_______________
;主循环开始
loop:
        jnb                flag_10ms,$

        call        sys_led

        call        sys_alarm

        call        sys_key

        clr                flag_10ms
        clr                flag_led
        jmp                loop


;__________________________
; 初始化
;__________________________
sys_init:
        mov                sp,#07fh-32

        clr                gpio_led1
        setb        gpio_led2
        setb        gpio_led3
        setb        gpio_led4
        setb        gpio_led5
        setb        gpio_led6
        setb        gpio_led7

        clr                flag_10ms
        clr                flag_led
        clr                a
        mov                led_peroid,a
        mov                key_number,a
        mov                key_delay,a

        mov                a,#50                ; 修改数值,改变LED速度,50=500MS(*10MS)
        mov                const_led_peroid,a

        mov                tmod,#010h
        mov                tl0,#0f0h                ; 65536-10000,10MS
        mov                th0,#0d8h                ; 65536-10000,10MS
        setb        et0
        setb        tr0

        setb                ea

        ret


;__________________________
; 按键
;__________________________
sys_key:
        clr                a
        mov                key_number
        jnb                gpio_key1,sys_key_00
        mov                key_delay,a
        ret

sys_key_00:
        mov                a,key_delay
        clr                c
        subb        a,#100
        jnc                sys_key_01
        inc                key_delay
sys_key_01:
        mov                a,key_delay
        xrl                a,#3
        jnz                sys_key_02
        orl                key_number,#1
;___________________
;处理按键
        inc                const_led_peroid
        mov                a,const_led_peroid
        xrl                a,#250
        jnz                sys_key_02
        mov                const_led_peroid,#10
        ret

sys_key_02:
        ret

;__________________________
; 报警
;__________________________
sys_alarm:
;______________________________________________________________
3.3为外部故障输入模拟开关,低电平报警,P1.7为报警输出,
        mov                c,gpio_alarm_in
        cpl                c
        mov                gpio_alarm_out,c        ; 报警输出,高电平有效
        ret


;__________________________
; LED
;__________________________
sys_led:
;___________________
;每500MS循环处理灯
        jnb                gpio_start,label_00                ; 低电平启动
label_000:
        ret

label_00:
        jnb                flag_led,label_000

        jb                gpio_led1,label_01
        setb        gpio_led1
        clr                gpio_led2
        ret

label_01:
        jb                gpio_led2,label_02
        setb        gpio_led2
        clr                gpio_led3
        ret

label_02:
        jb                gpio_led3,label_03
        setb        gpio_led3
        clr                gpio_led4
        ret

label_03:
        jb                gpio_led4,label_04
        setb        gpio_led4
        clr                gpio_led5
        ret

label_04:
        jb                gpio_led5,label_05
        setb        gpio_led5
        clr                gpio_led6
        ret

label_05:
        jb                gpio_led6,label_06
        setb        gpio_led6
        clr                gpio_led7
        ret

label_06:
        jb                gpio_led7,label_07
        setb        gpio_led7
        clr                gpio_led1
        ret

label_07:
        clr                gpio_led1
        ret

;__________________________
; T0中断
;__________________________
isr_t0:
        push        psw
        push        acc

;        clr                tr0
        mov                tl0,#0f0h
        mov                th0,#0d8h
;        setb        tr0

        setb        flag_10ms
        inc                led_peroid
        mov                a,led_peroid
        xrl                a,const_led_peroid
        jnz                reti_t0
        mov                led_peroid,a
        setb        flag_led

reti_t0:
        pop                acc
        pop                psw
        reti





end

511

主题

4111

帖子

1万

积分

资深工程师

 楼主| 发表于 2017-7-15 22:39 | 显示全部楼层 |返回版面
其实还是不大明白,我再琢磨琢磨吧,多谢了哈,结贴了先
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

分享 快速回复 返回顶部 返回列表