本文主要是關(guān)于51單片機的相關(guān)介紹,并著重對51單片機的原理及其應(yīng)用進行了詳盡的闡述。
51單片機
51單片機是對所有兼容Intel 8031指令系統(tǒng)的單片機的統(tǒng)稱。該系列單片機的始祖是Intel的8004單片機,后來隨著Flash rom技術(shù)的發(fā)展,8004單片機取得了長足的進展,成為應(yīng)用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測控系統(tǒng)之中。很多公司都有51系列的兼容機型推出,今后很長的一段時間內(nèi)將占有大量市場。51單片機是基礎(chǔ)入門的一個單片機,還是應(yīng)用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。
功能
·8位CPU·4kbytes程序存儲器(ROM) (52為8K)
·128bytes的數(shù)據(jù)存儲器(RAM) (52有256bytes的RAM)
·32條I/O口線·111條指令,大部分為單字節(jié)指令
·21個專用寄存器
·2個可編程定時/計數(shù)器·5個中斷源,2個優(yōu)先級(52有6個)
·一個全雙工串行通信口
·外部數(shù)據(jù)存儲器尋址空間為64kB
·外部程序存儲器尋址空間為64kB
·邏輯操作位尋址功能·雙列直插40PinDIP封裝
CPU:由運算和控制邏輯組成,同時還包括中斷系統(tǒng)和部分外部特殊功能寄存器;
RAM:用以存放可以讀寫的數(shù)據(jù),如運算的中間結(jié)果、最終結(jié)果以及欲顯示的數(shù)據(jù);
ROM:用以存放程序、一些原始數(shù)據(jù)和表格;
I/O口:四個8位并行I/O口,既可用作輸入,也可用作輸出
T/C:兩個定時/記數(shù)器,既可以工作在定時模式,也可以工作在記數(shù)模式;
五個中斷源的中斷控制系統(tǒng);
一個全雙工UART(通用異步接收發(fā)送器)的串行I/O口,用于實現(xiàn)單片機之間或單片機與微機之間的串行通信;
片內(nèi)振蕩器和時鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最佳振蕩頻率為6M—12M。
學(xué)習(xí)
作為一個初學(xué)者,如何單片機入門?
實際上,其實不需要多少東西,會簡單的C語言,知道51單片機的基本結(jié)構(gòu)就可以了。一般的大學(xué)畢業(yè)生都可以了,自學(xué)過這2門課程的高中生也夠條件。設(shè)備上,一般是建議購買一個仿真器,例如,的“雙功能下載線”就具有良好的穩(wěn)定性和較快的下載速度,上位機可擴展,可以下載更多的單片機及嵌入式芯片。通過實驗,這樣才可以進行實際的,全面的學(xué)習(xí)。日后在工作上,仿真器也大有用處。還有,一般光有仿真器是不行,還得有一個實際的電路,即學(xué)習(xí)板,如圖,即為,單片機最小系統(tǒng)。
學(xué)習(xí)板以強大的接口為主,單片機的學(xué)習(xí)分兩方面,一方面是單片機的原理及內(nèi)部結(jié)構(gòu),另一方面是單片機的接口技術(shù)。這些都是需要平時多積累,多動手,多思考,這樣才能學(xué)好單片機技術(shù)。
注:“雙功能下載線”在百度文庫里有詳細的使用說明,并且上位機會定期更新以支持更多的單片機。
單片機學(xué)習(xí)的4個階段
一、整體了解
要知道 單片機是什么?單片機有何用?如何系統(tǒng)學(xué)習(xí)單片機?單片機系統(tǒng)設(shè)計的流程是怎樣的,需要掌握哪些輔助軟件?
了解這些之后,我們的學(xué)習(xí)就有了目標(biāo)和方向。
二、揭秘 單片機很難學(xué),是因為其內(nèi)部結(jié)構(gòu)、編程語言抽象,且實際應(yīng)用中與其他電子技術(shù)和元器件知識相互關(guān)聯(lián),需結(jié)合起來一起設(shè)計開發(fā)產(chǎn)品。所以,第二階段要了解單片機的內(nèi)部結(jié)構(gòu)是怎樣的?單片機開發(fā)經(jīng)常會用到哪些電子技術(shù)和元器件知識?如何將一條條編程指令組合成一段段有效的程序?
三、解密 之所以單片機能成為控制核心,設(shè)計出包羅萬象的應(yīng)用系統(tǒng)來,是因為開發(fā)者利用了單片機提供的種種功能及各種外設(shè)。所以,第三階段我們要掌握單片機的各種功能,再加上諸如傳感器、模數(shù)轉(zhuǎn)換、掃描顯示、串行、中斷的應(yīng)用思維,結(jié)合更多的元器件、電子電路知識,逐個學(xué)習(xí)、體會實際的單片機系統(tǒng)的秘密。
四、遠航 通過以上三個階段,讀者基本就可掌握單片機的應(yīng)用了。但要設(shè)計出豐富的單片機系統(tǒng),解決復(fù)雜的實際問題,還需要了解更多的外設(shè)知識及其與單片機的聯(lián)系(如電動機、各類
存儲器、繼電器、紅外管等)。這些需要不斷的學(xué)習(xí)和積累。有時候,接到一些開發(fā)任務(wù),就需要你針對這個任務(wù)自覺地去搜集、學(xué)習(xí)相關(guān)知識,在實踐中不斷學(xué)習(xí)和提高。
51單片機怎么驅(qū)動直流電機c語言
有3種方案:
第一種,通過PWM脈寬調(diào)制輸出方法控制轉(zhuǎn)速,控制占空比的大小可以實現(xiàn)調(diào)速!
第二種,通過AD轉(zhuǎn)換的方法控制直流電機的電壓
第三種,用xtr115程控電流源來控制直流電機(類似第二種方法)
如果以上的驅(qū)動能力不夠的話再加上一個電壓跟隨器!
一下以L298電機驅(qū)動電路為例。
L298是SGS公司的產(chǎn)品,L298N為15個管角的單塊集成電路,高電壓,高電流,四通道驅(qū)動,設(shè)計用L298N來接收DTL或者TTL邏輯電平,驅(qū)動感性負載(比如繼電器,直流和步進馬達)和開關(guān)電源晶體管。內(nèi)部包含4通道邏輯驅(qū)動電路,其額定工作電流為 1 A,最大可達 1.5 A,Vss 電壓最小 4.5 V,最大可達 36 V;Vs 電壓最大值也是 36 V。L298N可直接對電機進行控制,無須隔離電路,可以驅(qū)動雙電機。
當(dāng)使能端為高電平時,輸入端IN1為PWM信號,IN2為低電平信號時,電機正轉(zhuǎn);輸入端IN1為低電平信號,IN2為PWM信號時,電機反轉(zhuǎn);;IN1與IN2相 同時,電機快速停止。當(dāng)使能端為低電平時,電動機停止轉(zhuǎn)動。
在對直流電動機電壓的控制和驅(qū)動中,半導(dǎo)體功率器件(L298)在使用上可以分為兩種方式:線性放大驅(qū)動方式和開關(guān)驅(qū)動方式在線性放大驅(qū)動方式。
半導(dǎo)體功率器件工作在線性區(qū)優(yōu)點是控制原理簡單,輸出波動小,線性好,對鄰近電路干擾小,缺點為功率器件工作在線性區(qū),功率低和散熱問題嚴重。開關(guān)驅(qū)動方式是使半導(dǎo)體功率器件工作在開關(guān)狀態(tài),通過脈調(diào)制(PWM)來控制電動機的電壓,從而實現(xiàn)電動機轉(zhuǎn)速的控制。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit MOTOR_A_1=P3^6;
sbit MOTOR_A_2=P3^7;
sbit k1=P1^0; //定義k1為p1.0口
sbit k2=P1^1; //定義k2為p1.1口
sbit k3=P1^2; //定義k3為p1.2口
sbit k4=P1^3; //定義k4為p1.3口
uchar T=0; //定時標(biāo)記
uchar W=0; //脈寬值 0~100
uchar A=0; //方向標(biāo)記 0,1
uchar k=0; //按鍵標(biāo)記
uchar i=0; //計數(shù)變量
uchar code table1[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table2[]={0xfe,0xfb,0xfd,0xf7};
void delayms(uint t);
void disp(void)
{
P2=table2[3];
P0=table1[W]; //顯示占空比個位
delayms(1); //延時1ms
P2=0xff; //P0清1
P2=table2[2];
P0=table1[W/100]; //顯示占空比百位
delayms(1); //延時1ms
P2=0xff; //P0清1
P2=table2[1];
P0=table1[W/10]; //顯示占空比十位
delayms(1); //延時1ms
P2=0xff; //P0清1
P2=table2[0];
P0=table1[A]; //顯示方向
delayms(1); //延時1ms
P2=0xff; //P0清1
}
void init(void)
{
//啟動中斷
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
//設(shè)置定時時間
TH0=0xff;
TL0=0xf6;
}
void timer0() interrupt 1
{
//重置定時器時間
TH0=0xff;
TL0=0xf6;
T++; //定時標(biāo)記加1
disp(); //數(shù)碼管顯示
if(k==0)
{
if(T》W)
MOTOR_A_1 =0;
else
MOTOR_A_1 =1;
}
else
{
if(T》W)
MOTOR_A_2 =0;
else
MOTOR_A_2 =1;
}
if(T==100)
T=0;
}
void delayms(uint t)
{
uchar j;
while(t--)
{
for(j=0;j《250;j++) //循環(huán)250次
{
_nop_(); //系統(tǒng)延時
_nop_(); //系統(tǒng)延時
_nop_(); //系統(tǒng)延時
_nop_(); //系統(tǒng)延時
}
}
}
void key(void) //按鍵判斷程序
{
if(k1==0) //按鍵1按下
{
while(k1==0); //按鍵1抬起
if(W==100) //如果脈寬為100
W=0; //脈寬置0
else
W+=1; //否則加1
}
else if(k2==0) //按鍵2按下
{
while(k2==0); //按鍵2抬起
if(W==0) //如果脈寬為0
W=100; //脈寬設(shè)置成100
else
W-=1; //否則減1
}
else if(k3==0) //按鍵3按下
{
while(k3==0); //按鍵3抬起
A=!A; //方向標(biāo)記取反
k=!k; //按鍵標(biāo)記取反
}
else if(k4==0) //按鍵4按下
{
while(k4==0); //按鍵4抬起
W=0; //脈寬清0
}
}
void main(void)
{
init(); /////////系統(tǒng)初始化
while(1)
{
if(k==0)
MOTOR_A_2=0;
else
MOTOR_A_1=0;
key(); ////////查詢按鍵
}
}
? ? ? ? 結(jié)語
關(guān)于51單片機的相關(guān)介紹就到這了,如有不足之處歡迎指正。
評論