ATMEGA8计数器

发布者:数字奇迹最新更新时间:2016-09-14 来源: eefocus关键字:ATMEGA8  计数器 手机看文章 扫描二维码
随时随地手机看文章
//可测1MHZ的频率

#include
#include
#define uchar unsigned char
#define uint unsigned int
/***********对应的几个数码管显示*****************/
const uchar table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned long  load=0;
uchar data[4]={0,0,0,0};//
uint cnt=0;//定时中的中断次数
uchar temp=0;//超过65536时这个数需要
//
void display(uchar *p)
{
 uchar i,j,sel=0x01;
 for(j=0;j<2;j++)
  for(i=0;i<4;i++)
  {PORTB=~table[p[i]];
   PORTC=sel;
   Delay_us(2000);
   sel=sel<<1;
   }
}
void process(unsigned long t,uchar *p)//数据处理
{unsigned long i=t; 
 if(i<=9999)
  PORTD=PORTD|0X03;
  else if((i<=99999)&&(i>9999))
  { 
  i=i/100;
  PORTD=PORTD&0XFE;
  PORTD=PORTD|0X02;
  }
  else  if(i>99999)
 {
  PORTD=PORTD|0X01;
  PORTD=PORTD&0XFD;
  i=i/1000;
  }
  p[3]=i/1000;
 i=i%1000;
 p[2]=i/100;
 i=i%100;
 p[1]=i/10;
 i=i%10;
 p[0]=i;
 }
void int_io(void)
{DDRB=DDRC=0XFF;
 DDRD=0XDF;
 PORTC=PORTB=0XFF;
 PORTD=0XFF;
 SREG=0X80;//全局使能
 TCCR1B=0X06;//计数方式:T1下降沿
 TCNT1H=0X00;//计数器赋初值
 TCNT1L=0X00;
  }
void main(void )
{
 int_io();
 PORTB=0X00;
 PORTC=0XFF;
 Delay_ms(500);
 PORTB=0XFF;
 /****************************/
 TCNT0=0X06;//定时计数初使值为6
 TCCR0=0X04;//T/C0工作在定时方式,系统时钟256分频
 TIMSK=0X01;//定时局部使能T/C0
 while(1)
 {
  process(load,data);
  display(data);
  if(TIFR&0X04)//用标志位来进行 >65536时的事件
   { // if(TIFR&0X20)
       temp++;
    TIFR=TIFR&0X04;
 }
  }
 }
 /************************/
 ///////////////以下是T0的定时中断
#pragma interrupt_handler time0:10
void time0(void)

  uint tep=0;//读取高字TCNT1L的值
   cnt++;
  if(125==cnt)//125*256us,且此处用于调节精度;
    {
  cnt=0;//
  /********以下为读取计数器的值***********/
  load=0;
  load=TCNT1L;//读取计数器低位的值
  tep=TCNT1H*256;//读取计数器高位的值并处理
  load=tep+load;//高位加低位
  load=load+65536*temp;//处理完的数
  /***********************/
  TCNT1H=0X00;//重新赋初值
     TCNT1L=0X00;
  temp=0;
 }
}
//TO用于定时,

关键字:ATMEGA8  计数器 引用地址:ATMEGA8计数器

上一篇:外部异步时钟的操作
下一篇:AVR单片机熔丝位设置技巧

推荐阅读最新更新时间:2024-03-16 15:09

PIC16F877A开发板 数码管计数器实验
//*******************电子园PIC16F877A开发板 数码管计数器实验***************** // //CKP=0; 空闲为低电平 //CKP=1; 空闲为高电平 //STAT_CKE=0; SDO后沿采样 //STAT_CKE=1; SDO前沿采样 // //STAT_SMP=0; //在数据输出时间的中间采样输入数据 //STAT_SMP=1; //在数据输出时间的末尾采样输入数据 // //RC3/SCK 接74595 移位时钟11脚 //RC5/SDO 接74595 数据输入14脚 //RC4/SDI 接74595 锁存时钟12脚 // //TMR0用作定时器时,定时器时钟
[单片机]
MCS-51单片机定时器/计数器基础详述
MCS-51子系列单片机有2个定时器/计数器,即定时器/计数器0和1,52子系列单片机(8032/8052)除了有上述2个定时器/计数器外,还有一个定时器/计数器2,后者的功能比前两者强。 1 定时器/计数器0和1 在专用寄存器TMOD(定时器方式)中,有一个控制位(C/T),分别用于控制定时器/计数器0和1是工作在定时器方式还是计数器方式。 1. 输入信号基本要求:24个振荡周期,即两个机器周期; 2. 作为定时器时,计数速率是 振荡频率/12; 3. 由定时器/计数器模式控制寄存器设置工作方式。 2 定时器/计数器2(自己阅读) 定时器/计数器2是一个具有16位自动重装载或捕获能力的定时器/计数器。专用寄存器
[单片机]
MCS-51单片机定时器/<font color='red'>计数器</font>基础详述
10MHz频率计数器(续)
10MHz频率计数器(续)
[电源管理]
10MHz频率<font color='red'>计数器</font>(续)
ABB机器人IRB1410零点计数器更新方法教程
同步标记(ABB IRB1410) 下图所示:irb 1410的校准范围位置。 更新转数计数器 简介: 本节介绍如何对每根操纵器轴执行粗略校准,即使用FlexPendant更新每根轴的转数计数器值。 步骤1:手动将操纵器运转至同步位置 按本步骤手动将机械臂运行到同步位置。 轴4和轴6的正确校准位置 当操纵机械臂至同步位置时,应确保下述机械臂的轴4和轴6正确定位,这一点极为重要。否则,这些轴可能会按错误的顺序进行校准,从而导致机械臂校准错误。 确保这些轴按照正确的校准值而不仅仅是校准标记进行定位。在位于下臂上底座或框架法兰盘下的标签上可找到
[机器人]
51单片机的简介——定时器、计数器
8051有两个16位的定时器/计数器T0、T1,8052还有第三个定时器/计数器T2,通过内部编程都可以设定为内部定时器和外部计数器。 1、方式寄存器TMOD 特殊功能寄存器TMOD是TO、T1的工作方式寄存器,其格式如下: TMOD低四位为T0方式字段,高四位为T1方式字段。复位时TMOD的所有位置0。 (1)工作方式选择位M1、M0 定时器/计数器有四种工作方式,它们由M1、M0的取值决定,对应关系如下图: (2) 方式选择位C/T C/T=0为定时器方式,以fosc(晶振频率)的12分频作为计数信号,即每个机器周期定时器加1。 C/T
[单片机]
C51单片机的定时器计数器怎么用?
方法有很多的,给你一个,你可以调试一下,你可以通过不同的晶振去计算定时器初值,如果你懂定时器这部分很好调通的 #include sbit p1_0=P1^0; int i; //全局变量 void timing(void) //晶振为3.6864M { TMOD|=0x01; //定时器T0,工作方式1 TH0=0xC3; TL0=0xC7; //这两个寄存器存的是计数器的计数开始的值,这两个值累加至溢出后正好是50ms ET0=1; //使T0中断可以溢出 EA=1; //开启总中断 TF0=0; //溢出位清零 TR0=1; //开启T0 } /********定时中断
[单片机]
51单片机定时器的应用
interrupt中断的关键字,n是中断号提供中断程序的入口地址。 0-INT0 1-T0 2-INT1 3-T1 4-串行中断 5-T2 直接访问寄存器和端口 定义 sfr P0 0x80 sfr P1 0x81 sfr ADCON; 0xDE sbit EA 0x9F 操作 ADCON = 0x08 ; P1 = 0xFF ; io_status = P0 ; EA = 1 ; 在使用了interrupt 1 关键字之后,会自动生成中断向量 在 IS
[单片机]
ATmega8535L跑马灯程序(ICC编译)
ATmega8535L跑马灯程序 //*********************ICCAVR V6.30编译*******************// #include io8535v.h //头文件,AT90S8535单片机的寄存器定义 #define uchar unsigned char //数据类型说明 #define uint unsigned int //数据类型说明 void DelayMs(uint i) //Ms级延时函数,参数i:延时时间 {uint j; for(;i!=0;i--) {for(j=8000;j!=0;j--) ;} } void Horse(uchar
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved