已知单片机的晶振频率为12MHz

,试利用T0定时在P1.0管脚输出频率为100Hz的方波,在P1.1管脚输出频率为10Hz的方波

 

#include "reg51.h"

#define FOSC 12000000L

#define FREQ1 100

#define FREQ2 10

#define TXXX (65536-FOSC/12 /2/FREQ1)  // FREQ Hz timer calculation method in 12T mode

/* define SFR */

sbit F1_OUT = P1^0;               // f1 Out

sbit F2_OUT = P1^1;               // f2 Out

unsigned char f2_count=0;

/* Timer0 interrupt routine */

void tm0_isr() interrupt 1 using 1

{

    

    F1_OUT = !F1_OUT;

  TL0 += TXXX;                     //reload timer1 low byte

  TH0 = TXXX >> 8;                //reload timer1 high byte

  if(++f2_count==FREQ1/FREQ2) {

   F2_OUT = !F2_OUT;

   f2_count=0;

  }

 

}

//-----------------------------------------------

/* main program */

void main()

{

    TMOD = 0x01;                    //set timer0 as mode1 (16-bit)

    TL0 = TXXX;                     //initial timer0 low byte

    TH0 = TXXX >> 8;                //initial timer0 high byte

  TR0 = 1;                        //timer0 start running

    ET0 = 1;                        //enable timer0 interrupt

    EA = 1;                         //open global interrupt switch

    while (1);                      //loop

}

追问

这完全不对额。。和题目都好像好不对号儿。。。

追答

完全对上的呀,波形仿真都是对的,见前面的图

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-11-13
#include <reg51.h>
#include <stdio.h>
void Initime();
sbit led1=P1^0;
sbit led2=P1^1;
int count=0;
void main(void)
{
Initime();
// Write your code here
while (1)
;
}
void Initime()
{
TMOD=0x01;
TH0=0x0EC;//times 5ms
TL0=0x78;
EA=1;
ET0=1;
TR0=1;
}
void Timer0Interrupt() interrupt 1 using 1
{
TH0=0x0EC;
TL0=0x78;
led1=~led1;
if(count==10)
{led2=~led2;
count=0;}
count++;
}