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即可直接烧写)
|