打印
[51单片机]

汇编编写简单程序

[复制链接]
1031|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
yklstudent| | 2014-12-11 12:53 | 只看该作者
吃饱了撑的,闲得发慌可以这么做

使用特权

评论回复
板凳
yueguang3048| | 2014-12-11 13:07 | 只看该作者
汇编基本忘掉  建议楼主自己在纸上画个 流程图 问题或许就解决了:)

使用特权

评论回复
地板
ayb_ice| | 2014-12-11 14:00 | 只看该作者


; 说明:
;        开机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:
;______________________________________________________________
;P3.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


使用特权

评论回复
5
ayb_ice| | 2014-12-11 14:23 | 只看该作者
上面的代码漏了个字母a
现将完整工程附上

未命名.PNG (32.24 KB )

未命名.PNG

新建文件夹.rar

37.99 KB

使用特权

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

本版积分规则

57

主题

103

帖子

0

粉丝