با سلام و عرض ادب و احترام خدمت مهندسین عزیز
یه مشکلی در ارتباط سریال با pc در کامپایلر ccs برام پیش اومده که خیلی ضروریه برام و ازتون کمک میخوام!
من برنامه زیر رو نوشتم که از طریق A/D اطلاعات رو از پورت A بخونه و عملیات ریاضی روش انجام بده و اون رو هر 10ثانیه یک بار به pc ارسال کنه.
مشکلاتی که هست اینه اطلاعاتی که من میفرستم اصلا تو pc درست نشان داده نمیشه و چیزهای بی ربط نشون میده که عدد هم نیستن!اعداد فرستاده شده هم اعشاری 3 رقمی با یک رقم اعشاری هستش.
و تو راه اندازی interrupt هم مشکل دارم!
خیلییییییییییییییییی به کمکتون نیاز دارم!ممنون میشم کمکم کنید!
برنامه ای که نوشتم:#include <18f4550.h>
#device ADC=10
#use delay(clock=1000000)
#use i2c(master,sda=pin_b0,scl=pin_b1)
#fuses hs,nowdt
#int_timer0
#include <math.h>
#define use_portd_lcd TRUE
#include <lcd.c>
double m1,m2;
int s,m,h,d,mon,y;
float ve,vin,voute,hh,I;
long t0;
void timer0_isr()
{
set_tris_d(0x00);
set_timer0(0);
clear_interrupt(int_timer0);
putc(h);
}
void main()
{
set_tris_a(0xff);
setup_timer_0( RTCC_INTERNAL | RTCC_DIV_256);
interrupt_active(INT_TIMER0);
set_timer0(0);
setup_adc_ports(AN0_TO_AN1);
setup_adc(ADC_CLOCK_INTERNAL);
i2c_start();
i2c_write(0xd0); //neveshtan
i2c_write(0);
i2c_write(0);// sec
i2c_write(0b00100100);// min
i2c_write(0b00000011);//h
i2c_stop();
i2c_start();
i2c_write(0xd0); // set the initial value of min , h,etc
i2c_write(4);
i2c_write(0b00100111);//date
i2c_write(0b00010001);// mon
i2c_write(0b00010110);//year
i2c_stop();
lcd_init();
while(true) {
delay_ms(10);
set_adc_channel(0);
m1=read_adc();
delay_ms(100);
set_adc_channel(1);
m2=read_adc();
delay_ms(10);
ve=(5*m1)/1023; //output voltage of Encoder
voute=(ve*10)/0.52;
delay_ms(10);
vin=(5*m2)/1023;
I=vin/0.2 ;
hh=35*I-100 ;
delay_ms(10);
i2c_start();
i2c_write(0xd0); //hardware address and R/Wnot=0
i2c_write(0); //access seconds register
i2c_start();
i2c_write(0xd1); //hardware address and R/Wnot=1
s=i2c_read(1); //read second
m=i2c_read(1); //read minute
h=i2c_read(0); //read hour
i2c_start();
i2c_write(0xd0);
i2c_write(4);
i2c_start();
i2c_write(0xd1);
d=i2c_read(1); //read date
mon=i2c_read(1); //read month
y=i2c_read(0); //read year
i2c_stop();
delay_ms(10);
t0=get_timer0();
printf(lcd_putc,"\f%x:%x:%x\n%x:%x:%x",h,m,s,y,mon ,d);
//lcd_gotoxy(9,1);
//printf(LCD_PUTC, "h=%4x",t0);
lcd_gotoxy(9,2);
printf(LCD_PUTC, "V=%3.2f",voute);
delay_ms(100);
}
}