˜Ëî}: ÇóÖú´óÉñ¿´¿´ÔÒò£¬avrM16×ößBÀmîlÂʲɼ¯¡£ [´òÓ¡±¾í“]
×÷Õß: 13310549760 •rég: 2016-7-26 11:41
˜Ëî}: ÇóÖú´óÉñ¿´¿´ÔÒò£¬avrM16×ößBÀmîlÂʲɼ¯¡£
ÓÃavrM16×ößBÀmîlÂʲɼ¯£¬²É¼¯Í¬•rÝ”³ö500HZ£¬Õ¼¿Õ±ÈÈÎÒ⣨ÎÒÓÃ50%£©µÄpwm¡£ÎÒÓÃT1²¶«@£¬¶Ë¿Ú½ÓICP1¡£PB3Ý”³öpwm¡£¬FÔÚ†–î}ÊÇ£¬ÎÒͬ•ré_†¢T0,T1Ý”³ö²»ÊÇ500HZ£¬¶øÊÇëSÖøÝ”ÈëîlÂʸÄ׃£¬²¢ÇÒÖÐégÎÒ¼ÓÁËADC³ÌÐò£¬Ý”³öîlÂÊÒ²•þ¸Ä׃¡£µ«ÊÇÎÒÖ»é_T0£¬²»¼Ó²¶«@£¬Ý”³öµÄÒ»Ö±ÊÇ500HZ¡£
#include <iom16v.h>
#include <macros.h>
#include "delay.h"
#define uint unsigned int
#define uchar unsigned char
#define PWM_0 PORTB&=~(1<<PB3)
#define PWM_1 PORTB|=(1<<PB3)
signed int wendu,flag,flag1,jd,count,flag4,flag3;
signed int yanwu=10;
volatile unsigned int CAPi=0,CAPj=0;
volatile unsigned intCAP[10]={0,0,0,0,0,0,0,0,0,0};
//TIMER1 initialize - prescale:1
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1mSec
// actual value: 1.000mSec (0.0%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x00;
TCNT0 = 0x9c;
OCR0 =0xF0; //¸Ä׃´ËÖµ¿É¸Ä׃ռ¿Õ±È
TCCR0 = 0x02; //ÔOÖÞé¿ìËÙPWMģʽ£¬Æ¥Åä•rOC0ÖÃ1£¬·Öîlϵ”µ8
}
void main(void)
{
uint dianya;
DDRC=0xFF;
jd=10;
DDRB= 0Xff;
PORTB=0XFF;
DDRD&=~(1<<PD6);
PORTD|=1<<PD6;
TCCR1B=(1<<ICNC1)|(1<<ICES1);
TCCR1B|=0x03;
TIMSK=1<<TICIE1;
MCUCR = 0x00;
GICR =0x00;
timer0_init();
TIMSK = 0x21; //timer interrupt sources
SEI(); //re-enable interrupts µÈƒrÅcSREG=0x80
while(1)
{
DDRA&=~BIT(0);
ADMUX=0x40;//µÍ4λÊÇͨµÀÌ– …¢¿¼ÊÇAVCC
ADCSRA=0x87; //ʹÄÜADC£¬†Î´ÎÞD“Q£¬îA·Öîlžé128
ADCSRA|=(1<<ADSC); //†¢„ÓÊ×´ÎÞD“Q
while(!(ADCSRA&(1<<ADIF))); //µÈ´ýÞD½YÊøÑh
ADCSRA|=(1<<ADIF); //Çå³ýADIFλ
dianya=ADCL;//ÏÈ×x µÍλ ß@‚€±Øíš×ñÊØ ¶È¸ßλºó±»¸üДµ“þ
dianya=ADCH*256+dianya;
yanwu=dianya*0.09765625;
if(yanwu>78)
flag1=1;
else
flag1=0;
if((flag==1)&&(flag1==1))
{PORTC=0xff;}
else
{PORTC=0;}
}
}
#pragma interrupt_handler Timer1_icp_isr:6
void Timer1_icp_isr(void) //6 Ì–ÖДà
{
unsigned char i;
if(CAPi==0)
{CAPi=ICR1;CAP[0]=ICR1;}//TCCR0 = 0;}
else
{ CAP[1]=ICR1;
CAPj=ICR1-CAPi;
CAPj=1000000/8/CAPj;
if(CAPj>3000)
{flag=1;//TIMSK=0x21;timer0_init();SEI();
}
else
flag=0;
TCCR1B&=0xFC;//11000000
TCCR1B|=0x03;
TCNT1=0;
CAPi=0;
CAPj=0;
}
}
#pragma interrupt_handlertimer0_ovf_isr:iv_TIM0_OVF //¶¨•rÆ÷0ÖДà
void timer0_ovf_isr(void)
{
TCNT0 = 0x9c;
if(count<jd)//PWM±ÈÝ^
{
PWM_1;//¸ßëŠÆ½ÞD
}
else
PWM_0;//µÍëŠÆ½Í£
count++;
if(count>20)//ÖÜÆÚ
count=0;
}
-
-
·ÂÕæ.rar
2016-7-26 11:41 ÉÏ‚÷
üc“ôÎļþÃûÏÂÝd¸½¼þ
ÏÂÝd·e·Ö: ºÚŽÅ -5
70.29 KB, ÏÂÝd´Î”µ: 6, ÏÂÝd·e·Ö: ºÚŽÅ -5
| šgÓ¹âÅR (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |