找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3934|回复: 4
打印 上一主题 下一主题
收起左侧

单片机定时器,延时程序的时间是怎么算的?

[复制链接]
跳转到指定楼层
楼主
ID:262 发表于 2016-3-11 22:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<reg51.h>   //包含51单片机寄存器定义的头文件
sbit u=P3^0;      //将u位定义为P3.0,从该引脚输出矩形脉冲
unsigned char Countor;  //设置全局变量,储存负跳变累计数
/*************************************************
函数功能:延时约30ms (3*100*100=30 000μs =30ms)
*************************************************/
void delay30ms(void)
{
  unsigned char m,n;
  for(m=0;m<100;m++)
    for(n=0;n<100;n++)
           ;
}

/*******************************************
函数功能:主函数
******************************************/        
void main(void)
  {
   unsigned char i;
   EA=1;   //开放总中断
   EX0=1;  //允许使用外中断
   IT0=1;  //选择负跳变来触发外中断
        Countor=0;
   for(i=0;i<100;i++)  //输出100个负跳变
        {
          u=1;
          delay30ms();
          u=0;
          delay30ms();
        }
        while(1)               
       ; //无限循环, 防止程序跑飞
}
/**************************************************************
函数功能:外中断T0的中断服务程序
**************************************************************/
void int0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
  Countor++;
  P1=Countor;

}

延时程序的时间是怎么算的?
倒数第二行"  P1=Countor“有什么作用?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩

相关帖子

回复

使用道具 举报

沙发
ID:262 发表于 2016-3-11 22:17 | 只看该作者

"  P1=Countor“大概是用发光二极管显示Countor二进制的值。
回复

使用道具 举报

板凳
ID:262 发表于 2016-3-11 22:18 | 只看该作者

把Countor的值赋给P1,还有你的程序有问题,主函数最后是while(1)结尾,这样样程序在空跑。也就是相当于在等待。程序只执行一次后面就是在等待。
回复

使用道具 举报

地板
ID:262 发表于 2016-3-11 22:18 | 只看该作者

赋值,使P1输出
回复

使用道具 举报

5#
ID:262 发表于 2016-3-11 22:18 | 只看该作者
这个看你所用单片机的晶振频率以及单片机型号  例如51系列单片机  其机器频率等于晶振频率12分频 即除以12,用12MHz的晶振时机器频率一MHz  处理一条指令的时间是1us ,用C语言的话时间不太精确,大致一条指令1Us  10^6分之一秒
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表