آذر میکرو ( دنیای میکروکنترلرها )

برنامه نویس میکروکنترل ها

آذر میکرو ( دنیای میکروکنترلرها )

برنامه نویس میکروکنترل ها

کار با codevision ( آشنایی با کتابخانه ها )


 #include<ctype.h>

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#include<string.h>

#include<bcd.h>

#include<gray.h>

#include<mem.h>

#include<i2c.h>

#include<lm75.h>

#include<ds1621.h>

#include<pcf8563.h>

#include<pcf8583.h>

#include<ds1307.h>


 

#include<ctype.h>

 

unsigned char isalnum(char c)

خروجی زمانی که ورودی یکی از اعداد یا حروف انگلیسی باشد یک می شود

unsigned char isalpha(char c)

خروجی زمانی که ورودی یکی از حروف انگلیسی باشد یک می شود

unsigned char isascii(char c)

خروجی زمانی که ورودی یکی کد اسکی ها بین 0-127 باشد یک می شود

unsigned char iscntrl(char c)

خروجی زمانی که ورودی کارکتر کنترلی بین 0-31 یا 127 باشد یک می شود

unsigned char isdigit(char c)

خروجی زمانی که ورودی یکی از اعداد دسیمال بین 0-9 باشد یک می شود

unsigned char islower(char c)

خروجی زمانی که ورودی یکی از حروف کوچک انگلیسی باشد یک می شود

unsigned char isprint(char c)

خروجی زمانی که ورودی یکی از قابل چاپ باشد یک می شود

unsigned char ispunct(char c)

خروجی زمانی که ورودی یکی ازعلائم باشد یک می شود

unsigned char isspace(char c)

خروجی زمانی که ورودی یکی ازکارکتر های فضای خالی یا carriage return باشد یک می شود

unsigned char isupper(char c)

خروجی زمانی که ورودی یکی از حروف کوچک انگلیسی باشد یک می شود

unsigned char isxdigit(char c)

خروجی زمانی که ورودی یکی از اعداد هگزا د دسیمال باشد 1 می شود

char toascii(char c)

ورودی را به کد اسکی مربوطه تبدیل می کند

unsigned char toint(char c)

ورودی را که کد هگزاددسیمال است به معادل رقمی آن تبدیل می کند

char tolower(char c)

اگر ورودی حرف بزرگ باشد آن را به حرف کوچک (حروف لاتین) تبدیل می کند

char toupper(char c)

اگر ورودی حرف کوچک باشد آن را به حرف بزرگ (حروف لاتین) تبدیل می کند

 

 

#include<stdio.h>

char getchar(void)

با استفاده از ارتباط UART یک کارکتر دریافت می کند

void putchar(char c)

با استفاده از ارتباط UART یک کارکتر را ارسال می کند
نکته: تمامی دستورات سطح بالا در ورودی و خروجی ها از دستورات putchar و getchar استفاده می کنند

void puts(char *str)

این تابع کارکتر موجود در حافظه SRAM را ارسال می کند ( این دستور با استفاده از دستور putchar کار می کند)

void putsf(char flash *str)

این تابع کارکتر موجود در حافظه FLASH را ارسال می کند ( این دستور با استفاده از دستور putchar کار می کند)

void printf(char flash *fmtstr [ , arg1, arg2, ...])

این تابع یک رشته ی قالب بندی شده را ارسال می کنداین دستور با استفاده از دستور putchar عمل می کند
که رشته قالب بندی شده به این صورت است

%[flags][width][.precision][l]type_char

Flag
یک پارامتر اختیاری است و می تواند یکی از مقادیر + و – و “ باشد
 -
:  در این صورت همیشه نتایج از چپ مرتب می شوند و در صورت اضاف کردن 0 از سمت راست و اگر جای خالی اضافه کنیم از سمت چپ مرتب می شوند
 : + 
نتایج همیشه با علامت + و یا – شروع می شونداگر نتیجه یک عدد منفی باشد تبدیل با علامت منفی شروع می شود در صورتی که مثبت باشد با یک جای خالی تبدیل شروع می شود"
Widyh 
 : یک پارامتر اختیاری است که حداقل پهنای یک مقدار خروجی را تنظیم می کند در صورتی که خروجی از این مقدار بیشتر    شود رشته به اندازه ی مورد نیاز بزرگ می شود این پارامتر به دو صورت n و on می باشد
 : n 
در این حالت n کاراکتر در خروجی قرار می گیرد و اگرخروجی از این تعداد کمتر باشد بقیه کاراکتر ها با فضای خالی پر می شود
on
 : در این حالات a حداقل طول رشته ی n خواهد بود اگر نتیجه کمتر از n کارکتر باشد با صفرهایی در سمت چپ پر می شود 
 Precision 
 : این پارامتر اختیاری است و حد اکثر تعداد کارکتر ها یا حداقل تعداد رقم هایی که در خروجی قرار می گیرد مشخص می شود و برای جدا کردن قسمت width از قسمت precision از کارکتر “.” استفاده می کنیم
 : type_char
این پارامتر اجباری است و اگر ننویسیم عمل تبدیل انجام نمی شود در واقع این پارامترطریقه ی نمایش کاراکتر خروجی را مشخص می کند و می تواند یکی از مقادیر زیر باشد
 i
 : خروجی به صورت یک عدد دسیمال علامت دار است
d
 : خروجی به صورت یک عدد دسیمال علامت دار است
u
 : خروجی به صورت یک عدد بدون دسیمال علامت دار است
 : e 
خروجی یک عدد float است که به صورت[-]d.dddd e[-]dd نمایش داده می شود
 : E 
خروجی یک عدد float است که به صورت[-]d.dddd e[-]dd نمایش داده می شود
 :  f 
خروجی یک عدد float است که به صورت[-]d.dddd e[-]dd نمایش داده می شود
 : خروجی یک عدد هگزاددسیمال است که با حروف کوچک نمایش داده می شود
 : X 
خروجی یک عدد هگزاددسیمال است که با حروف بزرگ نمایش داده می شود
 : خروجی به صورت یک کارکتر نمایش داده می شود
 : خروجی یک اشاره گر به رشته موجود در حافظه SRAM می باشد
 : p 
خروجی یک اشاره گر به رشته موجود در حافظه FLASH می باشد

void sprintf(char *str, char flash *fmtstr [ , arg1, arg2, ...])

این تابع دقیقا شبیه تابع printf است ولی با این تفاوت که خروجی در متغیر str قرار می گیرد


char *gets(char *str, unsigned char len)

این تابع یک رشته را از ورودی می خواند و در متغیر str می ریزد
    str 
رشته ای است که متغیر در آن قرار می گیرد
Len 
  اندازه رشته را مشخص می کند


signed char scanf(char flash *fmtstr [ , arg1 address, arg2 address, ...])

این تابع یک رشته قالب بندی شده را از ورودی می خواند که عملکرد آن مانند تابع getchar است تفاوت این تابع با تابع gets در این است که این تابع تا زمانی که کلید enter زده شود یا کارکتر “n\” دریافت شود رشته را دریافت می کند
fmtstr
 : یک رشته ی کنترلی که نوع داده ی دریافتی را از ورودی سریال مشخص می کند که می تواند موارد زیر باشد
d
 : ورودی یک عدد دسیمال علامت دار است
i
  : ورودی یک عدد دسیمال علامت دار است
u
 : ورودی یک عدد بدون دسیمال علامت دار است
x
 : ورودی یک عدد هگزاددسیمال است که با حروف کوچک نمایش داده می شود
c
 : ورودی یک کارکتر نمایش داده می شود
s
 : ورودی یک اشاره گر به رشته موجود در حافظه SRAM می باشد
arg1 address 
و arg2 address و... آدرس متغیر های ورودی هستند


signed char sscanf(char *str, char flash *fmtstr [ , arg1 address, arg2 address, ...])


این تابع همانند تابع scanf است ولی با این تفاوت که ورودی را در متغر str که در حافظه ی SRAM است قرار می دهد

 

 

#include<stdlib.h>

 

 

int atoi(char *str)

یک رشته را به عدد صحیح تبدیل می کند.

long int atol(char *str)

یک رشته را به عدد صحیح بلند تبدیل می کند

void itoa(int n, char *str)

این تابع یک متغیر رشته ای و یک عدد صحیح می گیردو عدد صحیح را به کارکتر اسکی تبدیل می کند ودر متغیر رشته ای ذخیره می کند .

void ltoa(long int n, char *str)

این تابع یک متغیر رشته ای و یک عدد صحیح بلند می گیردو عدد صحیح بلند را به کارکتر اسکی تبدیل می کند ودر متغیر رشته ای ذخیره می کند .

void ftoa(float n, unsigned char decimals, char *str)

یک متغیر اعشاری و یک متغیر رشته ای را دریافت می کند و عدد اعشاری را به کارکتر اسکی تبدیل می کند و در متغیر رشته ای ذخیره می کند .متغیرdecimals تعداد رقم اعشاری را مشخص می کند

void ftoe(float n, unsigned char decimals, char *str)

یک متغیر اعشاری و یک متغیر رشته ای دریافت می کند و آن را به نماد علمی معادل کارکتر اسکی تبدیل می کند و در متغیر رشته ای می ریزد
متغیرdecimals تعداد رقم اعشاری را مشخص می کند

float atof(char *str)

یک متغیر رشته ای را به به عدد اعشاری مربوطه تبدیل می کند 

int rand (void)

یک عدد تصادقی بین 0 و 32768 انتخاب می کند

void srand(int seed)

این تابع همانند تابع rand یک عدد تصادفی بین 0-32768 انتخاب می کند با این تفاوت که عدد شروع را باید خودمان انتخاب کنید

void *malloc(unsigned int size)

این تابع به اندازه ی متغیر size از میکرو حافظه می گیرد و آدرس آن را در خروجی می دهد و اگر خروجی عبارت تهی (0\) باشد یعنی هیچ حافظه ای دریافت نشده است

void *calloc(unsigned int num, unsigned int size)

این تابع به اندازه ی num*size از میکرو حافظه می گیرد و آدرس آن را در خروجی می دهد و اگر خروجی عبارت تهی (0\) باشد یعنی هیچ حافظه ای دریافت نشده است

void *realloc(void *ptr, unsigned int size)

به کمک این تابع می توان اندازه ی حافظه ی دریافت شده را تغییر داد
این تابع میزان حافظه ی موجود در ptr را به اندازه ی متغیر size تغییر داد

void free(void *ptr)

با این دستور حافظه ی موجود در ptr به حافظه ی اصلی بر گردانده می شود

 

 


#include<math.h>

 

 

unsigned char cabs(signed char x)

قدر مطلق مقدار بایت x را محاسبه می کند

unsigned int abs(int x)

قدر مطلق عدد صحیح x را محاسبه می کند

unsigned long labs(long int x)

قدر مطلق یک عدد صحیح بزرگ (32 بیتی) را محاسبه می کند

float fabs(float x)

قدر مطلق یک عدد اعشاری را محاسبه می کند

signed char cmax(signed char a, signed char b)

ماکزیمم 2 بایت a و b را محاسبه می کند

int max(int a, int b)

ماکزیمم 2 عدد صحیحو b را محاسبه می کند

ong int lmax(long int a, long int b)

ماکزیمم 2 عدد صحیح بلند a و b را محاسبه می کند

float fmax(float a, float b)

ماکزیمم 2 عدد اعشاریو b را محاسبه می کند

signed char cmin(signed char a, signed char b)

مینیمم 2 بایت a و b را محاسبه می کند

int min(int a, int b)

مینیمم 2 عدد صحیح a و b را محاسبه می کند

long int lmin(long int a, long int b)

مینیمم 2 عدد صحیح بلند a و b را محاسبه می کند

float fmin(float a, float b)

مینیمم 2 عدد اعشاری a و b را محاسبه می کند

signed char csign(signed char x)

اگر بایت x عدد مثبت باشد خروجی 1 اگر منفی باشد خروجی1- و اگر صفر باشد خروجی 0 می شود

signed char sign(int x)

اگر عدد صحیح x عدد مثبت باشد خروجی 1 اگر منفی باشد خروجی1- و اگر صفر باشد خروجی 0 می شود

signed char lsign(long int x)

اگر عدد صحیح بلند x عدد مثبت باشد خروجی 1 اگر منفی باشد خروجی1- و اگر صفر باشد خروجی 0 می شود

signed char fsign(float x)

اگر عدد اعشاری x عدد مثبت باشد خروجی 1 اگر منفی باشد خروجی1- و اگر صفر باشد خروجی 0 می شود

unsigned char isqrt(unsigned int x)

جذر عدد صحیح بدون علامترا محاسبه می کند

unsigned int lsqrt(unsigned long x)

جذر عدد صحیح بلندرا محاسبه می کند

float sqrt(float x)

جذر عدد اعشاریرا محاسبه می کند

float floor(float x)

بزرگترین عدد صحیح کوچکتر یا مساوی عدد ورودی را در خروجی قرار می دهد
مثال اگر ورودی 10.78 باشد خروجی 10.0می شود
مثال اگر ورودی1.52- باشد خروجی 1.0- می شود

float ceil(float x)

کوچکتری عدد صحیح بزرگتر یا مساوی عدد ورودی را در خروجی قرار می دهد
مثال اگر ورودی 10.78 باشد خروجی 11.0 می شود
مثال اگر ورودی 1.52- باشد خروجی 2.0- می شود

float fmod(float x, float y)

باقیمانده تقسیم دو عدد اعشاری x بر y را به صورت اعشاری محاسبه می کند 

float modf(float x, float *ipart)

عدد اعشاری x را به تجزیه می کند و قسمت اعشار را در خروجی می دهد و قسمت صحیح را در متغیر ipart می دهد

float ldexp(float x, int expn)

جواب این معادله را حساب می کندx* 2^exp

float frexp(float x, int *expn)

جواب این معادله را حساب می کندx/ 2^exp

float exp(float x)

عدد نپر(e)را به توان x می رساند

float log(float x)

لگاریتم یک عدد را محاسبه می کند

float log10(float x)

لگاریتم یک عدد را در پایه 10 محاسبه می کند

float pow(float x, float y)

جواب این معادله را حساب می کندx^y

float sin(float x)

سینوس یک زاویه بر حسب رادیان را محاسبه می کند

float cos(float x)

کسینوس یک زاویه بر حسب رادیان را محاسبه می کند

float tan(float x)

تانژانت یک زاویه بر حسب رادیان را محاسبه می کند

float sinh(float x)

سینوس هایپربولیک یک زاویه بر حسب رادیان را محاسبه می کند

float cosh(float x)

کسینوس هایپربولیک یک زاویه بر حسب رادیان را محاسبه می کند

float tanh(float x)

تانژانت هایپربولیک یک زاویه بر حسب رادیان را محاسبه می کند

float asin(float x)

مقدار arc sin عدد x را محاسبه می کند

float acos(float x)

مقدار arc cos عدد x را محاسبه می کند

float atan(float x)

مقدار arc tan عدد x را محاسبه می کند

float atan2(float y, float x)

مقدار arctan عدد y/x را محاسبه می کند

 

 

 


#include<string.h>

 

 

char *strcat(char *str1, char *str2)

رشته str2 را به انتهای رشته ی str1 متصل می کند

char *strcatf(char *str1, char flash *str2)

رشته str2 که در حافظه ی flash قرار دارد را به انتهای رشته ی str1 متصل می کند

char *strncat(char *str1, char *str2, unsigned char n)

تعداد n کارکتر از رشته ی str2 را به رشته ی str1 متصل می کند و نتیجه را در رشته ی str1 می ریزد

char *strncatf(char *str1, char flash *str2, unsigned char n)

تعداد n کارکتر از رشته ی str2 که در حافظه ی FLASH قرار دارد را به رشته ی str1 متصل می کند و نتیجه را در رشته ی str1 می ریزد

char *strchr(char *str, char c)

کارکتر c را در رشته ی str جستجو می کند و اولین نتیجه را در خروجی قرار می دهد و در صورتی که نتیجه ای نداشته باشد کارکتر تهی را قرار می دهد

char *strrchr(char *str, char c)

کارکتر c را در رشته ی str جستجو می کند و آخرین نتیجه را در خروجی قرار می دهد و در صورتی که نتیجه ای نداشته باشد کارکتر تهی را قرار می دهد

signed char strpos(char *str, char c)

کارکتر c را در رشته ی str جستجو می کند واندیس اولین نتیجه را در خروجی می دهد در صورتی که نباشد مقدار 1- را می دهد

signed char strrpos(char *str, char c)

کارکتر c را در رشته ی str جستجو می کند واندیس آخرین نتیجه را در خروجی می دهد در صورتی که نباشد مقدار 1- را می دهد

signed char strcmp(char *str1, char *str2)

این تابع دو رشته ی str1 و str2 را با هم مقایسه می کند و در صورتی که str1<str2 علامت کوچکتر از صفر و در صورتی که str1=str2 مقدار 0 و در صورتی که str1>str2 باشد علامت بزگتر از صفر را در خروجی می دهد

signed char strcmpf(char *str1, char flash *str2)

این تابع دو رشته ی str1 که در حافظه یSRAM و str2 را که در حافظه ی قرار دارد FLASHقرار دارد را با هم مقایسه می کند و در صورتی کهstr1<str2 علامت کوچکتر از صفر و در صورتی که str1=str2 مقدار 0 و در صورتی که str1>str2 باشد علامت بزرگتر از صفر را در خروجی می دهد

signed char strncmp(char *str1, char *str2, unsigned char n)

این تابع n کارکتر از رشته ی str1 را با رشته ی str2 مقایسه می کند و در صورتی که str1<str2 علامت کوچکتر از صفر و در صورتی کهstr1=str2 مقدار 0 و در صورتی که str1>str2 باشد علامت بزرگتر از صفر را در خروجی می دهد

signed char strncmpf(char *str1, char flash *str2, unsigned char n)

این تابع n کارکتر از رشته ی str1 که در حافظه ی SRAM قرار دارد را با رشته ی str2 که در حافظه ی FLASH قرار دارد مقایسه می کند و در صورتی که str1<str2 علامت کوچکتر از صفر و در صورتی که str1=str2 مقدار 0 و در صورتی که str1>str2 باشد علامت بزرگتر از صفر را در خروجی می دهد

char *strcpy(char *dest, char *src)

رشته ی src را در رشته ی dest کپی می کند

char *strcpyf(char *dest, char flash *src)

رشته ی src که در حافظه ی FLASH قرار دارد را در رشته ی dest که در حافظه ی SRAM قرار دارد کپی می کند

char *strncpy(char *dest, char *src, unsigned char n)

کارکتر از رشته ی src را در رشته ی dest کپی می کند

char *strncpyf(char *dest, char flash *src, unsigned char n)

کارکتر از رشته ی src که در حافظه ی FLASH قرار دارد را در رشته ی dest که در حافظه ی SRAM قرار دارد کپی می کند و نتیجه را در destقرار می دهد

unsigned char strspn(char *str, char *set)

این تابع رشته ی set را در رشته ی str جستجو می کند و طول اولین بخشی را که یافت در خروجی می دهد

unsigned char strspnf(char *str, char flash *set)

این تابع رشته ی set که در حافظه ی FLASH قرار دارد را در رشته ی str جستجو می کند و طول اولین بخشی را که یافت در خروجی می دهد

unsigned char strcspn(char *str, char *set)

این تابع رشته ی set را در رشته ی str جستجو می کند و اولین محلی که از این رشته را که حتی یکی از کارکتر های رشته مورد جسنجو در آن محل باشد رابه عنوان نتیجه عمل در خروجی می دهد و اگر تعداد زیادی نتیجه داشته باشد به صورت یک فهرست نتایج را می دهد و اگر نتیجه نداشته باشد طول رشته ی str را در خروجی می دهد

unsigned char strcspnf(char *str, char flash *set)

این تابع رشته ی set که در حافظه ی FLASH قرار دارد را در رشته ی str جستجو می کند و اولین محلی که از این رشته را که حتی یکی از کارکتر های رشته مورد جسنجو در آن محل باشد رابه عنوان نتیجه عمل در خروجی می دهد و اگر تعداد زیادی نتیجه داشته باشد به صورت یک فهرست نتایج را می دهد و اگر نتیجه نداشته باشد طول رشته ی str را در خروجی می دهد

char *strpbrk(char *str, char *set)

این تابع شبیه تابع ()strcspn است و عملکرد آن به این صورت است که رشته ی set را در رشته ی str جستجو می کند و به این صورتی که اگر هر کدام از کارکتر های موجود در رشته ی set در رشته ی str باشد آدرس اولین محل از رشته ی str در یک اشاره گر قرار می گیرد ودر صورتی که نتیجه ای نداشته باشد کارکتر تهی را در خروجی می دهد

char *strpbrkf(char *str, char flash *set)

این تابع شبیه تابع ()strcspnf است و عملکرد آن به این صورت است که رشته ی set که در حافظه ی FLASH است را در رشته ی str که در حافظه یSRAM قرار دارد جستجو می کند و به این صورتی که اگر هر کدام از کارکتر های موجود در رشته ی set در رشته ی str باشد آدرس اولین محل از رشته ی str در یک اشاره گر قرار می گیرد ودر صورتی که نتیجه ای نداشته باشد کارکتر تهی را در خروجی می دهد

char *strrpbrk(char *str, char *set)

این تابع شبیه تابع ()strcspn است و عملکرد آن به این صورت است که رشته ی set را در رشته ی str جستجو می کند و به این صورتی که اگر هر کدام از کارکتر های موجود در رشته ی set در رشته ی str باشد آدرس اخرین محل از رشته ی str در یک اشاره گر قرار می گیرد ودر صورتی که نتیجه ای نداشته باشد کارکتر تهی را در خروجی می دهد

char *strrpbrkf(char *str, char flash *set)

این تابع شبیه تابع ()strcspnf است و عملکرد آن به این صورت است که رشته ی set که در حافظه ی FLASH است را در رشته ی str که در حافظه یSRAM قرار دارد جستجو می کند و به این صورتی که اگر هر کدام از کارکتر های موجود در رشته ی set در رشته ی str باشد آدرس اولین محل از رشته ی str در یک اشاره گر قرار می گیرد ودر صورتی که نتیجه ای نداشته باشد کارکتر تهی را در خروجی می دهد

char *strstr(char *str1, char *str2)

رشته ی str1 را در رشته ی str2 جستجو می کند اگر نتایج زیادی پیدا کند اولین نتیجه را در خروجی می دهد
اگر نتیجه ای پیدا نکند کارکتر تهی را در خروجی می دهد

char *strstrf(char *str1, char flash *str2)

رشته ی str1 را که در حافظه ی SRAM قرار دارد را در رشته ی str2 که در حافظه ی FLASH قرار دارد جستجو می کند اگر نتایج زیادی پیدا کند اولین نتیجه را در خروجی می دهد اگر نتیجه ای پیدا نکند کارکتر تهی را در خروجی می دهد

unsigned char strlen(char *str)

برای مدل حافظه ی TINY استفاده می کند
طول رشته str را محاسبه می کند عددی بین 0-255

unsigned int strlen(char *str)

برای مدل حافظه ی SMALL استفاده می شود
طول رشته strرا محاسبه می کند عددی بین 0-65535

unsigned int strlenf(char flash *str)

طول رشته str را که در حافظه ی FLASH قرار دارد محاسبه می کند

void *memcpy(void *dest,void *src, unsigned char n)

برای مدل حافظه ی TINY استفاده می شود
بایت از رشته ی src را در رشته ی dest کپی می کند

void *memcpy(void *dest,void *src, unsigned int n)

برای مدل حافظه ی SMALL استفاده می شود
بایت از رشته ی src را در رشته ی dest کپی می کند

void *memcpyf(void *dest,void flash *src, unsigned char n)

برای مدل حافظه ی TINY استفاده می شود
بایت از رشته ی src را که در حافظه ی FLASH است را در رشته ی dest کپی می کند

void *memcpyf(void *dest,void flash *src, unsigned int n)

برای مدل حافظه ی SMALL استفاده می شود
بایت از رشته ی src را که در حافظه ی FLASH است را در رشته ی dest کپی می کند

void *memccpy(void *dest,void *src, char c, unsigned char n)

برای مدل حافظه ی TINY استفاده می شود
بایت از رشته ی src تا کارکتررا به انتهای رشته ی dest متصل می کند
رشته ی dest نباید مشابه رشته ی src باشد

void *memccpy(void *dest,void *src, char c, unsigned int n)

برای مدل حافظه ی SMALL استفاده می شود
بایت از رشته ی src تا کارکتررا به انتهای رشته ی dest متصل می کند
رشته ی dest نباید مشابه رشته ی src باشد

void *memmove(void *dest,void *src, unsigned char n)

برای مدل حافظه ی TINY استفاده می شود
بایت از رشته ی src تا کارکتررا به انتهای رشته ی dest متصل می کند
تفاوت این تابع با تابع memcpy در این است که رشته ی dest می تواند مشابه رشته ی src باشد

void *memmove(void *dest,void *src, unsigned int n)

برای مدل حافظه ی SMALL استفاده می شود
بایت از رشته ی src تا کارکتررا به انتهای رشته ی dest متصل می کند
تفاوت این تابع با تابع memcpy در این است که رشته ی dest می تواند مشابه رشته ی src باشد

void *memchr(void *buf, unsigned char c, unsigned char n)

برای مدل حافظه ی TINY استفاده می شود
کارکتر c را در n بایت از buf جستجو می کند
اگر c پیدا نشد کارکتر تهی را در خروجی می دهد

void *memchr(void *buf, unsigned char c, unsigned int n)

برای مدل حافظه ی SMALL استفاده می شود
کارکتر c را در n بایت از buf جستجو می کند
اگر c پیدا نشد کارکتر تهی را در خروجی می دهد

signed char memcmp(void *buf1,void *buf2, unsigned char n)

برای مدل حافظه ی TINY استفاده می شود
بایت از buf1 را با buf2 مقایسه می کند
در صورتی که buf1<buf2, buf1=buf2, buf1>buf2. نتایج بزرگتر از صفر, 0, کوچکتر از صفر

signed char memcmp(void *buf1,void *buf2, unsigned int n)

برای مدل حافظه ی SMALL استفاده می شود
بایت از buf1 را با buf2 مقایسه می کند
در صورتی که buf1<buf2, buf1=buf2, buf1>buf2. نتایج بزرگتر از صفر, 0, کوچکتر از صفر

signed char memcmpf(void *buf1,void flash *buf2, unsigned char n)

برای مدل حافظه ی TINY استفاده می شود
بایت از buf1 را با buf2 که در حافظه ی FLASH است مقایسه می کند
در صورتی که buf1<buf2, buf1=buf2, buf1>buf2. نتایج بزرگتر از صفر, 0, کوچکتر از صفر

signed char memcmpf(void *buf1,void flash *buf2, unsigned int n)

برای مدل حافظه ی SMALL استفاده می شود
بایت از buf1 را با buf2 که در حافظه ی FLASH است مقایسه می کند
در صورتی که buf1<buf2, buf1=buf2, buf1>buf2. نتایج بزرگتر از صفر, 0, کوچکتر از صفر

void *memset(void *buf, unsigned char c, unsigned char n)

برای مدل حافظه ی TINY استفاده می شود
بایت از buf را با کارکتر c می نویسد

void *memset(void *buf, unsigned char c, unsigned int n)

برای مدل حافظه ی SMALL استفاده می شود
بایت از buf را با کارکتر c می نویسد

 

 

 

#include<bcd.h>

 

 

unsigned char bcd2bin(unsigned char n)

عدد n را از BCD به معادل باینری آن تبدیل می کند

unsigned char bin2bcd(unsigned char n)

عدد n را از باینری به معادل BCD آن تبدیل می کند

 

 

#include<gray.h>

 

 

unsigned char gray2binc(unsigned char n)
unsigned char gray2bin(unsigned int n)
unsigned char gray2binl(unsigned long n)

عدد گری را به معادل باینری آن تبدیل می کند.

unsigned char bin2grayc(unsigned char n)
unsigned char bin2gray(unsigned int n)
unsigned char bin2grayl(unsigned long n)

عدد باینری را به معادل گری آن تبدیل می کند

 

 

#include<mem.h>

 

 

void pokeb(unsigned int addr, unsigned char data)

این تابع data را که از نوع byte است در حافظه ی SRAM و در مکان addr می نویسد

void pokew(unsigned int addr, unsigned int data)

این تابع data را که از نوع word است در حافظه ی SRAM ودر مکان addr می نویسد
کم ارزشترین در مکان addr و پر ارزشترین در مکان addr+1 نوشته می شود

unsigned char peekb(unsigned int addr)

این تابع یک byte را که در حافظه ی addr نوشته شده است می خواند و در خروجی قرار می دهد

unsigned int peekw (unsigned int addr)

این تابع یک word را که در حافظه ی SRAM قرار دارد می خواند و در خروجی قرار می دهد
کم ارزشترین از مکان addr و پر ارزشترین از مکان addr+1 خوانده می شود

#include<i2c.h>

 

 

void i2c_init(void)

این تابع برای شروع ارتباط استفاده می شود
این تابع باید آغاز کننده ی ارتباط باشد

unsigned char i2c_start(void)

این تابع یک حالت شروع تولید می کند در صورتی که ارتباط به درستی برقرار باشد مقدار یک در غیر اینصورت مقدار صفر را در خروجی می دهد

void i2c_stop(void)

این تابع دستور پایان ارتباط را صادر می کند

unsigned char i2c_read(unsigned char ack)

این تابع یک بایت را از ارتباط دریافت می کند
در صورتی که مقدار یک را در ask قرار دهیم یک پالس را بعد از خواندن بایت می فرستد و در صورتی که صفر بذاریم این پالس ارسال نمی شود
در واقع این پالس تاییده است که به آی سی فرستاده می شود و آی سی مطمئن می شود که داده به درستی ارسال شده است

unsigned char i2c_write(unsigned char data)

این تابع بایت data را می فرستد و اگر تاییدیه (پالس)را دریافت کند مقدار یک در غیر این صورت مقدار صفر را در خروجی می دهد

 

 


#include<lm75.h>

 

 

void lm75_init(unsigned char chip ,signed char thyst ,signed char tos, unsigned char pol)

این تابع سنسور lm75 را بررسی می کند
قبل از استفاده از این دستور باید ارتباط i2c را با تابع i2c_init باید بررسی شود اگر تعداد زیادی سنسور را استفاده کردین باید به تعداد استفاده شده این تابع را بنویسید
نهایتا می توانید 8 سنسور را با این ارتباط به آی سی متصل کنید که باید عدد آن را در پارامتر chip بنویسید پارامتر chip عددی بین 0-7 می تواند باشد
سنسور lm75 را می توان در حالت مقایسه پیکره بندی کرد که شبیه یک ترموستات عمل می کند که هر موقع دما از مقدار tos (برحسب درجه ی سانتی گراد) بیشتر شود و از مقدار thyst کم تر شود خروجی O.S فعال می شود
در صوتی که pol یک باشد وقتی دما از حداکثر تعیین شده بالاتر رود خروجی O.S فعال می شود و زمانی که صفر باشد در اثر پایین امدن دما و کم شدن از مقدار thyst خروجی O.S فعال می شود

int lm75_temperature_10(unsigned char chip)

این دستور دما را بر حسب درجه ی سانتی گراد در متغیر chip قرار می دهد

 

 


#include<ds1621.h>

 

 

void ds1621_init(unsigned char chip,signed char tlow,signed char thigh, unsigned char pol)

این تابع سنسور ds1621 را بررسی می کند
قبل از استفاده از این دستور باید ارتباط i2c را با تابع i2c_init باید بررسی شود اگر تعداد زیادی سنسور را استفاده کردین باید به تعداد استفاده شده این تابع را بنویسید
نهایتا می توانید 8 سنسور را با این ارتباط به آی سی متصل کنید که باید عدد آن را در پارامتر chip بنویسید پارامتر chip عددی بین 0-7 می تواند باشد
سنسور ds1621 را می توان در حالت مقایسه پیکره بندی کرد که شبیه یک ترموستات عمل می کند که هر موقع دما از مقدار tos (برحسب درجه ی سانتی گراد) بیشتر شود و از مقدار thyst کم تر شود خروجی O.S فعال می شود
در صوتی که pol یک باشد وقتی دما از حداکثر تعیین شده بالاتر رود خروجی O.S فعال می شود و زمانی که صفر باشد در اثر پایین امدن دما و کم شدن از مقدار thyst خروجی O.S فعال می شود

unsigned char ds1621_get_status(unsigned char chip)

این تابع محتویات رجیستر آدرس chip سنسور را می خواند 

void ds1621_set_status(unsigned char chip, unsigned char data)

این تابع مقدار data رادر رجیستر آدرس chip قرار می دهد

void ds1621_start(unsigned char chip)

این تابع سنسور را از آدرس chip خارج می کند و آی سی را برای اندازه گیری دما آماده می کند

void ds1621_stop(unsigned char chip)

این تابع سنسور را به آدرس chip وارد می کند و آی سی را ازحالت اندازه گیری دما خارج می کند

int ds1621_temperature_10(unsigned char chip)

این دستور دما را بر حسب درجه ی سانتی گراد در متغیر chip قرار می دهد
دو برنامه که در پیوست قرار دادم یکی مربوط به راهاندازی LM75 و دیگری DS1621 است



Attached File(s)
  ds1621.rar (Size: 57.77 KB / Downloads: 42) 
  lm75.rar (Size: 43.83 KB / Downloads: 39)

 


#include<pcf8563.h>

 

 

void rtc_init(unsigned char ctrl2, unsigned char clkout, unsigned char timer_ctrl)

این تابع آی سی را بررسی می کند
قبل از استفاده از این دستور حتما ارتباط I2C را با تابع i2c_init بررسی کنید
پارامتر ctrl2 برای کنترل رجیستر contron/tatus 2 استفاده می شود که می تواند مقادیر زیر را داشته باشد
RTC_TIE_ON 
بیت TIE را که در رجیستر Control/Status 2 قرار دارد یک می کند
RTC_AIE_ON 
بیت AIE را که در رجیستر Control/Status 2 قرار دارد یک می کند
RTC_ TP _ON 
بیت TI/TP را که در رجیستر Control/Status 2 قرار دارد یک می کند
برای یک کردن چند بیت باید آن ها را با علانت | از هم جدا کنید
پارامتر clkout برای کنترل رجیستر CLKOUT Frequency استفاده می شود که می تواند مقادیر زیر را داشته باشد
RTC_CLKOUT_OFF 
این رجیستر پالس خروجی را که در پایه سنسور قرار دارد را غیر فعال می کند
RTC_CLKOUT_1 
پالس خرورخی را در مقدار 1HZ تنظیم کند
RTC_CLKOUT_32 
پالس خرورخی را در مقدار 32HZ تنظیم کند
RTC_CLKOUT_1024 
پالس خرورخی را در مقدار 1024HZ تنظیم کند
RTC_CLKOUT_32768 
پالس خرورخی را در مقدار 32768HZ تنظیم کند
پارامتر timer_ctrl برای کنترل رجیستر Timer Control استفاده می شود که می تواند مقادیر زیر را داشته باشد
RTC_TIMER_OFF 
تایمر برعکس آی سی را خاموش می کند
RTC_TIMER_CLK_1_60 
فرکانس تایمر برعکس را روی 1/60Hz قرار می دهد
RTC_TIMER_CLK_1 
فرکانس تایمر برعکس را روی 1Hz قرار می دهد
RTC_TIMER_CLK_64 
فرکانس تایمر برعکس را روی 64Hz قرار می دهد
RTC_TIMER_CLK_4096 
فرکانس تایمر برعکس را روی 4096Hz قرار می دهد

unsigned char rtc_read(unsigned char address)

این تابع دستور موجو در مکان address را می خواند

void rtc_write(unsigned char address, unsigned char data)

این تابع بایت موجود در data را در مکان address می نویسد

unsigned char rtc_get_time(unsigned char *hour, unsigned char *min, unsigned char *sec)

این تابع ساعت و دقیق و ثانیه را از آی سی دریافت می کند
این تابع ساعت را در متغیر hour دقیقه را در متغیر min و ثانیه را در متغیر sec قرار می دهد
اگر عمل دریافت به درستی انجام شود در خروجی یک را می دهد و اگر عمل تبدیل به درستی انجام نشود در خروجی صفر را می دهد.

void rtc_set_time(unsigned char hour, unsigned char min, unsigned char sec)

به کمک این تابع می توان زمان مورد نظر خود را در آی سی ذخیره کرد
در این تابع باید ساعت را در متغیر hour دقیقه را در متغیر min و ثانیه را در متغیر sec قرار دهیم

void rtc_get_date(unsigned char *date, unsigned char *month, unsigned *year)

این تابع تاریخ را از آی سی دریافت می کند
این تابع روز را در متغیر date ماه را در متغیر month و سال را در متغیر year قرار می دهد

Code:

void rtc_set_date(unsigned char date, unsigned char month, unsigned year)

از این تابع برای قرار دادن تاریخ در آی سی استفاده می شود

void rtc_alarm_off(void)

این تابع آلارم داخلی ساغت را خاموش می کند

void rtc_alarm_on(void)

این تابع آلارم داخلی آی سی را روشن می کند

void rtc_get_alarm(unsigned char *date, unsigned char *hour, unsigned char *min)

از این تابع برای خواندن زمان آلارم استفاده می شود

void rtc_set_alarm(unsigned char date, unsigned char hour, unsigned char min)

از این تابع برای قرار دادن زمان آلارم در آی سی استفاده می شود
بعد از استفاده از این تابع آلارم آی سی خود به خود خاموش می شود که باید با دستور rtc_alarm_on آن را روشن کنید

void rtc_set_timer(unsigned char val)

این تابع زمان تایمر برعکس را در آن قرار می دهد

برنامه ی نمونه

#include <mega8.h>
#asm
 .equ __i2c_port=0x18 ;PORTB
 .equ __sda_bit=0
 .equ __scl_bit=1
#endasm
#include <i2c.h>
#include <pcf8563.h>
#asm
 .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>
void main(void)
{
unsigned char ok,h,m,s;
char nama[40];
i2c_init();
rtc_init(0,RTC_CLKOUT_OFF,RTC_TIMER_OFF);
lcd_init(16);
while (1)
 {
 ok=rtc_get_time(&h,&m,&s);
 sprintf(nama,"%u:%u:%u",h,m,s);
 lcd_gotoxy(0,0);
 lcd_puts(nama);
 };

 


#include<pcf8583.h>

 

 

void rtc_init(unsigned char chip, unsigned char dated_alarm)

این تابع آی سی را بررسی می کند
قبل از استفاده از این دستور حتما ارتباط I2C را با تابع i2c_init بررسی کنید
اگر تعداد زیادی آی سی را به میکروکنترلر متصل کنید باید در پارامتر chip عدد آن را مشخص کنید که نهایتا می توان 2 آی سی را متصل کنید
Chip 
می تواند عدد های 0 و 1 را داشته باشد
اگر فقط می خواهید از ساعت آی سی استفاده کنید باید dated_alarm=0 قرار دهید و برای استفاده از ساعت و تاریخ باید dated_alarm=1 قرار دهید
بعد از استفاده از این تابع آلارم آی سی غیر فعال می شود

unsigned char rtc_read(unsigned char chip, unsigned char address)

این تابع بایت chip را که در مکان address و در حافظه ی SRAM قرار دارد را می خواند

void rtc_write(unsigned char chip, unsigned char address, unsigned char data)

این تابع بایت data را در مکان address می نویسد پارامتر chip شماره ی آی سی را مشخص می کند که می تواند 0 و 1 باشد
نکته در تمامی توابع بعدی chip شماره ی آی سی مورد نظر می باشد

unsigned char rtc_get_status(unsigned char chip)

این تابع وضعیت استفاده از آی سی رو مشخص می کند در صورتی که خروجی یک باشد یعنی آلارم آی سی فعال است در صورتی که صفر باشد یعنی از ساعت ساده در پروژه استفاده شده است

void rtc_get_time(unsigned char chip, unsigned char *hour, unsigned char *min, 
unsigned char *sec, unsigned char *hsec)

این تابع ساعت را از آی سی می خواند
hour 
ساعت است
min 
دقیقه است
sec 
ثانیه است
hsec 
صدم ثانیه است

void rtc_set_time(unsigned char chip, unsigned char hour, unsigned char min, unsigned char sec, unsigned char hsec)

این تابع ساعت را در آی سی قرار می دهد
hour 
ساعت است
min 
دقیقه است
sec 
ثانیه است
hsec 
صدم ثانیه است

void rtc_get_date(unsigned char chip, unsigned char *date, unsigned char *month, unsigned *year)

این تابع تاریخ را از آی سی می خواند
date 
روز را در خود جای می دهد
month 
ماه قرار می گیرد
year 
سال است


void rtc_set_date(unsigned char chip, unsigned char date, unsigned char month, unsigned year)

این تابع تاریخ را در آی سی قرار می دهد
date 
روز را در خود جای می دهد
month 
ماه قرار می گیرد
year 
سال است

void rtc_alarm_off(unsigned char chip)

با این تابع آلارم آی سی را خاموش می کنیم 

void rtc_alarm_on(unsigned char chip)

با ابن تابع آلارم آی سی را روشن می کنیم

void rtc_get_alarm_time(unsigned char chip, unsigned char *hour, unsigned char *min, unsigned char *sec, unsigned char *hsec)

این تابع زمان آلارم را دریافت می کند

void rtc_set_alarm_time(unsigned char chip, unsigned char hour, unsigned char min, unsigned char sec, unsigned char hsec)

این تابع زمان آلارم را تنظیم می کند

void rtc_get_alarm_date(unsigned char chip, unsigned char *date, unsigned char *month)

این تابع روزی از سال را که آی سی آلارم می زند را از آی سی دریافت می کند

void rtc_set_alarm_date(unsigned char chip, unsigned char date, unsigned char month)

این تابع روزی از سال را که آی سی آلارم می زند را درآی سی تنظیم می کند

یک مثال ساده :

#include <mega8.h>
#asm
 .equ __i2c_port=0x18 ;PORTB
 .equ __sda_bit=0
 .equ __scl_bit=1
#endasm
#include <i2c.h>
#include <pcf8583.h>
#asm
 .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>
void main(void)
{
unsigned char h,m,s,hs;
char nama[20];
i2c_init();
rtc_init(0,0);
lcd_init(16);
while (1)
 {
 rtc_get_time(0,&h,&m,&s,&hs);
 sprintf(nama,"%u:%u:%u ",h,m,s);
 lcd_gotoxy(0,0);
 lcd_puts(nama);
 };

 

 


#include<ds1307.h>

 

 

void rtc_init(unsigned char rs, unsigned char sqwe, unsigned char out)

این تابع آی سی را بررسی می کند
قبل از استفاده از این تابع ارتباط I2C را با دستور i2c_init بررسی کنید
 : rs 
فرکانس خروجی از پایه ی SQW/OUT را مشخص می کند 
  0 
برای 1Hz 
  1 
برای 4096Hz 
  2 
برای 8192Hz
  3 
برای 32768Hzپارامتر sqwe وضعیت پایه ی SQW/OUT را مشخص می کند در صورت یک بودن پایه فعال می شود و در صورت صفر بودن پایه غیرفعال می شود
پارامتر out وضعیت منطقی پایه ی SQW/OUT را زمانی که فرکانس تولید نمی کند مشخص می کند در صورتی که یک باشد پایه یک می شود و در صورتی که صفر باشد پایه صفر می شود

void rtc_get_time(unsigned char *hour, unsigned char *min, unsigned char *sec)

این تابع زمان را از آی سی دریافت می کند و ساعت را در hour دقیقه را در min و ثانیه را در sec قرار می دهد

void rtc_set_time(unsigned char hour, unsigned char min, unsigned char sec)

این تابع زمان را در آی سی ذخیره می کند


void rtc_get_date(unsigned char *date, unsigned char *month, unsigned char *year)

این تابع تاریخ را از آی سی دریافت می کند روز در date ماه را در month و سال را در year قرار می دهد


void rtc_set_date(unsigned char date, unsigned char month, unsigned char year)

این تابع تاریخ را در آی سی ذخیره می کند

برنامه ی نمونه:

#include <mega8.h>
#asm
.equ __i2c_port=0x18 ;PORTB
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
#include <ds1307.h>
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm


#include <lcd.h>
#include <stdio.h>
void main(void)
{
unsigned char h,m,s; 
char nama[20];
i2c_init();
rtc_init(0,0,0);
lcd_init(16);
while (1)
{
rtc_get_time(&h,&m,&s);
sprintf(nama,"%u:%u:%u ",h,m,s);
lcd_gotoxy(0,0);
lcd_puts(nama);

 

 

 

 

 

 

 

 


نظرات 2 + ارسال نظر
حمید دوشنبه 10 خرداد 1395 ساعت 13:30

بسیار عالی مهندس

مصطفی دوشنبه 5 آبان 1393 ساعت 08:44 http://sayesariran.mihanblog.com

خیلی مطلبت به دردم خورد. خدا خیرت بده

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد