日本ab视频-日本ab在线-日本a黄-日本a黄色片-国产亚洲精品第一综合linode-国产亚洲精品高清在线

新聞資訊
AVR SRAM擴展程序和電路 基于ATmega8515 HM62256B
2010-11-06


靜態存儲器 SRAM即Static random access memory,它是一種具有靜止存取功能的內存,不需要刷新電路即能保存它內部存儲的數據。ATmega8515單片機內部含有512字節的SRAM,應該說可以滿足一般的應用了,但是如果要存儲大量的數據,就有點麻煩了,比如存儲圖像,或處理從網絡傳過的的數據或多路傳感器采集過的數據等,都要有個臨時的地方來存儲,而內部的又不夠用,所以只有加外部的了。今天懶貓就學習一下外部的SRAM,而ATmega8515提供了三總線(CA-控制總線,AB-地址總線,DB數據總線)用以擴展外部內存或接口,所以操作起來非常方便。

     今天測試電路中采用的SRAM是HM62256B芯片,它是一個8位32KB容量的靜態存儲器芯片。具體的芯片資料你可以參看62256的datasheet,如果你沒有應用外部擴展總線,寫程序時注意它的讀寫時序。電路中74LS373做為地址鎖存器連接在PA口,它的鎖存全能腳LE(Latch Enable)連接在單片機的ALE(Address Latch Enable 地址鎖存使能)。單片機的讀寫控制引腳RD、WR與62256的OE(Output Enable,輸出使能)、WE(Write Enable,寫使能)連接,負責地址的鎖存及讀寫操作。這次測試的電路功能主要有向62256中寫入250個數據,然后從62256中讀出這250個數據,并發送的模擬終端顯示出來,具體的電路原理圖參看文檔的最后面。

    關于軟件方面,涉及到單片機內部的寄存器主要有MCU控制寄存器MCUCR、外部MCU控制寄存器EMCUCR及特殊功能IO寄存器SFIOR。關于這些寄存器的功能,可以參考ATmega8515的數據手冊,上面有詳細的介紹。

     好了,下面貼出程序

一、main.h 里面主要是一些頭文件的包含、一些宏定義及串口的一些程序
[code="CPP"]
/**************************************************************************

//文件名稱:main.h

//功 能:初始化單片機

//作 者:懶貓愛飛

//建立日期:2010.11.05

//備 注:MCU-ATmega8515 開發環境-winavr100110 Crystal-8MHz

**************************************************************************/

#ifndef _MAIN_H_

#define _MAIN_H_

#include <avr/io.h>
#include <inttypes.h> //關于數據類型的一些定義
#include <stdint.h> //同樣是一些數據類型的定義
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#include <stdlib.h>


#define F_CPU 8000000UL //8M晶振



#define Beep_Ring() PORTB ^= _BV(PB0) //Buzzer 連接在B端口的第1腳



#define LED_ON() PORTB &= ~_BV(PB7) //點亮LED燈

#define LED_OFF() PORTB |= _BV(PB7) //熄滅LED燈

/*************************************************************************

//函數名稱:void port_init(void)

//功 能:端口初始化

//入口參數:NULL

//出口參數:NULL

//備 注:NULL

**************************************************************************/

void port_init(void)

{

DDRB = 0x81; //PB0--Buzzer,PB7--Led

PORTB = 0x80; //關閉蜂鳴器與LED燈

}



/*************************************************************************

//函數名稱:void Beep_Play(void)

//功 能:蜂鳴器蜂鳴程序

//入口參數:NULL

//出口參數:NULL

//備 注:NULL

**************************************************************************/

void Beep_Play(void)

{

int8_t cunt = 0;

for(cunt=0; cunt<50; cunt++)

{

Beep_Ring(); //連續響50次

_delay_ms(1);

}

}



/**************************************************************************

//函數名稱:void usart_init(void)

//功 能:串口初始化

//入口參數:NULL

//出口參數:NULL

//備 注:NULL

**************************************************************************/

void usart_init(void)

{

UCSRB |= _BV(TXEN); //發送使能

UCSRC |= _BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0); //82位數據位,1位停止位

//波特率設置為9600 用8M的晶振會有0.2%的誤差

//想精確一點可以改變波特或晶振,9600時用11.0592精度最高

UBRRL = (F_CPU/9600/16-1)%256;

UBRRH = (F_CPU/9600/16-1)/256;

}



/*************************************************************************

//函數名稱:void send_char(uint8_t c)

//功 能:發送一個字符

//入口參數:c

//出口參數:NULL

//備 注:NULL

**************************************************************************/

void send_char(uint8_t c)
{
if(c == '\n')
{
send_char('\r');
}
UDR = c;
while(!(UCSRA & _BV(UDRE))); //等待發送完畢
}



/*************************************************************************

//函數名稱:void send_str(uint8_t *s)

//功 能:發送字符串

//入口參數:*s

//出口參數:NULL

//備 注:NULL

**************************************************************************/
void send_str(uint8_t *s)
{
while(*s)
{
send_char(*s++);
}
}
#endif
[/code]

二、main.c 主要的處理程序

[code="CPP"]
/******************************************************************************

//文件名稱:main.c

//功 能:學習使用單片機外部擴展的內存

//作 者:懶貓愛飛

//建立日期:2010.11.05

//備 注:MCU-ATmega8515 開發環境-winavr100110 Crystal-8MHz

******************************************************************************/

#include "main.h"



//定義外部地址,因為62256有15位地址線

#define EXTERN_ADDR (volatile uint8_t*)0x8000



/******************************************************************************

//函數名稱:int main(void)

//功 能:主函數

//入口參數:NULL

//出口參數:NULL

//備 注:NULL

******************************************************************************/

int main(void)

{

uint8_t i;

uint8_t extern_data = 0;



port_init();

usart_init();



MCUCR |= 0x80;



LED_ON();

Beep_Play(); //寫操作開始



for(i=0;i<250; i++)

{

*(EXTERN_ADDR+i) = i;

}



//MCUCR = 0;

//LED_OFF();



//雙顯示字符雙顯示數字,貌似模擬終端上顯示效果不太好-,-

//send_str("Send the data to the visual terminal:\n");

//send_str ("Please watch the visual terminal II \n");



//把寫入的數據發送到模擬終端顯示出來

for(i=0; i<250; i++)

{
extern_data = *(EXTERN_ADDR+i);
send_char(extern_data);
}

LED_OFF(); //發送完畢,燈關閉
Beep_Play(); //讀寫操作結束

while(1);

return 0;
}

[/code]

因為使用了擴展總線的功能 ,所以程序不是太難,如果你想復雜一點,可以不用外部擴展總線功能,自己重新連線。

ATmega8515 擴展RAM



關注有人微信公眾號
了解更多信息
主站蜘蛛池模板: 逆天邪神第一季全集免费观看 | 天天综合在线视频 | 四虎sihu新版影院亚洲精品 | 日本h在线精品免费观看 | 欧美呻吟| 国产免费私人影院永久免费 | 日韩一区二区不卡中文字幕 | 国产在线观看美女福利精 | 天堂最新版资源在线下载 | 香蕉成人 | 动漫精品午夜在线播放 | 男人与女人交配 | 亚洲成人综合网站 | 男人的天堂在线免费视频 | 国内精品免费一区二区观看 | 99精品免费在线 | 99久久精品免费观看国产 | 国产一级做a爰片久久毛片 国产一级做a爰片... | 骚婷婷 | 久久99热这里只有精品 | 亚洲一区二区三区四 | 国产在线拍 | 国产深夜福利在线观看网站 | 亚洲特级aaaaaa毛片 | 四虎影视884a精品国产四虎 | 欧美a欧美1级 | 天天插天天爽 | 久久夜色精品国产噜噜小说 | 精品国产一级毛片 | 欧美在线观看视频免费 | 五月婷婷开心综合 | 啦啦啦视频在线视频免费4 啦啦啦视频在线观看影院 啦啦啦社区手机在线视频免费视频 | 日本特黄特色大片免费看 | 亚洲欧美精品在线 | 奶茶视频有容乃大 | 麻豆动漫 | 欧美日韩免费在线观看 | 亚洲免费在线观看视频 | 欧美精品中文 | 一个人hd高清在线观看 | 国产免费播放一区二区三区 |