PWM:脉冲宽度调制,图中T为脉冲周期,t为高电平时间,t与T的比值t/T称为占空比,脉宽调制指的是调整t的大小,即改变脉冲的占空比
,占空比值越大,输出的电压越高。改变占空比就改变输出的电压,常用于实现D/A,调节电压或电流,改变电动机的转速等。
快速PWM模式:它的计数方式是TCNT0由0开始计数到255式,计数加1返回到0,然后继续加1计数,相对于相位PWM修正模式(由0计数到255,再从255计数到0),只有一个斜坡,因此PWM输出频率高。在快速PWM模式下,计数器的最大值决定了PWM的频率,而比较寄存器OCR0决定了占空比的大小。T/C0是8位计数器, 输出PWM的频率=系统时钟频率/(分频系数*255) 。
PWM产生过程:定时器启动后,当TNCT0和OCR0的值相等时,输出引脚OC0(PB3)清0,当TNCT0到255时OC0置位,在程序运行过程中改变OCR0中的数值,就改变了OC0输出的占空比。
//函数功能:控制PB3引脚上的发光二极管由亮到灭,再由灭到亮 (代码来自轻松玩转AVR单片机c语言cd)
#include
#define uchar unsigned char
#define uint unsigned int
unsigned int count;
/*********以下是延时函数*********/
void Delay_ms(uint xms)
{
int i,j;
for(i=0;i{ for(j=0;j<1140;j++) ; }
}
/********以下是端口初始化函数********/
void port_init()
{
DDRB|=(1<PORTB&=(0<}
/********定时器0初始化********/
void timer0_init()
{
TCCR0=(1<// T/C0工作于快速PWM模式,不分频
//比较匹配时,OC0置位,记数到0XFF时,清零OC0
OCR0=0; //比较匹配寄存器初值,
SREG=0x80; //使能全局中断
}
/*********以下是主函数*********/
void main(void)
{
port_init();
timer0_init();
while(1)
{
for(count=0;count<256;count++) //OCR=0时,LED最亮,然后逐渐变暗
{
OCR0=count; //比较匹配寄存器赋值
Delay_ms(20); //延时一段时间,以观察效果
}
Delay_ms(3000); // LED最暗时,延时一段时间
for(count=255;count>0;count--) //OCR=255时,LED最暗,然后逐渐变亮
{
OCR0= count;
Delay_ms(20);
}
Delay_ms(3000); //LED最亮时,延时一段时间
}
}
关键字:avr 定时器 计数器0 PWM输出
引用地址:
2. avr定时器/计数器0 --TC0 --快速PWM输出
推荐阅读最新更新时间:2024-03-16 15:47
AVR单片机的定义以及优缺点汇总
简介:什么是AVR单片机?AVR单片机有什么优点?为什么要选择AVR单片机?下面一起来学习一下: 什么是AVR单片机?AVR单片机有什么优点?为什么要选择AVR单片机? AVR单片机是ATMEL公司研制开发的一种新型单片机,它与51单片机、PIC单片机相比具有一系列的优点: 1:在相同的系统时钟下AVR运行速度最快; 2: 芯片内部的Flsah、EEPROM、SRAM容量较大; 3:所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP); 4:多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作; 5:每个IO口都可以以推换驱动的方式输出高、低电平,
[单片机]
STM32定时器的预装寄存器及影子寄存器话题
经常有人问起预装寄存器和影子寄存器的话题,其实STM32相关系列的手册里有介绍,有文档做介绍,这里借花献佛地一起分享下。 在谈预装寄存器及影子寄存器的差别前,不妨先对STM32定时器的时基单元做个基本了解。STM32各系列的定时器结构和框架基本是一样的,时基单元也一样。 下面时基单元是以STM32F3系列为参考。 时基单元中的TIMx_PSC、 TIM_ARR两个寄存器加上捕捉比较模块中TIMX_CCR寄存器,它们都可以动态修改。不过他们的修改和生效可能不在同一个时刻,这里便引入了预装寄存器及影子寄存器的概念。要记住一点,真正在TIMER模块中起作用的是影子寄存器。 1、用户程序对TIMx_PSC寄存器值的修改或
[单片机]
基于AVR USB接口的温度测量系统下位机设计
0引言 近年来,随着集成电路以及芯片制造技术的不断发展,不同的USB通信芯片不断涌现,目前典型的USB通信芯片有CH375、PDIUSBD12等,这些器件的特点是功能较为强大,但价格较高,很难在中低价位的产品开发中使用。而AVR USB技术则是利用高性能的8位RISC架构的AVR单片机的IO口来模拟USB的通信端口,并由软件来实现USB通信协议,以将普通的AVR单片机模拟成一个USB低速设备,从而实现AVR单片机与计算机之间的通信和控制。尽管这种方式只能实现低速传输,但对常用数据量不是十分巨大的系统而言,它已经足够使用了,且其速度远远高于传统的串口传输速度,因而在产品开发中具有广阔的应用前景。本文便是利用AVR USB技术来实现
[单片机]
探索STC12C5A60S2定时器
STC12C5A60S2单片机集成了共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时器T0和T1,没有定时器2,但有独立波特率发生器 做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器; 1. 基本特性 STC12C5A60S2单片机集成了两个16位定时/计数器。 1)寄存器 1.1)TMOD 定时器工作方式控制寄存器,包括13位寄存器、16位寄存器、8位寄存器等; 1.2)TCON 定时器控制寄存器,主要包括定时器启动控制位等; 1.3)AUXR 辅助寄存器,用以设置分频;默认12分频 1.4)TH0/1:定时器高8位寄存器 1.5)TL0/1:定时器
[单片机]
单片机定时器工作模式1
通过前面的定时器理论了解到,使用一个定时器,要经过下面四步: 1、设置定时器/计数器的工作模式TMOD(常用的是模式1:TMOD=0x01); 2、装入预置数到THx和TLx中(THx=TLx=MAX(8192/65536/256)-计数次数); 3、如果工作在中断方式,则需要开定时器/计数器的中断TCON中的标志位:TF0/TF1=0/1; 4、启动定时器/计数器:TR0/TR1=1; //1、设置定时器/计数器的工作模式TMOD(常用的是模式1:TMOD=0x01); //2、装入预置数到THx和TLx中(THx=TLx=MAX(8192/65536/256)-计数次数); //3、如果工作在中断方式,则需要开定时器
[单片机]
AVR IO输出之数码管扫描程序
系统功能 使用AVR扫描四个数码管,动态扫描,动态显示,左扫,右扫,来回扫。。。 硬件设计 AVR主控电路原理图 数码管动态扫描电路原理图 软件设计 下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解! //目标系统: 基于AVR单片机 //应用软件: ICC AVR /*01010101010101010101010101010101010101010101010101010101010101010101 ---------------------------------------------------------------------- 实验内容: 动态的循环显示“0-9
[单片机]
AVR系列之ADC转换
整理一下关于AVR的ADC转换功能吧 AVR中的数模转换器是一个10位的逐次逼近型ADC 提供8路单端输入通道 单端电压以0V为基准 同时具有7路差分输入通道 这七路差分通道共享一个通用负端(ADC) 输入电压范围为0~VCC 它的转化时间为65~260uS 下面程序的现象为 串口发送命令启动ADC 并将结果通过串口发送到PC 任意字符开启 #include iom16v.h #include macros.h #define uchar unsigned char uchar UcAdcData ; //ADC转换的结果 uchar AdcConCom = 0 ; //ADC 转换完成标志 uchar
[单片机]
STM32学习之路(四)——Sys Tick定时器
SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号:15)。在以前,操作系统还有所有使用了时基的系统,都必须一个硬件定时器来产生需要的 滴答 中断,作为整个系统的时基。滴答中断对操作系统尤其重要。例如,操作系统可以为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统 心跳 的节律。 Cortex-M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的
[单片机]