Atmega16
于定时器0相关的寄存器有 SREG 全局中断 bit7 I
TIMSK中断屏蔽寄存器 bit 0:1 TOIE0 OCIE0
TOIE0中断溢出允许标志位
OCIE0输出比较允许标志位
TCCR0 timer0控制寄存器 bit0:7
FOC0强制输出比较;仅在非PWM模式有效
WGM00:WGM01 模式控制位;
COM01:COM00 各PWM模式中 具体设置位:
CS00 CS01 CS02 时钟选择位 于定时器2公用
TCNT0 定时器0寄存器八位放置定时器初值
OCR0 定时器0比较匹配寄存器与TCNT0值比较
TIFR 中断标志寄存器
TOV0 定时器0溢出中断标志位
OCF0 比较匹配中断标志位
下边我们编程先从简单的定时器计数开始
程序部分
#include
#include"dis.h" //595驱动显示头文件
unsigned char i,temp;
void inittimer0(void)//定时器0初始化函数
{
TCCR0|=(1<
TCNT0=0X00; //赋值
SREG=0X80; //全局中断打开
TIMSK|=(1<
}
void main(void)
{
DDRC|=0X07; //595控制端口初始化
inittimer0(); //定时器初始化
dis(0); //显示函数
while(1){ }
}
#pragma interrupt_handler timer0_ovf:10
void timer0_ovf(void)///定时器中断
{
i++;
if(i>=4)
{
i=0;
temp++;dis(temp);//数值自加,显示;
}
} [page]
仿真部分
T0输入产生中断程序及仿真
下边源码中更改TCCR0的配置可决定那种跳变沿触发
下降沿触发 TCCT0|=(1<
上升沿触发 TCCT0|=(1<
注意这里的上升沿是T0口处于低电平状态,发生了高电平的跳变,配置不需要改变,上升沿下降沿端口配置是一样的
//通过T0引脚触发中断
#include
void initTimer0(void)
{
TCCR0|=(1<
TCNT0=0XFE; //赋值通过按键将寄存器值填满产生中断
TIMSK|=(1<
SREG|=0X80; //全局中断
PORTD|=(1<
DDRC=0XFF; //中断产生动作端口初始化
}
void main(void)
{
initTimer0();
while(1);
}
#pragma interrupt_handler timer0_ovf:10
void timer0_ovf(void)
{
TCNT0=0XFE; //寄存器重装
PORTC=~PORTC; //动作
}
下边介绍定时器0 的PWM功能,通过上边对定时器的了解下边也会很简单的掌握。选择相位修正模式,WGM00=1;WGM01=0;无分频,CS02=0;CS01=0;CS00=1;
比较匹配选择在升序计数发生比较匹配将清零OC0,降序计数发生时比较匹配将OC0置位.相应控制位COM00=0,COM01=1;TCCR0|=(1<
比较匹配寄存器赋值,比较匹配中断向量为:20
#include
void initpwmt0(void) //编写人张小强日期13,09,17
{
TCCR0|=(1<
TIMSK|=(1<
SREG|=0X80; //全局中断使能
TCNT0=0X00; //定时器寄存器
OCR0=0X80; //比较匹配寄存器
DDRB|=(1<
}
void delaymsPWM(unsigned int z)
{
unsigned int x,y;
for(x=1000;x>0;x--)
for(y=z;y>0;y--);
}
void main()
{
initpwmt0();
while(1)
{
OCR0++;delaymsPWM(10); //定时自加
}
} //比较匹配中断
#pragma interrupt_handler timer0_comp:20
void timer0_comp(void)
{}
至此定时器0大体应用功能讲解完毕
关键字:AVR 定时器0 完全资料
引用地址:
AVR定时器0完全资料
推荐阅读最新更新时间:2024-03-16 13:54
AVR单片机IO仿真I2C
#include iom88v.h #define EEP_PORT PORTC //定义是使用PROTC口 #define EEP_DDR DDRC //定义是使用PROTC口 #define SDA 0X10 //定义sda连接的是portd1 #define SCL 0X20 //定义scl连接的是portd0 //#define WP 0X04 //定义wp连接的是portd2 #define EEP_ADD_R 0xa1 //写I2C从器件地址和读方式 a0,a1接地 #define EEP_ADD_W 0xa0 //写I2C从器件地址和写方式 a0,a1接地 void delay(u
[单片机]
AVR常用库函数介绍
目录: 1. Character Type Functions - 字符类型函数 2. Standard C Input/Output Functions - 标准输入输出函数 3. Standard Library Functions - 标准库和内存分配函数 4. Mathematical Functions - 数学函数 5. String Functions - 字符串函数 6. BCD Conversion Functions - BCD 转换函数 7. Memory Access Functions - 存储器访问函数 8. Delay Functions - 延时函数 9. LCD
[单片机]
AVR系列单片机的档次和应用场合
AVR单片机系列齐全,有3个档次,可适用于各种不同场合的要求: (1)低档Tiny系列AVR单片机:主要有Tinyll/12/13/15/26/28等。 (2)中档AT90S系列AVR单片机:主要有AT90S1200/2313/8515/8535等。 (3)高档ATmega系列AVR单片机:主要有ATmega8/16132/64/128(存储容量为8/16/32/64/128 KB)和ATmega8515/8535等。
[单片机]
AVR ATMega128自引导IAP(boot load)的应用设计
ATmega128具备引导加载支持的用户程序自编程功能(In-Sysytem Programming by On-chip Boot Program),它提供了一个真正的由MCU本身自动下载和更新(采用读/写同时 Read-While-Write 进行的方式)程序代码的系统程序自编程更新的机制。利用AVR的这个功能,可以实现在应用编程(IAP)以及实现系统程序的远程自动更新的应用。 IAP的本质就是,MCU可以灵活地运行一个常驻Flash的引导加载程序(Boot Loader Program),实现对用户应用程序的在线自编程更新。引导加载程序的设计可以使用任何的可用的数据接口和相关的协议读取代码,或者从程序存储器中读取
[单片机]
AVR128的程序——DS1302时钟芯片
#include iom128v.h #include macros.h #define uchar unsigned char #define uint unsigned int #define ds1302_rst PE4 //定义1302的RST接在PE4 #define ds1302_io PE3 //定义1302的IO接在PE3 #define ds1302_sclk PE2 //定义1302的时钟接在PE2 #define set_ds1302_rst_ddr() DDRE|=1 ds1302_rst //复位端置为输出 #define set_ds130
[单片机]
LED 驱动控制专用电路 TM1628 AVR 测试程序源代码
#include avr/io.h #include util/delay.h #define TM1628_DIO_PORTNAME B #define TM1628_DIO_BIT 5 #define TM1628_CLK_PORTNAME B #define TM1628_CLK_BIT 7 #define TM1628_STB_PORTNAME B #define TM1628_STB_BIT 4 #ifndef _CONCAT_ #define _CONCAT_ #define CONCAT(a, b) a ## b #define CONCAT_DDR(portn
[单片机]
基于AVR的实验加载闭环控制系统
分离式液压千斤顶在生产建设、科学实验等各类工程结构加载工作中具有广泛的用途。 该设备一般由电动高压油泵+压(拉)千斤顶组成,本文论及的加载系统规格如表1所示。 油泵电机直接带动泵轴旋转,柱塞作往复运动,进油阀/排油阀工作,液压油通过高压油管进入千斤顶。用户可通过泵站上的手柄,人工转动泵内卸荷阀处于不同位置,实现系统的加载/卸载、推力/拉力及加载速率和稳压作业。 在对力和位移数值或稳压时间等精度要求较高的科研实验加载场合,显然这种仅靠手工操作的方式难以胜任。给该设备增设电脑测控系统就成为一项与时俱进的技术革新,也是提高此类设备性价比的最佳方案。 1 下位机 由ATmega128构成下位机控制核心
[单片机]
AVR单片机密码锁程序
这是一款用AVR单片机实现的密码锁,它分别由硬件16个矩阵键盘、数码管以及蜂鸣器组成的。系统正确的初始密码为0、1、2、3。当我们按下按键次数在4次以内,系统才判断密码对与否,当输入密码正确时,蜂鸣器报响起,即表示密码是正确的,当我们按下按键的次数超过4次,即使按下的密码正确,蜂鸣器也不响,还有按下密码顺序必须是0、1、2、3,如果按下0、2、1、3或者是其它的,都不能正常开蜂鸣器。如果按键次数超过4次了,密码就无法正常输入了,此时只要按下第16个按键时,就可以回到初始状态,即清除我们以前按键按下的次数,(因为密码输入时必须在4次以内完成的,超过了4次你怎么输,也进入密码判断模式)此时就可以重新输入正确的密码了。另外当按下按键时,
[单片机]