定时器的初值的计算如下:
在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数。若选择12M晶振,则定时器的计数频率为1MHZ。假设定时时间为T,机器周期为T1,即12/晶振频率。X为定时器初值。则 X=2^n-T/T1。方式0,n=13,方式1时,n=16,方式2和方式3,n=8
本题技术初值计算如下:
X=2^16-20*10^(-3)/(12/12*10^6)
=65536-20000=45536=B1E0H
T1INTCOUNT DATA 30H;中断次数累加
ORG 0000H
LJMP START
ORG 001BH
LJMP Timer1Interrupt
START:
MOV SP,#60H
LCALL InitTimer1
MOV T1INTCOUNT,#0;
LOOP:
LJMP LOOP
InitTimer1:
MOV TMOD,#10H;控制字
MOV TH1,#0B1H;初值高位
MOV TL1,#0E0H;初值低位
SETB EA
SETB ET1
SETB TR1
RET
Timer1Interrupt:
PUSH DPH
PUSH DPL
PUSH ACC
MOV TH1,#0B1H
MOV TL1,#0E0H
INC T1INTCOUNT
MOV A,T1INTCOUNT
CJNE A,#5, Timer1Interrupt_EXIT
MOV T1INTCOUNT,#0
CPL P1.7;在P1.7脚上输出周期为0.2秒的
方波(高低
电平各100ms)
Timer1Interrupt_EXIT:
POP ACC
POP DPL
POP DPH
RETI
END
追问我要C语言
麻烦你了
追答#include <reg51.h>
unsigned char t1intcount=0;
void InitTimer1(void)
{
TMOD = 0x10;
TH1 = 0x0B1;
TL1 = 0x0E0;
EA = 1;
ET1 = 1;
TR1 = 1;
}
void main(void)
{
InitTimer1();
//P1^7=1;//初始化为高电平
while(1);
}
void Timer1Interrupt(void) interrupt 3
{
TH1 = 0x0B1;
TL1 = 0x0E0;
t1intcount++;
if(t1intcount==5)//20ms*5=100ms
{
t1intcount=0;
P1^7=~P1^7 //在P1.7脚上输出周期为0.2秒的方波(高低电平各100ms)
}
}
追问谢谢你