View Single Post
Old 13-04-2012, 10:56 PM   #1
mrsin
Đệ tử 2 túi
 
Tham gia ngày: Mar 2012
Bài gửi: 34
:
Lightbulb Giúp em sửa code pic giao tiếp với máy tính

Vấn đề của em như sau:
Từ VB em truyền 16 ký tự số xuống pic16f877a(lưu các giá trị nhận được từ VB vao eeprom của con pic >> lưu thế này không biết có được không ạ ) và cho hiển thị lên led 7 đoạn(A chung),sử dung IC giải mã 74hc595, em đã viết rồi mà không chạy. Mong anh chị xem và sửa giúp em, em xin cám ơn.

#include <16F877A.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
//#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bi ts=9) //Baud_min=4800 Baud_max=115200
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9)


// Dinh nghia cac chan cho ket noi 74595
//#bit SCL=0x08.7
//#bit DATA=0x08.6
//#bit SCK=0x08.5
#define SCL RD5
#define DATA RD6
#define SCK RD7
//#byte TRISD =0x88
void quet(unsigned char x);
void layma();
void luudata(char a);
void display();


unsigned char Mrs232[];//mang nhan gia tri tu rs232
unsigned int Z[];//mang chua cac gia tri led7
unsigned int count;
unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};//ma led 7

#INT_RDA
Receive_isr()
{
char c;
c=getch();
luudata(c);
}
void luudata(char a)
{int i;
for(i=0;i<16;i++)
{
write_eeprom(i,Mrs232[i]);
}
}
void quet(unsigned char x)
{
int i,temp1;
for(i=0;i<8;i++)
{
temp1=x;//gan bien
temp1=temp1&0x80;//lay ra bit dau tien (bit 7)
if(temp1==0x80)//so sanh bit
DATA=1; //bang 1 thi xuat vao chip =1
else
DATA=0; //nguoc lai bang 0
x*=2; //dich bit lay bit trong so thap
SCK=0; //tao xung tren chan 11
SCK=1; //1 xung dua vào 1 bít
}
}
void display()
{
int i;
for(i=0;i<16;i++)
{
quet(Mrs232[i]);
}
SCL=0; //xuat du lieu ra output
SCL=1;
}
void layma()
{
int i,j;
for(i=0;i<16;i++)
{
j=Mrs232[i]-48;
if(j>9) Z[i]=ma[0];
else Z[i]=ma[j];
}
}

void main()
{
int i;
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
trisd=0x00;
trisc=0x00;
for(i=0;i<16;i++)
{
Mrs232[i] = read_eeprom(i);
}
layma();
while(1)
{
display();
delay_ms(500);
}

}
mrsin vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn