AVR单片机Atmega128外扩RAM
为保证数据采集的准确性和适时性,需要精确确定采样时间,做到采集和处理两不误。由于温度信号变化比较慢,而且比较有线性规律。所以设定通道0采集振动信号,通道1采集温度信号,振动信号的采样率为温度信号的50倍。即先进行50次振动信号采集后,切换通道,进行温度信号的采集,之后再切换到振动采集通道。对ADC转换启动噪声抑制功能,采用中断编程。ATmega128采用外部16MHz时钟。(由于Can已经是一种比较成熟和常用的总线技术,在此不做过多介绍)
硬件连接和普通的51单片机外扩是一样的。
内存分布。
以下是测试程序:
// Target : ATMEGA128
// Crystal : 7.3728Mhz
// Modifed By : Moxudong
// Date : 2010.03
#includeavr/io.h>
#includeutil/delay.h>
#include avr/interrupt.h> //中断函数头文件
#includestdio.h>
#includestring.h>
//PG0 0x65
#define WRL (PORTG=PORTG0XFE)
#define WRH (PORTG=PORTG|0X01)
//PG1
#define RDL (PORTG=PORTG0XFD)
#define RDH (PORTG=PORTG|0X02)
//PG2
#define ALEL (PORTG=PORTG0XFB)
#define ALEH (PORTG=PORTG|0X04)
//MCU时钟频率
#undef F_CPU
//#define F_CPU 7372800UL
//默认的系统BAUD
#define baud 115200
//#define fosc 7372800UL //晶振7.3728MHZ
#define fosc 16000000UL
//#define baud 9600//波特率
#define MCUBAUD9600 1
//declare memory mapped variables
//#define txbuf1_head 0x1100
//extern unsigned char txbuf1[256];
#define ext_PORT1 ((volatile unsigned char *)0x1100)
unsigned char *p=(unsigned char *)ext_PORT1;
unsigned char testramtable[4]={0x00,0x55,0xaa,0x00};
void Delay1ms(void)
{
unsigned int i;
for(i=0;i=(unsigned int)(16*143-2);i++);
}
void Delayxms(unsigned char ms)
{
unsigned char i;
for(i=0;i=ms;i++)
Delay1ms();
}
评论