跑马灯程序,是单片机初学者必要学会的一个程序,学会了写跑马灯程序,你才真正的单片机入门了。下面我就给大家介绍写松翰单片机的跑马灯
程序。
(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.在我的附件中有着程序的源代码
好了程序就写到这里了希望对单片机初学者有所帮助,同时也希望大家多来顶下,这样我就高兴了,
一高兴就点起键盘来了!!!!!!!!
|