📄 tc1_5.c
字号:
/*****************************************************
**** AVR T/C1 使用范例5(PWM输出实现两路DAC) ****
**** T/C1快速PWM模式,11位分辨率,计数顶值是ICR1 ****
**** 作者: liugangdi ****
**** 编译器:WINAVR20050214 ****
**** 日期:2005.11.26 ****
******************************************************/
/*功能简单说明: 此例子用TC1的OC1A和OC1B引脚输出占空比可
调的信号经过外部的低通滤波就可以产生相应的模拟信号。外
面加一个按键输入,按一下按键,就可以调高输出电平。
补充说明:计数器的初始化,在使用PWM之前需要做很多初始化,
包括相应I/O的方向,把PD5,PD4要设置为输出;计数器时钟频率
的选择;PWM模式的选择;PWM分辨率的设置以及决定占空比的OCR1A
和OCR1B的初始值。此例子的实现需要在mega16实验板周围在用个通
用板加低通滤波电路和一些按键。*/
//用proteus仿真说明:在proteus中仿真一切正常
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
#include <stdio.h>
#define uchar unsigned char
#define PWMOUT PD5 //A通道PWM输出
#define PWMOUTB PD4 //B通道PWM输出
#define OCRA OCR1A //OCR=OCR1A
#define OCRB OCR1B //OCRB=OCR1B
#define PORTPWMOUT DDRD
#define KEY_UP PA0 //PA0(PIN40)设置为增大PWM值的按键
#define KEY_DOWN PA1 //PA1(PIN439)设置为减小PWM值的按键
#define LED_ABOVE PA2 //PA2(PIN38)设置为值过高指示
#define LED_BELOW PA3 //PA3(PIN37)设置为值过低指示,吸收电流的接法
#define KEY_UPB PA4 //PA4(PIN36)设置为增大PWM值的按键
#define KEY_DOWNB PA5 //PA5(PIN435)设置为减小PWM值的按键
//系统初始化函数,所有初始化工作都应完成
void init(void)
{
TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //0XA2
TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS10); //OX19
//11位分辨率,快速PWM模式,PWM的计数顶值为ICR1的值,使用系统时
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -