硬件連接
1.1 時(shí)鐘源
與AT89系列單片機(jī)相比,ATMEGA8515單片機(jī)具有更多種的時(shí)鐘產(chǎn)生方式,通?蛇x用:
1)外接晶振/陶瓷振蕩器方式
2)外接低頻晶振方式
3)外接RC元件構(gòu)成的振蕩電路
4)標(biāo)定的內(nèi)部RC振蕩電路
5)外接信號源
這些信號源的選擇是在編程通過對CKSEL3、CKSEL2、CKSEL1和CKSEL0這4個(gè)位的選擇來確定的。
下表是選擇不同的時(shí)鐘源時(shí),應(yīng)寫入的CKSEL3…0的值。
時(shí)鐘源選擇
芯片時(shí)鐘選項(xiàng) CKSEL3..0
外部晶體/陶瓷振蕩器 1111-1010
外部低頻晶體 1001
外部RC振蕩器 1000-0101
標(biāo)定的內(nèi)部RC振蕩器 0100-0001
外部時(shí)鐘 0000
說明:對于所有的熔絲位, “1” 表示未編程, “0” 代表已編程。
1.2 啟動(dòng)延時(shí)
用于給芯片供電的電源特征各不相同,有一些電源,回路中有大電容,接通電源后其電壓上升速度較慢,當(dāng)電源升高到一定程度時(shí),電路的各部份都開始工作但卻不能穩(wěn)定地工作,如果此時(shí)讓芯片進(jìn)入到工作狀態(tài),往往會導(dǎo)致運(yùn)算出錯(cuò)、程序跑飛、片內(nèi)EEPROM數(shù)據(jù)被亂改等后果,致使單片機(jī)的工作出現(xiàn)不正常,為解決這一問題,ATMEGA8515芯片在芯片完成復(fù)位后并不立即開始工作,而是延遲一段時(shí)間再進(jìn)入正常工作狀態(tài),這個(gè)延時(shí)的時(shí)間可以由用戶自行設(shè)定,系統(tǒng)中有SU1和SU0位,在編程時(shí)對這兩位進(jìn)行設(shè)定即可獲得不同時(shí)長的延時(shí)。
芯片在出廠時(shí)CKSEL = “0001”, SUT = “10”。默認(rèn)時(shí)鐘源為有最長啟動(dòng)時(shí)間的內(nèi)部RC振蕩器。默認(rèn)設(shè)置可以保證用戶使用在線編程或并行編程時(shí)都能獲得所期望的時(shí)鐘源。
關(guān)于振蕩電路選擇的更詳細(xì)資料,請參考ATMEGA8515的數(shù)據(jù)手冊。
本實(shí)驗(yàn)板在設(shè)計(jì)時(shí),用了11.0592M的晶振,這是為了使用51單片機(jī)而設(shè)定的。如果你用的芯片是ATMEGA8515,那么完全不用擔(dān)心,因?yàn)樵撔酒淖罡哳l率可以達(dá)到16M,如果你用的芯片是ATMEGA8515L,理論上,其最高工作頻率為8M,但經(jīng)過實(shí)踐,用到11.0592M也同完全沒有問題的,當(dāng)然,這里僅是在實(shí)驗(yàn)板上使用,真正制作產(chǎn)品時(shí)不要這么做。
1.3 I/O口的連接
ATMEGA8515具有4個(gè)8位的I/O口(PA、PB、PC和PD)和一個(gè)附加的3位I/O口(PE),作為通用數(shù)字I/O 使用時(shí),所有AVR I/O 端口都具有真正的“讀- 修改- 寫”功能。這意味著用SBI 或CBI 指令對一些管腳進(jìn)行諸如改變方向、更改端口電平、禁止/ 使能上拉電阻等操作時(shí),不會影響到其他的管腳。和51單片機(jī)不同,ATMEGA8515單片機(jī)的輸出緩沖器具有對稱的驅(qū)動(dòng)能力,可以輸出或吸收大電流,直接驅(qū)動(dòng)LED。所有的端口引腳都具有與電壓無關(guān)的上拉電阻。作為輸入使用時(shí),若內(nèi)部上拉電阻使能,端口被外部電路拉低時(shí)將輸出電流。
每個(gè)端口引腳都具有三個(gè)寄存器位: DDxn、 PORTxn 和PINxn,這里的X代表A、B、C、D和E中的一個(gè),以下同。DDxn 以來選擇引腳的方向。當(dāng)DDxn 為"1“ 時(shí), Pxn 配置為輸出;否則為輸入。當(dāng)引腳配置為輸入時(shí),若PORTxn 為"1“,上拉電阻將被接入電路中。如果不需要這個(gè)上拉電阻起作用,可以將PORTxn 清零,或者將這個(gè)引腳配置為輸出。復(fù)位時(shí)各引腳為高阻態(tài),即使此時(shí)時(shí)鐘沒有工作也是如此。
當(dāng)引腳配置為輸出時(shí),若PORTxn 為"1“,引腳輸出高電平("1“),否則輸出低電平(“0“)。在 高阻態(tài)({DDxn, PORTxn} = 0b00)和 輸出高電平({DDxn, PORTxn} = 0b11) 兩種狀態(tài)之間進(jìn)行切換時(shí),上拉電阻接入電路({DDxn, PORTxn} = 0b01) 或輸出低電平{DDxn,PORTxn} = 0b10) 這兩種模式必然會有一個(gè)發(fā)生。通常,上拉電阻被接入電路是完全可以接受的,因?yàn)楦咦璀h(huán)境不在意是強(qiáng)高電平輸出還是上拉輸出。如果外圍電路不允許接入上拉電阻,可以通過置位SFIOR 寄存器的PUD 來禁止所有端口的上拉電阻。在上拉輸入和輸出低電平之間切換也有同樣的問題。用戶必須選擇高阻態(tài)({DDxn,PORTxn} = 0b00) 或輸出高電平({DDxn, ORTxn} = 0b10) 作為中間步驟。
DSB-1A板在設(shè)計(jì)時(shí),PB口接有8個(gè)發(fā)光二極管,同時(shí)接有排電阻PZ1作為二極管的限流電阻,如圖1所示,這是51單片機(jī)的典型設(shè)計(jì),同樣可用于ATMEGA8515單片機(jī)。

圖1
2.程序
/**************************************************
; 平凡單片機(jī)工作室
; http://www.mcustudio.com
; Copyright 2003 pingfan's mcustudio
; All rights Reserved
;作者:周堅(jiān)
;ddss.c
;單燈閃爍程序,用于AT89S8515,ATMEG8515,在DSB-1A型實(shí)驗(yàn)板上實(shí)現(xiàn)
;**************************************************/
#include "avr/delay.h"
#include "avr/io.h"
static void io_init(void)
{
PORTA = 0x0;
DDRA = 0x0;
// PortB
PORTB = 0x0;
DDRB = 0x01;
// PortC
PORTC = 0x0;
DDRC = 0x0;
// PortD
PORTD = 0x0;
DDRD = 0x0;
}
void mDelay(uint16_t DelayTim)
{ uint16_t i;
for(;DelayTim>0;DelayTim--)
{ for(i=0;i<40000;i++)
{;}
for(i=0;i<39000;i++)
{;}
}
}
int main(void)
{
io_init();
while(1)
{
mDelay(500);
PORTB&=0xfe;
mDelay(500);
PORTB|=0x01;
}
}





