temp = 0xfe;
P1 = temp;
while(1);
}
//-------------------------------------------
void T0_int(void) interrupt 1 //每隔10ms执行一次
{
TH0 = (65536 - 10000) / 256; //定时
TL0 = (65536 - 10000) % 256;
i++;
if(i >= 100) {
i = 0;
if(j0 == 0) temp = _crol_(temp, 1);
if(j0 == 1) temp = _cror_(temp, 1);
P1 = temp;
} }
//-------------------------------------------
void X0_int(void) interrupt 0 using 1
{
unsigned char k;
j0 = ~j0; //改变运动方向
for(k = 200; k > 0; k--); //延时一会再退出,以避免抖动
}
//===========================================================
下面是用汇编语言编写的控制程序,效果与C语言相同。
ORG 0000H
SJMP START
ORG 0003H
SJMP X0_INT
ORG 000BH
SJMP T0_INT
;-------------------------------------------
START:
MOV TMOD, #01H
MOV TH0, #(65536 - 50000) / 256; //定时
MOV TL0, #(65536 - 50000) MOD 256; //定时
SETB TR0
SETB ET0
SETB IT0
SETB EX0
SETB PT0
SETB EA
MOV R3, #20
MOV R2, #7FH
MOV P1, R2
SJMP $
;-------------------------------------------
X0_INT:
CPL F0
JNB P3.2, $ ;等待按键释放
RETI
;-------------------------------------------
T0_INT:
MOV TL0, #(65536 - 50000) MOD 256; //定时
MOV TH0, #(65536 - 50000) / 256; //定时
DJNZ R3, T0_END
MOV R3, #20
MOV A, R2
JNB F0, DDD
RL A
SJMP EEE
DDD:
RR A
EEE:
MOV R2, A
MOV P1, A
T0_END:
RETI
;-------------------------------------------
END
//===========================================================