[Atmel] 用AtmelStudio6.2跑mega16例程(39)T0记数

[复制链接]
 楼主| ddllxxrr 发表于 2014-10-24 21:00 | 显示全部楼层 |阅读模式
以前使用的T/C0 T/C1 T/C2均工作于定时方式,本例中T/C0工作于计数方式,其区别在于此前TCNTx的计数时钟由系统分频后提供。所提供的时钟具有固定频率(周期),本例中T/C0工作于计数方式,TCNT0的计数时钟不再由系统时钟分频繁提供,而是由来自T0(PB0)引脚的外部信号提供,主程序中TCCR0= 0x06,该行代码将TCCR0的低3位(CS02,CS01,CS00)设为110,它使得TCNT0的计数时钟来自于T0(PB0)引脚,且为下降沿触发.

Protus截图:


Studio截图:



程序:
  1. /*
  2. * GccApplication2.c
  3. *
  4. * Created: 2014-10-24 20:29:33
  5. *  Author: Administrator
  6. */

  7. #define F_CPU 4000000UL
  8. #include <avr/io.h>
  9. #include <util/delay.h>
  10. #include <stdint.h>

  11. #define Clear_Key_DOWN() ((PINB &0x40) == 0x00)

  12. const uint8_t SEG_CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7F,0x6F};
  13.        
  14. void Show_Count_ON_DSY()
  15. {
  16.         PORTD = 0xFF;
  17.         PORTC = SEG_CODE[TCNT0/10];
  18.         PORTD = 0xFE;
  19.         _delay_ms(2);
  20.         PORTD = 0xFF;
  21.         PORTC = SEG_CODE[TCNT0 %10];
  22.         PORTD = 0xFD;
  23.         _delay_ms(2);
  24.        
  25. }       

  26. int main(void)
  27. {
  28.     DDRC = 0xFF;PORTD = 0xFF;
  29.         DDRD = 0xFF;PORTD = 0xFF;
  30.         DDRB = 0x00;PORTB = 0xFF;
  31.        
  32.         TCCR0 = 0x06;
  33.         TCNT0 = 0x00;
  34.        
  35.        
  36.        
  37.         while(1)
  38.     {
  39.         //TODO:: Please write your application code
  40.                 if(Clear_Key_DOWN()) TCNT0 = 0;
  41.                 if(TCNT0 >= 100) TCNT0 = 0;
  42.                 Show_Count_ON_DSY();
  43.     }
  44. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部