token2000 发表于 2008-6-18 02:00:05

MEGA 48使用

这个芯片怎么这么难用啊,想想EMC也不过如此吧。我只使用了TIMER0和TIMER1,结果搞了一个星期都没着落,请各位高手帮帮啊,有没有用过48的同仁啊。可否发个例子来看看,最好是使用TIMER0和TIMER1相关设置的。汇编最好不过了,C语言也可以。

ivension 发表于 2008-6-19 17:52:44

m48/88和其他的avr单片机差不多,自己多看看数据手册,多参考别人写的程序吧。
网上M48的程序好像不是很多,M8/16的比较多。
这个我觉得关键还是靠自己。

token2000 发表于 2008-6-20 01:17:03

呵呵,兄台,谁都觉得是这样的.

machao 发表于 2008-6-20 11:12:47

给个C的参考,本栏有教程前2篇下载,建议下载仔细学习,尽管是以M16为主,但基本原理是一样的.

#include <mega48.h>

// Timer 0 overflow interrupt service routine
interrupt void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x10;
// Place your code here

}

// Timer 1 overflow interrupt service routine
interrupt void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0x5A;
TCNT1L=0x5A;
// Place your code here

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here


// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125.000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x02;
TCNT0=0x10;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125.000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0x5A;
TCNT1L=0x5A;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=0x00;
TCCR2A=0x00;
TCCR2B=0x00;
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-14: Off
// Interrupt on any change on pins PCINT16-23: Off
EICRA=0x00;
EIMSK=0x00;
PCICR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x01;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=0x01;
// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
ADCSRB=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}

token2000 发表于 2008-6-20 13:15:07

多谢马老师.C也不错。
页: [1]
查看完整版本: MEGA 48使用