打印
[Atmel]

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

[复制链接]
893|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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截图:



程序:
/*
* GccApplication2.c
*
* Created: 2014-10-24 20:29:33
*  Author: Administrator
*/

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

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

const uint8_t SEG_CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7F,0x6F};
       
void Show_Count_ON_DSY()
{
        PORTD = 0xFF;
        PORTC = SEG_CODE[TCNT0/10];
        PORTD = 0xFE;
        _delay_ms(2);
        PORTD = 0xFF;
        PORTC = SEG_CODE[TCNT0 %10];
        PORTD = 0xFD;
        _delay_ms(2);
       
}       

int main(void)
{
    DDRC = 0xFF;PORTD = 0xFF;
        DDRD = 0xFF;PORTD = 0xFF;
        DDRB = 0x00;PORTB = 0xFF;
       
        TCCR0 = 0x06;
        TCNT0 = 0x00;
       
       
       
        while(1)
    {
        //TODO:: Please write your application code
                if(Clear_Key_DOWN()) TCNT0 = 0;
                if(TCNT0 >= 100) TCNT0 = 0;
                Show_Count_ON_DSY();
    }
}


相关帖子

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

本版积分规则

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

2398

主题

6950

帖子

67

粉丝