
ajmp loop
org 0080h 到0030h处避开00-30的敏感地址
loop:
mov p0,#0ffh 关闭所有灯
clr p0.0 点亮灯p0.0
lcall delay 延时一段时间?
clr p0.1 点亮灯p0.1
lcall delay
clr p0.2 点亮灯p0.2
lcall delay
clr p0.3 点亮灯p0.3
lcall delay
clr p0.4 点亮灯p0.4
lcall delay
clr p0.5 点亮灯p0.5
lcall delay
clr p0.6 点亮灯p0.6
lcall delay
clr p0.7 点亮灯p0.7
lcall delay
AJMP LOOP 到最开始loop处重新运行
delay: mov r5,#20 延时。
d1: mov r6,#40
d2: mov r7,#248
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
#include<pic.h>//流水灯实验#define uchar unsigned char//宏定义
#define uint unsigned int
__CONFIG(0x3B31)//设置配置位
void delay(uint x)//延迟函数x表示毫秒
{
uint a,b
for(a=xa>0a--)
for(b=110b>0b--)//嵌套
}
void main()
{
uchar i//为下面的for循环作一个变量i
TRISD=0x00//设置全为输出状态
while(1)//因为是流水灯所以是一个死循环,所以要在while里不要加分号
{
PORTD=0X01//先点亮第一个二极管
for(i=8i>0i--)//因为有8个灯作流水灯
{
delay(500)//延迟500ms
PORTD=PORTD<<1//让RD口左移动一位后再付给回PORTD
}
}
}
/*软件仿真功能:打开菜单Debugger--Select Tool--MPLAB SIM进行设置断点再单步仿真
可以打开菜单View--Special Function Registers看PIC全部的I/O口
也可以打开菜单View--Watch看I/O口和变量
也可以打开菜单的Debugger--Setting设置晶振的频率后打开Debugger--Stopwatch看每个指今的具体时间和
流水灯的时间,先按Zero清0再单步*/
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)