?? tc1_5.c
字號(hào):
/*****************************************************
**** AVR T/C1 使用范例5(PWM輸出實(shí)現(xiàn)兩路DAC) ****
**** T/C1快速PWM模式,11位分辨率,計(jì)數(shù)頂值是ICR1 ****
**** 作者: liugangdi ****
**** 編譯器:WINAVR20050214 ****
**** 日期:2005.11.26 ****
******************************************************/
/*功能簡(jiǎn)單說明: 此例子用TC1的OC1A和OC1B引腳輸出占空比可
調(diào)的信號(hào)經(jīng)過外部的低通濾波就可以產(chǎn)生相應(yīng)的模擬信號(hào)。外
面加一個(gè)按鍵輸入,按一下按鍵,就可以調(diào)高輸出電平。
補(bǔ)充說明:計(jì)數(shù)器的初始化,在使用PWM之前需要做很多初始化,
包括相應(yīng)I/O的方向,把PD5,PD4要設(shè)置為輸出;計(jì)數(shù)器時(shí)鐘頻率
的選擇;PWM模式的選擇;PWM分辨率的設(shè)置以及決定占空比的OCR1A
和OCR1B的初始值。此例子的實(shí)現(xiàn)需要在mega16實(shí)驗(yàn)板周圍在用個(gè)通
用板加低通濾波電路和一些按鍵。*/
//用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)設(shè)置為增大PWM值的按鍵
#define KEY_DOWN PA1 //PA1(PIN439)設(shè)置為減小PWM值的按鍵
#define LED_ABOVE PA2 //PA2(PIN38)設(shè)置為值過高指示
#define LED_BELOW PA3 //PA3(PIN37)設(shè)置為值過低指示,吸收電流的接法
#define KEY_UPB PA4 //PA4(PIN36)設(shè)置為增大PWM值的按鍵
#define KEY_DOWNB PA5 //PA5(PIN435)設(shè)置為減小PWM值的按鍵
//系統(tǒng)初始化函數(shù),所有初始化工作都應(yīng)完成
void init(void)
{
TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //0XA2
TCCR1B|=(1<<WGM13)|(1<<WGM12)|(1<<CS10); //OX19
//11位分辨率,快速PWM模式,PWM的計(jì)數(shù)頂值為ICR1的值,使用系統(tǒng)時(shí)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -