51单片机编程题,急2
发布网友
发布时间:2023-11-24 20:05
我来回答
共2个回答
热心网友
时间:2024-11-08 08:59
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXT0
ORG 0013H
LJMP EXT1
ORG 001BH
LJMP T1ISR
ORG 0030H
MAIN:
MOV TMOD,#10H
MOV TH1,#HIGH(65536-50000)
MOV TL1,#LOW(65536-50000)
SETB TR1
SETB ET1
SETB EA
SETB EX0
SETB EX1
SETB IT0
SETB IT1
SETB PX1
CLR PX0
MOV A,#0FEH
MOV R2,#0
MOV R3,#20
MOV B,#0
SJMP $
EXT0:
MOV R2,#1
RETI
EXT1:
MOV R2,#2
RETI
T1ISR:
CLR TR0
MOV TH1,#HIGH(65536-50000)
MOV TL1,#LOW(65536-50000)
SETB TR1
DJNZ R2,T1E
MOV R2,#20
CJNE R2,#0,T101
PUSH ACC
MOV A,B
CPL A
MOV P0,A
MOV B,A
POP ACC
RETI
T101:
CJNE R2,#1,T102
MOV P0,A
RL A
RETI
T102:
MOV P0,A
RR A
T1E:
RETI
热心网友
时间:2024-11-08 08:59
主程序这样写:
unsigned char flag=0;
void main(void)
{
EX0=1;EX1=1;IT0=1;IT1=1;
EA=1;IP=0X04;
while(1)
{
if(flag==0)
{P0=0;delay_ms(500);P0=255;delay_ms(500);}
if(flag==1)
{
for(i=0;i<8;i++){P0=1<<i;delay_ms(500);}
}
if(flag==2)
{
for(i=0;i<8;i++){P0=0x80>>i;delay_ms(500);}
}
}
}
中断程序中只需改变flag的值即可