打印
[疑难问答]

帮忙分析一个程序啊

[复制链接]
1085|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
全才太多|  楼主 | 2011-10-26 19:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<stdio.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

uint n;
uchar a;
unsigned long num,fre;
//float fre;
//float p;
//sbit LED=P1^2;  
//打开定时器一的主要目的是为了设置串行口发送的波特率
//并没有让们发生中断,发送中断标志位TI我们软件置位为0
//即没有发生串行口中断
void init_ck()
{
    SCON=0x50;              // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x21;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打开                        
//    EA=1;                       // 打开总中断
    //ES    = 1;                // 打开串口中断
}

//外部中断初始化函数
void Init_interrupt1()
{
IE1=1;//外部中断0请求源控制位
IT1=1;//外部中断0触发方式控制位,边沿触发方式
// EA=1; //总中断打开
EX1=1;//外部中断0中断允许位

}

void Init_timer0()
{
TMOD=0x21;//确定定时器0的工作方式
// EA=1;//总中断打开
ET0=1;//定时器0中断打开
// TR0=1;//定时器0置位,定时器开始工作  
}

main()
{

        Init_timer0();
     init_ck();
     Init_interrupt1();
     EA=1;//总中断打开   
//    SendStr("程序开始执行\n");
     while(1)
      {
      }

}
//定时器工作于方式1,每触发一次中断有时间浪费,推荐用方式2
void timer0() interrupt 1
{
    TH0=0;//定时器赋初值
    TL0=0;
    n++;
}
void interrupt0() interrupt 2
{
  

        if(a==1)  
         {
      TR0=0;//定时器0关闭
            num=n*65535+TL0+TH0*256;
   
            TI=1;//格式化输出时,TI一定要置1
            printf("num=%ld\n",num);
   fre=1200000000000/(110592*num);
   printf("fre=%ld Hz\n",fre);
            
            a=0;
          }
        else
  {
            TH0=0;//定时器赋初值
            TL0=0;
      TR0=1;//定时器0置位,定时器开始工作   
   a=1;
   n=0;
  }
}
沙发
中国无芯| | 2011-10-27 21:06 | 只看该作者
看不懂啊,程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

95

帖子

1

粉丝