毛片在线视频观看,一级日韩免费大片,在线网站黄色,澳门在线高清一级毛片

薈聚奇文、博采眾長、見賢思齊
當(dāng)前位置:公文素材庫 > 計劃總結(jié) > 工作總結(jié) > 51單片機(jī)學(xué)習(xí)總結(jié)

51單片機(jī)學(xué)習(xí)總結(jié)

網(wǎng)站:公文素材庫 | 時間:2019-05-29 07:17:18 | 移動端:51單片機(jī)學(xué)習(xí)總結(jié)

51單片機(jī)學(xué)習(xí)總結(jié)

1、什么是單片機(jī)

在一片集成電路芯片上集成微處理器、存儲器、I/O接口電路,從而構(gòu)成了單芯片微型計算機(jī),即單片機(jī)。Intel公司推出了MCS-51系列單片機(jī):集成8位CPU、4K字節(jié)ROM、128字節(jié)RAM、4個8位并口、1個全雙工串行口、2個16位定時/計數(shù)器。尋址范圍64K,并有控制功能較強(qiáng)的布爾處理器。2、單片機(jī)的作用

用到單片機(jī)的項目經(jīng)驗介紹手持糧庫溫度尋檢設(shè)備畢設(shè)答辯打分器電話臺燈

自動感應(yīng)水龍頭

凡是與控制或簡單計算有關(guān)的電子設(shè)備都可以用單片機(jī)來實現(xiàn),再根據(jù)具體實際情況選擇不同性能的單片機(jī),如:atmel,stc,pic,avr,凌陽,80C51,arm等工業(yè)自動化:數(shù)據(jù)采集、測控技術(shù)。

智能儀器儀表:數(shù)字示波器、數(shù)字信號源、數(shù)字萬用表、感應(yīng)電流表等。

消費類電子產(chǎn)品:洗衣機(jī)、電冰箱、空調(diào)機(jī)、電視機(jī)、微波爐、手機(jī)、IC卡、汽車電子設(shè)備等。

通訊方面:調(diào)制解調(diào)器、程控交換技術(shù)、手機(jī)、小靈通等。

武器裝備:飛機(jī)、軍艦、坦克、導(dǎo)彈、航天飛機(jī)、魚雷制導(dǎo)、智能武器等。等等…..

3、學(xué)習(xí)單片機(jī)之前預(yù)備知識

(1)數(shù)字電路中只有兩種電平:高和低定義單片機(jī)為TTL電平:

高+5V低0V(2)RS232電平:計算機(jī)的串口高-12V低+12V

所以計算機(jī)與單片機(jī)之間通訊時需要加電平轉(zhuǎn)換芯片(3)進(jìn)制轉(zhuǎn)換與邏輯、算術(shù)運算(4)C語言基礎(chǔ)(5)80C51了解

80C51是MCS-51系列中的一個典型品種;其它廠商以8051為基核開發(fā)出的CMOS工藝單片機(jī)產(chǎn)品統(tǒng)稱為80C51系列。(6)

總線(BUS)是計算機(jī)各部件之間傳送信息的公共通道。微機(jī)中有內(nèi)部總線和外部總線兩類。內(nèi)部總線是CPU內(nèi)部之間的連線。外部總線是指CPU與其它部件之間的連線。外部總線有三種:數(shù)據(jù)總線DB(DataBus),地址總線AB(AddressBus)和控制總線CBControlBus)。(7)

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)單片機(jī)之間或單片機(jī)與微機(jī)之間的串行通信;

片內(nèi)振蕩器和時鐘產(chǎn)生電路,石英晶體和微調(diào)電容需要外接。最高振蕩頻率取決于單片機(jī)型號及性能。(8)

C51數(shù)據(jù)存儲類型例:

數(shù)據(jù)類型變量名

charvar1;bitflags;

unsignedcharvextor[10];int;

注意:變量名不能用C語言中的關(guān)鍵字表示。(9)

包含的頭文件(可以在安裝目錄下INC目錄下查看)

通常有:reg51.hreg52.hmath.hctype.hstdio.hstdlib.habsacc.h常用有:reg51.hreg52.h

(定義特殊功能寄存器和位寄存器);math.h(定義常用數(shù)學(xué)運算);(10)中斷服務(wù)程序的格式函數(shù)名()interruptnusingm{

函數(shù)內(nèi)部實現(xiàn)….}

(11)I/O口定義sbitbeep=P2^3;

(12)單片機(jī)的基本時序機(jī)器周期和指令周期

(1)振蕩周期:也稱時鐘周期,是指為單片機(jī)提供時鐘脈沖信號的振蕩源的周期,TX實驗板上為11.0592MHZ。

(2)狀態(tài)周期:每個狀態(tài)周期為時鐘周期的2倍,是振蕩周期經(jīng)二分頻后得到的。(3)機(jī)器周期:一個機(jī)器周期包含6個狀態(tài)周期S1~S6,也就是12個時鐘周期。在一個機(jī)器周期內(nèi),CPU可以完成一個獨立的操作。

(4)指令周期:它是指CPU完成一條操作所需的全部時間。每條指令執(zhí)行時間都是有一個或幾個機(jī)器周期組成。MCS-51系統(tǒng)中,有單周期指令、雙周期指令和四周期指令。

4、學(xué)習(xí)單片機(jī)目標(biāo)

最小系統(tǒng)能夠運行起來的必要條件。1.電源2.晶振3.復(fù)位電路對單片機(jī)任意IO口的隨意操作1.輸出控制電平高低2.輸入檢測電平高低。定時器:重點掌握最常用的方式2

中斷:外部中斷、定時器中斷、串口中斷串口通信:單片機(jī)之間、單片機(jī)與計算機(jī)間

擴(kuò)展閱讀:51單片機(jī)串口通信學(xué)習(xí)總結(jié)

51單片機(jī)串口通信學(xué)習(xí)總結(jié)

1.近距離的單片機(jī)點對點通信:如果兩個51單片機(jī)系統(tǒng)之間的距離很短,可以通過將它

們的自帶串口直接相連的方法實現(xiàn)雙機(jī)通信,連接時注意要將一方的TXD和另一方的RXD引腳相連。

2.如果通信距離較遠(yuǎn),可以利用RS-232C接口延長通信距離,但必須將單片機(jī)的TTL電

平和RS-232C標(biāo)準(zhǔn)電平進(jìn)行轉(zhuǎn)換,如常用的MAX232,。

內(nèi)部結(jié)構(gòu)基本可分三個部分:

第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供給RS-232串口電平的需要。

第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道。8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道。TTL/CMOS數(shù)據(jù)從T1IN、T2IN輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從T1OUT、T2OUT送到電腦DB9插頭;DB9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2OUT輸出。

第三部分是供電。15腳GND、16腳VCC(+5v)。硬件電路設(shè)計:

注意:怎樣連線單片機(jī)與MAX232同名相對,RR,TT

MAX232與DB9異名相對,RT,TR

串口通信主要包括:串口數(shù)據(jù)發(fā)送和接收。發(fā)送實例:

/******************************************************作者:淋哥電子

說明:本程序?qū)崿F(xiàn)串口數(shù)據(jù)發(fā)送,從0到10每隔500ms發(fā)送一次******************************************************/

#include//單片機(jī)52頭文件,存放著單片機(jī)的寄存器#defineuintunsignedint//宏定義#defineucharunsignedchar

voiddelay_ms(ucharms);//聲明一個ms級延時函數(shù)voidUART_Init(void);//聲明串口初始化函數(shù)

voidUART_Send_Byte(ucharbyte);//聲明串口發(fā)送單字節(jié)函數(shù)voidmain(void)//主函數(shù){

uchari=0;//定義一個變量UART_Init();//串口初始化while(1)//死循環(huán){UART_Send_Byte(i);//串口發(fā)送單字節(jié)數(shù)據(jù)delay_ms(500);//延時500msif(++i>10)//i自加到10清0i=0;}}

//定義delay_ms函數(shù)voiddelay_ms(ucharms){uchari;while(ms--){for(i=0;i

接收實例:1)

/******************************************************作者:淋哥電子

說明:本程序?qū)崿F(xiàn)串口數(shù)據(jù)接收(查詢法)單片機(jī)晶振11.0592M

******************************************************/

#include//單片機(jī)52頭文件,存放著單片機(jī)的寄存器#defineuintunsignedint//宏定義#defineucharunsignedchar

voidUART_Init(void);//聲明串口初始化函數(shù)

voidUART_Send_Byte(ucharbyte);//聲明串口發(fā)送單字節(jié)函數(shù)voidmain(void)//主函數(shù){

uchari=0;//定義一個變量UART_Init();//串口初始化while(1)//死循環(huán){if(RI)//檢測接收完成標(biāo)志位置1{RI=0;//清零接收完成標(biāo)志位i=SBUF;//讀取接收到的數(shù)據(jù)UART_Send_Byte(i);//串口發(fā)送單字節(jié)數(shù)據(jù)}}}

//定義UART_Init函數(shù)voidUART_Init(void){SCON=0x50;//設(shè)定串行口工作方式,8位數(shù)據(jù)位,允許接收T2CON=0x34;//設(shè)置定時器2,作為波特率發(fā)生器RCAP2L=0XD9;//9600波特率的低8位RCAP2H=0XFF;//9600波特率的高8位}

//定義UART_Send_Byte函數(shù)voidUART_Send_Byte(ucharbyte){SBUF=byte;//緩沖區(qū)裝載要發(fā)送的字節(jié)數(shù)據(jù)while(TI==0);//等待發(fā)送完畢,TI標(biāo)志位會置1TI=0;//清零發(fā)送完成標(biāo)志位}

2)

/******************************************************作者:淋哥電子

說明:本程序?qū)崿F(xiàn)串口數(shù)據(jù)接收(中斷法)單片機(jī)晶振11.0592M

******************************************************/

#include//單片機(jī)52頭文件,存放著單片機(jī)的寄存器#defineuintunsignedint//宏定義#defineucharunsignedchar

voidUART_Init(void);//聲明串口初始化函數(shù)

voidUART_Send_Byte(ucharbyte);//聲明串口發(fā)送單字節(jié)函數(shù)voidmain(void)//主函數(shù){UART_Init();//串口初始化while(1)//死循環(huán){}}

//定義UART_Init函數(shù)voidUART_Init(void){SCON=0x50;//設(shè)定串行口工作方式,8位數(shù)據(jù)位,允許接收T2CON=0x34;//設(shè)置定時器2,作為波特率發(fā)生器RCAP2L=0XD9;//9600波特率的低8位RCAP2H=0XFF;//9600波特率的高8位ES=1;//允許串口中斷EA=1;//允許總中斷}

//定義UART_Send_Byte函數(shù)voidUART_Send_Byte(ucharbyte){SBUF=byte;//緩沖區(qū)裝載要發(fā)送的字節(jié)數(shù)據(jù)while(TI==0);//等待發(fā)送完畢,TI標(biāo)志位會置1TI=0;//清零發(fā)送完成標(biāo)志位}

uchari=0;//定義一個變量//串口中斷服務(wù)程序

voidUART(void)interrupt4{if(RI)//檢測接收完成標(biāo)志位置1{RI=0;//清零接收完成標(biāo)志位i=SBUF;//讀取接收到的數(shù)據(jù)UART_Send_Byte(i);//串口發(fā)送單字節(jié)數(shù)據(jù)}}

重點說明:

51單片機(jī)可以通過SBUF寄存器對串行接收或發(fā)送寄存器進(jìn)行訪問,兩個寄存器共用一個地址99H,但在物理上是兩個獨立的寄存器,有指令操作決定訪問哪一個。eg:接收時,我們寫“a=SBUF;”

發(fā)送時,我們寫“SBUF=a;”

實例一:

/******************************************************作者:淋哥電子

說明:本程序?qū)崿F(xiàn)在上位機(jī)上用串口調(diào)試助手發(fā)送一個字符X,單片機(jī)收到字符后返回給上位機(jī)“IgetX”單片機(jī)晶振11.0592M

******************************************************/

#include//單片機(jī)52頭文件,存放著單片機(jī)的寄存器#defineuintunsignedint//宏定義#defineucharunsignedcharucharuart_flag,a,i;

ucharcodetable[]={"Iget"};

voidUART_Init(void);//聲明串口初始化函數(shù)

voidUART_Send_Byte(ucharbyte);//聲明串口發(fā)送單字節(jié)函數(shù)voidmain(void)//主函數(shù){UART_Init();//串口初始化while(1)//死循環(huán){if(uart_flag==1)//接收到{ES=0;//關(guān)串口中斷for(i=0;iUART_Send_Byte(a);//發(fā)送接收到的字符ES=1;//允許串口中斷uart_flag=0;//中斷標(biāo)志位置0}}}

//定義UART_Init函數(shù)voidUART_Init(void){SCON=0x50;//設(shè)定串行口工作方式,8位數(shù)據(jù)位,允許接收T2CON=0x34;//設(shè)置定時器2,作為波特率發(fā)生器RCAP2L=0XDC;//9600波特率的低8位RCAP2H=0XFF;//9600波特率的高8位ES=1;//允許串口中斷EA=1;//允許總中斷}

//定義UART_Send_Byte函數(shù)voidUART_Send_Byte(ucharbyte){SBUF=byte;//緩沖區(qū)裝載要發(fā)送的字節(jié)數(shù)據(jù)while(TI==0);//等待發(fā)送完畢,TI標(biāo)志位會置1TI=0;//清零發(fā)送完成標(biāo)志位}

//串口接收中斷服務(wù)程序voidUART(void)interrupt4{if(RI)//檢測接收完成標(biāo)志位置1{RI=0;//清零接收完成標(biāo)志位a=SBUF;//讀取接收到的數(shù)據(jù)uart_flag=1;//中斷標(biāo)志位置1}}

實例二:

/***********************************************************************************************************

作者:淋哥電子說明:本程序?qū)崿F(xiàn):

單片機(jī)上電后等待從上位機(jī)串口發(fā)送來的命令,當(dāng)收到上位機(jī)以十六進(jìn)制發(fā)送來的01后,向上位機(jī)發(fā)送字符串“Turnonad!”同時在數(shù)碼管以每秒刷新顯示AD值

當(dāng)收到上位機(jī)以十六進(jìn)制發(fā)送來的02后,向上位機(jī)發(fā)送字符串“TurnoffAD!”當(dāng)收到上位機(jī)發(fā)送來的其他任何數(shù)據(jù),向上位機(jī)發(fā)送字符串“Error!!”單片機(jī)晶振11.0592

***********************************************************************************************************/

#include//單片機(jī)51頭文件,存放著單片機(jī)的寄存器#include//為了使用空指令加載的頭文件#include

#defineucharunsignedchar#defineuintunsignedint

sbitsmg1=P2^6;//數(shù)碼管位選sbitsmg2=P2^5;//數(shù)碼管位選sbitsmg3=P2^4;//數(shù)碼管位選

ucharflag_uart;//串口中斷標(biāo)志ucharflag_time;//1s鐘標(biāo)志ucharflag_on;//AD運行標(biāo)志uchara;uchari;

uchart0_num;//T050ms定時標(biāo)志

ucharad_val;//AD采集得到的值(二進(jìn)制表示)floatad_vo;//實際電壓標(biāo)準(zhǔn)值

unsignedcharcodetable[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//數(shù)碼管段選顯示0--9

sbitcs=P3^3;////ad的cs控制管腳定義sbitwr=P3^5;//ad的wr控制管腳定義sbitrd=P3^4;//ad的rd控制管腳定義

voiddelay(uintcount)//delay{

uinti;

while(count){

i=200;while(i>0)i--;count--;}}

voidinit(void){TMOD=0x21;//定計0工作方式1,定計1工作方式2TH0=(65536-50000)/256;//定計0賦初值TL0=(65536-50000)%256;TH1=0XFD;//定計1賦初值TL1=0XFD;TR1=1;//開定計1ET0=1;//開定計0中斷SCON=0X50;//串口控制寄存器:SM0=0,SM1=1,REN=1EA=1;//開總中斷ES=1;//開串口中斷}

/*************讀AD0804子程序*******************************/unsignedcharadc0804(void)//讀AD0804子程序{unsignedcharaddata,i;rd=1;wr=1;//int1=1;//讀ADC0804前準(zhǔn)備P1=0xff;//P1全部置一準(zhǔn)備cs=0;wr=0;wr=1;//啟動ADC0804開始測電壓rd=0;//開始讀轉(zhuǎn)換后數(shù)據(jù)i=i;i=i;//無意義語句,用于延時等待ADC0804讀數(shù)完畢addata=P1;//讀出的數(shù)據(jù)賦與addaterd=1;cs=1;//讀數(shù)完畢return(addata);//返回最后讀出的數(shù)據(jù)}

/*************數(shù)碼管顯示程序*******************************/voiddisplay(inttemp){

/****************************************************/smg3=1;smg2=1;delay(1);

P0=table[temp/100];//顯示百位smg1=0;delay(1);smg1=1;

/****************************************************/

smg3=1;

P0=table[temp%100/10];//顯示十位smg2=0;delay(1);smg2=1;

/****************************************************/smg1=1;

P0=table[temp%10];//顯示個位smg3=0;delay(1);smg3=1;

/****************************************************/}

/*************主程序*******************************/voidmain(void){init();//初始化while(1){if(flag_uart==1)//接收到數(shù)據(jù){flag_uart=0;//串口中斷標(biāo)志置0ES=0;//關(guān)串口中斷,若不關(guān)閉,每發(fā)送一個字節(jié),程序就會申請進(jìn)入串口中斷,從而導(dǎo)致程序出錯

TI=1;//發(fā)送標(biāo)志置1switch(flag_on){case0:puts("TurnonAD!");TR0=1;break;case1:puts("TurnoffAD!");TR0=0;break;case2:puts("Error!");break;default:break;}while(!TI);//等待發(fā)送完畢TI=0;//發(fā)送完畢,手動清ES=1;}if(flag_time==1){flag_time=0;ad_val=adc0804();//將AD采集回來的8位二進(jìn)制數(shù)賦給ad_valad_vo=(float)ad_val*5.0/256.0;//以浮點數(shù)表示AD實際采集到的電壓標(biāo)準(zhǔn)值

ES=0;TI=1;printf("Thevoltageis%fV\\n",ad_vo);while(!TI);TI=0;ES=1;}display(ad_val);}}

/*************定計0中斷服務(wù)子程序*******************************/voidtimer0(void)interrupt1{TH0=(65536-50000)/256;//定計0重裝初值TL0=(65536-50000)%256;t0_num++;if(t0_num==20){t0_num=0;flag_time=1;}}

/*************串口中斷服務(wù)子程序*******************************/voidser(void)interrupt4{RI=0;//清零接收完成標(biāo)志位a=SBUF;//讀取接收到的數(shù)據(jù)flag_uart=1;//串口中斷標(biāo)志位置1if(a==1)flag_on=0;elseif(a==2)flag_on=1;elseflag_on=2;}

說明:

printf()和puts()的區(qū)別:1)puts()自帶換行符;

2)printf()可以在后面追加要輸出的變量,而puts()只能輸出字符串

友情提示:本文中關(guān)于《51單片機(jī)學(xué)習(xí)總結(jié)》給出的范例僅供您參考拓展思維使用,51單片機(jī)學(xué)習(xí)總結(jié):該篇文章建議您自主創(chuàng)作。

來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。


51單片機(jī)學(xué)習(xí)總結(jié)》由互聯(lián)網(wǎng)用戶整理提供,轉(zhuǎn)載分享請保留原作者信息,謝謝!
鏈接地址:http://m.seogis.com/gongwen/673032.html