|

楼主 |
发表于 2014-5-23 22:35:39
|
显示全部楼层
单片机延时控制程序
本帖最后由 无烟男人 于 2014-5-23 22:41 编辑
补发一个单片机延时控制程序留给以后需要的童鞋,, C语言文盲 只能用最底层的汇编来写的, 大家就不要笑了哈
ORG 0 ; <延时程序> 低电平吸收电流控制方式 O开 1关
MOV P1,#0FFH ; 单片机初始 设置 P1 端口送高电平
MOV P3,#0FFH ; 单片机初始 设置 P3 端口高电平
MOV A,#015 ; 设定计数循环次数
AE: CPL P1.7 ;初始延时闪灯程序, P1.2端口置0 开灯
CALL YS20MS ; 亮灯延时 20毫秒
CPL P1.7 ; P1.2端口置1 关灯
CALL YS20MS ; 关灯延时 20毫秒
CPL P1.7 ; P1.2端口置0 开灯
CALL YS20MS ; 亮灯延时 20毫秒
CPL P1.7 ; P1.2端口置1 关灯
CALL YS150MS ; 关灯延时 150毫秒
DEC A ; 寄存器A 内数值减1运算
JNZ AE ; 寄存器A 内数值不等于O时跳转 AE程序循环,等于0时顺序运行下一条
MOV A,#06 ;延时中段闪灯程序, 设定计数循环次数
BE: CPL p1.7 ; P1.4端口置0开灯
CPL P1.6 ; P1.2端口置0开灯
CALL YS50MS ; 延时 50毫秒
CALL YS50MS ; 延时 50毫秒
CPL P1.7 ; P1.4端口置0关灯
CPL P1.6 ; P1.2端口置1关灯
CALL YS50MS ;
CALL YS50MS ; 延时100毫秒
DEC A ; 减一运算
JNZ BE ; 不为零 跳转BE循环
CPL P1.2
MOV A,#03 ;延时后段闪灯程序 设定循环次数
CE: CPL P1.6 ; P1.4端口置0 开灯
CALL YS50MS
CALL YS50MS ; 延时100毫秒
CPL P1.6 ; P1.4端口置1 关灯
CALL YS50MS ;
CALL YS50MS ; 延时100毫秒
DEC A ; 减一运算
JNZ CE ; 不为零跳转 CE循环
MOV P1,#0FFH ;控制程序 P1端口置1
MOV P1,#0ABH ; P1 端口 开启P1.4指示灯。 开启P1.7 继电器
MOV P3,#0FFH ;单片机运行指示程序 P3端口置1
EE: CPL P3.7 ; P3.7端口开灯
CALL YS50MS ; 延时50毫秒
CPL P3.7 ; P3.7端口关灯
CALL YS50MS ; 延时50毫秒
CPL P3.7 ; P3.7端口开灯
CALL YS50MS ; 延时50毫秒
CPL P3.7 ; P3.7端口关灯
CALL YS150MS ; 延时150毫秒
MOV P3,#0FFH ; P3端口置1
MOV P1,#0ABH ; 保护P1端口继电器闭合
SJMP EE ; 强制跳转EE循环
SJMP $ ; 原地踏步
YS20MS: ;20毫秒延时子程序 12MHz
PUSH 30H
PUSH 31H
MOV 30H,#173
MOV 31H,#27
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
YS50MS: ;50毫秒延时子程序 12MHz
NOP
NOP
NOP
PUSH 30H
PUSH 31H
PUSH 32H
MOV 30H,#2
MOV 31H,#175
MOV 32H,#72
NEXT1:
DJNZ 32H,NEXT1
DJNZ 31H,NEXT1
DJNZ 30H,NEXT1
POP 32H
POP 31H
POP 30H
RET
YS150MS: ;150毫秒延时子程序 12MHz
NOP
NOP
NOP
PUSH 30H
PUSH 31H
PUSH 32H
MOV 30H,#6
MOV 31H,#11
MOV 32H,#232
NEXT2:
DJNZ 32H,NEXT2
DJNZ 31H,NEXT2
DJNZ 30H,NEXT2
POP 32H
POP 31H
POP 30H
RET
END ;程序结束 |
评分
-
4
查看全部评分
-
|