设单片机的晶振频率为6MHz,选用T1以方式0产生周期为1ms的方波,并由P1.0输出
计算计数初值
(
2
13
−
X
)
∗
(
12
6
∗
1
0
6
)
=
500
∗
1
0
−
6
(2^{13}-X)*(\frac{12}{6*10^{6}})=500*10^{-6}
(213−X)∗(6∗10612)=500∗10−6
X
=
7942
=
F
806
H
X=7942=F806H
X=7942=F806H
1.查询方式
汇编:
ORG 0000H
AJMP MAIN
ORG 001BH
MAIN:
MOV TMOD,#00H 设置T1工作方式
MOV TH1,#0F8H
MOV TL1,#06H
MIV IE,#00H 禁止中断
SETB TR1 #启动定时
LOOP:
JBC TF1,LOOP1 #查询计数溢出,并对溢出标志位清零
AJMP LOOP
LOOP1:
MOV TH1,#0F8H 重新设置技术初值
MOV TL1,#06H
CPL P1.0
AJMP LOOP
END
C51:
#include<reg51.h>
sbit P1_0=P1^0; #用P1_0来表示P1.0
void main(void)
{
TMOD = 0x00;
TH1 = 0xf8;
TL1 = 0x06;
TF1 = 0;
TR1 = 1;
while(1){
TH1 = 0xf8;
TL1 = 0x06;
P1_0=!P1_0;
TF1 = 0;
}
}
2.中断方式
C51:
#include<reg51.h>
sbit P1_0=P1^0;
main()
{
TMOD = 0X00H;
TH1 = 0XF8H;
TL1 = 0X06H;
IE = 0X88H;
TR1 = 1;
while(1);
}
void timer1() interrupt 3
{
TH1 = 0XF8H;
TL1 = 0X06H;
P1_0=!P1_0;
}
汇编:
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP TIN1P
ORG 0100H
MAIN:
MOV TMOD,#00H
MOV TH1,#0F8H
MOV TL1,#06H
MOV IE,#88H
SETB TR1
SJMP $
TIN1P:
MOV TH1,#0F8H
MOV TL1,#06H
CPL P1.0
RETI
END