LED1亮,其余灭->LED2亮,其余灭……,如此循环5次后,
进行全灭->全亮闪烁,时间间隔为500ms用p0口控制
下列程序已经测试通过
----------------------
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
MAIN:
SETB TR0 T0定时方式0
MOV SP, #60H
MOV IE, #82H
MOV B, #61 定时500ms,500 000 / 8192 = 61
-----------------------
MOV A, #127
MOV R1, #40
LP0:MOV P0, A
JBC F0, $ + 5
SJMP $ - 3
RRA
DJNZ R1, LP0
-----------------------
CLR A
LP1:MOV P0, A
JBC F0, $ + 5
SJMP $ - 3
CPL A
LJMP LP1
-----------------------
T0_INT: 自动重新装入0
DJNZ B, T0_END
MOV B, #61
SETB F0
T0_END:
RETI
-----------------------
END
这么简单的要求,不用大动干戈。看看下面的程序,是不是最简单:
ORG 0000H
SETB TR0 启动T0
MOV R2, #250 定时计数初值
LOOP:
MOV TH0, #(8192 - 8000) / 32 定时8ms
MOV TL0, #(8192 - 8000) MOD 32
JNB TF0, $ 等待8ms
CLR TF0
DJNZ R2, LOOP 每隔8ms,R2减一次一
CPL P1.0 R2为0则LED亮灭转换
LJMP 0000H
END
本程序,已经实验成功。
我来试试吧,用汇编语言编写:ORG 0
JMP MAIN
MAIN:SETB P1.0
ACALL DELAY
CLR P1.0
ACALL DELAY
JMP MAIN
DELAY:MOV R1,#10 500ms的延时子程序
MOV TMOD,#1 定时器0方式1
AGAIN:MOV TL0,#LOW(65536-50000)装载计数初值的低位
MOV TH0,#HIGH(65536-50000) 装载计数初值的高位
SETB TR0 启动
LOOP1:JBC TF0,LOOP2查询并清除溢出位
JMP LOOP1
LOOP2:DJNZ R1,AGAIN
CLR TR0
RET
END
刚才我拿51的测试板编译了一下,下载后可以正常运行,你直接拷贝应该就能用,嘻嘻
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)