思路:对于89c51单片机而言,选择单片机定时方式1,即采用16位(TH1、TL1)定时方式,定时0.01s,并设置定时器初值为#0B1D0H。
程序如下:
ORG 0000H
AJMP MAIN
ORG 001B
AJMP SERVE
ORG 0030H
MAIN:MOV TMOD,#10H;设置定时器工作方式1
MOV TH1,#0B1H
MOV TL1,#0D0H;
SETB ET1;
SETB TR1;
SETB EA;开启中断
SJMP $
SERVE:CPL P1.7;
CLR TF1;
MOV TH1,#0B1H
MOV TL1,#0D0H;
RETI;
50Hz就是一周期20ms 。那就可以用定时器10ms中断一次对P1.7求反,这样就能产生50Hz的方波。
#include
sbit pluse=P1^7;
void t0isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
pluse=~pluse;
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}