㈠ 單片機的內部構造及其工作原理是什麼
單片機是一種集成在電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的計算機系統。
單片機的工作過程
單片機自動完成賦予它的任務的過程,也就是單片機執行程序的過程,即一條條執行的指令的過程,所謂指令就是把要求單片機執行的各種操作用的命令的形式寫下來,這是在設計人員賦予它的指令系統所決定的,一條指令對應著一種基本操作;單片機所能執行的全部指令,就是該單片機的指令系統,不同種類的單片機,其指令系統亦不同。為使單片機能自動完成某一特定任務,必須把要解決的問題編成一系列指令(這些指令必須是選定單片機能識別和執行的指令),這一系列指令的集合就成為程序,程序需要預先存放在具有存儲功能的部件——存儲器中。存儲器由許多存儲單元(最小的存儲單位)組成,就像大樓房有許多房間組成一樣,指令就存放在這些單元里,單元里的指令取出並執行就像大樓房的每個房間的被分配到了唯一一個房間號一樣,每一個存儲單元也必須被分配到唯一的地址號,該地址號稱為存儲單元的地址,這樣只要知道了存儲單元的地址,就可以找到這個存儲單元,其中存儲的指令就可以被取出,然後再被執行。 程序通常是順序執行的,所以程序中的指令也是一條條順序存放的,單片機在執行程序時要能把這些指令一條條取出並加以執行,必須有一個部件能追蹤指令所在的地址,這一部件就是程序計數器PC(包含在CPU中),在開始執行程序時,給PC賦以程序中第一條指令所在的地址,然後取得每一條要執行的命令,PC在中的內容就會自動增加,增加量由本條指令長度決定,可能是1、2或3,以指向下一條指令的起始地址,保證指令順序執行。
㈡ 單片機程序設計結構有哪些
單片機程序設計結構一般都是由連續結構以及規劃結構,這兩個結構是非常好的
㈢ 誰能幫我講解單片機前後台系統設計的一般流程
前後台程序不是樓上說的那個意思..
前後台程序一般指著是沒有 操作系統的 程序,,
所謂的前台.就是主動去判斷某個事務..這個是主循環裡面要乾的.
也你就是代碼主要要寫的,
後台..指的是,中斷,也就是不需要你的cpu去判別..他會自動進入某一種狀態.
你在這個狀態下干什麼你要幹事就可以了.
至於架構.如果是小系統的話.其實也沒有什麼架構可以說的.
能完成任務就好了.
主要代碼寫的規范一點.
稍微大一點的系統...
分好模塊一步一步做....然後弄個大循環組合一下.
單片機畢竟不是pc ,所擁有的資源比較有限..沒有一種通用的方法.
畢竟要根據你項目的大小,,mcu本身的ram rom等資源,,
有時候明知道這樣寫代碼結構不好,,但是rom或ram或時間有限.
只好如此寫了.
㈣ 誰來分享下STM32的程序框架
首先我對框架的看法:框架是為了方便我們程序員開發 減少代碼量,及代碼質量的工具 。框架(Framework)是整個或部分系統的可重用設計,表現為一組抽象構件及構件實例間交互的方法。
也就說,程序框架更多的從代碼可用性角度來定義,對於應用層,這樣的概念很多,比如java開發框架,net框架等等,在單片機裡面,我認為:可能更多的框架應該是面向硬體操作行為,即做好單片機基本硬體模塊的操作函數,封裝成一個API函數,然後再你main route裡面使用這些API函數的介面,建立與外界的聯系。
我一般的做法是:
1.做好基本數據結構的重定義,比如typedef一些基本數據類型,使之能夠通用。。
2.做好所有埠的映射,因為單片機的管腳是很多是復用的,做好這些cross-pin,對於復用很有幫助。。
3.做好涉及部件介面的操作函數介面,比如IIC匯流排,做好IIC匯流排操作的代碼,包括read,write函數;
4.做好基本的通用函數介面,比如延時功能,串口調試功能,這些功能介面盡量做到與通用匹配,比如使用delay_ms(),sprintf等等;
5.每一個介面對應一個C文件和H文件,這樣組織框架很容易,而且也容易尋找不同介麵包含在那些文件裡面。。
其他的,就是自己的一些開發習慣了吧。。
㈤ 請各位各位江湖人士幫忙,求有關單片機的程序
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0_SEVER
ORG 30H
MAIN:;主程序
MOV P1,#00H
CLR P3.0
CLR P3.1
CLR 00H;初始化顯示,關顯示
MOV R0,#99;裝初值
MOV R1,#00H;顯示低位
MOV R2,#00H;顯示高位
MOV DPTR,#TABLE;LED顯示段位碼首地址
MOV TMOD,#01H;T0定時方式1
MOV IE,#82H;開T0中斷
MOV TL0,#LOW(65536-5000)
MOV TH0,#HIGH(65536-5000);裝定時初值,定時5ms
SETB TR0;啟動定時器
LOOP:
MOV A,R0
MOV B,#10
DIV AB
MOV R1,B;顯示低位暫存
MOV R2,A;顯示高位暫存
ACALL DELAY1S;調用1s延時子程序
DJNZ R0,LOOP;判斷倒計時是否完畢
AJMP MAIN;循環執行
DELAY1S:;延時1s子程序
MOV R7,#20
DEL1:
MOV R6,#100
DEL2:
MOV R5,#248
DJNZ R5,$
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
T0_SEVER:;中斷服務子程序
JB 00H,LOOP1;判斷顯示標志位
SETB P3.0
CLR P3.1
MOV A,R1
MOVC A,@A+DPTR
MOV P1,A;顯示低位
SETB 00H;置顯示標志位
AJMP RETURN
LOOP1:
CLR P3.0
SETB P3.1
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A;顯示高位
CLR 00H;清顯示標志位
RETURN:
MOV TL0,#LOW(65536-5000)
MOV TH0,#HIGH(65536-5000);重裝定時器初值
RETI
TABLE:;LED顯示段碼表
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
C51代碼的程序實時性不好,時間不準,望指出問題。
/*程序名:99~0倒計時程序*/
/*程序功能:用P1口和P3.0、P3.1口實現動態顯示,完成99~0的倒計時功能*/
/*作者:嚴崢暉*/
#include<at89x51.h>
typedef unsigned char uchar;
uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
bit bdata flag="0";
uchar data high_dis,low_dis;
void delay(void)//延時子函數
{
uchar i,j,k;
for(i=0;i<=20;i++)
for(j=0;j<=100;j++)
for(k=0;k<=248;k++);
}
void init(void)//初始化函數
{
P1=0x00;
P3_0=0;
P3_1=0;
IE="0x82";
TMOD="0x01";
TL0=(65536-5000)%256;
TH0=(65536-5000)/256;
TR0=1;
}
void calc(uchar time)//計算顯示高低位
{
high_dis=time/10;
low_dis=time%10;
}
void sever_t0(void) interrupt 1//中斷服務子程序
{
if(flag==0)
{
P3_0=1;
P3_1=0;
P1=led[low_dis];
flag=~flag;
}
else
{
P3_0=0;
P3_1=1;
P1=led[high_dis];
flag=~flag;
}
TL0=(65536-5000)%256;
TH0=(65536-5000)/256;
}
int main(void)//主函數
{
uchar i="99";
init();
do
{
calc(i);
delay();
i--;
}
while(i>=0);
}
㈥ 單片機RISC結構是什麼
.CISC(complex instruction set computer)即復雜指令集,在20世紀90年代前被廣泛的使用,其特點是通過存放在只讀存儲器中的微碼(microcode)來控制整個處理器的運行。
一條指令往往可以完成一串運算的動作,但卻需要多個時鍾周期來執行。隨著需求的不斷增加,設計的指令集越來越多,為支持這些新增的指令,計算機的體系結構會越來越復雜。然而,在CISC指令集的各種指令中,其使用頻率卻相差懸殊,大約有20%的指令會被反復使用,占整個程序代碼的80%。而餘下的80%的指令卻不經常使用,在程序設計中只佔20%,顯然,這種結構是不太合理的。
RISC和CISC在構架上有著幾個不同的地方。
1)首先是指令集的設計上,RISC構架的指令格式和長度通常是固定的(如ARM是32位的指令)、且指令和定址方式少而簡單、大多數指令在一個周期內就可以執行完畢;CISC構架下的指令長度通常是可變的、指令類型也很多、一條指令通常要若干周期才可以執行完。由於指令集多少與復雜度上的差異,使RISC的處理器可以利用簡單的硬體電路設計出指令解碼(decode)功能,這樣易於流水線的實現。相對的CISC則需要通過只讀存儲器里的微碼來進行解碼,CISC因為指令功能與指令參數變化較大,執行流水線作業時有較多的限制。
2)其次,RISC在結構設計上是一個載入/存儲(load/store)的構架,只有載入和存儲指令可以訪問存儲器,數據處理指令只對寄存器的內容進行操作。為了加速程序的運算,RISC會設定多組的寄存器,並且指定特殊用途的寄存器。CISC構架則允許數據處理指令對存儲器進行操作,對寄存器的要求相對不高。
RISC(精簡指令集計算機)和CISC(復雜指令集計算機)是當前CPU的兩種架構。它們的區別在於不同的CPU設計理念和方法。
早期的CPU全部是CISC架構,它的設計目的是要用最少的機器語言指令來完成所需的計算任務。比如對於乘法運算,在CISC架構的CPU上,您可能需要這樣一條指令:MUL ADDRA, ADDRB就可以將ADDRA和ADDRB中的數相乘並將結果儲存在ADDRA中。將ADDRA, ADDRB中的數據讀入寄存器,相乘和將結果寫回內存的操作全部依賴於CPU中設計的邏輯來實現。這種架構會增加CPU結構的復雜性和對CPU工藝的要求,但對於編譯器的開發十分有利。比如上面的例子,C程序中的a*=b就可以直接編譯為一條乘法指令。今天只有Intel及其兼容CPU還在使用CISC架構。
RISC架構要求軟體來指定各個操作步驟。上面的例子如果要在RISC架構上實現,將ADDRA, ADDRB中的數據讀入寄存器,相乘和將結果寫回內存的操作都必須由軟體來實現,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。這種架構可以降低CPU的復雜性以及允許在同樣的工藝水平下生產出功能更強大的CPU,但對於編譯器的設計有更高的要求。
㈦ 單片機解曼徹斯特 碼的C程序構架
呵呵,問題有技術含量,一般有這方面的
軟體操作吧,我們工作用過那種區域網,可以在主機上生成代碼直接傳輸到單片機上,不好意思,我不知道
什麼c
程序構架,我
了解的是現在的程序都是
認為控制設計出來的,實際運行的
還是某些條代碼
㈧ 單片機C語言編程的main函數整體構架是什麼樣子
這個要看具體功能,某些程序順序執行,最後結束或者等待中斷,某些程序是死循環。如
void main()
{
語句段1;
語句段2;
......
while(1)
{循環體;}
}
㈨ 單片機的cpu採用的什麼架構
8051單片機是CISC
計算機的x86處理器是表面上是CISC,但是RISC結構的。
PIC、AVR、ARM單片機就是RISC的了。