سلام
من این برنامه رو برای ارتباط سریال(USART) نوشتم وتا وقتی عددم کمتر از 255 هست خوب کار میکنه واین منطقیه چون دستورات putc و getc بیشتر از 8 بیت رو ارسال نمی کنن. اما من می خوام اعداد 4 رقمی یا بیشتر ارسال کنم واسه همین به نظرم اومد متغیر String بکار ببرم تا بتونم از gets و puts استفاده کنم. من اول برنامه 3 رقمی رو می ذارم و بعد برنامه 4 رقمی رو ببینید اشکال کجاست که وقتی 4 رقمی میشه قاطی میکنه یه مشکل اساسی اینه که من اول دستور atoa متغیر 16 بیتی اینتجر قبول نمیکنه که ما هم میایم و متغیر مون رو 32 بیتی تعروف می کنیم ولی بعدش هم باز کار نمیکنه
برنامه با متغیر 8 بیتی:
//to in barnameba keyboard 1 adad be micro ye aval midim va badaz
//ersal ba protocol UART roye microye dovom namayesh dade mishe
MASTER\\\\\\\\\\\\\\\\\\//////////////////////
#include <16F877A.h>
#use delay(clock=20000000)
#include <K4X4.c>
#include <LCD.c>
#use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
void main(){
lcd_init();
kbd_init();
unsigned int8 i,t,m,n,p,result;
main:
do {
i=kbd_getc();
} while(i=='\0'
;
do {
t=kbd_getc();
}while(t=='\0'
;
do {
m=kbd_getc();
} while(m=='\0'
;
result=(((i*100)-4800)+((t*10)-480)+((m-48)
putc(result);
printf(lcd_putc,"\f%lu",result);
goto main;
}
////////////////////SLAVE\\\\\\\\\\\\\\\\\
#include <16F877A.h>
#use delay(clock=20000000)
#include <LCD.c>
#use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
void main(){
lcd_init();
unsigned int8 result;
while(true){
result=getc();
printf(lcd_putc,"\f%lu",result);
}
}
////////////////////////////////////////////////////////////////////////
اینم برنامه دوم که برای یه عدد 4 رقمی و با دستورات puts , gets نوشته شده
#include <16F877A.h>
#use delay(clock=20000000)
#include <K4X4.c>
#include <LCD.c>
#include <stdlib.h>
#use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
void main(){
lcd_init();
kbd_init();
unsigned int32 i,t,m,n,p;
char result[32];
main:
do {
i=kbd_getc();
} while(i=='\0'
;
do {
t=kbd_getc();
}while(t=='\0'
;
do {
m=kbd_getc();
} while(m=='\0'
;
do {
m=kbd_getc();
} while(m=='\0'
;
p=(((i*1000)-48000)+((t*100)-4800)+((m*10)-480)+(n-48));
result = itoa(p, i32value, result);
puts(result);
printf(lcd_putc,"\f%c",result);
goto main;
}
////////////////////SLAVE\\\\\\\\\\\\\\\\\
#include <16F877A.h>
#use delay(clock=20000000)
#include <LCD.c>
#use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
void main(){
lcd_init();
char result[32];
while(true){
result=gets();
printf(lcd_putc,"\f%c",result);
}
}
من این برنامه رو برای ارتباط سریال(USART) نوشتم وتا وقتی عددم کمتر از 255 هست خوب کار میکنه واین منطقیه چون دستورات putc و getc بیشتر از 8 بیت رو ارسال نمی کنن. اما من می خوام اعداد 4 رقمی یا بیشتر ارسال کنم واسه همین به نظرم اومد متغیر String بکار ببرم تا بتونم از gets و puts استفاده کنم. من اول برنامه 3 رقمی رو می ذارم و بعد برنامه 4 رقمی رو ببینید اشکال کجاست که وقتی 4 رقمی میشه قاطی میکنه یه مشکل اساسی اینه که من اول دستور atoa متغیر 16 بیتی اینتجر قبول نمیکنه که ما هم میایم و متغیر مون رو 32 بیتی تعروف می کنیم ولی بعدش هم باز کار نمیکنه
برنامه با متغیر 8 بیتی:
//to in barnameba keyboard 1 adad be micro ye aval midim va badaz
//ersal ba protocol UART roye microye dovom namayesh dade mishe
MASTER\\\\\\\\\\\\\\\\\\//////////////////////
#include <16F877A.h>
#use delay(clock=20000000)
#include <K4X4.c>
#include <LCD.c>
#use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
void main(){
lcd_init();
kbd_init();
unsigned int8 i,t,m,n,p,result;
main:
do {
i=kbd_getc();
} while(i=='\0'

do {
t=kbd_getc();
}while(t=='\0'

do {
m=kbd_getc();
} while(m=='\0'

result=(((i*100)-4800)+((t*10)-480)+((m-48)
putc(result);
printf(lcd_putc,"\f%lu",result);
goto main;
}
////////////////////SLAVE\\\\\\\\\\\\\\\\\
#include <16F877A.h>
#use delay(clock=20000000)
#include <LCD.c>
#use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
void main(){
lcd_init();
unsigned int8 result;
while(true){
result=getc();
printf(lcd_putc,"\f%lu",result);
}
}
////////////////////////////////////////////////////////////////////////
اینم برنامه دوم که برای یه عدد 4 رقمی و با دستورات puts , gets نوشته شده
#include <16F877A.h>
#use delay(clock=20000000)
#include <K4X4.c>
#include <LCD.c>
#include <stdlib.h>
#use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
void main(){
lcd_init();
kbd_init();
unsigned int32 i,t,m,n,p;
char result[32];
main:
do {
i=kbd_getc();
} while(i=='\0'

do {
t=kbd_getc();
}while(t=='\0'

do {
m=kbd_getc();
} while(m=='\0'

do {
m=kbd_getc();
} while(m=='\0'

p=(((i*1000)-48000)+((t*100)-4800)+((m*10)-480)+(n-48));
result = itoa(p, i32value, result);
puts(result);
printf(lcd_putc,"\f%c",result);
goto main;
}
////////////////////SLAVE\\\\\\\\\\\\\\\\\
#include <16F877A.h>
#use delay(clock=20000000)
#include <LCD.c>
#use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
void main(){
lcd_init();
char result[32];
while(true){
result=gets();
printf(lcd_putc,"\f%c",result);
}
}
دیدگاه