❶ 怎樣設置單片機一開機時埠高低電平
絕大多數單片機在上電時埠自然全復位到高電平的。你如需低電平就要在初始化中先置一下。
❷ 單片機的基本指令有哪些
不知道你是問的哪種單片機下面給你的是MCS-51的,希望對你有幫助,如有,麻煩採納,謝謝 數據傳送指令共有29條,數據傳送指令一般的操作是把源操作數傳送到目的操作數,指令執行完成後,源操作數不變,目的操作數等於源操作數。如果要求在進行數據傳送時,目的操作數不丟失,則不能用直接傳送指令,而採用交換型的數據傳送指令,數據傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。 x0dx0ax0dx0a[1]. 以累加器A為目的操作數類指令(4條) x0dx0a這4條指令的作用是把源操作數指向的內容送到累加器A。有直接、立即數、寄存器和寄存器間接定址方式: x0dx0ax0dx0aMOV A,data ;(data)→(A) 直接單元地址中的內容送到累加器A x0dx0aMOV A,#data ;#data→(A) 立即數送到累加器A中 x0dx0aMOV A,Rn ;(Rn)→(A) Rn中的內容送到累加器A中 x0dx0aMOV A,@Ri ;((Ri))→(A) Ri內容指向的地址單元中的內容送到累加器A x0dx0ax0dx0a[2]. 以寄存器Rn為目的操作數的指令(3條) x0dx0a這3條指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。有直接、立即和寄存器定址方式: x0dx0ax0dx0aMOV Rn,data ;(data)→(Rn) 直接定址單元中的內容送到寄存器Rn中 x0dx0aMOV Rn,#data ;#data→(Rn) 立即數直接送到寄存器Rn中 x0dx0aMOV Rn,A ;(A)→(Rn) 累加器A中的內容送到寄存器Rn中 x0dx0ax0dx0a[3]. 以直接地址為目的操作數的指令(5條) x0dx0a這組指令的功能是把源操作數指定的內容送到由直接地址data所選定的片內RAM中。有直接、立即、寄存器和寄存器間接4種定址方式: x0dx0ax0dx0aMOV data,data ;(data)→(data) 直接地址單元中的內容送到直接地址單元 x0dx0aMOV data,#data ;#data→(data) 立即數送到直接地址單元 x0dx0aMOV data,A ;(A)→(data) 累加器A中的內容送到直接地址單元 x0dx0aMOV data,Rn ;(Rn)→(data) 寄存器Rn中的內容送到直接地址單元 x0dx0aMOV data,@Ri ;((Ri))→(data) 寄存器Ri中的內容指定的地址單元中數據送到直接地址單元 x0dx0ax0dx0a[4]. 以間接地址為目的操作數的指令(3條) x0dx0a這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。有直接、立即和寄存器3種定址方式: x0dx0ax0dx0aMOV @Ri,data ;(data)→((Ri)) 直接地址單元中的內容送到以Ri中的內容為地址的RAM單元 x0dx0aMOV @Ri,#data ;#data→((Ri)) 立即數送到以Ri中的內容為地址的RAM單元 x0dx0aMOV @Ri,A ;(A)→((Ri)) 累加器A中的內容送到以Ri中的內容為地址的RAM單元 x0dx0ax0dx0a[5]. 查表指令(2條) x0dx0a這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送,使用變址定址方式: x0dx0ax0dx0aMOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址單元中的內容送到累加器A中 x0dx0aMOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內容送到累加器A中 x0dx0ax0dx0a[6]. 累加器A與片外數據存儲器RAM傳送指令(4條) x0dx0a這4條指令的作用是累加器A與片外RAM間的數據傳送。使用寄存器定址方式: x0dx0ax0dx0aMOVX @DPTR,A ;(A)→((DPTR)) 累加器中的內容送到數據指針指向片外RAM地址中 x0dx0aMOVX A, @DPTR ;((DPTR))→(A) 數據指針指向片外RAM地址中的內容送到累加器A中 x0dx0aMOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內容送到累加器A中 x0dx0aMOVX @Ri,A ;(A)→((Ri)) 累加器中的內容送到寄存器Ri指向片外RAM地址中 x0dx0ax0dx0a[7]. 堆棧操作類指令(2條) x0dx0a這4類指令的作用是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位後,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數據必須存放於SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。 x0dx0ax0dx0aPUSH data ;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接定址單元中的數據送到堆棧指針SP所指的單元中 x0dx0aPOP data ;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數據送到直接定址單元中,堆棧指針SP再進行減1操作 x0dx0ax0dx0a[8]. 交換指令(5條) x0dx0a這5條指令的功能是把累加器A中的內容與源操作數所指的數據相互交換。 x0dx0ax0dx0aXCH A,Rn ;(A)←→(Rn)累加器與工作寄存器Rn中的內容互換 x0dx0aXCH A,@Ri ;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內容互換 x0dx0aXCH A,data ;(A)←→(data)累加器與直接地址單元中的內容互換 x0dx0aXCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器與工作寄存器Ri所指的存儲單元中的內容低半位元組互換 x0dx0aSWAP A ;(A 3-0 )←→(A 7-4 )累加器中的內容高低半位元組互換 x0dx0ax0dx0a[9]. 16位數據傳送指令(1條) x0dx0a這條指令的功能是把16位常數送入數據指針寄存器。 x0dx0ax0dx0aMOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常數的高8位送到DPH,低8位送到DPL x0dx0ax0dx0aMCS-51算術運算指令 x0dx0ax0dx0a算術運算指令共有24條,算術運算主要是執行加、減、乘、除法四則運算。另外MCS-51指令系統中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數進行運算,但利用進位標志C,則可進行多位元組無符號整數的運算。同時利用溢出標志,還可以對帶符號數進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數都會對PSW(程序狀態字)有影響。這在使用中應特別注意。 x0dx0ax0dx0a[1]. 加法指令(4條) x0dx0a這4條指令的作用是把立即數,直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。 x0dx0ax0dx0aADD A,#data ;(A)+#data→(A) 累加器A中的內容與立即數#data相加,結果存在A中 x0dx0aADD A,data ;(A)+(data)→(A) 累加器A中的內容與直接地址單元中的內容相加,結果存在A中 x0dx0aADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中 x0dx0aADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中 x0dx0ax0dx0a[2]. 帶進位加法指令(4條) x0dx0a這4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。 x0dx0ax0dx0aADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中 x0dx0aADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內容與立即數連同進位位相加,結果存在A中 x0dx0aADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中 x0dx0aADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A中 x0dx0ax0dx0a[3]. 帶借位減法指令(4條) x0dx0a這組指令包含立即數、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。 x0dx0a這里我們對借位位C的狀態作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數相減時,從一個正數減去一個負數結果為負數,或者從一個負數中減去一個正數結果為正數的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態,則應先對CY進行清零操作。 x0dx0ax0dx0aSUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A中 x0dx0aSUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內容與立即數、連同借位位相減,結果存在A中 x0dx0aSUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A中 x0dx0aSUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A中 x0dx0ax0dx0a[4]. 乘法指令(1條) x0dx0a這個指令的作用是把累加器A和寄存器B中的8位無符號數相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大於FFH,否則OV=0,但進位標志位CY總是等於0。 x0dx0ax0dx0aMUL AB ;(A)×(B)→(A)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B中 x0dx0ax0dx0a[5]. 除法指令(1條) x0dx0a這個指令的作用是把累加器A的8位無符號整數除以寄存器B中的8位無符號整數,所得到的商存在累加器A,而余數存在寄存器B中。除法運算總是使OV和進位標志位CY等於0。如果OV=1,表明寄存器B中的內容為00H,那麼執行結果為不確定值,表示除法有溢出。 x0dx0ax0dx0aDIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數存在寄存器B中。 x0dx0ax0dx0a[6]. 加1指令(5條) x0dx0a這5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執行加1後,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等定址方式: x0dx0ax0dx0aINC A ;(A)+1→(A) 累加器A中的內容加1,結果存在A中 x0dx0aINC data ;(data)+1→(data) 直接地址單元中的內容加1,結果送回原地址單元中 x0dx0aINC @Ri ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中 x0dx0aINC Rn ;(Rn)+1→(Rn)寄存器Rn的內容加1,結果送回原地址單元中 x0dx0aINC DPTR ;(DPTR)+1→(DPTR)數據指針的內容加1,結果送回數據指針中 x0dx0ax0dx0a在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然後在CPU進行加1操作,再輸出到I/O上,這就是「讀—修改—寫」操作。 x0dx0ax0dx0a[7]. 減1指令(4條) x0dx0a這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1後即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等定址方式,當直接地址是I/O口鎖存器時,「讀—修改—寫」操作與加1指令類似。 x0dx0ax0dx0aDEC A ;(A)-1→(A)累加器A中的內容減1,結果送回累加器A中 x0dx0aDEC data ;(data)-1→(data)直接地址單元中的內容減1,結果送回直接地址單元中 x0dx0aDEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中 x0dx0ax0dx0aDEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內容減1,結果送回寄存器Rn中 x0dx0ax0dx0a[8]. 十進制調整指令(1條) x0dx0a在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之後,其功能是將執行加法運算後存於累加器A中的結果進行調整和修正。 x0dx0ax0dx0aDA A x0dx0ax0dx0aMCS-51邏輯運算及移位指令 x0dx0ax0dx0a邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等定址方式。這類指令一般不影響程序狀態字(PSW)標志。 x0dx0ax0dx0a[1]. 循環移位指令(4條) x0dx0a這4條指令的作用是將累加器中的內容循環左或右移一位,後兩條指令是連同進位位CY一起移位。 x0dx0ax0dx0aRL A ;累加器A中的內容左移一位 x0dx0aRR A ;累加器A中的內容右移一位 x0dx0aRLC A ;累加器A中的內容連同進位位CY左移一位 x0dx0aRRC A ;累加器A中的內容連同進位位CY右移一位 x0dx0ax0dx0a[2]. 累加器半位元組交換指令(1條) x0dx0a這條指令是將累加器中的內容高低半位元組互換,這在上一節中內容已有介紹。 x0dx0ax0dx0aSWAP A ; 累加器中的內容高低半位元組互換 x0dx0ax0dx0a[3]. 求反指令(1條) x0dx0a這條指令將累加器中的內容按位取反。 x0dx0ax0dx0aCPL A ; 累加器中的內容按位取反 x0dx0ax0dx0a[4]. 清零指令(1條) x0dx0a這條指令將累加器中的內容清0。 x0dx0ax0dx0aCLR A ; 0→(A),累加器中的內容清0 x0dx0ax0dx0a[5]. 邏輯與操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯與操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。 x0dx0aANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。 x0dx0aANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。 x0dx0aANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。 x0dx0aANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。 x0dx0aANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。 x0dx0ax0dx0a[6]. 邏輯或操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。 x0dx0aORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。 x0dx0aORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。 x0dx0aORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。 x0dx0aORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。 x0dx0aORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。 x0dx0ax0dx0a[7]. 邏輯異或操作指令(6條) x0dx0a這組指令的作用是將兩個單元中的內容執行邏輯異或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。 x0dx0ax0dx0aXRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。 x0dx0aXRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。 x0dx0aXRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。 x0dx0aXRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。 x0dx0aXRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。 x0dx0aXRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中。 x0dx0ax0dx0aMCS-51控制轉移指令 x0dx0ax0dx0a控制轉移指令用於控製程序的流向,所控制的范圍即為程序存儲器區間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB位元組進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執行一般都不會對標志位有影響。 x0dx0ax0dx0a[1]. 無條件轉移指令(4條) x0dx0a這組指令執行完後,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。 x0dx0ax0dx0aLJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址) x0dx0ax0dx0aAJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序計數器賦予新值(11位地址),(PC 15-11 )不改變 x0dx0ax0dx0aSJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值 x0dx0ax0dx0aJMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值 x0dx0ax0dx0a[2]. 條件轉移指令(8條) x0dx0a程序可利用這組豐富的指令根據當前的條件進行判斷,看是否滿足某種特定的條件,從而控製程序的轉向。 x0dx0ax0dx0aJZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aJNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aCJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aDJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0aDJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內容減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行 x0dx0ax0dx0a[3]. 子程序調用指令(1條) x0dx0a子程序是為了便於程序編寫,減少那些需反復執行的程序佔用多餘的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調用命令使程序按調用的地址去執行,這就需要子程序的調用指令和返回指令。 x0dx0ax0dx0aLCALL addr16 ; 長調用指令,可在64kB空間調用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分別從堆棧中彈出調用子程序時壓入的返回地址 x0dx0ax0dx0aACALL addr11 ; 絕對調用指令,可在2kB空間調用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 ) x0dx0ax0dx0aRET ; 子程序返回指令。此時(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP) x0dx0ax0dx
❸ mcs51系列單片機啟動時有沒有操作系統支持
mcs51系列單片機啟動時沒有操作系統支持。當我們運行的程序不是「足夠」復雜,是我們人為可以控制的情況下在單片機中是不需要操作系統的,直接寫程序,操作硬體就可以完成各種我們所需要的動作。
❹ 請教單片機的啟動過程
看過一篇文章說道:
CPU啟動後到有兩種方式:
1、CPU重啟後,將其PC寄存器設為特定地址,只要用戶的起始程序存在這個地址,就可以被正確執行;
——貌似51就是啟動後將PC寄存器設為00H。
2、CPU重啟後,會將CPU中存儲中斷矢量表地址的寄存器設為某特定地址,接著引發RESET中斷,程序
員只要把中斷矢量表存儲在這個地址。並指定RESET中斷的處理程序為自己寫的某個函數,則該函數就可以在
開機後被CPU執行。
——中斷矢量表不是固定在FLASH內部的一段內存嗎?怎麼又多了個存儲中斷矢量表的寄存器?
——棧、堆等的初始化到底是在RESET中斷的執行之前還是之後?
由於,應用到的程序一直是用C寫的,很少去關心單片機的啟動過程,往往編譯器也有現成的傻瓜版啟動代碼,
至於匯編畢業後就都忘得7788了。所以,單片機啟動過程這一塊我還是很亂很迷糊的,希望哪位有經驗的朋友
能夠指導或者做個概述一下,萬分感謝!~
❺ 單片機是怎樣執行指令的
單片機(Microcontrollers)是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。
❻ 單片機的三種復位方式
一、高電平復位
復位電路的工作原理 在書本上有介紹,51單片機要復位只需要在第9引腳接個高電平持續2us就可以實現,那這個過程是如何實現的呢?在單片機系統中,系統上電啟動的時候復位一次,當按鍵按下的時候系統再次復位,如果釋放後再按下,系統還會復位。所以可以通過按鍵的斷開和閉合在運行的系統中控制其復位。
(1)、上電復位
電容的的大小是10uf,電阻的大小是10k。所以根據公式,可以算出電容充電到電源電壓的0.7倍(單片機的電源是5V,所以充電到0.7倍即為3.5V),需要的時間是10K*10UF=0.1S。也就是說在電腦啟動的0.1S內,電容兩端的電壓時在0~3.5V增加。這個時候10K電阻兩端的電壓為從5~1.5V減少(串聯電路各處電壓之和為總電壓)。所以在0.1S內,RST引腳所接收到的電壓是5V~1.5V。在5V正常工作的51單片機中小於1.5V的電壓信號為低電平信號,而大於1.5V的電壓信號為高電平信號。所以在開機0.1S內,單片機系統自動復位(RST引腳接收到的高電平信號時間為0.1S左右)。
(2) 按鍵復位
在單片機啟動0.1S後,電容C兩端的電壓持續充電為5V,這是時候10K電阻兩端的電壓接近於0V,RST處於低電平所以系統正常工作。當按鍵按下的時候,開關導通,這個時候電容兩端形成了一個迴路,電容被短路,所以在按鍵按下的這個過程中,電容開始釋放之前充的電量。隨著時間的推移,電容的電壓在0.1S內,從5V釋放到變為了1.5V,甚至更小。根據串聯電路電壓為各處之和,這個時候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平。單片機系統自動復位。
總結: 1、復位電路的原理是單片機RST引腳接收到2US以上的電平信號,只要保證電容的充放電時間大於2US,即可實現復位,所以電路中的電容值是可以改變的。 2、按鍵按下系統復位,是電容處於一個短路電路中,釋放了所有的電能,電阻兩端的電壓增加引起的。
二、低電平復位
在使用STM32晶元時,常用的復位方式為按鍵復位,且為低電平復位。其原理與上述高電平復位相反,分析也挺簡單,這里不在贅述,只給出按鍵復位原理
單片機的復位引腳RST(全稱RESET)出現2個機器周期以上的復位電平時,單片機就執行復位操作。如果RST持續為復位電平,單片機就處於循環復位狀態。當單片機處於正常電平時就正常轉入執行程序。
當單片機上電瞬間由於電容電壓不能突變會使電容兩邊的電位相同,此時RST為低電平,之後隨著時間推移電源通過電阻對電容充電,充滿電時RST為高電平。正常工作為高電平,低電平復位。即上電低電平,然後轉向高電平。當單片機上電瞬間由於電容電壓不能突變會使電容兩邊的電位相同,此時RST為高電平,之後隨著時間推移電源負極通過電阻對電容放電,放完電時RST為低電平。正常工作為低電平,高電平復位。
❼ 單片機怎麼實現一個按鈕(非自鎖)控制開關機!求簡單的辦法!求圖!求解釋!求真相!(沒圖不好理解!)
單片機不熟悉,但在PLC里方法有好幾個
1 用上升沿控制,一下開機,下一次關機
2 用下降沿控制,同上
3 長按幾秒關機
4 計數的辦法,2秒內按3次關機
5 其他特殊處理
❽ 單片機在開機時不需要復位
單片機在開機時不需要復位,要復位,不然不復位的情況下打出來會不一樣
❾ 怎麼用C語言/C51程序實現單片機按鍵長按開機與長按關機
首先需要硬體支持,也就是單片機某個引腳可以控制斷電和維持上電
按鍵的的作用也可以給單片機供電,並且還要有個專門的引腳檢測按鍵狀態。
軟體:首先是長按判斷。這個最好用按鍵掃描。就是檢測按鍵按下時候,定時器計時,如果松開就立即清零。在設置一個功能函數檢測定時值,大於兩秒後,就表示長按。
按鍵按下單片機供電開始計時,如果達到長按標准,就輸出引腳控制持續供電,這時候按鍵鬆了也不會斷電。
運行期間,按鍵再次按下並符合長按,那木引腳輸出停止供電,這時候如果按鍵松開,那就徹底沒電關機。
❿ 51單片機lcd如何開機顯示
1、內核初始化。
2、強制PC指針指向中斷向量表的復位中斷向量執行復位中斷函數。
3、在復位中斷函數中調用SystemInit函數,初始化時鍾,配置中斷向量表等。
4、調用main函數完成全局/靜態變數的初始化和重定位工作,初始化堆棧和庫函數。
5、跳轉到main函數中執行二內核初始化在單片機上電後首先會進行一系列內核的初始化。