pic單片機picc庫函數(shù)詳解_第1頁
pic單片機picc庫函數(shù)詳解_第2頁
pic單片機picc庫函數(shù)詳解_第3頁
pic單片機picc庫函數(shù)詳解_第4頁
pic單片機picc庫函數(shù)詳解_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、httPICC 庫函數(shù)本章將詳細(xì)列出 PICC 編譯器的庫函數(shù)。每個函數(shù)均從函數(shù)名開始,然后按照以下幾個標(biāo)題給出詳細(xì)解釋。提要:函數(shù)的 C 語言定義以及定義函數(shù)的頭文件。描述:對函數(shù)及其目的進行敘述性描述。例程:給出一個能說明該函數(shù)的應(yīng)用例子。數(shù)據(jù)類型:列出函數(shù)中使用的一些特殊的數(shù)據(jù)類型(如結(jié)構(gòu)體等)的C語言定義。這些數(shù)據(jù)類型的定義包含在提要標(biāo)題下列出的頭文件中。參閱:給出相關(guān)聯(lián)的函數(shù)。返回值:如果函數(shù)有返回值,則在本標(biāo)題下將給出返回值的類型和性質(zhì),同時還包括錯誤返回的信息。1ABS 函數(shù)1.提 要#include <stdlib.h> int abs (int j)描 述abs(

2、 )函數(shù)返回變量 j 的絕對值。例 程#include <stdio.h> #include <stdlib.h> voidmain (void)int a = -5;printf("The absolute value of %d is %dn",a,abs(a);返回值j 的絕對值。ACOS函數(shù)1.提 要#include <math.h> double acos (double f) 描 述acos( )函數(shù)是cos( ) 的反函數(shù)。函數(shù)參數(shù)在-1,1區(qū)間內(nèi),返回值是一個用弧度表示2.的角度,而且該返回值的余弦值等于函數(shù)

3、參數(shù)。3. 例 程htt#include <math.h> #include <stdio.h>/*以度為,打印-1,1區(qū)間內(nèi)的反余弦值*/ voidmain (void)float i,a;for(i = -1.0,i < 1.0;i += 0.1) a = acos(i)*180.0/3.141592;printf("acos(%f) = %f degreesn",i,a);4. 參 閱sin( ),cos( ),tan( ),asin( ),atan( ),atan2( )5. 返回值返回值是一個用弧度表示的角度,區(qū)間是0,。如果函數(shù)參數(shù)

4、超出區(qū)間-1,1, 則返回值將為 0。3ASCTIME函數(shù)1. 提 要#include <time.h>char * asctime (struct tm * t)2. 描 述asctime( )函數(shù)通過指針 t 從上struct tm結(jié)構(gòu)體中獲得時間,返回描述當(dāng)前日期和時間的26個字符串,其格式如下:Sun Sep 16 01:03:52 1973n0值得注意的是,在字符串的末尾有換行符。字符串中的每個字長是固定的。以下例程得到當(dāng)前時間,通過localtime( )函數(shù)將其轉(zhuǎn)換成一個struct tm指針,最后轉(zhuǎn)換成ASCII碼并打印出來。其中,time( )函數(shù)需要用戶提供(3

5、. 例 程#include <stdio.h> #include <time.h> voidmain (void)time_t clock; struct tm * tp;參閱time( )函數(shù))。time(&clock);tp = localtime(&clock);httprintf("%s",asctime(tp);4. 參 閱ctime( ),gmtime( ),localtime( ),time( )指向字符串的指針。注意:由于編譯器不提供time( )例行程序,故在本例程中它需要由用戶提供。參照time( )函數(shù)。6.數(shù)據(jù)

6、類型struct tm int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst;4ASIN函數(shù)1.提 要#include <math.h> double asin (double f) 描 述asin( )函數(shù)是sin( )的反函數(shù)。它的函數(shù)參數(shù)在-1,1區(qū)間內(nèi),返回一個用弧度表示2.的角度值,而且這個返回值的正弦等于函數(shù)參數(shù)。3. 例 程#include <math.h> #include <

7、stdio.h> voidmain (void)float i,a;for(i = -1.0;i < 1.0 ;i += 0.1) a = asin(i)*180.0/3.141592;printf("asin(%f) = %f degreesn",i,a);4. 參 閱sin( ),cos( ),tan( ),acos( ),atan( ),atan2( )本函數(shù)返回一個用弧度表示的角度值,其區(qū)間為-/2,/2。如果函數(shù)參數(shù)的值超出區(qū)間-1,1,則函數(shù)返回值將為0。5ATAN函數(shù)1. 提 要#include <math.h> double atan

8、 (double x)2. 描 述函數(shù)返回參數(shù)的反正切值。也就是說,本函數(shù)將返回一個在區(qū)間-/2,/2的角度e, 而且有tan(e)=x(x為函數(shù)參數(shù))。3.例 程#include <stdio.h> #include <math.h> voidmain (void)printf("%fn",atan(1.5);參 閱sin( ),cos( ),tan( ),asin( ),acos( ),atan2( )4.返回函數(shù)參數(shù)的反正切值。6ATAN2函數(shù)1.提 要#include <math.h>double atan2 (double y,

9、double x)描 述本函數(shù)返回y/x的反正切值,并由兩個函數(shù)參數(shù)的符號來決定返回值的象限。例 程#include <stdio.h> #include <math.h> voidmain (void)2.3.printf("%fn",atan2(1.5,1);4. 參 閱sin( ),cos( ),tan( ),asin( ),acos( ),atan( )返回y/x的反正切值(用弧度表示),區(qū)間為-,。如果y和x均為0,將出現(xiàn)定義域錯誤,并返回0。7ATOF函數(shù)1. 提 要#include <stdlib.h>double atof

10、 (const char * s)2. 描 述atof( )函數(shù)將掃描由函數(shù)參數(shù)傳遞過來的字符串,并跳過字符串開頭的空格。然后將一個數(shù)的ASCII表達(dá)式轉(zhuǎn)換成雙精度數(shù)。這個數(shù)可以用十進制數(shù)、浮點數(shù)或者科學(xué)記數(shù)法表示。3.例 程#include <stdlib.h> #include <stdio.h> voidmain (void)char buf80; double i; gets(buf);i = atof(buf);printf("Read %s: converted to %fn",buf,i);參 閱atoi( ),atol( )4.本函數(shù)

11、返回一個雙精度浮點數(shù)。如果字符串中沒有發(fā)現(xiàn)任何數(shù)字,則返回0.0。8ATOI函數(shù)1.提 要#include <stdlib.h>int atoi (const char * s)描 述atoi( )函數(shù)掃描傳遞過來的字符串,跳過開頭的空格并2.其符號;然后將一個十進制數(shù)的ASCII表達(dá)式轉(zhuǎn)換成整數(shù)。3.例 程#include <stdlib.h> #include <stdio.h> voidmain (void)char buf80; int i; gets(buf);i = atoi(buf);printf("Read %s: converte

12、d to %dn",buf,i);參 閱xtoi( ),atof( ),atol( )4.返回一個有符號的整數(shù)。如果在字符串中沒有發(fā)現(xiàn)任何數(shù)字,則返回0。9ATOL函數(shù)1. 提 要#include <stdlib.h>long atol (const char * s)2. 描 述atol( )函數(shù)掃描傳遞過來的字符串,并跳過字符串開頭的空格;然后將十進制數(shù)的ASCII表達(dá)式轉(zhuǎn)換成長整型。3. 例 程#include <stdlib.h> #include <stdio.h> voidmain (void)char buf80; long i; g

13、ets(buf);i = atol(buf);printf("Read %s: converted to %ldn",buf,i);4. 參 閱atoi( ),atof( )5返回值返回一個長整型數(shù)。如果字符串中沒有發(fā)現(xiàn)任何數(shù)字,返回值為0。10CEIL函數(shù)1. 提 要#include <math.h> double ceil (double f)2. 描 述本函數(shù)對函數(shù)參數(shù) f 取整,取整后的返回值為大于或等于3. 例 程#include <stdio.h> #include <math.h> voidmain (void)double

14、 j; scanf("%lf",&j);printf("The ceiling of %lf is %lfn",j,ceil(j);f的最小整數(shù)。11COS函數(shù)1. 提 要#include <math.h> double cos (double f)2. 描 述本函數(shù)將計算函數(shù)參數(shù)的余弦值。其中,函數(shù)參數(shù)用弧度表示。余弦值通過多項式級數(shù)近似值展開式算得。3. 例 程#include <math.h> #include <stdio.h> #define C 3.141592/180.0 voidmain (vo

15、id)double i;for(i = 0;i <= 180.0;i += 10)printf("sin(%3.0f) = %f,cos = %fn",i,sin(i*C),cos(i*C);4. 參 閱sin( ),tan( ),asin( ),acos( ),atan( ),atan2( )返回一個雙精度數(shù),區(qū)間為-1,1。12COSH、SINH、TANH函數(shù)1.提 要#include <math.h> double cosh (double f) double sinh (double f) double tanh (double f) 描 述這些函

16、數(shù)都是cos( ),sin( )和tan( )的雙曲函數(shù)。例 程#include <stdio.h> #include <math.h> voidmain (void)printf("%fn",cosh(1.5); printf("%fn",sinh(1.5); printf("%fn",tanh(1.5);返回值cosh( )函數(shù)返回雙曲余弦值,sinh( )函數(shù)返回雙曲正弦值,tanh( )函數(shù)返回雙曲正切2.3.4.值。13CTIME函數(shù)1. 提 要#include <time.h>char

17、* ctime (time_t * t)2. 描 述ctime( )函數(shù)將函數(shù)參數(shù)所指的時間轉(zhuǎn)換成字符串,其結(jié)構(gòu)與asctime( )函數(shù)所描述的相同,并且精確到秒。以下例程將打印出當(dāng)前的時間和日期。3. 例 程#include <stdio.h> #include <time.h> voidmain (void)time_t clock; time(&clock);printf("%s",ctime(&clock);參 閱gmtime( ),localtime( ),asctime( ),time( )4.本函數(shù)返回一個指向該字符串

18、的指針。注意:由于編譯器數(shù)據(jù)類型typedef long time_t提供time( )程序,故它需要由用戶給定。參閱time( )函數(shù)。6.14DI、EI函數(shù)1.提 要#include <pic.h> void ei(void) void di(void)描 述ei( )和di( )函數(shù)分別實現(xiàn)全局中斷使能和中斷2.,其定義在pic.h頭文件中。它們將被擴展為一條內(nèi)嵌的匯編指令,分別對中斷使能位進行置位和清零。以下例程將說明ei( )函數(shù)和di( )函數(shù)在一個長整型變量時的應(yīng)用。由于中斷服務(wù)程序?qū)⑿薷脑撟兞浚匀绻撟兞坎话凑毡纠痰慕Y(jié)構(gòu)編程,一旦在變量值的連續(xù)字期間出現(xiàn)中斷,

19、則函數(shù)getticks( ) 將返回錯誤的值。3.例 程#include <pic.h> long count;void interrupt tick(void)count+;long getticks(void)long val; /*在count變量前di( );val = count; ei( ); return val;中斷,保證的連續(xù)性*/15DIV函數(shù)1.提 要#include <stdlib.h>div_t div (int numer,int demon)描 述2.div( )函數(shù)實現(xiàn)例 程#include <stdlib.h> #inclu

20、de <stdio.h> voidmain (void)div_t x;除以分母,得到商和余數(shù)。3.x = div(12345,66);printf("quotient = %d,remainder = %dn",x.quot,x.rem);返回值返回一個包括商和余數(shù)的結(jié)構(gòu)體div_t。.數(shù)據(jù)類型typedef structint quot; int rem; div_t;4.5.16EEPROM_READ、EEPROM_WRITE函數(shù)1.提 要#include <pic.h>unsigned char eeprom_read (unsigned c

21、har addr);void eeprom_write (unsigned char addr,unsigned char value);描 述2.這些函數(shù)允許片內(nèi)EEPROM(如果片內(nèi)有EEPROM)。EEPROM不是可直接尋址的寄存器空間,當(dāng)需要EEPROM時,就需要將一些特定的字節(jié)序列加載到EEPROM控制寄存器中。寫EEPROM是一個緩慢的過程。故eeprom_write( )函數(shù)在寫入下一個數(shù)據(jù)前,會通過恰當(dāng)?shù)募拇嫫鱽泶_保前一個數(shù)據(jù)已經(jīng)寫入完畢。另外,讀EEPROM可以在一個指令周期內(nèi)完成,所以沒有必要3. 例 程#include <pic.h> voidmain (vo

22、id)unsigned char data; unsigned char address;讀操作是否完成。address = 0x10;data = eeprom_read(address);注意:如果調(diào)用eeprom_write( )函數(shù)后需即刻調(diào)用eeprom_read( )函數(shù),則必須EEPROM寄存器以確保寫入完畢。全局中斷使能位(GIE)在eeprom_write( )程序中重新恢復(fù)(寫EEPROM時需要關(guān)閉總中斷)。而且,本函數(shù)清EEIF標(biāo)志位。17EVAL_POLY函數(shù)1. 提 要#include <math.h>double eval_poly (double x,

23、const double * d,int n)2. 描 述eval_poly( )函數(shù)將求解一個多項式的值。這個多項式的系數(shù)分別包含在x和數(shù)組d中, 例如:y = x*x*d2 + x*d1 + d0該多項式的階數(shù)由參數(shù)n傳遞過來。3.例 程#include <stdio.h> #include <math.h> voidmain (void)double x,y;double d3 = 1.1,3.5,2.7; x = 2.2;y = eval_poly(x,d,2);printf("The polynomial evaluated at %f is %fn

24、",x,y);返回值本函數(shù)返回一個雙精度數(shù),該數(shù)是自變量x對應(yīng)的多項式值。4.18EXP函數(shù)1.提 要#include <math.h> double exp (double f) 描 述exp( )函數(shù)返回參數(shù)的指數(shù)函數(shù)值,即ef(f為函數(shù)參數(shù))。例 程#include <math.h>2.3.#include <stdio.h> voidmain (void)double f;for(f = 0.0;f <= 5;f += 1.0)printf("e to %1.0f = %fn",f,exp(f);參 閱log( )

25、,log10( ),pow( )4.19FABS函數(shù)1.提 要#include <math.h> double fabs (double f) 描 述本函數(shù)返回雙精度函數(shù)參數(shù)的絕對值。例 程#include <stdio.h> #include <math.h> voidmain (void)printf("%f %fn",fabs(1.5),fabs(-1.5);參 閱abs( )0FLOOR函數(shù)1.提 要#include <math.h> double floor (double f) 描 述本函數(shù)對函數(shù)參數(shù)

26、取整,取整后的返回值不大于函數(shù)參數(shù)f。例 程#include <stdio.h> #include <math.h> voidmain (void)2.3.printf("%fn",floor( 1.5 ); printf("%fn",floor( -1.5);21FREXP函數(shù)1. 提 要#include <math.h>double frexp (double f,int * p)2. 描 述frexp( )函數(shù)將一個浮點數(shù)分解成規(guī)格化小數(shù)和2的整數(shù)次冪兩部分,整數(shù)冪部分存于指針 p 所指的 int 單元中。本函數(shù)

27、的返回值x或在區(qū)間(0.5,1.0)內(nèi),或為f=x×2p。如果f為0,則分解出來的兩部分均為0。0;而且有3.例 程#include <math.h> #include <stdio.h> voidmain (void)double f; int i;f = frexp(23456.34,&i); printf("23456.34 = %f * 2%dn",f,i);參 閱ldexp( )4.22GET_CAL_DATA函數(shù)1.提 要#include <pic.h>double get_cal_data (const u

28、nsigned char * code_ptr)描 述本函數(shù)從PIC 14000標(biāo)定空間返回一個32位的浮點標(biāo)定數(shù)據(jù)。只有利用這個函數(shù)才能KREF、KBG、BHTHERM和KTC單元(32位浮點參數(shù))。由于FOSC和TWDT均是一2.個字節(jié)長度,故可以直接3. 例 程#include <pic.h> voidmain (void)double x;它們。unsigned char y;x = get_cal_data(KREF);/*獲得參考斜率(slope reference ratio)*/ y =TWDT;/*獲得WDT溢出時間*/返回值返回定標(biāo)參數(shù)值。注意:本函數(shù)僅用于PI

29、C 140004.23GMTIME函數(shù)1.提 要#include <time.h>struct tm * gmtime (time_t * t)描 述本函數(shù)把指針 t 所指的時間分解,并且存于結(jié)構(gòu)體中,精確度為秒。其中,t 所指的2.時間必須自1970年1月1日0時0分0秒起。本函數(shù)所用的結(jié)構(gòu)體被定義在time.h文件中,可參照本節(jié)“數(shù)據(jù)類型”部分。3.例 程#include <stdio.h> #include <time.h> voidmain (void)time_t clock; struct tm * tp; time(&clock);tp

30、 = gmtime(&clock);printf("Its %d in Londonn",tp->tm_year參 閱ctime( ),asctime( ),time( ),localtime( );4.返回tm類型的結(jié)構(gòu)體。注意:由于編譯器提供time( )程序,故它需要由用戶給定。數(shù)據(jù)類型typedef long time_t; struct tm int tm_sec; int tm_min; int tm_hour;int tm_mday;參閱time( )函數(shù)。6.int tm_mon; int tm_year; int tm_wday; int t

31、m_yday; int tm_isdst;24ISALNUM,ISALPHA,ISDIGIT,ISLOWER提 要#include <ctype.h> int isalnum (char c) int isalpha (char c) int isascii (char c)等函數(shù)1.inttrl (char c)int isdigit (char c) int islower (char c) int isprint (char c) int isgraph (char c) int ispunct (char c) int isspace (char c) int isuppe

32、r (char c) int isxdigit(char c) 描 述以上函數(shù)都被定義在ctype.h文件中。它們將測試給定的字符,看該字符是否為已知2.的幾組字符中的成員。isalnum (c) isalpha (c) isascii (c)trl (c) isdigit (c) islower (c) isprint (c) isgraph (c) ispunct (c) isspace (c) isupper (c) isxdigit (c)3例 程#include <ctype.h> #include <stdio.h>c在09、az或者AZ范圍內(nèi); c在AZ或

33、az范圍內(nèi);c為7位ASCII字符;c為控制字符;c為十進制c在az范圍內(nèi); c為打印字符;數(shù)字;c為非空格可打印字符; c不是字母數(shù)字混合的;c是空格鍵、TAB鍵或換行符; c在AZ范圍內(nèi);c在09、af或AF范圍內(nèi)。voidmain (void)char buf80; int i; gets(buf);i = 0; while(isalnum(bufi) i+;bufi = 0;printf("%s is the wordn",buf);4參 閱toupper( ),tolower( ),toascii( )25KBHIT函數(shù)1. 提 要#include <con

34、io.h> bit kbhit (void)2. 描述如果鍵盤上的字符被按下,函數(shù)返回1;否則返回0。通常,該字符可通過getch( )函數(shù)3.。例 程#include <conio.h> voidmain (void)int i; while(!kbhit() cputs("Im waiting."); for(i = 0 ; i != 1000 ; continue;參 閱getch( ),getche( )i+)4.如果有鍵被按下,函數(shù)將返回1;否則返回0。此外,返回值為1位。注意:程序的主體需由用戶實現(xiàn),其主要框架可以從sources目錄下直接獲得

35、。26LDEXP函數(shù)1. 提 要#include <math.h>double ldexp (double f,int i)2. 描 述ldexp( )函數(shù)是frexp( )的反函數(shù)。它先進行浮點數(shù)f 的指數(shù)部分與整數(shù)i的求和運算,然后返回結(jié)果。3.例 程#include <math.h> #include <stdio.h> voidmain (void)double f;f = ldexp(1.0,10);printf("1.0 * 210 = %fn",f);參 閱frexp( )4.本函數(shù)返回浮點數(shù) f 指數(shù)部分加上整數(shù) i 后得

36、到的新浮點數(shù)。27LDIV函數(shù)1.提 要#include <stdlib.h>ldiv_t ldiv (long number,long denom)描 述2.ldiv( )函數(shù)實現(xiàn)除以分母,得到商和余數(shù)。商的符號與精確商的符號一致,絕對值是一個小于精確商絕對值的最大整數(shù)。Ldiv( )函數(shù)與div( )函數(shù)類似;不同點在于,前者的函數(shù)參數(shù)和返回值(結(jié)構(gòu)體ldiv_t) 的成員都是長整型數(shù)據(jù)。3例 程#include <stdlib.h> #include <stdio.h> voidmain (void)ldiv_t lt;lt = ldiv(123456

37、7,12345);printf("Quotient = %ld,remainder = %ldn",lt.quot,lt.rem);4參 閱div( ) 5返回值返回值是結(jié)構(gòu)體ldiv_t。6數(shù)據(jù)結(jié)構(gòu)typedef struct long quot; /*商*/long rem; /*余數(shù)*/ ldiv_t;28LOCALTIME函數(shù)1. 提 要#include <time.h>struct tm * localtime (time_t * t)2. 描 述本函數(shù)把指針t所指的時間分解并且存于結(jié)構(gòu)體中,精確度為秒。其中,t所指的時間必須自1970年1月1日0時0

38、分0秒起,所用的結(jié)構(gòu)體被定義在time.h文件中。localtime( ) 函數(shù)需要考慮全局整型變量time_zone中的內(nèi)容,因為它包含有本地時區(qū)位于格林威治以西的時區(qū)數(shù)值。由于在MS-DOS環(huán)境下無法預(yù)先確定這個值,所以,在缺省的條件下, localtime( )函數(shù)的返回值將與gmtime( )的相同。3. 例 程#include <stdio.h> #include <time.h> char * wday = "Sunday","Monday","Tuesday","Wednesday&qu

39、ot;, "Thursday","Friday","Saturday"; voidmain (void)time_t clock; struct tm * tp; time(&clock);tp = localtime(&clock);printf("Today is %sn",wdaytp->tm_wday);4. 參 閱ctime( ),asctime( ),time( )本函數(shù)返回tm結(jié)構(gòu)體型數(shù)據(jù)。注意:由于編譯器數(shù)據(jù)結(jié)構(gòu)提供time( )程序,故它需要由用戶給定。參閱time( )函數(shù)

40、。6.typedef long time_t; struct tm int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst;29LOG、LOG10函數(shù)1.提 要#include <math.h> double log (double f) double log10 (double f) 描 述log( )函數(shù)返回f的自然對數(shù)值。log10( )函數(shù)返回f以10為底的對數(shù)值。例 程#include <math

41、.h> #include <stdio.h> voidmain (void)double f;for(f = 1.0;f <= 10.0;f += 1.0) printf("log(%1.0f) = %fn",f,log(f);參 閱exp( ),pow( )2.3.4.如果函數(shù)參數(shù)為負(fù),返回值為0。30MEMCHR函數(shù)1.提 要#include <string.h>/* 初級和中級系列單片機 */const void * memchr (const void * block,int val,size_t length)/* 高級系列單片

42、機*/void * memchr (const void * block,int val,size_t length)2. 描 述memchr( )函數(shù)與strchr( )函數(shù)在功能上類似;但前者沒有在字符串中尋找null(空)中止字符的功能。memchr( )函數(shù)實現(xiàn)在一段規(guī)定了長度的內(nèi)存區(qū)域中尋找特定的字節(jié)。它的函數(shù)參數(shù)包括指向被尋內(nèi)存區(qū)域的指針、被尋字節(jié)的值和被尋內(nèi)存區(qū)域的長度。函數(shù)將返回一個指針,該指針指向被尋內(nèi)存區(qū)域中被尋字節(jié)首次出現(xiàn)的單元。3.例 程#include <string.h> #include <stdio.h>unsigned int ary

43、= 1,5,0x6789,0x23; voidmain (void)char * cp;cp = memchr(ary,0x89,sizeof ary); if(!cp)printf("not foundn"); elseprintf("Found at offset %un",cp - (char *)ary);參 閱strchr( )4.函數(shù)返回指針。該指針指向被尋內(nèi)存區(qū)域中被尋字節(jié)首次出現(xiàn)的單元;否則返回NULL。31MEMCMP函數(shù)1. 提 要#include <string.h>int memcmp (const void * s1

44、, const void * s2, size_t n)2. 描 述memcmp()函數(shù)的功能是比較兩塊長度為 n 的內(nèi)存中變量的大小,類似strncmp()函數(shù)返回一個有符號數(shù)。與strncmp()函數(shù)不同的是,memcmp()函數(shù)沒有空格結(jié)束符。ASCII 碼字符順序被用來比較;但如果內(nèi)存塊中包含非ASCII碼字符,則返回值不確定。測試是否相等總是可靠的。3. 例 程#include <stdio.h> #include <string.h> voidmain (void)int buf10, cow10, i; buf0 = 1;buf2 = 4;cow0 = 1

45、;cow2 = 5;buf1 = 3;cow1 = 3;i = memcmp(buf, cow, 3*sizeof(int); if(i < 0)printf("less thann"); else if(i > 0) printf("Greater thann"); elseprintf("Equaln");4. 參 閱strncpy(), strncmp(), strchr(), memset(),memchr()當(dāng)內(nèi)存塊變量 s1 分別小于、等于或大于內(nèi)存塊 s2 變量時, 函數(shù)返回值分別為-1,0或 1。32MEM

46、CPY函數(shù)1. 提 要#include <string.h>/* 低級或中級系列單片機 */void * memcpy (void * d, const void * s, size_t n)/* 高級系列單片機 */far void * memcpy (far void * d, const void * s, size_t n)2. 描 述memcpy()函數(shù)的功能是, 將指針s指向的、內(nèi)存開始的 n 個字節(jié)到指針d指向的、內(nèi)存開始的單元。重疊區(qū)的結(jié)果不確定。與strcpy()函數(shù)不同的是,memcpy()復(fù)制的是一定數(shù)量的字節(jié),而不是3. 例 程#include <st

47、ring.h> #include <stdio.h>所有結(jié)束符前的數(shù)據(jù)。voidmain (void)char buf80;memset(buf, 0, sizeof buf); memcpy(buf, "a partial string", 10); printf("buf = %sn", buf);參 閱strncpy(), strncmp(), strchr(), memset()4.memcpy()函數(shù)返回值為函數(shù)的第一個參數(shù)。33MEMMOVE函數(shù)1.提 要#include <string.h>/* 低級或中級系列

48、單片機 */void * memmove (void * s1, const void * s2, size_t n)/* 高級系列單片機 */far void * memmove (far void * s1, const void * s2, size_t n)描 述memmove()函數(shù)與memcpy()函數(shù)相似,但memmove()函數(shù)能對重疊區(qū)進行準(zhǔn)確的復(fù)2.制。也就是說,它可以適當(dāng)向前或向后,正確地從一個塊到另一個塊,并將它覆蓋。3.參 閱strncpy(), strncmp(), strchr(), memcpy()返回值memmove()函數(shù)同樣返回它的第一個參數(shù)。4.34ME

49、MSET函數(shù)1.提 要#include <string.h>/* 低級和中級系列的單片機 */ void * memset (void * s, int c, size_t n)/* 高級系列單片機 */far void * memset (far void * s, int c, size_t n)描 述2.memset()函數(shù)將字節(jié)c例 程#include <string.h> #include <stdio.h>到指針s指向的,內(nèi)存開始的n個內(nèi)存字節(jié)。3.voidmain (void)char abuf20;strcpy(abuf, "Thi

50、s is a string"); memset(abuf, x, 5);printf("buf = %sn", abuf);4. 參 閱strncpy(), strncmp(), strchr(), memcpy(), memchr()35MODF函數(shù)1. 提 要#include <math.h>double modf (double value, double * iptr)2. 描 述modf()函數(shù)將參數(shù)value分為整數(shù)和小數(shù)2部分,每部分都和value的符號相同。例如,-3.17將被分為整數(shù)部分(-3)和小數(shù)部分(-0.17)。其中整數(shù)部分以

51、雙精度數(shù)據(jù)類型存儲在指針iptr指向的單元中。3.例 程#include <math.h> #include <stdio.h> voidmain (void)double i_val, f_val;f_val = modf( -3.17, &i_val);返回值函數(shù)返回值為value的帶符號小數(shù)部分。4.36PERSIST_CHECK, PERSIST_VALIDATE函數(shù)1.提 要#include <sys.h>int persist_check (int flag) void persist_validate (void)描 述persist_

52、check()函數(shù)要用到非可變(non-volatile)的RAM變量,這些變量在定義時被2.加上限定詞persistent。在測試NVRAM(非可變RAM)區(qū)域時,先調(diào)用persist_validate()函數(shù),并用到一個在隱藏變量中的虛擬數(shù)據(jù),且由persist_validate()函數(shù)計算得到一個測試結(jié)果。如果虛擬數(shù)據(jù)和測試結(jié)果都正確,則返回值為真(非零)。如果都不正確, 則返回零。在這種情況下, 函數(shù)返回零并且重新檢測NVRAM 區(qū)域( 通過調(diào)用persist_validate()函數(shù))。函數(shù)被執(zhí)行的條件是標(biāo)志變量變量不為0。persist_validate()函數(shù)應(yīng)在每次轉(zhuǎn)換為變量之

53、后調(diào)用。它將重新建立虛擬數(shù)據(jù)和計算測試結(jié)果。3.例 程#include <sys.h> #include <stdio.h>persistent long reset_count; voidmain (void)if(!persist_check(1)printf("Reset count invalid - zeroedn"); elseprintf("Reset number %ldn", reset_count); reset_count+; /* update count */ persist_validate(); /*

54、 and checksum */ for(;)continue; /* sleep until next reset */返回值如果NVRAM區(qū)域無效, 則返回值為假(零);如果NVRAM區(qū)域有效,4.則返回值為真(非零)。37POW函數(shù)1.提 要#include <math.h>double pow (double f, double p)描 述pow()函數(shù)表示第一個參數(shù)f的p次冪。例 程#include <math.h> #include <stdio.h> voidmain (void)double f;for(f = 1.0 ; f <= 1

55、0.0 ; f += 1.0)printf("pow(2, %1.0f) = %fn", f, pow(2, f);2.3.4. 參 閱log(), log10(), exp()返回值為 f 的 p 次冪。38PRINTF函數(shù)1. 提要#include <stdio.h>unsigned char printf (const char * fmt, .)2. 描 述printf()函數(shù)是一個格式輸出子程序,其運行的基礎(chǔ)是標(biāo)準(zhǔn)輸出(staout)。它有對應(yīng)的程序形成字符緩沖區(qū)(sprintf()函數(shù))。printf()函數(shù)以格式字符串、一系列0及其它作為參數(shù)。格式

56、字符串都轉(zhuǎn)換為一定的格式,每一規(guī)格化都用來輸出變量表。轉(zhuǎn)換格式的形式為%m.nc。其中表示格式,m表示選擇的字符寬度,n表示選擇的精度,c為一個字母表示規(guī)格類型。字符寬度和精度只適于中級和高級系列單片機,并且精度只對格式s有效。如果指針變量為十進制常數(shù),例如格式為%*d時,則一個整型數(shù)將從表中被取出,提供給指針變量。對低級系列單片機而言,有下列轉(zhuǎn)換格式:o x X u d即分別為整型格式八進制、十六進制、十六進制、十進制和十進制。其中d為有符號十進制數(shù),其它為無符號。其精度值為被輸出數(shù)的總的位數(shù),也可以強制在前面加0。例如%8.4x將產(chǎn)生一8位十六進制數(shù),其中前4位為0,后為十六進制數(shù)。X輸出的十六進制數(shù)中,字母為AF,x輸出的十六進制中字母為af。當(dāng)格式發(fā)生變化時, 八進制格式前要加0,十六進制格式的前面要加0x或0X。S打印一個字符串函數(shù)參數(shù)值被認(rèn)為是字符型指針。最多從字符串中取n個字符打印,字符寬度為m。C函數(shù)參數(shù)被認(rèn)為一個單字節(jié)字符并可自由打印。任何其它有格式規(guī)定的字符將被輸出。那么將產(chǎn)生一個百分號。對中級和高級系列單片機而言,轉(zhuǎn)換格式在低級系列單片機的基礎(chǔ)上再加上:l長整型格式在整型格式前加上關(guān)鍵字母l即表示長整型變量。f浮點格式總的寬度為m,小數(shù)點后的位數(shù)為n。如果n沒有寫出,則默認(rèn)為6。如果精度為0,

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論