返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 论坛


P1口的8个灯循环亮,按P32后全部闪烁5次后继续循环亮, 中断程序的典型应用。
;***************************************************************************
;* sxj1974@163.com (51c51 test web) www.8951.com *
;* Create by :石学军 www.51c51.com 更多例程请登陆网站 *
;***************************************************************************


org 00h;开始
jmp start
org 03h;int0中断入口(p32)
jmp ext0;到中断子程序
start: mov ie,#10000001b;中断使能
mov ip,#00000001b;中断优先
mov tcon,#0000000b;中断为电平触发
mov sp,#70h;堆栈指针
loop:mov a,#0ffh ;左移动初值
clr c ; C=0
mov r2,#08;左移动8次
loop1:rlc a ;含c左移动一位
mov p1,a;输出到P1口
call delay ;延时
djnz r2,loop1 ;左移动8次了吗?
mov r2,#07 ;设定右移7次
loop2:rrc a 
mov p1,a
call delay
djnz r2,loop2 ;右移动7次了吗? 
jmp loop
ext0: push acc ;把a压入堆栈
push psw;保存现场
setb rs0;设定工作寄存器1
clr rs1
mov a,#00;使P1全亮一次
mov r2,#10;闪烁5次(亮灭共10次,小心了)
loop3:mov p1,a ;输出到P1
call delay
cpl a
djnz r2,loop3 ;10次到了么?没有继续否则完成
pop psw;恢复现场
pop acc
reti
delay: mov r5,#20;延时200MS
d1:mov r6,#20
d2: mov r7,#250
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end

hex格式文件下载(点右键,目标另存为hex即可直接烧写)