(1)编制从上往下流水灯程序,
这个电路,很有特点。
按照电路的要求,流水灯程序如下,已经经过验证:
ORG 0000H
LJMP MAIN
MAIN:
MOV A, #01H
M_LOOP:
XRL A, #00110011B
MOV P3, A
XRL A, #00110011B
RL A
CALL DL_200ms
SJMP M_LOOP
;--------------------
DL_200ms:
MOV R6, #200
DJNZ R7, $
DJNZ R7, $
DJNZ R6, $ - 4
RET
;--------------------
END
====
(2)请用定时器T0,工作方式1,通过中断来实现两灯状态切换的1s延时。
ORG 0000H
LJMP MAIN
ORG 000BH
MOV TL0, #(65536 - 50000) MOD 256 ;50ms@12MHz
MOV TH0, #(65536 - 50000) / 256
DJNZ R2, T0_END
MOV R2, #20
SETB F0
T0_END:
RETI
MAIN:
MOV TMOD, #01H ;T0 定时方式1
MOV TL0, #(65536 - 50000) MOD 256 ;50ms@12MHz
MOV TH0, #(65536 - 50000) / 256
SETB TR0 ;启动T0
MOV IE, #82H ;开中断
MOV R2, #20 ;定时一秒
MOV A, #01H
M_LOOP:
JNB F0, $
CLR F0
XRL A, #00110011B
MOV P3, A
XRL A, #00110011B
RL A
SJMP M_LOOP
;--------------------
END
不好意思你要用汇编我没有看到,我只会C
#include
#define uint unsigned int
uint tt, temp;
void main()
{
TMOD=0x01;
TH0=(65535-50000)/256; // 50 mS
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
temp=0x01; tt=0;
while(1)
{ }
}
void Timer0(void) interrupt 1 // 定时器0
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
if(tt==20)
{
tt=0;
temp=temp<<1;
if(temp==0x00) { temp=0x01; }
P3=~temp;
}
}