版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2023/10/131第3章80C51單片機(jī)C語言程序設(shè)計C51對標(biāo)準(zhǔn)C的擴(kuò)展3.1C51的指針3.2C51的函數(shù)3.3C51與匯編程序的接口3.42023/10/1323.1C51對標(biāo)準(zhǔn)C的擴(kuò)展3.1.1C51的數(shù)據(jù)類型數(shù)據(jù)是計算機(jī)操作的對象,包含常量和變量。C51擴(kuò)展了ANSIC,以適應(yīng)單片機(jī)的結(jié)構(gòu)和特點。
數(shù)據(jù)類型就是數(shù)據(jù)的格式,它決定數(shù)據(jù)的值域范圍、占用存儲單元的個數(shù)及能參與哪種運算。
編寫C51程序,先要確定數(shù)據(jù)類型、儲存分區(qū)應(yīng)盡可能采用無符號格式(unsigned)
C51中,多字節(jié)數(shù)據(jù)采用“大端對齊”格式數(shù)據(jù)起始字節(jié)置于高地址端2023/10/133數(shù)據(jù)類型長度(位)取值范圍字符型signedchar8-128~127unsignedchar80~255整型signedint16-32768~32767unsignedint160~65535長整型signedlong32-21474883648~21474883647unsignedlong320~4294967295浮點型float32±1.75494E-38~±3.402823E+38位型bit10,1sbit10,1訪問SFRsfr80~255sfr16160~65535C51數(shù)據(jù)類型表2023/10/134bit定義位變量名字,編譯器在位尋址區(qū)自動分配該位變量;Sbit聲明位變量的名字和地址,地址是確定的(SFR區(qū)確定位、位尋址區(qū)變量的某確定位)。幾點說明:unsigned
charbdata
ibase;sbit
mybitf=ibase^0;sbitCY=0xD7;bitflag1=0;含義:賦值含義:聲明2023/10/1353.1.2C51數(shù)據(jù)的存儲分區(qū)存儲器類型對應(yīng)單片機(jī)存儲器bdata片內(nèi)RAM位尋址區(qū),共128位。(亦能字節(jié)訪問)data直接尋址,共128字節(jié)。idata間接尋址,共256字節(jié)。pdata片外
RAM分頁間址,共256字節(jié)。(MOVX@Ri)xdata間接尋址,共64k字節(jié)。(MOVX@DPTR)codeROM間接尋址,共64k字節(jié)。(MOVCA,@A+DPTR)經(jīng)常使用的變量應(yīng)該置于片內(nèi)RAM中,要用bdata、data、idata來定義不常使用的變量或規(guī)模較大的變量應(yīng)該置于片外RAM中,要用pdata、xdata來定義bitbdataflags;
//位變量flags定位在片內(nèi)位尋址區(qū)chardatavar;
//字符變量var定位在片內(nèi)RAM區(qū)floatidata
x,y;
//實型變量x,y定位在片內(nèi)間址RAM區(qū)unsignedcharpdataz;
//無符號字符變量z定位在片外分頁間址RAM區(qū)2023/10/137編譯模式默認(rèn)存儲分區(qū)特點SMALLdata小模式。變量默認(rèn)在片內(nèi)RAM??臻g小,速度塊。COMPACTpdata緊湊模式。變量默認(rèn)在片外RAM的頁(256字節(jié),頁號由P2口決定)。LARGExdata大模式。變量默認(rèn)在片外RAM的64KB范圍??臻g大,速度慢。編譯模式默認(rèn)的變量存儲分區(qū)3.1.3C51的編譯模式未對變量存儲分區(qū)定義時,C51編譯器采用默認(rèn)存儲分區(qū)。例如:charvar;
//SMALL模式時,var定位于data存儲區(qū)
//COMPACT模式時,var定位于pdata存儲區(qū)
//LARGE模式時,var定位于xdata存儲區(qū)2023/10/1393.1.4用_at_定義變量絕對地址用關(guān)鍵字“_at_”定義變量存放的首地址
idata
inty_at_0x30;//idata區(qū)域整型變量y的首地址為0x30例如:又如:xdatacharstring[20]_at_0x3000;//xdata中字符型數(shù)組string的首地址為0x3000
注意,C51編程時不要輕易使用絕對地址定位變量。
2023/10/13103.2
C51的指針對于一個變量a,利用&a表示變量a的地址。則語句
p=&a;表明把a的地址賦給了指針變量p,則“p指向了變量a”。
可以用*P表示變量a指針變量的定義
char*p;//定義指針變量P
p=30H;//指針變量賦值,30H為片內(nèi)RAM地址x=*p;//30H單元的內(nèi)容送給變量x*P指針變量數(shù)據(jù)變量3.2.1已定義數(shù)據(jù)存儲分區(qū)的指針定義時就指定了所指向數(shù)據(jù)的存儲分區(qū)。
該指針占1個字節(jié)(idata*,data*,pdata*)或2個字節(jié)(code*,xdata*)
示例:char
data*str;
//指針str指向的char型數(shù)據(jù)存于data空間int
xdata*num;
//指針num指向的int型數(shù)據(jù)存于xdata
空間
基于存儲器的指針長度比通用指針短,可以節(jié)省存儲器空間,運行速度快,但它所指對象具有確定的存儲器空間,兼容性不好。數(shù)據(jù)數(shù)據(jù)分區(qū)2023/10/1312定義時未指定所指向的數(shù)據(jù)的存儲分區(qū)。也稱通用指針。3.2.2未定義數(shù)據(jù)存儲分區(qū)的指針---通用指針通用指針占3個字節(jié)第一字節(jié)存放該指針的默認(rèn)存儲器類型編碼(見表)第二字節(jié)存放該指針的高位地址偏移量第三字節(jié)存放該指針的低位地址偏移量
存儲器類型編碼存儲器類型bdata/data/idataxdatapdatacode編碼0x000x010xfe0xff2023/10/1313通用指針定義示例:char*xdata
strptr;
//指針本身存于xdata
空間,它指向char型數(shù)據(jù)int*datanumber;
//指針本身存于data空間,它指向int型數(shù)據(jù)由于指向?qū)ο蟮拇鎯臻g在編譯時無法確定(運行時確定),因此必須生成通用代碼以保證對任意空間的對象進(jìn)行存取。所以通用指針生成的代碼速度較慢。指針char型數(shù)據(jù)指針分區(qū)2023/10/13143.2.3利用指針進(jìn)行絕對地址訪問unsignedchardata*p;p=0x40;*p=0x55;
//數(shù)據(jù)0x55送入內(nèi)部RAM的0x40單元
例如:
C51編譯器提供了一組宏定義實現(xiàn)對80C51絕對地址的訪問。這組宏定義原型放在absacc.h文件中,形如:
#defineDBYTE((unsignedcharvolatiledata*)0)從而使DBYTE用于以字節(jié)形式對data區(qū)訪問,可以寫成:*(DBYTE)=0x55H;或
DBYTE[0]=0x55H;
與此類似:CBYTE用于以字節(jié)形式對code區(qū)進(jìn)行訪問;PBYTE用于以字節(jié)形式對pdata區(qū)進(jìn)行訪問;XBYTE用于以字節(jié)形式對xdata區(qū)進(jìn)行訪問。CWORD、DWORD、PWORD和XWORD用于以字形式對code區(qū)、data區(qū)、pdata區(qū)和xdata區(qū)進(jìn)行訪問。
3.2.4C51程序編寫示例【例3-1】將30H至3FH共16個RAM單元初始化為“55H”。#include<reg52.h>#include<absacc.h>voidmain(void){ unsignedchari; for(i=0;i<=15;i++) { DBYTE[0x30+i]=0x55; } while(1);}編譯系統(tǒng)自動連接了startup.a51生成代碼一是將內(nèi)部RAM的00H~7FH清0;二是設(shè)置堆棧指針SP。
有全局變量賦值時編譯系統(tǒng)會自動連接init.a51生成代碼C:0x0000020011LJMPC:0011C:0x0003E4CLRAC:0x0004FFMOVR7,AC:0x00057430MOVA,#0x30C:0x00072FADDA,R7C:0x0008F8MOVR0,AC:0x00097655MOV@R0,#0x55C:0x000B0FINCR7C:0x000CBF10F6CJNER7,#0x10,C:0005C:0x000F80FESJMPC:000FC:0x0011787FMOVR0,#0x7FC:0x0013E4CLRAC:0x0014F6MOV@R0,AC:0x0015D8FDDJNZR0,C:0014C:0x0017758107MOVSP,#0x07C:0x001A020003LJMPC:0003反匯編如下:編譯系統(tǒng)自動連接了startup.a51生成代碼一是將內(nèi)部RAM的00H~7FH清0;二是設(shè)置堆棧指針SP。
另:全局變量賦值時編譯系統(tǒng)會自動連接init.a51生成代碼2023/10/13193.3
C51的函數(shù)3.3.1C51函數(shù)的定義一般形式:返回值類型函數(shù)名(形式參數(shù)列表)[編譯模式][reentrant][interrupt
n][usingn]{
函數(shù)體}編譯模式為SMALL、COPACT或LARGEreentrant用于定義可重入函數(shù)interruptn用于定義中斷函數(shù),n為中斷號,可以為0~31usingn確定工作寄存器組,取值為0~3
【例3-2】延時nMs函數(shù)示例(晶振11.0592MHz)。voidDelayMs(unsignedintn)//延時函數(shù){ unsignedcharj; while(n--) { for(j=0;j<113;j++); }}調(diào)試:Registers窗口中的sec值。
3.3.2C51函數(shù)定義的選項編譯模式
SMALL模式:變量默認(rèn)在片內(nèi)RAM;COMPACT模式:變量默認(rèn)在片外RAM的頁內(nèi);LARGE模式:變量默認(rèn)在片外RAM的64KB范圍。reentrant定義為重入函數(shù)
ANSIC中,函數(shù)默認(rèn)都是可重入的
C51函數(shù)默認(rèn)是不可重入的,使用可重入函數(shù)會消耗較多的存儲器資源,應(yīng)該盡量少用。interruptn定義中斷函數(shù)常用的中斷源對應(yīng)的中斷號usingn確定中斷服務(wù)函數(shù)所使用的工作寄存器組中斷源外中斷0定時器0外中斷1定時器1串行口定時器2中斷號012345【例3-3】中斷函數(shù)定義示例#include<reg51.h>sbitP10=P1^0;voidIntSrv(void)interrupt0
{ if(INT0==0) //測開關(guān)狀態(tài)
{ P10=!P10; while(INT0==0); }}3.3.3C51的庫函數(shù)常用的C51庫函數(shù)參見附錄B.2
【例3-4】C51庫函數(shù)調(diào)用示例。#include“intrins.h”//在intrins.h中有對函數(shù)_nop_()的定義voidDelay(void){
inti=5000;
while(i--)_nop_();}【例3-5】C51標(biāo)準(zhǔn)輸入輸出函數(shù)調(diào)用示例。#include<reg51.h>#include<stdio.h>voidInitSPort(void){SCON=0x50;//串口方式1,允許接收TMOD=0x20;//T1方式2(自動重裝)TH1=0xFD;//波特率9600 TR1=1;//啟動T1TI=1;//發(fā)送中斷置1}voidmain(void){
InitSPort();
printf("HelloWorld\n");while(1);}標(biāo)準(zhǔn)I/O的重定向!
在調(diào)試狀態(tài):ViewSerialWindowsUART#13.4
C51與匯編程序的接口3.4.1在C51程序中嵌入?yún)R編指令【例3-6】利用預(yù)編譯指令。#include"reg51.h"voidInit(void);voidmain(){while(1){Init();}}voidInit(void){
#pragma
asm MOVR7,#16 MOVR1,#20H MOVA,#55HLP:MOV@R1,A INCR1 DJNZR7,LP
#pragma
endasm return;}要進(jìn)行以下設(shè)置:2023/10/1327將嵌有匯編語句的源文件加入工程文件,將鼠標(biāo)指向該文件,選擇右鍵菜單“optionfor‘insertasm.c’”。將屬性properties書簽下的“GenerateAssemblerSRCFile”與“AssembleSRCFile”選項置成“√”。再加入庫文件(如C51S.LIB),然后編譯。
3.4.2在C51程序中調(diào)用匯編子程序【例3-7】不含參數(shù)傳遞的子程序調(diào)用。先構(gòu)造匯編語言源文件:d1ms:MOVR6,#249;DL:NOP ;1μsNOP ;1μsDJNZR6,DL;2μs,循環(huán)內(nèi)約1msRET
END
?PR?d1ms?EP4_7BSEGMENTCODE
PUBLICd1ms RSEG?PR?d1ms?EP4_7B注:d1ms對應(yīng)C51的d1ms()EP4_7B對應(yīng)ep4_7b.asm編寫C51語言程序如下,完成匯編子程序調(diào)用:#include<reg51.h>sbitP2_0=P2^0;externvoidd1ms(void);voidmain(){ for(;;) { P2_0=0;
d1ms();/*調(diào)用匯編子程序*/ P2_0=1;
d1ms();/*調(diào)用匯編子程序*/ }}主調(diào)函數(shù)要向被調(diào)函數(shù)傳遞所需的參數(shù)傳遞給被調(diào)函數(shù)的數(shù)據(jù)稱為實參實參向形參的傳遞是單向的參數(shù)傳遞可以采用寄存器、固定存儲器位置方式
參數(shù)傳遞寄存器參數(shù)傳遞傳遞的參數(shù)char、1字節(jié)指針int、2字節(jié)指針long、float通用指針參數(shù)1R7R6、R7R4~R7R1、R2、R3參數(shù)2R5R4、R5R4~R7R1、R2、R3參數(shù)3R3R2、R3R1、R2、R3SMALL模式下,在內(nèi)部RAM中完成COMPACT模式下,在外部RAM中完成LARGER模式下,在外部RAM中完成固定存儲器位置參數(shù)傳遞80C51單片機(jī)不采用堆棧傳遞參數(shù)。但C51提供一種模擬堆棧,從而支持可重入函數(shù)的遞歸調(diào)用。
函數(shù)返回值使用的寄存器返回數(shù)據(jù)的類型寄存器說
明bitC進(jìn)位標(biāo)志位char、unsignedchar、1字節(jié)指針R7int、unsignedint、2字節(jié)指針R6、R7高字節(jié)在R6,低字節(jié)在R7long、unsignedlongR4、R5、R6、R7最高字節(jié)在R4,最低字節(jié)在R7floatR4、R5、R6、R732位IEEE格式通用指針R1、R2、R3存儲類型在R1,高字節(jié)在R2,低字節(jié)在R3ThankYou!2023/10/13343.1C51對標(biāo)準(zhǔn)C的擴(kuò)展3.1.1C51的數(shù)據(jù)類型數(shù)據(jù)是計算機(jī)操作的對象,包含常量和變量。C51擴(kuò)展了ANSIC,以適應(yīng)單片機(jī)的結(jié)構(gòu)和特點。
數(shù)據(jù)類型就是數(shù)據(jù)的格式,它決定數(shù)據(jù)的值域范圍、占用存儲單元的個數(shù)及能參與哪種運算。
編寫C51程序,先要確定數(shù)據(jù)類型、儲存分區(qū)應(yīng)盡可能采用無符號格式(unsigned)
C51中,多字節(jié)數(shù)據(jù)采用“大端對齊”格式數(shù)據(jù)起始字節(jié)置于高地址端2023/10/1335數(shù)據(jù)類型長度(位)取值范圍字符型signedchar8-128~127unsignedchar80~255整型signedint16-32768~32767unsignedint160~65535長整型signedlong32-21474883648~21474883647unsignedlong320~4294967295浮點型float32±1.75494E-38~±3.402823E+38位型bit10,1sbit10,1訪問SFRsfr80~255sfr16160~65535C51數(shù)據(jù)類型表2023/10/1336bit定義位變量名字,編譯器在位尋址區(qū)自動分配該位變量;Sbit聲明位變量的名字和地址,地址是確定的(SFR區(qū)確定位、位尋址區(qū)變量的某確定位)。幾點說明:unsigned
charbdata
ibase;sbit
mybitf=ibase^0;sbitCY=0xD7;bitflag1=0;含義:賦值含義:聲明2023/10/13373.1.2C51數(shù)據(jù)的存儲分區(qū)存儲器類型長度(位)對應(yīng)單片機(jī)存儲器bdata1片內(nèi)RAM位尋址區(qū),共128位。(亦能字節(jié)訪問)data8直接尋址,共128字節(jié)。idata8間接尋址,共256字節(jié)。pdata8片外
RAM分頁間址,共256字節(jié)。(MOVX@Ri)xdata16間接尋址,共64k字節(jié)。(MOVX@DPTR)code16ROM間接尋址,共64k字節(jié)。(MOVCA,@A+DPTR)經(jīng)常使用的變量應(yīng)該置于片內(nèi)RAM中,要用bdata、data、idata來定義不常使用的變量或規(guī)模較大的變量應(yīng)該置于片外RAM中,要用pdata、xdata來定義bitbdataflags;
//位變量flags定位在片內(nèi)位尋址區(qū)chardatavar;
//字符變量var定位在片內(nèi)RAM區(qū)floatidata
x,y;
//實型變量x,y定位在片內(nèi)間址RAM區(qū)unsignedcharpdataz;
//無符號字符變量z定位在片外分頁間址RAM區(qū)2023/10/1339編譯模式默認(rèn)存儲分區(qū)特點SMALLdata小模式。變量默認(rèn)在片內(nèi)RAM??臻g小,速度塊。COMPACTpdata緊湊模式。變量默認(rèn)在片外RAM的頁(256字節(jié),頁號由P2口決定)。LARGExdata大模式。變量默認(rèn)在片外RAM的64KB范圍??臻g大,速度慢。編譯模式默認(rèn)的變量存儲分區(qū)3.1.3C51的編譯模式未對變量存儲分區(qū)定義時,C51編譯器采用默認(rèn)存儲分區(qū)。例如:charvar;
//SMALL模式時,var定位于data存儲區(qū)
//COMPACT模式時,var定位于pdata存儲區(qū)
//LARGE模式時,var定位于xdata存儲區(qū)2023/10/13413.1.4用_at_定義變量絕對地址用關(guān)鍵字“_at_”定義變量存放的首地址
idata
inty_at_0x30;//idata區(qū)域整型變量y的首地址為0x30例如:又如:xdatacharstring[20]_at_0x3000;//xdata中字符型數(shù)組string的首地址為0x3000
注意,C51編程時不要輕易使用絕對地址定位變量。
2023/10/13423.2
C51的指針對于一個變量a,利用&a表示變量a的地址。則語句
p=&a;表明把a的地址賦給了指針變量p,則“p指向了變量a”。
可以用*P表示變量a指針變量的定義
char*p;//定義指針變量P
p=30H;//指針變量賦值,30H為片內(nèi)RAM地址x=*p;//30H單元的內(nèi)容送給變量x*P指針變量數(shù)據(jù)變量3.2.1已定義數(shù)據(jù)存儲分區(qū)的指針定義時就指定了所指向數(shù)據(jù)的存儲分區(qū)。
該指針占1個字節(jié)(idata*,data*,pdata*)或2個字節(jié)(code*,xdata*)
示例:char
data*str;
//指針str指向的char型數(shù)據(jù)存于data空間int
xdata*num;
//指針num指向的int型數(shù)據(jù)存于xdata
空間
基于存儲器的指針長度比通用指針短,可以節(jié)省存儲器空間,運行速度快,但它所指對象具有確定的存儲器空間,兼容性不好。數(shù)據(jù)數(shù)據(jù)分區(qū)2023/10/1344定義時未指定所指向的數(shù)據(jù)的存儲分區(qū)。也稱通用指針。3.2.2未定義數(shù)據(jù)存儲分區(qū)的指針---通用指針通用指針占3個字節(jié)第一字節(jié)存放該指針的默認(rèn)存儲器類型編碼(見表)第二字節(jié)存放該指針的高位地址偏移量第三字節(jié)存放該指針的低位地址偏移量
存儲器類型編碼存儲器類型bdata/data/idataxdatapdatacode編碼0x000x010xfe0xff2023/10/1345通用指針定義示例:char*xdata
strptr;
//指針本身存于xdata
空間,它指向char型數(shù)據(jù)int*datanumber;
//指針本身存于data空間,它指向int型數(shù)據(jù)由于指向?qū)ο蟮拇鎯臻g在編譯時無法確定(運行時確定),因此必須生成通用代碼以保證對任意空間的對象進(jìn)行存取。所以通用指針生成的代碼速度較慢。指針char型數(shù)據(jù)指針分區(qū)2023/10/13463.2.3利用指針進(jìn)行絕對地址訪問unsignedchardata*p;p=0x40;*p=0x55;
//數(shù)據(jù)0x55送入內(nèi)部RAM的0x40單元
例如:
C51編譯器提供了一組宏定義實現(xiàn)對80C51絕對地址的訪問。這組宏定義原型放在absacc.h文件中,形如:
#defineDBYTE((unsignedcharvolatiledata*)0)從而使DBYTE用于以字節(jié)形式對data區(qū)訪問,可以寫成:*(DBYTE)=0x55H;或
DBYTE[0]=0x55H;
與此類似:CBYTE用于以字節(jié)形式對code區(qū)進(jìn)行訪問;PBYTE用于以字節(jié)形式對pdata區(qū)進(jìn)行訪問;XBYTE用于以字節(jié)形式對xdata區(qū)進(jìn)行訪問。CWORD、DWORD、PWORD和XWORD用于以字形式對code區(qū)、data區(qū)、pdata區(qū)和xdata區(qū)進(jìn)行訪問。
3.2.4C51程序編寫示例【例3-1】將30H至3FH共16個RAM單元初始化為“55H”。#include<reg52.h>#include<absacc.h>voidmain(void){ unsignedchari; for(i=0;i<=15;i++) { DBYTE[0x30+i]=0x55; } while(1);}編譯系統(tǒng)自動連接了startup.a51生成代碼一是將內(nèi)部RAM的00H~7FH清0;二是設(shè)置堆棧指針SP。
有全局變量賦值時編譯系統(tǒng)會自動連接init.a51生成代碼C:0x0000020011LJMPC:0011C:0x0003E4CLRAC:0x0004FFMOVR7,AC:0x00057430MOVA,#0x30C:0x00072FADDA,R7C:0x0008F8MOVR0,AC:0x00097655MOV@R0,#0x55C:0x000B0FINCR7C:0x000CBF10F6CJNER7,#0x10,C:0005C:0x000F80FESJMPC:000FC:0x0011787FMOVR0,#0x7FC:0x0013E4CLRAC:0x0014F6MOV@R0,AC:0x0015D8FDDJNZR0,C:0014C:0x0017758107MOVSP,#0x07C:0x001A020003LJMPC:0003反匯編如下:編譯系統(tǒng)自動連接了startup.a51生成代碼一是將內(nèi)部RAM的00H~7FH清0;二是設(shè)置堆棧指針SP。
另:全局變量賦值時編譯系統(tǒng)會自動連接init.a51生成代碼2023/10/13513.3
C51的函數(shù)3.3.1C51函數(shù)的定義一般形式:返回值類型函數(shù)名(形式參數(shù)列表)[編譯模式][reentrant][interrupt
n][usingn]{
函數(shù)體}編譯模式為SMALL、COPACT或LARGEreentrant用于定義可重入函數(shù)interruptn用于定義中斷函數(shù),n為中斷號,可以為0~31usingn確定工作寄存器組,取值為0~3
【例3-2】延時nMs函數(shù)示例(晶振11.0592MHz)。voidDelayMs(unsignedintn)//延時函數(shù){ unsignedcharj; while(n--) { for(j=0;j<113;j++); }}調(diào)試:Registers窗口中的sec值。
3.3.2C51函數(shù)定義的選項編譯模式
SMALL模式:變量默認(rèn)在片內(nèi)RAM;COMPACT模式:變量默認(rèn)在片外RAM的頁內(nèi);LARGE模式:變量默認(rèn)在片外RAM的64KB范圍。reentrant定義為重入函數(shù)
ANSIC中,函數(shù)默認(rèn)都是可重入的
C51函數(shù)默認(rèn)是不可重入的,使用可重入函數(shù)會消耗較多的存儲器資源,應(yīng)該盡量少用。interruptn定義中斷函數(shù)常用的中斷源對應(yīng)的中斷號usingn確定中斷服務(wù)函數(shù)所使用的工作寄存器組中斷源外中斷0定時器0外中斷1定時器1串行口定時器2中斷號012345【例3-3】中斷函數(shù)定義示例#include<reg51.h>sbitP10=P1^0;voidIntSrv(void)interrupt0
{ if(INT0==0) //測開關(guān)狀態(tài)
{ P10=!P10; while(INT0==0); }}3.3.3C51的庫函數(shù)常用的C51庫函數(shù)參見附錄B.2
【例3-4】C51庫函數(shù)調(diào)用示例。#include“intrins.h”//在intrins.h中有對函數(shù)_nop_()的定義voidDelay(void){
inti=5000;
while(i--)_nop_();}【例3-5】C51標(biāo)準(zhǔn)輸入輸出函數(shù)調(diào)用示例。#include<reg51.h>#include<stdio.h>voidInitSPort(void){SCON=0x50;//串口方式1,允許接收TMOD=0x20;//T1方式2(自動重裝)TH1=0xFD;//波特率9600 TR1=1;//啟動T1TI=1;//發(fā)送中斷置1}voidmain(void){
InitSPort();
printf("HelloWorld\n");while(1);}標(biāo)準(zhǔn)I/O的重定向!
在調(diào)試狀態(tài):ViewSerialWindowsUART#13.4
C51與匯編程序的接口3.4.1在C51程序中嵌入?yún)R編指令【例3-6】利用預(yù)編譯指令。#include"reg51.h"voidInit(void);voidmain(){while(1)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 硬筆書法考級培訓(xùn)
- 部編版下冊教材培訓(xùn)
- 介紹倫敦金融
- 異位妊娠藥物治療護(hù)理查房
- 數(shù)控車削加工技術(shù) 教案 項目七 端面切削工藝及編程
- 15.4 電流的測量(6大題型)(含答案解析)
- 大單元教學(xué)內(nèi)涵及特征
- 2024年黨風(fēng)廉政建設(shè)工作情況總結(jié)及2025年工作計劃
- Windows Server網(wǎng)絡(luò)管理項目教程(Windows Server 2022)(微課版)7.2 任務(wù)1 安裝網(wǎng)絡(luò)負(fù)載均衡
- 小學(xué)五年級地方課程安全教育教案備課
- 2024年江西贛州旅游投資集團(tuán)限公司招聘13人高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 廠房委托招商合同協(xié)議書
- 《短歌行》省公開課金獎全國賽課一等獎微課獲獎?wù)n件
- 中國石油2024招聘(高頻重點提升專題訓(xùn)練)共500題附帶答案詳解
- 部編版五年級語文上冊課外閱讀訓(xùn)練(含參考答案)
- 戀家房子租賃合同模板
- 部編版語文二年級上冊第五單元大單元教學(xué)設(shè)計核心素養(yǎng)目標(biāo)
- 中廣核人才測評題庫
- 二十四節(jié)氣霜降習(xí)俗主題班會課件
- 2023~2024學(xué)年廣東省廣州市各區(qū)九年級上學(xué)期期末考試數(shù)學(xué)試題匯編:旋轉(zhuǎn)(含解析)
- 2024年全國軟件水平考試之初級網(wǎng)絡(luò)管理員考試經(jīng)典測試題(附答案)
評論
0/150
提交評論