51单片机的晶振频率是6MHZ,由p1.1引脚输出1000HZ方波,求程序

如题所述

/*1.用定时器T1产生一个1000Hz的方波,由p1.1引脚输出,fosc=6MHz*/
#include<reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit F=P1^1;

void timer1_init()
{
TMOD=0x10;//将定时器1设置为工作方式1
TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/1000
//(1/1000)s/(1/6000000)s=6000
TL1=(65536-6000)%256;//fsoc=6000000,所以装入16位定时器中值为65536-6000
EA=1;
ET1=1;
TR1=1;
}

void main()
{
timer1_init();
while(1);
}

void timer1() interrupt 3
{
TH1=(65536-6000)/256;//每次进入中断,重装初值
TL1=(65536-6000)%256;
F=~F;//每次进入中断P1.1口取反
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-21
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
ACALL INIT_INT0
AJMP $

INIT_INT0:
MOV TMOD,#01H
MOV TH0,#0FFH
MOV TL0,#06H
SETB EA
SETB ET0
SETB TR0
RET

T0INT:
MOV TH0,#0FFH
MOV TL0,#06H
CPL P1.1
RETI

END

#include <REG51.H>
sbit P1_1= P1^1;

void init_int0()
{
TMOD=0x01;
TH0=(65536-250)/256;
TL0=(65536-250)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init_int0();
while(1);
}

void t0int() interrupt 1
{
TH0=(65536-250)/256;
TL0=(65536-250)%256;
P1_1=~P1_1;
}本回答被提问者和网友采纳
相似回答