?? dac._c
字號:
/*******************************************/
/* 廣州天河雙龍電子公司 */
/* http://www.sl.com.cn */
/* 用PWM實現的DAC轉換演示程序 */
/* 外部中斷演示程序 */
/* 作者:ntzwq@wx88.net */
/* 2002年5月11日 */
/* 目標MCU:MEGA8 晶振:內部RC(INT) 8MHZ */
/*******************************************/
//使用內部RC振蕩,PB6-G,PB7-DP短路塊連接
//使用INT0/INT1按鍵改變DAC輸出電壓大小
//可以使用ADC0通道測量DAC的輸出電壓
//演示了使用PC機對MEGA8開發板進行控制的方法
#include <iom8v.h>
#include <macros.h>
#define Vref 500//參考電壓值
#include"uart.h"
#include"adc.h"
unsigned int adc_old;
//T1初始化程序
void timer1_init(void)
{
TCCR1B = 0; //stop
TCNT1H = 0;
OCR1A=0;
TCCR1A =(1<<WGM11)|(1<<WGM10)|(1<<COM1A1);
TCCR1B =(1<<CS10);//(1<<WGM13)|(1<<WGM12)|(1<<CS10); //0x1A //start Timer
}
//兩個中斷向量使用同一個中斷處理函數,實現對INT0/INT1按鍵的處理
#pragma interrupt_handler int_isr:iv_INT0 int_isr:iv_INT1
void int_isr(void)
{
unsigned char i;
delay_ms(10);
i=PIND&0x0c;//鍵盤消抖動
if(i==0x0c)
return;
else
{
if (i==0x08)//INT0鍵按下
{
if(OCR1A<0x3ef)
OCR1A+=0x10;//遞增
else
OCR1A=0x3ff;
}
if (i==0x04)//INT1鍵按下
{
if(OCR1A>0x10)
OCR1A-=0x10;//遞減
else
OCR1A=0;
}
while((PIND&0x0c)!=0x0c)//檢查按鍵釋放
;
}
}
//MAIN程序
void main(void)
{
unsigned char i;
unsigned int temp;
DDRB=(1<<PB1);
DDRD=0xf0;
PORTD=0xff;
OSCCAL=osccal;
adc_mux=0;
uart_init();
timer1_init();
adc_init();
GICR = 0xC0;//int0,int1中斷使能
SEI();
adc_rel=0;
//puts("廣州天河雙龍電子公司");
//puts("HTTP://WWW.SL.COM.CN");
//puts("MEGA8開發板DAC測試程序");
while(1)
{
i=getchar();
switch (i)
{
case 'S'://MEGA8 DAC程序ID
{
puts("DAC TEST ver1.0");
break;
}
case 'T'://調節輸出電壓
{
temp=getchar();
temp=temp<<8;
temp|=getchar();
if (temp<0x400)
OCR1A=temp;
else
OCR1A=0x3ff;
break;
}
case 'O'://讀取OCR1A寄存器值
{
temp=OCR1A;
putchar(temp/256);
putchar(temp%256);
break;
}
case 'M'://設置ADC工作通道
{
adc_mux=getchar()&0x03;
break;
}
case 'R'://讀取ADC通道及ADC轉換結果
{
putchar(adc_mux);
putchar(adc_old/256);
putchar(adc_old%256);
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -