toanhoi
24-11-2010, 11:08 AM
Chào các anh.Em đang làm một mạch truyền dữ liệu giữa 2 pic .Một con sẽ phát và một con sẽ nhận.Em gặp vấn đề là khi con phát phát dữ liệu và em cho hiện lên virtual thì được nhưng khi em nối con pic thứ hai vào thì không nhận được.Đây là code của em
//code truyền
#include <16F877A.h>
#include "C:\Program Files\PICC\Drivers\def_877a.h"
#device *=16 adc=8
#use delay (clock = 20000000) // CLK = 20MHz
#use rs232 (baud=9600 , parity = N , xmit=pin_C6 , rcv=pin_C7 )
#include "C:\Program Files\PICC\Drivers\lcd_lib_4bit.c"
#INT_RDA // Ham xu ly ngat noi tiep
void Receive_isr()
{
char c;
c = getc();
putc(c);
}
void main()
{
float value;
set_tris_a(0x01);//ngo a1 la ngo vao
set_tris_d(0x00);//d la ngo ra
Lcd_Init();//khoi tao lcd
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_16);
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
value=read_adc();
while (1)
{
value=read_adc();
value=200*value/255;
printf(lcd_putchar,"Dien ap DC=%fV",value);
printf("%f \n",value);
//delay_ms(1000);
LCD_PutCmd(0x01);
}
}
và đây là code nhận
#include <16F877A.h>
#include "C:\Program Files\PICC\Drivers\def_877a.h"
#device *=16 adc=8
#use delay (clock = 20000000) // CLK = 20MHz
#use rs232 (baud=9600 , parity = N , xmit=pin_C6 , rcv=pin_C7 )
#include "C:\Program Files\PICC\Drivers\lcd_lib_4bit.c"
#INT_RDA // Ham xu ly ngat noi tiep
void Receive_isr()
{
char c;
c = getc();
putc(c);
}
void main()
{
float value;
set_tris_a(0x01);//ngo a1 la ngo vao
set_tris_d(0x00);//d la ngo ra
Lcd_Init();//khoi tao lcd
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
//printf("Hello PIC Viet Nam! ");
// printf(" I'm Pham Thanh Cong.");
while(true)
{
if(kbhit()){
portd = getc();
PORTB = 0xFF;
delay_ms(1000);
}
}
}
Chương trình này em test như sau .Nếu có dữ liệu từ pic 1 chuyển sang thì cho led của pic 2 sáng hết.
//code truyền
#include <16F877A.h>
#include "C:\Program Files\PICC\Drivers\def_877a.h"
#device *=16 adc=8
#use delay (clock = 20000000) // CLK = 20MHz
#use rs232 (baud=9600 , parity = N , xmit=pin_C6 , rcv=pin_C7 )
#include "C:\Program Files\PICC\Drivers\lcd_lib_4bit.c"
#INT_RDA // Ham xu ly ngat noi tiep
void Receive_isr()
{
char c;
c = getc();
putc(c);
}
void main()
{
float value;
set_tris_a(0x01);//ngo a1 la ngo vao
set_tris_d(0x00);//d la ngo ra
Lcd_Init();//khoi tao lcd
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_16);
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
value=read_adc();
while (1)
{
value=read_adc();
value=200*value/255;
printf(lcd_putchar,"Dien ap DC=%fV",value);
printf("%f \n",value);
//delay_ms(1000);
LCD_PutCmd(0x01);
}
}
và đây là code nhận
#include <16F877A.h>
#include "C:\Program Files\PICC\Drivers\def_877a.h"
#device *=16 adc=8
#use delay (clock = 20000000) // CLK = 20MHz
#use rs232 (baud=9600 , parity = N , xmit=pin_C6 , rcv=pin_C7 )
#include "C:\Program Files\PICC\Drivers\lcd_lib_4bit.c"
#INT_RDA // Ham xu ly ngat noi tiep
void Receive_isr()
{
char c;
c = getc();
putc(c);
}
void main()
{
float value;
set_tris_a(0x01);//ngo a1 la ngo vao
set_tris_d(0x00);//d la ngo ra
Lcd_Init();//khoi tao lcd
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
//printf("Hello PIC Viet Nam! ");
// printf(" I'm Pham Thanh Cong.");
while(true)
{
if(kbhit()){
portd = getc();
PORTB = 0xFF;
delay_ms(1000);
}
}
}
Chương trình này em test như sau .Nếu có dữ liệu từ pic 1 chuyển sang thì cho led của pic 2 sáng hết.