单片机汇编程序设计之时间片

时间:2013-05-08来源:网络

;========================================================

; timer0中断服务程序

;入口 无(timer0初始化函数未给出)

;出口 r_sys_slice

;

; 用于系统计时,每50us,r_sys_slice+=1

;========================================================

timer0_isev:

push

bclr interrupt_flag ;清中断标志

mov a,#256-50 ;定时初值初值

mov time,a

inc r_sys_slice

pop

reti

;========================================================

; 系统时间片

;入口 r_sys_slice

;出口 r_led_cyc_cnt、r_sw_cyc_cnt

;

; 确定时间基准10ms=50us*200

;========================================================

sys_time:

if(r_sys_slice>=200){

r_sys_slice=0;

r_led_cyc_cnt++;

r_sw_cyc_cnt++;

}

ret

;========================================================

; 按键检测

;入口 r_sw_cyc_cnt

;出口 无

;

; 每50ms检测一次按键

;========================================================

ck_sw:

if(r_sw_cyc_cnt>=5){

r_sw_cyc_cnt=0;

;check sw

;....

}

ret

;========================================================

; 循环点亮led

;入口 r_led_cyc_cnt

;出口 ...

;

; 每个led亮500ms

;========================================================

flash_led:

if(r_led_cyc_cnt>=50){

r_led_cyc_cnt=0;

;light next led

}

ret

end

;---------------------------------------------------------

这样写完后,除满足点亮led的同时有效检测按键,还便于扩展其它功能。且可以认为每个模块都是实时运行的。

如果,编译环境允许,将每个模块放在一个单独的文件中,大大提高程序的可读性。

1 2

关键词: 单片机 汇编程序 时间片

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版