سلام
لطفا هرکس میتونه به من کمک کنه خیلی فوریه :cry: :cry: :sad:
من یه برنامه بزبان کدویژن نوشتم که دمای دو تا نقطه را با دو تا lm35 اندازه میگیره و روی lcd نمایش میده توی پروتئوس مشکلی نداره اما توی ساخت جواب نمیده! بعدش باید این دو تا دما را از طریق ارتباط میکرو به پی سی بفرستم روی پی سی تا نشون بده.
مشکلی که هست اینه که توی vb نرخ انتقال داده از طریق پورت com بصورت 8 بیتی تعریف میشه یعنی 1و8وnو9600 اما داده های من 16 بیتی فرستاده به پورت کام پیسی! میخوام بدونم چطور میتونم توی قسمت vb داده های منو بصورت دو تا داده هشت بیتی دریافت کنه!؟ :cry2: :cry2: :cry2:
این برنامه کدویژنم :
#include <mega16.h>
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#define xtal 8000000
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#define ADC_VREF_TYPE 0xC0
float t0,t1;
unsigned int read_adc(unsigned char adc_input)
{
float t;
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
t=((ADCW*2.56)/1023)*100;
return t;
}
void main(void)
{
char buffer[32];
lcd_init(16);
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
while(1)
{
t0=read_adc(0);
t1=read_adc(1);
lcd_clear();
sprintf(buffer,"T0=%f\nT1=%f",t0,t1);
lcd_puts(buffer);
delay_ms(100);
}
}
اینم برنامه vb :
Option Explicit
Option Base 1
Dim buffer As Variant
Private Sub Command_Click()
MSComm1.Output = Text1.Text
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 1
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
mscom1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
buffer = MSComm1.Input
buffer = Asc(buffer)
If buffer < 50 Then Text1.Text = buffer
End If
End Sub
لطفا هرکس میتونه به من کمک کنه خیلی فوریه :cry: :cry: :sad:
من یه برنامه بزبان کدویژن نوشتم که دمای دو تا نقطه را با دو تا lm35 اندازه میگیره و روی lcd نمایش میده توی پروتئوس مشکلی نداره اما توی ساخت جواب نمیده! بعدش باید این دو تا دما را از طریق ارتباط میکرو به پی سی بفرستم روی پی سی تا نشون بده.
مشکلی که هست اینه که توی vb نرخ انتقال داده از طریق پورت com بصورت 8 بیتی تعریف میشه یعنی 1و8وnو9600 اما داده های من 16 بیتی فرستاده به پورت کام پیسی! میخوام بدونم چطور میتونم توی قسمت vb داده های منو بصورت دو تا داده هشت بیتی دریافت کنه!؟ :cry2: :cry2: :cry2:
این برنامه کدویژنم :
#include <mega16.h>
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#define xtal 8000000
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#define ADC_VREF_TYPE 0xC0
float t0,t1;
unsigned int read_adc(unsigned char adc_input)
{
float t;
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
t=((ADCW*2.56)/1023)*100;
return t;
}
void main(void)
{
char buffer[32];
lcd_init(16);
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;
while(1)
{
t0=read_adc(0);
t1=read_adc(1);
lcd_clear();
sprintf(buffer,"T0=%f\nT1=%f",t0,t1);
lcd_puts(buffer);
delay_ms(100);
}
}
اینم برنامه vb :
Option Explicit
Option Base 1
Dim buffer As Variant
Private Sub Command_Click()
MSComm1.Output = Text1.Text
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 1
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
mscom1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
buffer = MSComm1.Input
buffer = Asc(buffer)
If buffer < 50 Then Text1.Text = buffer
End If
End Sub
دیدگاه