第一篇:?jiǎn)纹瑱C(jī)總結(jié)系列-1
單片機(jī),通過(guò)片內(nèi)總線連接而成:中央處理器(CPU由運(yùn)算器、控制器和若干特殊功能寄存器組成)、數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM/EPROM)、并行輸入/輸出口(P0口-P3口)、串行口、定時(shí)/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器。主要部件集成在一塊集成電路芯片上的微型計(jì)算機(jī)稱(chēng)為單片機(jī)。三總線結(jié)構(gòu):⑴ 地址總線AB,16位,P2口提供高8位地址,P0口經(jīng)地址鎖存器提供低8位。片外存儲(chǔ)器可尋址范圍達(dá)64KB(即=65536個(gè)字節(jié))。⑵ 數(shù)據(jù)總線DB,D0-D7共8位,由P0口提供,分時(shí)輸送低8位地址(通過(guò)地址鎖存器鎖存)和8位數(shù)據(jù)信息。⑶ 控制總線CB。時(shí)鐘電路與時(shí)序:?jiǎn)纹瑱C(jī)芯片內(nèi)部有一個(gè)高增益反向放大器,其輸入引腳為XTAL1,輸出引腳為XTAL2,芯片外部通過(guò)這兩個(gè)引腳接晶體振蕩器CYS和微調(diào)電容器C1、C2形成反饋電路(通常取值在20~30pF),構(gòu)成穩(wěn)定的自激振蕩器,振蕩頻率范圍通常是1.2MHz~12MHz。振蕩脈沖經(jīng)分頻后再為系統(tǒng)所用。時(shí)序單位共4個(gè):節(jié)拍、狀態(tài)、機(jī)器周期和指令周期。CPU執(zhí)行一條指令的時(shí)間稱(chēng)為指令周期。一般由若干個(gè)機(jī)器周期組成。機(jī)器周期=6狀態(tài)=12晶振周期(拍節(jié))。單片機(jī)的存儲(chǔ)器單片機(jī)分為程序存儲(chǔ)器(用于存放編好的程序、表格和常數(shù)。內(nèi)部有4K ROM,片外最多可擴(kuò)展64K ROM,兩者統(tǒng)一編址。)和數(shù)據(jù)存儲(chǔ)器(內(nèi)部有128B RAM;片外最多可擴(kuò)展64 K RAM。內(nèi)、外RAM地址有重疊,可通過(guò)不同的指令來(lái)區(qū)分:“MOV”是對(duì)內(nèi)部RAM進(jìn)行讀寫(xiě)的操作指令;“MOVX”是對(duì)外部RAM進(jìn)行讀寫(xiě)的操作指令),在物理空間上是相互獨(dú)立哈佛結(jié)構(gòu)。物理結(jié)構(gòu)上可以分為片內(nèi)程序存儲(chǔ)器、片外程序存儲(chǔ)器、片內(nèi)數(shù)據(jù)存儲(chǔ)器、片外數(shù)據(jù)存儲(chǔ)器。片內(nèi)數(shù)據(jù)存儲(chǔ)器工作寄存器區(qū)、可位尋址區(qū)、通用RAM區(qū)、特殊功能寄存器區(qū)。工作方式程序執(zhí)行方式、掉電保護(hù)方式、低功耗方式(空閑方式、掉電方式)最小系統(tǒng)對(duì)于內(nèi)部帶有程序存儲(chǔ)器的51單片機(jī),若上電工作時(shí)所需要的電源、復(fù)位電路和晶體振蕩電路齊全,即可構(gòu)成完整的單片機(jī)最小系統(tǒng)。致單片機(jī)不工作的原因EA沒(méi)有接高電平、晶振電容使用不當(dāng)、晶振不起振ALE控制信號(hào)端無(wú)信、復(fù)位電路設(shè)計(jì)不當(dāng)?!静⑿休斎?輸出口有4個(gè)8位的雙向并行輸入/輸出(I/O)端口,P0口、P1口、P2口和P3口。P0口是一個(gè)雙功能的8位并行I/O口(地址/數(shù)據(jù)分時(shí)復(fù)用口和通用I/O口),字節(jié)地址為80H,位地址為80H~87H??勺鬏斎?輸出端口使用,又可作地址/數(shù)據(jù)總線分時(shí)傳輸?shù)?位地址和8位數(shù)據(jù)。P1口是單一功能的并行I/O口,字節(jié)地址為90H,位地址為90H~97H。它只用作通用的數(shù)據(jù)輸入/輸出口。P2口是一個(gè)雙功能的8位并行I/O口,字節(jié)地址為80H,位地址為A0H~A7H。可作通用的輸入/輸出口用,又可用作高8位地址總線。P3口是一個(gè)雙功能的8位并行I/O口,字節(jié)地址為B0H,位地址為B0H~B7H,它的第一功能是通用輸入/輸出口,作第二功能用時(shí),各引腳定義如下:讀引腳和讀鎖存器的區(qū)別讀引腳:由傳送指令(MOV)實(shí)現(xiàn);讀鎖存器:讀鎖存器是先從鎖存器中讀取數(shù)據(jù),進(jìn)行處理后,將處理后的數(shù)據(jù)重新寫(xiě)入鎖存器中,這類(lèi)指令成為“讀-修改-寫(xiě)”指令。“讀鎖存器”可以避免因引腳外部電路的原因而使引腳的狀態(tài)發(fā)生改變?cè)斐烧`讀?!俊局袛嘞到y(tǒng)功能實(shí)現(xiàn)中斷與返回、能實(shí)現(xiàn)優(yōu)先權(quán)排隊(duì)、高級(jí)中斷能中斷低級(jí)中斷。優(yōu)點(diǎn)分時(shí)操作、實(shí)時(shí)處理、故障處理。5個(gè)中斷源(優(yōu)先級(jí)高→低)外部中斷0(IE0,0003H)、定時(shí)/計(jì)數(shù)器中斷0(TF0,000BH)、外部中斷1(IE1,0013H)、定時(shí)/計(jì)數(shù)器中斷1(TF1,001BH)、串行口發(fā)送/接收中斷(TI/RI,002BH)CPU中斷響應(yīng)的條件中斷源有中斷請(qǐng)求,此中斷的中斷允許位為1,CPU開(kāi)總中斷。中斷響應(yīng)過(guò)程將相應(yīng)的優(yōu)先級(jí)狀態(tài)觸發(fā)器臵1(以阻斷后來(lái)的同級(jí)或低級(jí)的中斷請(qǐng)求);執(zhí)行一條硬件LCALL指令,即把程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧保存,再將相應(yīng)的中斷服務(wù)程序的入口地址送入PC;執(zhí)行中斷服務(wù)程序。外部中斷請(qǐng)求有2種觸發(fā)方式:電平觸發(fā)和邊沿脈沖觸發(fā)?!俊径〞r(shí)/計(jì)數(shù)器的工作原理T0和T1的實(shí)質(zhì)是加1計(jì)數(shù)器,即每輸入一個(gè)脈沖,計(jì)數(shù)器加1,當(dāng)加到計(jì)數(shù)器全為1時(shí),再輸入一個(gè)脈沖,就使計(jì)數(shù)器歸零,且計(jì)數(shù)器的溢出使TCON中的標(biāo)志位TF0或TF1臵1,向CPU發(fā)出中斷請(qǐng)求。只是輸入的計(jì)數(shù)脈沖來(lái)源不同,把它們分成定時(shí)與計(jì)數(shù)兩種功能。當(dāng)為定時(shí)工作方式時(shí),計(jì)數(shù)器對(duì)內(nèi)部機(jī)器周期計(jì)數(shù),每過(guò)一個(gè)機(jī)器周期,計(jì)數(shù)器增1,直至計(jì)滿溢出。定時(shí)器的定時(shí)時(shí)間與系統(tǒng)的振蕩頻率緊密相關(guān),因MCS-51單片機(jī)的一個(gè)機(jī)器周期由12個(gè)振蕩脈沖組成,如果單片機(jī)系統(tǒng)采用12 MHz晶振,則計(jì)數(shù)周期為1us,這是最短的定時(shí)周期。當(dāng)為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)器對(duì)來(lái)自輸入引腳T0(P3.4)和T1(P3.5)的外部信號(hào)計(jì)數(shù),若前一個(gè)機(jī)器周期采樣值為1,下一個(gè)機(jī)器周期采樣值為0,則計(jì)數(shù)器加1。所以檢測(cè)一個(gè)從1到0的跳變需要兩個(gè)機(jī)器周期,即外部輸入信號(hào)的周期應(yīng)大于或等于兩個(gè)機(jī)器周期,也就是說(shuō)外部輸入信號(hào)的頻率必須小于晶振頻率的1/24,若頻率超過(guò)晶振頻率的1/24,則無(wú)法準(zhǔn)確計(jì)數(shù)脈沖個(gè)數(shù)。雖然對(duì)外部輸入信號(hào)的占空比無(wú)特殊要求,但是為了確保輸入信號(hào)電平在變化之前至少被采樣一次,要求電平保持時(shí)間至少是一個(gè)完整的機(jī)器周期。由定時(shí)器0、定時(shí)器
1、定時(shí)器方式寄存器TMOD(只能進(jìn)行字節(jié)操作,不能位尋址)和定時(shí)器控制寄存器TCON組成(既能進(jìn)行字節(jié)操作,又能位尋址)。定時(shí)器0,定時(shí)器1是16位加法計(jì)數(shù)器,分別由兩個(gè)8位專(zhuān)用寄存器組成;定時(shí)器0由TH0和TL0組成,定時(shí)器1由TH1和TL1組成。(一般當(dāng)T1作為串行通信接口的波特率發(fā)生器時(shí)T0才工作在方式3,此時(shí)TL0可作為8位的定時(shí)/計(jì)數(shù)器;而TH0只能作為8位定時(shí)器。)GATE—門(mén)控位。GATE=0,只要用軟件使TR0(或TR1)臵1就可以啟動(dòng)定時(shí)器,而不管INT0(或INT1)的電平是高還是低。GATE=1,只有INT0(或INT1)引腳為高電平且由軟件使TR0(或TR1)臵1時(shí),才能啟動(dòng)定時(shí)器工作。定時(shí)/計(jì)數(shù)器的初始化1確定工作方式——對(duì)TMOD賦值。2預(yù)臵定時(shí)或計(jì)數(shù)的初值——直接將初值寫(xiě)入TH0、TL0或TH1、TL1。3根據(jù)需要開(kāi)啟定時(shí)/計(jì)數(shù)器中斷——直接對(duì)IE寄存器賦值。4啟動(dòng)定時(shí)/計(jì)數(shù)器工作——將TR0或TR1臵“1”初值X = M-計(jì)數(shù)值,計(jì)數(shù)值與定時(shí)器的工作方式有關(guān)。若是定時(shí)工作模式,計(jì)數(shù)脈沖由內(nèi)部供給,對(duì)機(jī)器周期進(jìn)行計(jì)數(shù),因此計(jì)數(shù)脈沖頻率為f=fosc/12,計(jì)數(shù)周期T=1/f=12/fosc,若定時(shí)時(shí)間為t,則定時(shí)工作方式的計(jì)數(shù)初值:X= M-計(jì)數(shù)值=2n-t/T=2n-t ? fosc/12(例如主頻為6MHZ,要求產(chǎn)生1ms的定時(shí),試計(jì)算計(jì)數(shù)初值X。若設(shè)臵定時(shí)器工作于工作方式1,定時(shí)1ms,則計(jì)數(shù)初值X=216-(6MHZ×1ms)/12=65536-500=65036=FE0CH為定時(shí)方式1,在臵TR0=1以后,定時(shí)立即開(kāi)始,但在定時(shí)時(shí)間到后,還必須用軟件再次裝入初值、重新啟動(dòng)才能開(kāi)始新的定時(shí)。T1為計(jì)數(shù)方式2,在臵TR1=1以后,以計(jì)數(shù)開(kāi)始,在計(jì)數(shù)次數(shù)到以后,自動(dòng)裝入初值并重新計(jì)數(shù),因此軟件設(shè)計(jì)不必再考慮裝入初值。)】【通信方式 并行(多個(gè)數(shù)據(jù)各位同時(shí)傳送,速度快效率高,但占用的數(shù)據(jù)線較多,成本高,僅適用于短距離)和串行(每個(gè)數(shù)據(jù)是一位一位按順序傳送,數(shù)據(jù)傳送的速度有限制,但成本低,一根數(shù)據(jù)線就可以傳送)。串行通訊分類(lèi) 異步通信方式是按字符傳送的,字符的前面有一個(gè)起始位(0),后面有一個(gè)停止位(1),這是一種起止式的通訊方式,字符之間沒(méi)有固定的間隔長(zhǎng)度,有點(diǎn)事數(shù)據(jù)傳送的可靠性較高、能及時(shí)發(fā)現(xiàn)錯(cuò)誤,缺點(diǎn)是通信效率較低。同步通信方式按數(shù)據(jù)塊傳送的,把傳送的字符按順序連接起來(lái),組成數(shù)據(jù)塊,在數(shù)據(jù)塊前面加上特殊的同步字符,作為數(shù)據(jù)塊的起止符號(hào),在數(shù)據(jù)塊后面加上校驗(yàn)字符,用于校驗(yàn)通信中的錯(cuò)誤。同步通信中字符之間是沒(méi)有間隔的,通訊效率比較高。串行通訊傳輸方式單工,半雙工,全雙工。串行口的結(jié)構(gòu) 串行接口控制電路、發(fā)送電路(發(fā)送緩沖器SBUF,發(fā)送控制電路)、接收電路(接受緩沖器SBUF,接收控制電路)。特殊功能寄存器SCON存放串行口的控制和狀態(tài)信息,串行口用定時(shí)器T1作為波特率發(fā)生器(發(fā)送接受時(shí)鐘),電源控制寄存器PCON的最高位SMOD為串行口波特率的倍率控制位,中斷允許控制寄存器IE控制串行通信中斷是否允許。數(shù)據(jù)緩沖器SBUF 兩個(gè)數(shù)據(jù)緩沖器在物理上是相互獨(dú)立的,邏輯上卻占用一個(gè)字節(jié)地址(99H)。發(fā)送時(shí),就是CPU寫(xiě)入SBUF;接受時(shí),就是CPU讀取SBUF的過(guò)程??梢酝瑫r(shí)發(fā)送和接收數(shù)據(jù),對(duì)于發(fā)送緩沖器,由于發(fā)送時(shí)CPU是主動(dòng)的,不會(huì)產(chǎn)生重疊錯(cuò)誤。波特率的計(jì)算方式0、方式2是固定的。方式1,方式3可變。波特率 = 2SMOD / 32 ×(T1的溢出率);T1溢出率 = 單位時(shí)間內(nèi)溢出次數(shù) = 1 /(T1的定時(shí)時(shí)間);而T1的定時(shí)時(shí)間t就是T1溢出一次所用的時(shí)間。此情況下,一般設(shè)T1工作在模式2(8位自動(dòng)重裝初值)。N = 256- t / T,t =(256-N)T =(256-N)×12 / fosc,所以,T1溢出率 = 1/t = fosc / 12(256-N),故,波特率 = 2SMOD / 32 × fosc / 12(256-N)。
若已知波特率,則可求出T1的計(jì)數(shù)初值: y = 256-2SMOD×fosc /(波特率×32×12)串行口初始化確定T1的工作方式(編程TMOD寄存器);計(jì)算T1的初值,裝載TH1、TL1;啟動(dòng)T1(編程TCON中的TR1位);確定串行口控制(編程SCON寄存器)。串行口在中斷方式工作時(shí),還要進(jìn)行中斷設(shè)臵(編程IE、IP寄存器)。方式01、同步8位數(shù)據(jù),波特率為F0SC/12;
2、低位在前,高位在后;
3、TI,再發(fā)送數(shù)據(jù),軟件清0,CLRTI;
4、RI,再接收數(shù)據(jù),軟件清0,CLRRI;
5、同步通信,無(wú)起始位和停止位。方式1
1、一幀為10位信息,1位起始(0),8位數(shù)據(jù),1位停止(1);
2、波特率可變;
3、異步通信;
4、接收時(shí),RB8里是停止位,數(shù)據(jù)位在SBUF(SM2=0)方式2,3是異步11位(以方式2接收數(shù)據(jù)時(shí),REN必須臵1)RS-232C采用負(fù)邏輯電平,規(guī)定DC(-3~-5)為邏輯1,規(guī)定DC(+3~+5)為邏輯0,通常RS-232C的信號(hào)傳輸最大距離為30m,最高傳輸速率為20kbit/s
如果按鍵較多,則常用軟件方法去抖動(dòng)。為了保證CPU對(duì)鍵的一次閉合僅作一次鍵輸入處理,必須去除抖動(dòng)影響。即檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序產(chǎn)生5ms~10ms的延時(shí),等前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài),如果仍保持閉合狀態(tài)電平則確認(rèn)為真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后,也要給5ms~10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序,從而去除了抖動(dòng)影響。
第二篇:?jiǎn)纹瑱C(jī)總結(jié)
單片機(jī)總結(jié)
——20120921030黃國(guó)林 我所在的專(zhuān)業(yè)生物醫(yī)學(xué)工程專(zhuān)業(yè),是一個(gè)理工醫(yī)相結(jié)合的專(zhuān)業(yè),但是側(cè)重的方向還是工程學(xué),對(duì)于計(jì)算機(jī),單片機(jī)的要求比較高,雖然我們?cè)诖笕臅r(shí)候會(huì)有單片機(jī)的專(zhuān)業(yè)課,但是我們?cè)阂渤闪⒌南嚓P(guān)的創(chuàng)新實(shí)驗(yàn)室,進(jìn)行單片機(jī)的學(xué)習(xí),組建自己的相關(guān)團(tuán)隊(duì),做創(chuàng)新研發(fā)。但自己的只是還是有限,因此但是選修了這門(mén)課來(lái)擴(kuò)寬自己的視野,對(duì)以后的單片機(jī)的學(xué)習(xí)打一定得基礎(chǔ)。
51單片機(jī)的運(yùn)用涉及到我們生活中的方方面面,為我們的生活提供了諸多便利,小到我們平時(shí)調(diào)動(dòng)車(chē)流的交通信號(hào)燈,再到我們平時(shí)使用的形形色色的數(shù)碼管,液晶顯示屏等等,下面介紹一個(gè)我學(xué)習(xí)過(guò)的單片機(jī)的報(bào)警裝置與旋轉(zhuǎn)燈的應(yīng)用./* 名稱(chēng):報(bào)警與旋轉(zhuǎn)燈
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit SPK=P3^7;
uchar FRQ=0x00;
//延時(shí)
void DelayMS(uint ms)
{
}
//INT0中斷函數(shù) uchar i;while(ms--)for(i=0;i<120;i++);說(shuō)明:定時(shí)器控制報(bào)警燈旋轉(zhuǎn)顯示,并發(fā)出仿真警報(bào)聲。
void EX0_INT()interrupt 0
{
}
//定時(shí)器0中斷
void T0_INT()interrupt
1{
}
//定時(shí)器1中斷
void T1_INT()interrupt
3{
}
//主程序
void main()
{
P2=0x00;SPK=0x00;TMOD=0x11;TH0=0x00;//T0、T1方式1 TH1=-45000/256;TL1=-45000%256;P2=_crol_(P2,1);TH0=0xfe;TL0=FRQ;SPK=~SPK;TR0=~TR0;//開(kāi)啟或停止兩定時(shí)器,分別控制報(bào)警器的聲音和LED旋轉(zhuǎn) TR1=~TR1;if(P2==0x00)P2=0xe0;//開(kāi)3個(gè)旋轉(zhuǎn)燈 elseP2=0x00;//關(guān)閉所有LED
}
TL0=0xff;IT0=1;IE=0x8b;IP=0x01;TR0=0;TR1=0;while(1){} FRQ++;DelayMS(1);//定時(shí)器啟停由INT0控制,初始關(guān)閉//開(kāi)啟0,1,3號(hào)中斷 //INT0設(shè)為最高優(yōu)先
同時(shí),51單片機(jī)只是單片機(jī)的一類(lèi),單片機(jī)的應(yīng)用十份廣泛,以后我會(huì)更加努力的學(xué)習(xí)相關(guān)的內(nèi)容。
20120921030黃國(guó)林
第三篇:NXP LPC900系列單片機(jī)ISP編程技術(shù)總結(jié)
NXP LPC900系列單片機(jī)ISP編程技術(shù)總結(jié)
1、將編譯好的用戶應(yīng)用程序下載(編程)到LPC900系列單片機(jī)(MCU)內(nèi)部Flash的方法有三種:
(1)在系統(tǒng)編程ISP(In-System Programming)。
(2)在電路編程ICP(In-Circuit Programming)。(3)通用或?qū)S镁幊唐骶幊獭?/p>
編程器編程是一種傳統(tǒng)的并行編程方法,特別適合于DIP封裝(如果是表貼的需專(zhuān)用適配器)或量產(chǎn)階段(批量)的MCU編程,其特點(diǎn)是速度快、可靠性高。其缺點(diǎn)是無(wú)法對(duì)已焊接的表貼MCU編程,而且成本較高,一臺(tái)稍好一點(diǎn)的通用編程器至少在千元以上。目前大部分品牌通用編程器(如Xeltek 3000U等)和周立功LPC PRO專(zhuān)用編程器均支持LPC900編程,而且有些編程器借助專(zhuān)用下載線(如Xeltek ISP-Header01、周立功ICP900-ADP)還可完成ICP編程。
ICP和ISP均采用串行編程方法。其中ICP是一種通用標(biāo)準(zhǔn)(規(guī)范)編程,硬件連接采用PCL(P0.5)、PDA(P0.4)、RST、VDD和GND 五線制,但要求編程時(shí)PCL、PDA、RST和VDD與系統(tǒng)其它電路斷開(kāi)。ICP的加載(啟動(dòng))是由MCU內(nèi)部硬件電路完成的,并調(diào)用MCU內(nèi)部IAP(在應(yīng)用編程,In-Application Programming)實(shí)現(xiàn)Flash編程。上位機(jī)(PC機(jī))通過(guò)專(zhuān)用ICP下載器(如周立功MiniPRO和濤行TX-MiniICP)與目標(biāo)系統(tǒng)相連,編程軟件使用FlashMagic或SmartPRO。
注意:僅老款的LPC932不支持ICP編程,其它LPC900系列的均支持。
關(guān)于ICP編程更多的內(nèi)容可參閱周立功公司的“LPC900系列單片機(jī)ICP解決方案”和“LPC900 在電路編程(ICP)規(guī)范”。
2、與ICP不同,ISP是一種通用非標(biāo)準(zhǔn)串行在線編程,盡管不同IC廠家內(nèi)部實(shí)現(xiàn)ISP編程技術(shù)(算法)不同,但外部硬件連接均采用串口(或USB轉(zhuǎn)串口)的RXD、TXD。根據(jù)ISP的加載啟動(dòng)(Bootloader)方式不同(LPC900的ISP加載機(jī)制可參閱NXP的AN10221-“In-System Programming with the P89LPC932”圖2),LPC900的ISP編程方法又可分為三種:(1)RST 3脈沖法。(2)幀間隔法。(3)直接跳入法。
“3脈沖法”有點(diǎn)類(lèi)似ICP,硬件連接也是采用5線制:RXD、TXD、DTR、RTS和GND,其中DTR控制MCU的VDD,RTS控制RST,且要求ISP編程時(shí)MCU的VDD和RST應(yīng)與系統(tǒng)其它I電路斷開(kāi),具體電路可參閱周立功的“LPC900系列單片機(jī)ICP及ISP使用指南”圖1.16。該方法的ISP加載是在MCU加電復(fù)位后有內(nèi)部硬件完成的,因此適用于剛出廠的全新空片編程和已下載運(yùn)行應(yīng)用程序的升級(jí)編程。就是因編程時(shí)要斷開(kāi)VDD和RST板上連接比較麻煩。
“幀間隔法”硬件連接只需RXD、TXD和GND,簡(jiǎn)稱(chēng)“3線制”,“3線制”是目前大多數(shù)IC廠家ISP編程采用的連接方式,如STC51單片機(jī)等。簡(jiǎn)單方便,成本低(僅需20元左右的RS232轉(zhuǎn)TTL電路或用戶自己用1片MAX232即可)。其原理是MCU檢測(cè)到RXD上幀間隔碼(連續(xù)的低電平,即串口“Break”脈沖)就進(jìn)入ISP模式。雖然這種檢測(cè)是由MCU硬件完成的,但應(yīng)用程序一開(kāi)始必須對(duì)串口進(jìn)行初始化,其C代碼參見(jiàn)上述“使用指南”程序清單1.2。由此可見(jiàn),原則上“幀間隔法”只適合于應(yīng)用程序的升級(jí)編程。不過(guò),對(duì)于剛出廠的全新空片,由于其“引導(dǎo)狀態(tài)位”=1,加電復(fù)位后就自動(dòng)進(jìn)入ISP模式,因此上述三種方法都適用的?!爸苯犹敕ā本褪菓?yīng)用程序判斷某個(gè)開(kāi)關(guān),如接通(為0),則進(jìn)入ISP模式,否則狀態(tài)不變運(yùn)行用戶程序。顯然該方法也必須在應(yīng)用程序中嵌入“開(kāi)關(guān)判斷”代碼(參見(jiàn)上述“使用指南”程序清單1.4)。一般都用于應(yīng)用程序的升級(jí)編程。ISP編程的上位機(jī)程序可使用FlashMagic或ZlgISP900,其中ZlgISP900上述三種方法都可以,但不支持ICP編程。而FlashMagic支持方法(1)和(2)以及ICP編程,對(duì)于“3脈沖法”,編程前必須將其“Advanced Option”中“Hardware Config”的“Use DTR and RTS to enter ISP”勾選上,而“幀間隔法”則不能勾選,此外,除非MCU是全新空片或者確定其引導(dǎo)狀態(tài)位(Status Bit)為1,否則進(jìn)行ISP編程之前必須通過(guò)ISP菜單中“Start Bootloader”的“Send Break Condition”發(fā)送“3脈沖”或“幀間隔”才能使MCU進(jìn)入ISP模式,而且要求:“Interface”選“None(ISP)”;“Baud Rate”選“7200”(內(nèi)部RC振晶)。
注意:由于FlashMagic每次發(fā)ISP命令前要發(fā)2個(gè)同步碼(大寫(xiě)字符U,原理后面闡述),因此其成功率比ZlgISP900。
3、LPC900出廠全新原裝空片,其引導(dǎo)狀態(tài)位(Boot Status Bit)=1,加電復(fù)位后MCU自動(dòng)進(jìn)入ISP模式,不必再通過(guò)“3脈沖法”和“幀間隔法”進(jìn)入ISP,在MCU接收上位機(jī)ISP命令前,上位機(jī)必須通過(guò)發(fā)同步字符“U”讓MCU自動(dòng)跟蹤串口通信波特率,上位機(jī)收到MCU回送的“U”表示跟蹤成功,然后就可進(jìn)行各種ISP操作了,如讀ID,讀配置信息,擦除、編程、加密Flash等。
(1)由于全新空片MCU加電復(fù)位后已自動(dòng)進(jìn)入ISP模式,因此ZlgISP900上述三種方法均可進(jìn)行ISP編程。FlashMagic也不需“Send Break Condition”。(2)FlashMagic每次發(fā)ISP命令前要發(fā)2個(gè)同步字符“U”,而ZlgISP900只在執(zhí)行“進(jìn)入ISP模式”命令時(shí)發(fā)同步字符“U”。
(3)同步字符“U”的十六進(jìn)制代碼是0x55,在MCU的RXD上(加上“起始位”)實(shí)際上就是一串方波,便于MCU自動(dòng)跟蹤測(cè)算波特率。由于MCU是自動(dòng)跟蹤上位機(jī)串口通信波特率的,因此FlashMagic 或 ZlgISP900的波特率選擇不是很重要的,不過(guò)一般建議選擇7200或9600。
4、下載用戶應(yīng)用程序到MCU時(shí)要注意,必須先將配置參數(shù)中引導(dǎo)狀態(tài)位設(shè)置為0,否則即使成功下載應(yīng)用程序,復(fù)位后也無(wú)法正常運(yùn)行,因狀態(tài)位=1,加電復(fù)位后MCU會(huì)自動(dòng)進(jìn)入ISP模式的。
ZlgISP900開(kāi)始運(yùn)行后或在讀入加載文件(*.hex)后總是自動(dòng)將引導(dǎo)狀態(tài)位置為1(也許是個(gè)小Bug?),因此必須在讀入文件后,先將“安全級(jí)別”改為“弱級(jí)”,再進(jìn)入“查看配置信息”,去掉“引導(dǎo)向量=0x1”前的“√”去掉,并點(diǎn)擊“設(shè)置配置信息至緩沖區(qū)”,然后才能將應(yīng)用程序和配置信息下載到MCU。FlashMagic在下載應(yīng)用程序時(shí)會(huì)自動(dòng)將引導(dǎo)狀態(tài)位置為0的。
如果使用ZlgISP900在下載應(yīng)用程序時(shí)將狀態(tài)位置為1了,唯一的辦法就是將狀態(tài)位設(shè)置為0后重新下載一次配置信息。
5、雖然ISP編程方法(“3脈沖法”除外)簡(jiǎn)單方便,而且成本很低,但許多LP900的用戶發(fā)現(xiàn)其成功率很低,特別是對(duì)剛買(mǎi)來(lái)焊上的新片,成功率更低。歸納起來(lái)有如下三大類(lèi)故障:
(1)第一次編程成功了,但用戶程序沒(méi)有正常運(yùn)行。
(2)已下載用戶程序并正常運(yùn)行,但無(wú)法再進(jìn)行ISP編程。
(3)使用ZlgISP900時(shí),點(diǎn)擊“進(jìn)入ISP”后顯示“成功進(jìn)入ISP狀態(tài)”,但無(wú)法進(jìn)行ISP操作,如讀ID顯示出錯(cuò);使用FlashMagic進(jìn)行ISP操作時(shí)顯示通信失敗,并顯示“Failed Autobaud”。這種情況對(duì)于剛焊上的空片出現(xiàn)最多。對(duì)于這三種情況,首先要解決的是所使用的MCU是不是買(mǎi)的全新原裝產(chǎn)品,現(xiàn)在市面上有很多“翻新片”,性能很差,工作不穩(wěn)定。其次是盡量使用物理串口,因?yàn)閁SB轉(zhuǎn)串口工作不穩(wěn)定,其驅(qū)動(dòng)程序也容易出問(wèn)題。
第一類(lèi)故障一般都是下載應(yīng)用程序時(shí)沒(méi)有將狀態(tài)位置為0。解決辦法很簡(jiǎn)單,只要重新將狀態(tài)位置為0寫(xiě)入MCU即可。
第二類(lèi)故障稍復(fù)雜些,如果是使用“幀間隔法”,最有可能的原因是沒(méi)有將“幀間隔法”初始化代碼嵌入到應(yīng)用程序中,另一種可能性是編程時(shí)不小心把MCU的ISP程序所占扇區(qū)(LPC933是扇區(qū)3,其它是扇區(qū)7)給擦除掉了,如果出現(xiàn)這種情況,唯一的辦法就是將ISP程序源碼(可從網(wǎng)上下載到)嵌入到用戶程序工程中重新編譯,并使用ICP或編程器下載到MCU中。
第三類(lèi)故障出現(xiàn)最多,情況也最復(fù)雜,這也是國(guó)內(nèi)很多用戶不愿意使用LPC900的原因之一,特別是以前使用過(guò)其它MCU的(如STC的51系列單片機(jī)),ISP下載很方便,很可靠。盡管NXP和FlashMagic官方網(wǎng)站或論壇上指出出現(xiàn)這種故障的原因大部分是用戶使用不當(dāng)引起的(參見(jiàn)“http://forum.flashmagictool.com/index.php?topic=3628.0”),但據(jù)筆者多年開(kāi)發(fā)經(jīng)驗(yàn)來(lái)看,還是NXP LPC900的ISP程序(或者是FlashMagic、ZlgISP900?)在設(shè)計(jì)上不夠完善引起的,特別是ISP程序中的“自動(dòng)跟蹤波特率”(Autobaud)在設(shè)計(jì)上可能有點(diǎn)小Bug,經(jīng)常失敗!(Failed Autobaud),導(dǎo)致串口無(wú)法正常通信。
對(duì)于這種故障,筆者有點(diǎn)小經(jīng)驗(yàn):就是先運(yùn)行FlashMagic或ZlgISP900使MCU進(jìn)入ISP模式(如果是全新空片已進(jìn)入ISP模式就不必運(yùn)行了?。顺龀绦蚝笤龠\(yùn)行“串口調(diào)試助手”,自動(dòng)重復(fù)發(fā)送同步字符“U”(0x55),當(dāng)正確接收到字符“U”時(shí)表示MCU波特率跟蹤成功,然后再運(yùn)行FlashMagic或ZlgISP900便可進(jìn)行ISP操作了,注意波特率要選擇與“串口調(diào)試助手”一致(一般是9600)。
第四篇:關(guān)于51系列單片機(jī)中斷嵌套
說(shuō)最基本的,老的51單片機(jī)(80C51系列)有5個(gè)中斷源,2個(gè)優(yōu)先級(jí),可以實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套?,F(xiàn)在很多擴(kuò)展的51單片機(jī)已經(jīng)有4個(gè)優(yōu)先級(jí)(或更多)和更多的中斷源了。
在說(shuō)到中斷之前,我先來(lái)定義一下優(yōu)先級(jí),明白了什么是優(yōu)先級(jí),后面的闡述就容易明白了。實(shí)際上很多人都是混淆了優(yōu)先級(jí)的含義,所以才覺(jué)得糊里糊涂。
中斷的優(yōu)先級(jí)有兩個(gè):查詢(xún)優(yōu)先級(jí)和執(zhí)行優(yōu)先級(jí)。
什么是查詢(xún)優(yōu)級(jí)呢?我們從datasheet或書(shū)上看到的默認(rèn)(IP寄存器不做設(shè)置,上電復(fù)位后為00H)的優(yōu)先級(jí):
外部中斷0 > 定時(shí)/計(jì)數(shù)器0 > 外部中斷1 > 定時(shí)/計(jì)數(shù)器1 > 串行中斷 或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART 或 PX0>PT0>PX1>PT1>PS>......其實(shí)都是查詢(xún)優(yōu)級(jí)。首先查詢(xún)優(yōu)先級(jí)是不可以更改和設(shè)置的。這是一個(gè)中斷優(yōu)先權(quán)排隊(duì)的問(wèn)題。是指多個(gè)中斷源同時(shí)產(chǎn)生中斷信號(hào)時(shí),中斷仲裁器選擇對(duì)哪個(gè)中斷源優(yōu)先處理的順序。而這與是否發(fā)生中斷服務(wù)程序的嵌套毫不相干。當(dāng)CPU查詢(xún)各個(gè)中斷標(biāo)志位的時(shí)候,會(huì)依照上述5個(gè)查詢(xún)優(yōu)先級(jí)順序依次查詢(xún),當(dāng)數(shù)個(gè)中斷同時(shí)請(qǐng)求的時(shí)候,會(huì)優(yōu)先查詢(xún)到高優(yōu)查詢(xún)先級(jí)的中斷標(biāo)志位,但并不代表高查詢(xún)優(yōu)先級(jí)的中斷可以打斷已經(jīng)并且正在執(zhí)行的低查詢(xún)優(yōu)先級(jí)的中斷服務(wù)。
例如:當(dāng)計(jì)數(shù)器0中斷和外部中斷1(按查詢(xún)優(yōu)先級(jí),計(jì)數(shù)器0中斷>外部中斷1)同時(shí)到達(dá)時(shí),會(huì)進(jìn)入計(jì)時(shí)器0的中斷服務(wù)函數(shù);但是在外部中斷1的中斷服務(wù)函數(shù)正在服務(wù)的情況下,這時(shí)候任何中斷都是打斷不了它的,包括邏輯優(yōu)先級(jí)比它高的外部中斷0計(jì)數(shù)器0中斷。
而中斷的執(zhí)行優(yōu)先級(jí)就是你對(duì)IP寄存器的設(shè)置了。在2個(gè)優(yōu)先級(jí)的情況下,某位為1,則相應(yīng)的中斷源為高優(yōu)先級(jí);為0,則為低優(yōu)先級(jí)。
關(guān)于中斷的優(yōu)先級(jí)有三條原則:
1、CPU同時(shí)接收到幾個(gè)中斷時(shí),首先響應(yīng)優(yōu)先級(jí)最高的中斷請(qǐng)求;
2、正在進(jìn)行的中斷過(guò)程不能被新的同級(jí)或低行優(yōu)優(yōu)先級(jí)的中斷請(qǐng)求所中斷;
3、正在進(jìn)行的低行優(yōu)優(yōu)先級(jí)中斷服務(wù),能被高行優(yōu)優(yōu)先級(jí)中斷請(qǐng)求中斷;
若:同一執(zhí)行優(yōu)先級(jí)中的中斷申請(qǐng)不止一個(gè)時(shí),則有一個(gè)中斷優(yōu)先權(quán)排隊(duì)問(wèn)題。同一執(zhí)行優(yōu)先級(jí)的中斷優(yōu)先權(quán)排隊(duì),由中斷系統(tǒng)硬件確定的自然優(yōu)先級(jí)形成,優(yōu)先權(quán)自高到低的順序即: 外部中斷0>定時(shí)/計(jì)數(shù)0>外部中斷1>定時(shí)/計(jì)數(shù)1>串行接口
例如:設(shè)置IP = 0x10,即設(shè)置串口中斷為最高優(yōu)先級(jí),則串口中斷可以打斷任何其他的中斷服務(wù)函數(shù)實(shí)現(xiàn)嵌套,且只有串口中斷能打斷其他中斷的服務(wù)函數(shù)。若串口中斷沒(méi)有觸發(fā),則其他幾個(gè)中斷之間還是保持邏輯優(yōu)先級(jí),相互之間無(wú)法嵌套。
關(guān)于中斷嵌套。可以這樣說(shuō),當(dāng)一個(gè)中斷正在執(zhí)行的時(shí)候,如果事先設(shè)置了中斷優(yōu)先級(jí)寄存器IP,那么當(dāng)一個(gè)更高優(yōu)先級(jí)的中斷到來(lái)的時(shí)候會(huì)發(fā)生中斷嵌套,如果沒(méi)有設(shè)置則不會(huì)發(fā)
生任何嵌套;如果有同一個(gè)優(yōu)先級(jí)的中斷觸發(fā),它并不是在“不斷的申請(qǐng)”,而是將它相應(yīng)的中斷標(biāo)志位置即IE寄存器的某位置位,當(dāng)CPU執(zhí)行完當(dāng)前中斷之后,按照查詢(xún)優(yōu)先級(jí)重新去查詢(xún)各個(gè)中斷標(biāo)志位,進(jìn)入相應(yīng)中斷。
要記住,沒(méi)有設(shè)置IP時(shí),單片機(jī)會(huì)按照查詢(xún)優(yōu)先級(jí)(或都說(shuō)邏輯優(yōu)先級(jí))來(lái)排隊(duì)進(jìn)入服務(wù)。如果要想讓某個(gè)中斷優(yōu)先響應(yīng),則要設(shè)置IP,更改執(zhí)行優(yōu)先級(jí)(或者說(shuō)物理優(yōu)先級(jí))。要注意的是,當(dāng)設(shè)置了IP后,當(dāng)?shù)蛨?zhí)行優(yōu)先級(jí)中斷在運(yùn)行時(shí),如果有高執(zhí)行優(yōu)先級(jí)的中斷產(chǎn)生,則會(huì)嵌套調(diào)用進(jìn)入高執(zhí)行優(yōu)先級(jí)的中斷。如果你是用C語(yǔ)言寫(xiě)的程序,并在中斷服務(wù)時(shí) using 了寄存組,要注意,兩個(gè)不同執(zhí)行優(yōu)先級(jí)的中斷服務(wù)程序不要 using 同一組寄存器。
看兩個(gè)問(wèn)題,如下: 在各個(gè)中斷都是低優(yōu)先級(jí)的時(shí)候,如果定時(shí)器0的溢出進(jìn)入中斷。在這個(gè)中斷處理的過(guò)程中,外部中斷0也被觸發(fā)了,那么是不是要發(fā)生中斷嵌套? 如果定時(shí)器0發(fā)生中斷的時(shí)候,進(jìn)入中斷處理程序,這個(gè)時(shí)候外部中斷1條件觸發(fā)條件滿足了。因?yàn)槎〞r(shí)器0自然優(yōu)先級(jí)比外部中斷1高,那么定時(shí)器0的中斷處理程序繼續(xù)執(zhí)行。假設(shè)定時(shí)器中斷處理程序執(zhí)行的過(guò)程中,外部中斷1的觸發(fā)。條件消失了,那么等定時(shí)器0的中斷處理完后,程序還是會(huì)進(jìn)入外部中斷1處理程序嗎?
答案1:在IP事先設(shè)置了外部中斷0的優(yōu)先級(jí)的情況下,CUP會(huì)中止定時(shí)器0的中斷服務(wù),進(jìn)入外部中斷0服務(wù)程序,執(zhí)行完以后再回到定時(shí)器0中斷服務(wù)程序。否則不會(huì)。
答案2:肯定會(huì)進(jìn)入中斷的;外部中斷1的觸發(fā)條件滿足后會(huì)置位外部1的中斷標(biāo)志,即使后來(lái)外部中斷1的觸發(fā)條件消失了,也不會(huì)清除已置位的中斷標(biāo)志,所以等定時(shí)器0的中斷處理完后,程序判斷外部中斷的中斷標(biāo)志為1后依然會(huì)進(jìn)入外部中斷1處理程序的,只有在外部中斷1處理程序中執(zhí)行reti指令才會(huì)硬件清除外部中斷1的中斷標(biāo)志(這也正是為什么中斷返回使用reti指令而不可以用ret替換的原因)...
第五篇:?jiǎn)纹瑱C(jī)項(xiàng)目總結(jié)
單片機(jī)項(xiàng)目總結(jié)
段紹峰、王春光、于和善
一、團(tuán)隊(duì)遇到的難題及解決方案
1、我們?cè)儋I(mǎi)器件時(shí),由于不知道型號(hào)以及性能指標(biāo),所以買(mǎi)了很多并不需要的器件,并且有時(shí)買(mǎi)不到需要的器件,所以被迫更改電路設(shè)計(jì)。
2、在設(shè)計(jì)的過(guò)程中,編輯的程序不能應(yīng)用到我們的硬件中,比如時(shí)鐘的程序不能使始終運(yùn)行,以及溫濕度顯示不夠準(zhǔn)確。在這種情況下,我們不斷更改程序,比如調(diào)整LCD的偏置電壓,有時(shí)還更改連接的端口,最后解決了兩個(gè)顯示問(wèn)題。
3、起始時(shí),我們并沒(méi)有弄懂?dāng)?shù)碼管的共陰以及共陽(yáng)接法,導(dǎo)致電路連接錯(cuò)誤,最后檢查后改正了電路焊接。并且初始時(shí)并沒(méi)有搞懂窗簾控制芯片的輸入電壓的定義,所以導(dǎo)致輸入電壓過(guò)高,燒壞了芯片,解決方法就是換了一個(gè)芯片重新進(jìn)行了連接。
4、在編寫(xiě)時(shí)鐘的程序時(shí),開(kāi)始不會(huì)編寫(xiě)音樂(lè)的程序,經(jīng)過(guò)Google后,明白音樂(lè)的編寫(xiě)時(shí)通過(guò)改變輸出信號(hào)的頻率以及長(zhǎng)短來(lái)改變聲音,最后實(shí)現(xiàn)了音樂(lè)的編寫(xiě)。而且開(kāi)始時(shí)并不知道DHT11芯片的信號(hào)的讀取,所以便在網(wǎng)上搜索數(shù)據(jù)手冊(cè),弄懂其信號(hào)的輸出時(shí)輸出二進(jìn)制數(shù),并且通過(guò)時(shí)間長(zhǎng)短代表0和1,于是懂得了其程序的編寫(xiě)。
5、由于我們的智能家居是由三部分實(shí)現(xiàn),所以需要的端口很多,一個(gè)單片機(jī)不夠,最后在我們減少端口使用未果后,便采取了使用三
個(gè)單片機(jī)的策略,實(shí)現(xiàn)了我們的項(xiàng)目。
二、團(tuán)隊(duì)管理
通過(guò)單片機(jī)課上的系統(tǒng)設(shè)計(jì)項(xiàng)目,作為一個(gè)三人組成的團(tuán)隊(duì),我們?cè)趫F(tuán)隊(duì)管理方面都深有體會(huì)。
團(tuán)隊(duì)成員都要有責(zé)任感,每個(gè)人都要積極做項(xiàng)目,對(duì)單片機(jī)有很高的興趣,遇到困難決不退縮。并且對(duì)項(xiàng)目的總體要有一定的把握與了解,能夠做到相互監(jiān)督,相互督促。在遇到問(wèn)題是相互幫助,齊心協(xié)力解決。但是團(tuán)隊(duì)也是需要責(zé)任分配的,每個(gè)人都要負(fù)責(zé)好自己的職責(zé),最后能夠保證完成自己的任務(wù),最后能夠經(jīng)過(guò)大家的共同努力完成單片機(jī)項(xiàng)目。
三、課程設(shè)計(jì)體會(huì)
1、在項(xiàng)目的制作中,能夠充分利用我們學(xué)過(guò)的知識(shí),并且能增強(qiáng)我們對(duì)知識(shí)的利用能力,電路的設(shè)計(jì)與焊接,以及程序的編輯都得到了充分的鍛煉。并且在項(xiàng)目的制作過(guò)程中,我們根據(jù)自己的需要學(xué)習(xí)知識(shí),并且把知識(shí)應(yīng)用到制作中,這是先明確問(wèn)題所在,通過(guò)一切渠道尋找知識(shí)來(lái)源,學(xué)習(xí),再應(yīng)用。這是我們?cè)诟咧袥](méi)有接觸過(guò)的全新的學(xué)習(xí)方法,讓我們受益匪淺。
2、在設(shè)計(jì)的過(guò)程中,我們先是設(shè)計(jì)溫室控制,以及窗簾的定時(shí)的半自動(dòng)升降,但是在制作過(guò)程發(fā)現(xiàn)這些并不是很好做,而且我們還把繼電氣控制電路和窗簾控制芯片燒掉,這些都是我們未曾想到的問(wèn)題,但是我們及時(shí)改正思路,最后完成了我們的項(xiàng)目。這是我們明白
不要盲目自信,有時(shí)要量力而行。
3、我們?cè)谧鰡纹瑱C(jī)時(shí),花費(fèi)了很多的時(shí)間,而且更改了好幾次電路,浪費(fèi)了不少的東西,成本控制的有點(diǎn)高,超出了我們的預(yù)期。所以我們以后再做項(xiàng)目需要更加詳細(xì)的計(jì)劃,爭(zhēng)取能夠以最小的成本收獲最好的結(jié)果。
四、項(xiàng)目成員貢獻(xiàn)排序
段紹峰完成了窗簾控制電路,并且制作了小房子,完成網(wǎng)站設(shè)計(jì);王春光完成了音樂(lè)始終的設(shè)計(jì)與制作,并且完成了我們的結(jié)題論文。于和善完成了溫濕顯示電路的設(shè)計(jì)與制作,并且制作了PPT以及單片機(jī)項(xiàng)目總結(jié)。三人共同完成了我們的實(shí)驗(yàn)進(jìn)程與感想。
所以三人的貢獻(xiàn)為:段紹峰33%,王春光 33%,于和善33%。
五、課程改革建議
1、希望能夠更新我們的實(shí)驗(yàn)裝備,讓我們使用更加方便。
2、望能夠每星期都有實(shí)驗(yàn),并且每天都能開(kāi)放實(shí)驗(yàn)室。并且希望老師以及學(xué)長(zhǎng)能夠給我們更多的幫助。
3、能夠推薦更加適應(yīng)我們的輔助叢書(shū),幫助我們學(xué)習(xí)。