单片机程序:P1口接8盏LED灯,8盏LED灯循环点亮,间隔时间为50ms,用延时子程序实现

循环点用左指令实现,间隔时间用延时子程序实现。
不要C语言的,汇编的,就是mov那种的

8盏LED灯循环点亮,间隔时间为50ms,你能分辨不?
还是给你改为间隔时间为1s,用定时器延时子程序实现
org 0000h
jmp start
org 0030h
start:
mov A,#0FEH;
mov R2,#8;
LOOP1: mov p1,A; 左边4个LED每隔1S亮1个。从P1.0到P1.7。
call delay1s; 调用定时1s程序
RL A;
djnz R2,LOOP1
jmp start

delay1s:
mov r7,#20
lpr7: call delay50ms;
djnz r7,lpr7
ret

delay50ms:
mov TMOD,#01H
mov TH0,#(65536-50000)/256;
mov TL0,#(65536-50000) mod 256;
setb TR0;
jnb TF0,$
clr TF0;
ret

jmp $
end追问

不用改的,就编写个程序就好了。

追答

org 0000h
jmp start
org 0030h
start:
mov A,#0FEH;
mov R2,#8;
LOOP1: mov p1,A; 左边4个LED每隔50ms亮1个。从P1.0到P1.7。
call delay50ms; 调用定时50ms程序
RL A;
djnz R2,LOOP1
jmp start

delay50ms:
mov TMOD,#01H
mov TH0,#(65536-50000)/256;
mov TL0,#(65536-50000) mod 256;
setb TR0;
jnb TF0,$
clr TF0;
ret

jmp $
end

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-06
void delay_ms(unsigned int ms)//12M晶振
{ unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}

void main()
{
unsigned char led;
while(1)
{
for(led=0x01;led!=0;led<<=1)
{
P1=led;// 如果是低电平点亮则改为P1=~led;
delay_ms(50);
}
}
}追问

不要c语言的,汇编的会么

第2个回答  2011-11-06
#include<reg52.h>
#include <intrins.h>//数学运算
#define uint unsigned int
#define uchar unsigned char
uchar temp;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{

temp=0xfe;
while(1)
{
P1=temp;
delay(50);//延时时间大约50ms
temp=_crol_(temp,1);//左移运算

}

}追问

不要C语言的,要汇编的

第3个回答  2011-11-06
是8051内核的单片机吗?如果是则:
mov A,#1
MOV P1,A
RL A
LCALL TIME
TIME:
1:MOV R0 #数字
DEL R0
CJNE R0,#00H,1
RET追问

是51的,但是我keil uvision模拟了下,语法错误很多呀,开头和结尾都加上了的

第4个回答  2018-03-20
我认为你在吹牛逼
相似回答