实验6.1 采用定时器与计数器相结合的方法使P1.7所接的发光二极管亮1秒、灭1秒,周而复始。
中断方式 汇编代码:
ORG 0000H
LJMP START
ORG 000BH
JMP TIMER0
ORG 001BH
JMP TIMER1
ORG 0040H
START:
MOV TMOD,#61H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0F6H
MOV TL1,#0F6H
SETB P1.0
SETB P1.1
SETB EA
SETB ET0
SETB ET1
SETB TR0
SETB TR1
SJMP $
TIMER0:
CPL P1.0
MOV TH0,#03CH
MOV TL0,#0B0H
RETI
TIMER1:
CPL P1.7
RETI
END
查询方式 汇编代码: 查询方式下,TF0,TF1标志位一定要手动清零
ORG 0000H
SJMP START
ORG 0040H
START:
MOV TMOD,#61H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0F6H
MOV TL1,#0F6H
SETB P1.0
SETB P1.1
SETB TR0
SETB TR1
F:
JNB TF0,$
CLR TF0
CPL P1.0
MOV TH0,#03CH
MOV TL0,#0B0H
JNB TF1,F
CLR TF1
CPL P1.7
SJMP F
END
中断方式 C语言:
#include<reg51.h>
timer0()interrupt 1{
TH0=0x3c;
TL0=0xb0;
P10=~P10;
}
timer1()interrupt 3{
P17=~P17;
}
main(){
TMOD=0x61;
TH0=0x3c;
TL0=0xb0;
TH1=0xf6;
TL1=0xf6;
P10=0;
P11=1;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1){
}
}
查询方式 C语言:
#include<reg51.h>
main(){
TMOD=0x61;
TH0=0x3c;
TL0=0xb0;
TH1=0xf6;
TL1=0xf6;
P10=0;
P11=1;
TR0=1;
TR1=1;
while(1){
while(!TF0){
}
TF0=0;
TH0=0x3c;
TL0=0xb0;
P10=~P10;
if(!TF1){
continue;
}
TF1=0;
P17=~P17;
}
}