资源简介
基于 ATMEGA-16 Timer 的 PWM 与 Proteus 仿真, 在 ICC AVR 平台开发. 学习 AVR 单片机定时器资源的简单例子,采用定时器的溢出与比较中断方式实现的 PWM
代码片段和文件信息
#include
#include
#define PPM_PORT PORTB
#define PPM_DIR DDRB
#define PPM_Pin BIT(7)
unsigned int timeValue = 2100;
#define Counter (65536 - timeValue)
#define Compare (Counter + 400)
/* PPM 初始化 */
void PPM_Init(void)
{
/* -------------- GPIO 管脚初始化 -------------- */
PPM_PORT |= PPM_Pin;
PPM_DIR |= PPM_Pin;
/* -------------- 定时器初始化 -------------- */
TCNT1 = Counter; /* 定时器初值 产生溢出中断 */
OCR1A = Compare; /* 匹配比较输出 - 0.4ms 高电平 */
TIMSK |= (1 << 4) | (1 << 2); /* 开启比较 A 中断和溢出中断允许 */
TCCR1B |= 0x02; /* 启动定时器 普通模式 8 分频 */
}
void Peripheral_Init(void)
{
/* 禁止所有中断 */
CLI();
/* 禁止 JTAG */
MCUCR = 0x00;
MCUCSR = 0x80;
GICR = 0x00;
PPM_Init();
/* 开全局中断 */
SEI();
}
/* T1 比较中断服务程序 在 TCNT1 = OCR1A */
#pragma interrupt_handler timer1_comp_isr:7
void timer1_comp_isr(void)
{
/* 输出低电平 持续到溢出中断 */
PPM_PORT &= ~PPM_Pin;
}
/* T1 溢出中断服务程序 */
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
TCNT1 = Counter;
/* 输出高电平 持续到溢出中断 也就是 0.4ms */
PPM_PORT |= PPM_Pin;
}
void main(void)
{
Peripheral_Init();
while(1)
{
NOP();
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10178 2016-06-25 13:58 2、AVR - Timer\Code\Project\main.lis
文件 2607 2016-06-25 13:58 2、AVR - Timer\Code\Project\main.o
文件 1819 2016-06-25 13:58 2、AVR - Timer\Code\Project\TIMER.cof
文件 808 2016-06-25 13:58 2、AVR - Timer\Code\Project\TIMER.dbg
文件 892 2016-06-25 13:58 2、AVR - Timer\Code\Project\TIMER.hex
文件 9 2016-06-25 13:58 2、AVR - Timer\Code\Project\TIMER.lk
文件 6764 2016-06-25 13:58 2、AVR - Timer\Code\Project\TIMER.lst
文件 612 2016-06-25 13:58 2、AVR - Timer\Code\Project\TIMER.mak
文件 1974 2016-06-25 13:58 2、AVR - Timer\Code\Project\TIMER.mp
文件 1266 2016-06-25 13:58 2、AVR - Timer\Code\Project\Timer.prj
文件 52 2016-06-25 14:01 2、AVR - Timer\Code\Project\TIMER.SRC
文件 1366 2016-06-25 13:58 2、AVR - Timer\Code\source\main.c
文件 69802 2016-06-25 13:59 2、AVR - Timer\Proteus\Timer.DSN
文件 1338 2016-11-04 20:49 2、AVR - Timer\Proteus\Timer.PWI
目录 0 2016-06-25 10:27 2、AVR - Timer\Code\include
目录 0 2016-11-04 14:38 2、AVR - Timer\Code\Project
目录 0 2016-11-04 14:38 2、AVR - Timer\Code\source
目录 0 2016-11-04 14:38 2、AVR - Timer\Code
目录 0 2016-11-04 20:49 2、AVR - Timer\Proteus
目录 0 2016-11-04 14:38 2、AVR - Timer
----------- --------- ---------- ----- ----
99487 20
- 上一篇:LeetCode cpp最新中文题解.pdf
- 下一篇:Gams 序列号
评论
共有 条评论