版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022-6-111第第3 3章章 80C5180C51單片機(jī)單片機(jī)C C語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)C51對(duì)標(biāo)準(zhǔn)對(duì)標(biāo)準(zhǔn)C的擴(kuò)展的擴(kuò)展3.1C51的的指針指針3.2C51的函數(shù)的函數(shù)3.3C51與匯編程序的接口與匯編程序的接口3.42022-6-1123.1 C51對(duì)標(biāo)準(zhǔn)對(duì)標(biāo)準(zhǔn)C的擴(kuò)展的擴(kuò)展 3.1.1 C513.1.1 C51的數(shù)據(jù)類(lèi)型的數(shù)據(jù)類(lèi)型 數(shù)據(jù)數(shù)據(jù)是計(jì)算機(jī)操作的對(duì)象,包含是計(jì)算機(jī)操作的對(duì)象,包含常量常量和和變量變量。 C51C51擴(kuò)展了擴(kuò)展了ANSI CANSI C,以適應(yīng)單片機(jī)的結(jié)構(gòu)和特點(diǎn)。,以適應(yīng)單片機(jī)的結(jié)構(gòu)和特點(diǎn)。 n 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型就是就是數(shù)據(jù)的格式數(shù)據(jù)的格式,它決定數(shù)據(jù)的,它
2、決定數(shù)據(jù)的值域值域范圍范圍、占用存儲(chǔ)單元的個(gè)數(shù)占用存儲(chǔ)單元的個(gè)數(shù)及能及能參與哪種運(yùn)算參與哪種運(yùn)算。 n 編寫(xiě)編寫(xiě)C51C51程序,先要確定數(shù)據(jù)類(lèi)型、儲(chǔ)存分區(qū)程序,先要確定數(shù)據(jù)類(lèi)型、儲(chǔ)存分區(qū)n 應(yīng)盡可能采用無(wú)符號(hào)格式(應(yīng)盡可能采用無(wú)符號(hào)格式(unsignedunsigned) n C51C51中,多字節(jié)數(shù)據(jù)采用中,多字節(jié)數(shù)據(jù)采用“大端對(duì)齊大端對(duì)齊”格式格式數(shù)據(jù)數(shù)據(jù)起始起始字節(jié)置于字節(jié)置于高地址端高地址端2022-6-113數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型長(zhǎng)度長(zhǎng)度(位位)取值范圍取值范圍字符型字符型signed char8-128127unsigned char80255整整 型型signed int16-327
3、6832767unsigned int16065535長(zhǎng)整型長(zhǎng)整型signed long32-2147488364821474883647unsigned long3204294967295浮點(diǎn)型浮點(diǎn)型float321.75494E-383.402823E+38位位 型型bit10,1sbit10,1訪問(wèn)訪問(wèn)SFRsfr80255sfr1616065535C51C51數(shù)據(jù)類(lèi)型表數(shù)據(jù)類(lèi)型表2022-6-114n bitbit定義定義位變量名字,編譯器在位尋址區(qū)位變量名字,編譯器在位尋址區(qū)自自動(dòng)分配動(dòng)分配該位變量;該位變量;n SbitSbit聲明聲明位變量的名字和地址,地址是確位變量的名字和地址
4、,地址是確定的(定的(SFRSFR區(qū)確定位、位尋址區(qū)變量的某確定區(qū)確定位、位尋址區(qū)變量的某確定位位)。幾點(diǎn)說(shuō)明:幾點(diǎn)說(shuō)明:unsignedunsigned char bdata ibase;char bdata ibase;sbit mybitf = ibase0;sbit mybitf = ibase0;sbit CY = 0 xD7;sbit CY = 0 xD7;bit flag1 = 0;bit flag1 = 0;含義:含義:賦值賦值含義:含義:聲明聲明2022-6-1153.1.2 C513.1.2 C51數(shù)據(jù)的存儲(chǔ)分區(qū)數(shù)據(jù)的存儲(chǔ)分區(qū)存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型長(zhǎng)度(位)長(zhǎng)度(位)對(duì)應(yīng)單片
5、機(jī)存儲(chǔ)器對(duì)應(yīng)單片機(jī)存儲(chǔ)器bdata1片內(nèi)片內(nèi)RAM位尋址區(qū),共位尋址區(qū),共128位。(亦能字節(jié)訪問(wèn))位。(亦能字節(jié)訪問(wèn))data8直接尋址,共直接尋址,共128字節(jié)。字節(jié)。idata8間接尋址,共間接尋址,共256字節(jié)。字節(jié)。pdata8片外片外 RAM分頁(yè)間址,共分頁(yè)間址,共256字節(jié)。(字節(jié)。(MOVX Ri)xdata16間接尋址,共間接尋址,共64k字節(jié)。(字節(jié)。(MOVX DPTR)code16ROM間接尋址,共間接尋址,共64k字節(jié)。(字節(jié)。(MOVC A,A+DPTR)n經(jīng)常使用的變量應(yīng)該置于片內(nèi)經(jīng)常使用的變量應(yīng)該置于片內(nèi)RAMRAM中,要用中,要用bdatabdata、data
6、data、idataidata來(lái)定義來(lái)定義n不常使用的變量或規(guī)模較大的變量應(yīng)該置于片外不常使用的變量或規(guī)模較大的變量應(yīng)該置于片外RAMRAM中,中,要用要用pdatapdata、xdataxdata來(lái)定義來(lái)定義bit bdata flagsbit bdata flags; /位變量位變量flagsflags定位在片內(nèi)位尋址區(qū)定位在片內(nèi)位尋址區(qū) char data varchar data var; /字符變量字符變量varvar定位在片內(nèi)定位在片內(nèi)RAMRAM區(qū)區(qū) float idata x,yfloat idata x,y; / /實(shí)型變量實(shí)型變量x x,y y定位在片內(nèi)間址定位在片內(nèi)間址R
7、AMRAM區(qū)區(qū) unsigned char pdata zunsigned char pdata z; /無(wú)符號(hào)字符變量無(wú)符號(hào)字符變量z z定位在片外分頁(yè)間址定位在片外分頁(yè)間址RAMRAM區(qū)區(qū) 2022-6-117編譯模式編譯模式默認(rèn)默認(rèn)存儲(chǔ)分區(qū)存儲(chǔ)分區(qū)特特 點(diǎn)點(diǎn)SMALLdata小模式。小模式。 變量默認(rèn)在片內(nèi)變量默認(rèn)在片內(nèi)RAM??臻g小,速度塊??臻g小,速度塊。COMPACTpdata緊湊模式。緊湊模式。變量默認(rèn)在片外變量默認(rèn)在片外RAM的頁(yè)(的頁(yè)(256字節(jié),頁(yè)號(hào)字節(jié),頁(yè)號(hào)由由P2口決定)??跊Q定)。LARGExdata大模式。大模式。 變量默認(rèn)在片外變量默認(rèn)在片外RAM的的64KB范圍
8、??臻g大,范圍??臻g大,速度慢。速度慢。編譯模式默認(rèn)的變量存儲(chǔ)分區(qū)編譯模式默認(rèn)的變量存儲(chǔ)分區(qū)3.1.3 C513.1.3 C51的編譯模式的編譯模式未對(duì)變量存儲(chǔ)分區(qū)定義時(shí),未對(duì)變量存儲(chǔ)分區(qū)定義時(shí),C51C51編譯器采用編譯器采用默默認(rèn)認(rèn)存儲(chǔ)分區(qū)。例如:存儲(chǔ)分區(qū)。例如:char varchar var; /SMALL/SMALL模式時(shí),模式時(shí),varvar定位于定位于datadata存儲(chǔ)區(qū)存儲(chǔ)區(qū) /COMPACT/COMPACT模式時(shí),模式時(shí),varvar定位于定位于pdatapdata存儲(chǔ)區(qū)存儲(chǔ)區(qū) /LARGE/LARGE模式時(shí),模式時(shí),varvar定位于定位于xdataxdata存儲(chǔ)區(qū)存儲(chǔ)區(qū)
9、 2022-6-1193.1.4 3.1.4 用用_at_at_定義變量絕對(duì)地址定義變量絕對(duì)地址 v 用關(guān)鍵字用關(guān)鍵字“_at_at_”定義變量存放的首地址定義變量存放的首地址 idata int y _at_ 0 x30idata int y _at_ 0 x30;/ idata/ idata區(qū)域整型變量區(qū)域整型變量y y的首地址為的首地址為0 x30 0 x30 例如:例如:又如:又如:xdata char string20 _at_ 0 x3000 xdata char string20 _at_ 0 x3000;/xdata/xdata中字符型數(shù)組中字符型數(shù)組stringstring的
10、首地址為的首地址為0 x30000 x3000 注意,注意,C51C51編程時(shí)不要輕易使用絕對(duì)地址定位變量。編程時(shí)不要輕易使用絕對(duì)地址定位變量。 2022-6-11103.2 C51的指針的指針n對(duì)于一個(gè)變量對(duì)于一個(gè)變量a a,利用,利用& &a a表示變量表示變量a a的地址。則語(yǔ)句的地址。則語(yǔ)句 p p = & = &a a; 表明表明把把a(bǔ) a的地址賦給了指針變量的地址賦給了指針變量p p,則,則“p p指向了指向了變量變量a a”。 n 可以用可以用* *P P表示變量表示變量a a指針變量的定義指針變量的定義 char char * *p; p; / 定義指針變量定義指針變量P P
11、p = 30H ; p = 30H ; / / 指針變量賦值,指針變量賦值,30H30H為片內(nèi)為片內(nèi)RAMRAM地址地址 x = x = * *p; p; / / 30H30H單元的內(nèi)容送給變量單元的內(nèi)容送給變量x x* *P P指針變量指針變量數(shù)據(jù)變量數(shù)據(jù)變量3.2.1 3.2.1 已定義數(shù)據(jù)存儲(chǔ)分區(qū)的指針已定義數(shù)據(jù)存儲(chǔ)分區(qū)的指針定義時(shí)就定義時(shí)就指定了指定了所所指向數(shù)據(jù)指向數(shù)據(jù)的的存儲(chǔ)分區(qū)。存儲(chǔ)分區(qū)。 n 該指針占該指針占1 1個(gè)字節(jié)個(gè)字節(jié)(idata idata * *,data data * *,pdata pdata * *)或)或2 2個(gè)字節(jié)個(gè)字節(jié)(code code * *,xda
12、ta xdata * *) 示例:示例:charchar datadata * *strstr; / / 指針指針strstr指向的指向的charchar型數(shù)據(jù)型數(shù)據(jù)存于存于data data 空間空間intint xdataxdata * *numnum; / / 指針指針numnum指向的指向的intint型數(shù)據(jù)型數(shù)據(jù)存于存于xdataxdata 空間空間 基于存儲(chǔ)器的基于存儲(chǔ)器的指針長(zhǎng)度指針長(zhǎng)度比通用指針比通用指針短短,可以節(jié)省存儲(chǔ),可以節(jié)省存儲(chǔ)器空間,器空間,運(yùn)行速度快運(yùn)行速度快,但它所指對(duì)象具有確定的存儲(chǔ)器,但它所指對(duì)象具有確定的存儲(chǔ)器空間,空間,兼容性不好兼容性不好。數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)分
13、區(qū)數(shù)據(jù)分區(qū)2022-6-1112定義時(shí)定義時(shí)未指定未指定所指向的所指向的數(shù)據(jù)數(shù)據(jù)的的存儲(chǔ)分區(qū)存儲(chǔ)分區(qū) 。也稱(chēng)。也稱(chēng)通用指針通用指針。3.2.2 3.2.2 未定義數(shù)據(jù)存儲(chǔ)分區(qū)的指針未定義數(shù)據(jù)存儲(chǔ)分區(qū)的指針-通用指針通用指針 n 通用指針占通用指針占3 3個(gè)個(gè)字節(jié)字節(jié)第一字節(jié)存放該指針的第一字節(jié)存放該指針的默認(rèn)默認(rèn)存儲(chǔ)器存儲(chǔ)器類(lèi)型編碼類(lèi)型編碼(見(jiàn)表見(jiàn)表)第二字節(jié)存放該指針的第二字節(jié)存放該指針的高高位地址偏移量位地址偏移量第三字節(jié)存放該指針的第三字節(jié)存放該指針的低低位地址偏移量位地址偏移量 存儲(chǔ)器類(lèi)型編碼存儲(chǔ)器類(lèi)型編碼 存儲(chǔ)器類(lèi)型存儲(chǔ)器類(lèi)型bdata/ data / idataxdatapdata
14、code編碼編碼0 x000 x010 xfe0 xff2022-6-1113通用指針定義示例:通用指針定義示例:charchar * *xdata strptrxdata strptr; / / 指針本身存于指針本身存于xdata xdata 空間空間,它指向,它指向charchar型數(shù)據(jù)型數(shù)據(jù)intint * *data numberdata number; / / 指針本身存于指針本身存于data data 空間空間,它指向,它指向intint型數(shù)據(jù)型數(shù)據(jù) 由于指向?qū)ο蟮拇鎯?chǔ)空間在編譯時(shí)無(wú)法確定(由于指向?qū)ο蟮拇鎯?chǔ)空間在編譯時(shí)無(wú)法確定(運(yùn)行時(shí)確運(yùn)行時(shí)確定定),因此必須生成通用代碼以保證對(duì)
15、任意空間的對(duì)象進(jìn)),因此必須生成通用代碼以保證對(duì)任意空間的對(duì)象進(jìn)行存取。所以行存取。所以通用指針通用指針生成的代碼速度較慢生成的代碼速度較慢。指針指針charchar型型數(shù)據(jù)數(shù)據(jù)指針?lè)謪^(qū)指針?lè)謪^(qū)2022-6-11143.2.3 3.2.3 利用指針進(jìn)行絕對(duì)地址訪問(wèn)利用指針進(jìn)行絕對(duì)地址訪問(wèn) unsigned char data unsigned char data * *p p; p=0 x40 p=0 x40 ; * *p=0 x55p=0 x55; /數(shù)據(jù)數(shù)據(jù)0 x550 x55送入內(nèi)部送入內(nèi)部RAMRAM的的0 x400 x40單元單元 例如:例如:v C51C51編譯器提供了一組宏定義實(shí)
16、現(xiàn)對(duì)編譯器提供了一組宏定義實(shí)現(xiàn)對(duì)80C5180C51絕對(duì)地址的訪問(wèn)。絕對(duì)地址的訪問(wèn)。這組宏定義原型放在這組宏定義原型放在absacc.habsacc.h文件中,形如:文件中,形如: #define #define DBYTEDBYTE (unsigned char volatile data (unsigned char volatile data * *) 0) 0)從而使從而使DBYTEDBYTE用于以用于以字節(jié)字節(jié)形式對(duì)形式對(duì)datadata區(qū)訪問(wèn),可以寫(xiě)成:區(qū)訪問(wèn),可以寫(xiě)成: * *(DBYTE)=0 x55H(DBYTE)=0 x55H;或或 DBYTE0=0 x55HDBYTE0=
17、0 x55H; 與此類(lèi)似:與此類(lèi)似:C CBYTEBYTE用于以用于以字節(jié)字節(jié)形式對(duì)形式對(duì)codecode區(qū)區(qū)進(jìn)行訪問(wèn);進(jìn)行訪問(wèn);P PBYTEBYTE用于以用于以字節(jié)字節(jié)形式對(duì)形式對(duì)pdatapdata區(qū)區(qū)進(jìn)行訪問(wèn);進(jìn)行訪問(wèn);X XBYTEBYTE用于以用于以字節(jié)字節(jié)形式對(duì)形式對(duì)xdataxdata區(qū)區(qū)進(jìn)行訪問(wèn)。進(jìn)行訪問(wèn)。C CWORDWORD、D DWORDWORD、P PWORDWORD和和X XWORDWORD用于以用于以字字形式對(duì)形式對(duì)codecode區(qū)、區(qū)、datadata區(qū)、區(qū)、pdatapdata區(qū)區(qū)和和xdataxdata區(qū)區(qū)進(jìn)行訪問(wèn)。進(jìn)行訪問(wèn)。 3.2.4 C513.2.4
18、 C51程序編寫(xiě)示例程序編寫(xiě)示例 【例例3-13-1】將將30H30H至至3FH3FH共共1616個(gè)個(gè)RAMRAM單元初始化為單元初始化為“55H”55H”。#include #include #include #include void main(void)void main(void) unsigned char i;unsigned char i;for (i=0;i=15;i+)for (i=0;i=15;i+) DBYTE0 x30+i=0 x55;DBYTE0 x30+i=0 x55; while(1);while(1); 編譯系統(tǒng)自動(dòng)連接了編譯系統(tǒng)自動(dòng)連接了startup.a51
19、startup.a51生成代碼生成代碼n一是將內(nèi)部一是將內(nèi)部RAMRAM的的00H00H7FH7FH清清0 0;n二是設(shè)置堆棧指針二是設(shè)置堆棧指針SPSP。 有全局變量賦值時(shí)有全局變量賦值時(shí)編譯系統(tǒng)會(huì)自動(dòng)連接編譯系統(tǒng)會(huì)自動(dòng)連接init.a51init.a51生成代碼生成代碼C:0 x0000 020011 LJMP C:0011C:0 x0000 020011 LJMP C:0011C:0 x0003 E4 CLR AC:0 x0003 E4 CLR AC:0 x0004 FF MOV R7,AC:0 x0004 FF MOV R7,AC:0 x0005 7430 MOV A,#0 x30C:
20、0 x0005 7430 MOV A,#0 x30C:0 x0007 2F ADD A,R7C:0 x0007 2F ADD A,R7C:0 x0008 F8 MOV R0,AC:0 x0008 F8 MOV R0,AC:0 x0009 7655 MOV R0,#0 x55C:0 x0009 7655 MOV R0,#0 x55C:0 x000B 0F INC R7C:0 x000B 0F INC R7C:0 x000C BF10F6 CJNE R7,#0 x10,C:0005C:0 x000C BF10F6 CJNE R7,#0 x10,C:0005C:0 x000F 80FE SJMP C
21、:000FC:0 x000F 80FE SJMP C:000FC:C:0 x00110 x0011 787F MOV R0,#0 x7F 787F MOV R0,#0 x7FC:0 x0013 E4 CLR AC:0 x0013 E4 CLR AC:0 x0014 F6 MOV R0,AC:0 x0014 F6 MOV R0,AC:0 x0015 D8FD DJNZ R0,C:0014C:0 x0015 D8FD DJNZ R0,C:0014C:0 x0017 758107 MOV SP,#0 x07C:0 x0017 758107 MOV SP,#0 x07C:0 x001A 020003
22、LJMP C:0003C:0 x001A 020003 LJMP C:0003反匯編如下:反匯編如下:編譯系統(tǒng)自動(dòng)連接了編譯系統(tǒng)自動(dòng)連接了startup.a51startup.a51生成代碼生成代碼n一是將內(nèi)部一是將內(nèi)部RAMRAM的的00H00H7FH7FH清清0 0;n二是設(shè)置堆棧指針二是設(shè)置堆棧指針SPSP。 另:另:全局變量賦值時(shí)全局變量賦值時(shí)編譯系統(tǒng)會(huì)自動(dòng)連接編譯系統(tǒng)會(huì)自動(dòng)連接init.a51init.a51生成代碼生成代碼2022-6-11193.3 C51的函數(shù)的函數(shù) 3.3.1 C513.3.1 C51函數(shù)的定義函數(shù)的定義一般形式一般形式: :返回值類(lèi)型返回值類(lèi)型 函數(shù)名函數(shù)名
23、(形式參數(shù)列表)(形式參數(shù)列表) 編譯模式編譯模式reentrantinterrupt nusing nreentrantinterrupt nusing n 函數(shù)體函數(shù)體 n 編譯模式為編譯模式為SMALLSMALL、COPACTCOPACT或或LARGELARGEn reentrantreentrant用于定義可重入函數(shù)用于定義可重入函數(shù)n interrupt n interrupt n 用于定義中斷函數(shù)用于定義中斷函數(shù),n,n為中斷號(hào)為中斷號(hào), ,可以為可以為0 03131n using n using n 確定工作寄存器組,取值為確定工作寄存器組,取值為0 03 3 【例例3-23-2
24、】延時(shí)延時(shí)nMsnMs函數(shù)示例(晶振函數(shù)示例(晶振11.0592MHz11.0592MHz)。)。void DelayMs( unsigned int n ) void DelayMs( unsigned int n ) /延時(shí)函數(shù)延時(shí)函數(shù) unsigned char j;unsigned char j;while (n- -)while (n- -) for (j = 0; j 113; j+); for (j = 0; j 113; j+); 調(diào)試:調(diào)試:RegistersRegisters窗口中的窗口中的secsec值。值。 3.3.2 C513.3.2 C51函數(shù)定義的選項(xiàng)函數(shù)定義的選
25、項(xiàng)v編譯模式編譯模式 n SMALL SMALL模式:變量默認(rèn)在片內(nèi)模式:變量默認(rèn)在片內(nèi)RAMRAM;n COMPACT COMPACT模式:變量默認(rèn)在片外模式:變量默認(rèn)在片外RAMRAM的頁(yè)內(nèi);的頁(yè)內(nèi);n LARGE LARGE模式:變量默認(rèn)在片外模式:變量默認(rèn)在片外RAMRAM的的64KB64KB范圍。范圍。vreentrantreentrant定義為重入函數(shù)定義為重入函數(shù) n ANSI C ANSI C中,函數(shù)默認(rèn)都是可重入的中,函數(shù)默認(rèn)都是可重入的n C51C51函數(shù)函數(shù)默認(rèn)默認(rèn)是是不可重入不可重入的,使用可重入函數(shù)會(huì)消耗較的,使用可重入函數(shù)會(huì)消耗較多的存儲(chǔ)器資源,多的存儲(chǔ)器資源,應(yīng)該
26、盡量少用應(yīng)該盡量少用。 vinterrupt n interrupt n 定義中斷函數(shù)定義中斷函數(shù) 常用的中斷源對(duì)應(yīng)的中斷號(hào)常用的中斷源對(duì)應(yīng)的中斷號(hào)vusing nusing n確定中斷服務(wù)函數(shù)所使用的工作寄存器組確定中斷服務(wù)函數(shù)所使用的工作寄存器組 中斷源中斷源外中斷外中斷0定時(shí)器定時(shí)器0外中斷外中斷1定時(shí)器定時(shí)器1串行口串行口定時(shí)器定時(shí)器2中斷號(hào)中斷號(hào)012345【例例3-33-3】中斷函數(shù)定義示例中斷函數(shù)定義示例#include #include sbit P10 = P10;sbit P10 = P10;void void IntSrv(void)interrupt 0IntSrv(v
27、oid)interrupt 0 if(INT0=0)if(INT0=0)/測(cè)開(kāi)關(guān)狀態(tài)測(cè)開(kāi)關(guān)狀態(tài) P10=!P10;P10=!P10;while(INT0=0);while(INT0=0); 3.3.3 C513.3.3 C51的庫(kù)函數(shù)的庫(kù)函數(shù)常用的C51庫(kù)函數(shù)參見(jiàn)附錄B.2 【例例3-43-4】C51C51庫(kù)函數(shù)調(diào)用示例。庫(kù)函數(shù)調(diào)用示例。#include “intrins.h” #include “intrins.h” /在在intrins.hintrins.h中有對(duì)函數(shù)中有對(duì)函數(shù)_nop_( )_nop_( )的定義的定義void Delay(void)void Delay(void) in
28、t i=5000; int i=5000; while(i-)_nop_( ); while(i-)_nop_( ); 【例例3-53-5】C51C51標(biāo)準(zhǔn)輸入輸出函數(shù)調(diào)用示例。標(biāo)準(zhǔn)輸入輸出函數(shù)調(diào)用示例。#include #include #include #include void InitSPort(void)void InitSPort(void) SCON=0 x50; / SCON=0 x50; /串口方式串口方式1 1,允許接收,允許接收 TMOD=0 x20; /T1 TMOD=0 x20; /T1方式方式2 2(自動(dòng)重裝)(自動(dòng)重裝) TH1= 0 xFD; / TH1= 0
29、xFD; /波特率波特率96009600 TR1 =1; / TR1 =1; /啟動(dòng)啟動(dòng)T1T1 TI =1; / TI =1; /發(fā)送中斷置發(fā)送中斷置1 1 void main(void)void main(void) InitSPort(); InitSPort(); printf(Hello World n);printf(Hello World n); while(1); while(1); 標(biāo)準(zhǔn)標(biāo)準(zhǔn)I/OI/O的重定向!的重定向! 在調(diào)試狀態(tài):在調(diào)試狀態(tài):ViewViewSerial WindowsSerial WindowsUART #1 UART #1 3.4 C51與匯編程序的
30、接口與匯編程序的接口 3.4.1 3.4.1 在在C51C51程序中嵌入?yún)R編指令程序中嵌入?yún)R編指令 【例例3-63-6】利用預(yù)編譯指令。利用預(yù)編譯指令。 #include reg51.h#include reg51.hvoid Init(void);void Init(void);void main()void main() while(1) while(1) Init(); Init(); void Init(void)void Init(void) #pragma asm#pragma asmMOV R7,#16MOV R7,#16MOV R1,#20HMOV R1,#20HMOV A,#
31、55HMOV A,#55H LP:MOV R1,A LP:MOV R1,AINC R1INC R1 DJNZ R7,LP DJNZ R7,LP #pragma endasm#pragma endasmreturn;return; 要進(jìn)行以下設(shè)置:要進(jìn)行以下設(shè)置:2022-6-1127n將嵌有匯編語(yǔ)句的源文件加入工程文件,將將嵌有匯編語(yǔ)句的源文件加入工程文件,將鼠標(biāo)指向該文件,選擇右鍵菜單鼠標(biāo)指向該文件,選擇右鍵菜單 “option option for for insertasm. cinsertasm. c”。n將屬性將屬性propertiesproperties書(shū)簽下的書(shū)簽下的 “Gene
32、rate Generate Assembler SRC FileAssembler SRC File”與與“Assemble SRC Assemble SRC FileFile”選項(xiàng)置成選項(xiàng)置成“”。n再加入庫(kù)文件(如再加入庫(kù)文件(如C51S.LIBC51S.LIB),然后編譯。),然后編譯。 3.4.2 3.4.2 在在C51C51程序中調(diào)用匯編子程序程序中調(diào)用匯編子程序 【例例3-73-7】不含參數(shù)傳遞的子程序調(diào)用。不含參數(shù)傳遞的子程序調(diào)用。先構(gòu)造匯編語(yǔ)言源文件:先構(gòu)造匯編語(yǔ)言源文件: d1ms:MOV R6,#249 ;d1ms:MOV R6,#249 ; DL:NOP DL:NOP ;
33、1 ;1s s NOP NOP ;1 ;1s s DJNZ R6,DL ;2 DJNZ R6,DL ;2s,s,循環(huán)內(nèi)約循環(huán)內(nèi)約1ms1ms RET RET ENDEND ?PR?d1ms?EP4_7B?PR?d1ms?EP4_7B SEGMENT SEGMENT CODECODE PUBLIC PUBLIC d1msd1ms RSEG RSEG ?PR?d1ms?EP4_7B?PR?d1ms?EP4_7B注:注:d1msd1ms對(duì)應(yīng)對(duì)應(yīng)C51C51的的d1msd1ms()()EP4_7BEP4_7B對(duì)應(yīng)對(duì)應(yīng)ep4_7b.asmep4_7b.asm編寫(xiě)編寫(xiě)C51C51語(yǔ)言程序如下,完成匯編子程序調(diào)用:語(yǔ)言程序如下,完成匯編子程序調(diào)用:#include #include sbit P2_0=P20;sbit P2_0=P20;externextern void d1ms(void); void d1ms(void);void main()void main() for(;)for(;) P2_0=0;P2_0=0;d1ms();d1ms(); / /* * 調(diào)用匯編子程序調(diào)用匯編子程序 * */ /P2_0=1;P2_0=1;d1ms();d1ms(); / /* * 調(diào)用匯編子程序調(diào)用匯編子程序 * */ / v 主調(diào)函數(shù)要向
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版數(shù)據(jù)中心建筑施工總承包合同2篇
- 油田工程管理課程設(shè)計(jì)
- 2025年度高職高專(zhuān)土建專(zhuān)業(yè)實(shí)踐教學(xué)基地建設(shè)合同3篇
- 物聯(lián)網(wǎng)硬件基礎(chǔ)課程設(shè)計(jì)
- 大數(shù)據(jù)運(yùn)算課程設(shè)計(jì)報(bào)告
- 聚合纖維的機(jī)械加工技術(shù)考核試卷
- 2025年度PE管材產(chǎn)品溯源與質(zhì)量追溯服務(wù)合同3篇
- 溢洪道側(cè)槽課程設(shè)計(jì)
- 2025年度酒店照明工程驗(yàn)收及保修服務(wù)合同3篇
- 二零二五年度事業(yè)單位借調(diào)和借用合同2篇
- 口腔正畸科普課件
- 2024年廣東省普通高中學(xué)業(yè)水平合格性地理試卷(1月份)
- 住宅樓安全性檢測(cè)鑒定方案
- 配送管理招聘面試題與參考回答2024年
- 江蘇省語(yǔ)文小學(xué)三年級(jí)上學(xué)期期末試題及解答參考(2024年)
- 黑龍江哈爾濱市省實(shí)驗(yàn)中學(xué)2025屆數(shù)學(xué)高一上期末監(jiān)測(cè)試題含解析
- 小學(xué)一年級(jí)數(shù)學(xué)思維訓(xùn)練100題(附答案)
- 安全生產(chǎn)治本攻堅(jiān)三年行動(dòng)方案(一般工貿(mào)) 2024
- 2024年廣東省廣州市黃埔區(qū)中考一模語(yǔ)文試題及答案
- 飯?zhí)脪炜繀f(xié)議合同范本
- 2023-2024學(xué)年遼寧省重點(diǎn)高中沈陽(yáng)市郊聯(lián)體高二上學(xué)期期末考試生物試題(解析版)
評(píng)論
0/150
提交評(píng)論