松翰单片机之跑马灯程序解析

[复制链接]
查看227669 | 回复398 | 2009-12-2 14:44:01 | 显示全部楼层 |阅读模式
跑马灯程序,是单片机初学者必要学会的一个程序,学会了写跑马灯程序,你才真正的单片机入门了。下面我就给大家介绍写松翰单片机的跑马灯
程序。
(1)程序功能:两灯对闪,闪烁的频率为2.4hz也就是420ms交换闪烁一次
(2)程序流程图(无)
(3)原理图(在附件里)
(4)程序代码:
1。打开松翰编译器新建一个project 文件 在里面输入以下代码
chip        sn8p2501b
.nolist
;;
includestd        macro1.h
includestd        macro2.h
includestd        macro3.h
.list
.const
        include                const.asm
.data
        include                ram.asm
;;----------------------------------
.code
        org        0
        jmp        reset
        jmp                reset                ;
        dw                0xffff                ;

        org        8                        ;
        jmp                int_sv                ;
        jmp                int_sv                ;
        dw                0xffff                ;

        org        10h
        include                main.asm
        include                time.asm
        include                init.asm
        include                int.asm
        include                led_pro.asm

        endp
;;-------------------------------------------------------------

2.新建一个main 文件在里面输入下面代码,保存起来
;****************************
;Subroutine:               
;Description:                init systerm work circumstance & transfer all subprograms
;principium:
;calls:                       
;
;****************************
reset:
        mov        a,#7fh                        ;
        mov        stkp,a                        ;
        mov        a,#00h                        ;
        mov        pflag,a                        ;
        call        clr_ram                        ;
        call        sys_init                ;
        b0bset        fgie                        ;
main:
        @rst_wdt
        call        time_pro
        call        led_pro
        jmp        main
;;------------------------------------------------

3.再建个time 时间处理程序
;;**************************************;*********
;time chat part
;;时间处理

;;**************************************;*********
time_pro:
        bts1        f_int_t0
        jmp        time_pro90
        bclr        f_int_t0
;;------------------------------------------------
time_pro10:
        incms        b_t_450ms
        nop
        cjb_        b_t_450ms,#42,time_pro90
        clr        b_t_450ms
        bset        f_led_flash
;;-----------------------------------------------
time_pro90:
        ret
;;-----------------------------------------

4.根据上面一样的,建个led_pro子程序
;;***************************************
;;led灯指示
;;两红两绿对灯闪烁,频率2.4hz
;;
;;
;;************************************
led_pro:
        bts1        f_led_scan
        jmp        led_pro
        bclr        f_led_scan

led_pro10:
        bts1        f_led_flash
        jmp        led_pro20
        bclr        f_led_flash
        bclr        f_led_green
        bset        f_led_red
        jmp        led_pro90
;;----------------------------------
led_pro20:
        bclr        f_led_red
        bset        f_led_green
        jmp        led_pro90
;;--------------------------------
led_pro90:
        ret
;;------------------------------

5。再建个初始化程序 init
;systerm initial part before main program start
;clr ram (ram size is 64 byte)
;set systerm work enviroment such as timer/ IO/ INT
;program init part
;主要包括三部分:清RAM,系统资源设置,软件初始化
;;**************************************;*********
clr_ram:                                ;
        mov        a,#00h                        ;
        mov        y,a                        ;
        mov        a,#7fh                        ;
        mov        z,a                        ;
clr_ram10:                                ;
        mov        a,#00h                        ;
        mov        @yz,a                        ;
        decms        z                        ;
        jmp        clr_ram10                ;
        mov        a,#00h                        ;
        mov        @yz,a                        ;
clr_ram90:                                ;
        ret                                ;
;;---------------------------------------
sys_init:
;;I/O口初始化
        mov        a,#0ffh
        mov        p0m,a                        ;;输出0 没用口
        mov        a,#0
        mov        p0,a

        mov        a,#0ffh                        ;;p10口输出用,其他的口做输出0处理
        mov        p1m,a
        mov        a,#0
        mov        p1,a

        mov        a,#0ffh                        ;;p54口输出用,其他的口无用,做输出0处理
        mov        p5m,a
        mov        a,#0
        mov        p5,a
;;
;;time 设置
        b0bclr        ft0enb
        b0bclr        ft0ien
        mov        a,#00100000b
        mov        t0m,a
        mov        a,#256-156
        mov        t0c,a
        b0bclr        ft0irq
        b0bset        ft0ien
        b0bset        ft0enb

;;
sys_init90:
        ret
;;-------------------------------------
6.中断程序处理了建个int文件
;;********************************************
;;中断处理程序
;;t0,tc0,中断
;;*******************************************
int_sv:
        b0xch        a,accbuf
        mov        a,pflag
        mov        pflagbuf,a
;;-------------------------------------------;;t0中断
        bts1        ft0irq       
        jmp        int_sv90
        bclr        ft0irq
        mov        a,#256-156
        mov        t0c,a
        bset        f_int_t0
;;---------------------------------------------
int_sv90:
        mov        a,pflagbuf                ;
        mov        pflag,a                        ;
        b0xch        a,accbuf                ;
        reti                                ;
;;--------------------------------------------------
7.ram定义了,建个ram
;;**************************************;*********
;RAM DS divide into four parts (用户自定义RAM区域)
;KEY RAM ; REMOTE RAM ; PRO RAM ; TIME RAM
;
;
;;**************************************;*********
        accbuf                ds        1
        pflagbuf        ds        1

        b_t_450ms        ds        1

        flag0                ds        1
        f_int_t0        equ        flag0.0
        f_led_scan        equ        flag0.1
        f_led_flash        equ        flag0.2
;;----------------------------------------------------------
8.const常量定义了建个const
;;**************************************;*********
;const value define(常量定义部分)
;
;
;
;;**************************************;*********
        f_led_red        equ        fp10
        f_led_green        equ        fp54
;;----------------------------------------------------------------------------
9.完了,现在就来运行程序了 打开编译器,在File菜单中打开New Project 找到project 这个文件打开它,按F7就可以编译了
10.在我的附件中有着程序的源代码
好了程序就写到这里了希望对单片机初学者有所帮助,同时也希望大家多来顶下,这样我就高兴了,
一高兴就点起键盘来了!!!!!!!!

游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
miaoxinniao | 2010-3-26 11:00:45 | 显示全部楼层
松翰 想找个教程都没  我郁闷  就价格便宜 其他没好处  老板要没办法
woaijiu | 2014-1-15 10:11:00 | 显示全部楼层
谢谢,谢谢楼主
海涯普照 | 2010-1-18 09:24:36 | 显示全部楼层
是啊,松翰学习资料比较少,基本没有,版主:能给一点AD转换的小程序我吗,先感激了,谢谢。cf090951@163.com
小兵 | 2009-12-2 20:06:48 | 显示全部楼层
收到,楼主辛苦!!
lqx99988 | 2009-12-12 13:28:55 | 显示全部楼层
学习了,网络上找遍了也找不到松翰的教程,郁闷
小兵 | 2010-1-12 15:00:27 | 显示全部楼层
收到,最近忙死了了,一直想写一个流水灯的程序,都是有问题,顶小良
小良 | 2010-1-18 10:47:50 | 显示全部楼层
AD转换,我会给大家介绍的,最近 有点忙,我会抓紧写的
fscz | 2010-3-11 10:56:50 | 显示全部楼层
楼主辛苦了.
jinxiao198 | 2010-3-19 11:33:41 | 显示全部楼层
恩,学习了
wuhudu | 2010-3-21 16:20:45 | 显示全部楼层
很好,谢谢,
您需要登录后才可以回帖 登录 | 注册

本版积分规则