PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 30-05-2009, 12:24 PM   #1
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Đà nẵng vào đây cùng thảo luận về PIC

Đầu tiên là t đưa ra 2 mạch nạp PIC vô cùng dễ làm nhưng tốc độ nạp hơn GTB-USB Lite


sau đó , u tải file nì về http://www.mediafire.com/download.php?tzkzcccmit2
giải nén , coppy + paste vô thư mục C:\Program Files\WinPic800\Hardware.
phần mềm để nạp PIC hiện t đang dùng là WINPIC800 v3.61
http://www.mediafire.com/download.php?w0zyqqtmmyq

sau khi cài đặt , vô chương trình WINPIC800 :
- Language : english
- Setting/hardware : nếu mạch JDM mod(hình 1) thì chọn JDM mod , còn nếu mạch hình 2 thì chon Sch+ . Xong nhấn Appy edits
- gắn mạch nạp vô , chọn devices/hardware test . Nếu mạch làm đúng thì có bảng hardware test : OK

Theo kinh nghiệm làm tùm lum mạch nạp thì 2 mạch này nạp đc cả nùi con PIC. Ráp là chạy . Tin tưởng đi .....
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-05-2009, 12:28 PM   #2
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
thêm cái nữa cho ae học PIC thấy phấn khởi : đọc ADC , xuất giá trị ADC đk động cơ lun

Code:
#include <16F88.h>
#device 16F88*=16  ADC=8
#fuses  XT,NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NODEBUG
#use    delay(clock=4000000)

int8 adc;

void readADC()
{ setup_adc(adc_clock_internal);
  setup_adc_ports(sAN1);
  set_adc_channel(1);
  delay_ms(10);adc=read_adc();
}
void pwm_ccp()
{
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_1,255, 1);
}
void PWM(int8 value)
{set_pwm1_duty(value);
}
main()
{ set_tris_B(0x00); PORTB=0x00;
  pwm_ccp();
  while(1)
   { readADC();
     PWM(adc);
    }
}
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-05-2009, 12:31 PM   #3
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
I> LCD : LCD ở đây t chỉ đưa ra giao tiếp 8 bit cho ng mới dễ tiếp cận . Vì giao tiếp 8 bit nên sẽ cần 8 chân của VDK , do đó t thu gọn = con 74164 --> chỉ dùng 4 chân VDK (E,RS,RX1,TX1) .


Code giao tiếp LCD8bit , dùng 164
Code:
#include <18F4331.h>
#fuses  XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOPUT,NOCPD,NODEBUG,NOFCMEN,NOCPB,NOPWMPIN,HPOL_LOW,STVREN
#use    delay(clock=4000000)

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)

//=========== LCD ==============
#bit RX1  =0xF80.3 // RA3
#bit TX1  =0xF80.2 // RA2
#bit RS  =0xF82.0  // RC0
#bit E   =0xF84.0  // RE0
void shiftLCD(int8 k)
{ int8 i;
  for(i=8;i>0;i=i-1)
     { if(!bit_test(k,i-1))RX1=0;
       else RX1=1;
       TX1=1;delay_us(20);TX1=0;
     };
 E=1;delay_ms(1);E=0;delay_ms(1);
}
void LCD_PutCmd(int8 k)
{ RS=0;shiftLCD(k);}
void LCD_PutChar(int8 k)
{ RS=1;shiftLCD(k);}
void LCD_Init()
{  delay_ms(100);
   LCD_PutCmd(0x38);
   LCD_PutCmd(0x06); // dich con tro sang phai
   LCD_PutCmd(0x0C); // bat hien thi ,tat con tro
   LCD_PutCmd(0x01); // xoa man hinh
   LCD_PutCmd(0x02); // ve dau dong
   LCD_PutCmd(0x86);
   LCD_PutChar('R');LCD_PutChar('e');LCD_PutChar('a');LCD_PutChar('d');LCD_PutChar('y');
   
}
//+++++++++++++++++++++++++++++++++++

main()
{ 
  TRISA = 0x03;PORTA=0xFF;
  TRISB = 0x00;PORTB=0xFF;
  TRISC = 0xF8;PORTC=0xFF;
  TRISD = 0x0F;PORTD=0xFF;
  TRISE = 0x06;PORTE=0xFF;
  
  LCD_Init();while(1);
}

Hơ hơ mệt wa , nghe music tí đã
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-05-2009, 03:25 PM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi Mr.Bi View Post
Đầu tiên là t đưa ra 2 mạch nạp PIC vô cùng dễ làm nhưng tốc độ nạp hơn GTB-USB Lite


sau đó , u tải file nì về http://www.mediafire.com/download.php?tzkzcccmit2
giải nén , coppy + paste vô thư mục C:\Program Files\WinPic800\Hardware.
phần mềm để nạp PIC hiện t đang dùng là WINPIC800 v3.61
http://www.mediafire.com/download.php?w0zyqqtmmyq

sau khi cài đặt , vô chương trình WINPIC800 :
- Language : english
- Setting/hardware : nếu mạch JDM mod(hình 1) thì chọn JDM mod , còn nếu mạch hình 2 thì chon Sch+ . Xong nhấn Appy edits
- gắn mạch nạp vô , chọn devices/hardware test . Nếu mạch làm đúng thì có bảng hardware test : OK

Theo kinh nghiệm làm tùm lum mạch nạp thì 2 mạch này nạp đc cả nùi con PIC. Ráp là chạy . Tin tưởng đi .....
Bạn có thể trích dẫn liên kết đến trang web của tôi, không cần cắt hình vẽ và đưa lên photobucket làm gì. Kết quả thử nghiệm các mạch nạp này được tôi nêu ra trên trang web của tôi, không rõ bạn đã thử nghiệm bao nhiêu PIC/dsPIC mà kết luận theo kinh nghiệm của bạn?

Nếu bạn tải WinPic800 về và cài đặt vào máy thì các tập tin cấu hình cho JDM Mod và Schaer+ sẽ không tồn tại, vì chúng không nằm trong gói cài đặt của phần mềm WinPic800. Các tập tin cấu hình này đã được tôi post lên diễn đàn ở luồng "Thông tin về các mạch nạp và phần mềm" (không cần phải post lại lên mediafire làm gì), các bạn nhớ chú ý điểm này.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263

thay đổi nội dung bởi: namqn, 30-05-2009 lúc 05:12 PM. Lý do: thừa 1 từ
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-05-2009, 04:46 PM   #5
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Trích:
Nguyên văn bởi namqn View Post
Bạn có thể trích dẫn liên kết đến trang web của tôi, không cần cắt hình vẽ và đưa lên photobucket làm gì. Kết quả thử nghiệm các mạch nạp này được tôi nêu ra trên trang web của tôi, không rõ bạn đã thử nghiệm bao nhiêu PIC/dsPIC mà kết luận theo theo kinh nghiệm của bạn?

Nếu bạn tải WinPic800 về và cài đặt vào máy thì các tập tin cấu hình cho JDM Mod và Schaer+ sẽ không tồn tại, vì chúng không nằm trong gói cài đặt của phần mềm WinPic800. Các tập tin cấu hình này đã được tôi post lên diễn đàn ở luồng "Thông tin về các mạch nạp và phần mềm" (không cần phải post lại lên mediafire làm gì), các bạn nhớ chú ý điểm này.

Thân,
sr anh Nam , e ko cố ý , lúc trưa up lên mà quên đưa link, tại mấy hình này có sẵn trên photobucket nên paste vô lun .(đụng đến bản quyền oy đây )
http://www4.hcmut.edu.vn/~nqnam/uC.php#pic

Còn kết quả thử nghiệm của a thì quá đủ để gọi là "cả nùi con PIC " rồi . Ở Đà Nẵng mà bán đủ loại PIC như a liệt kê thì e cũng rán mua .

Vì một số mem ko chịu lục tìm , ko chịu search , chưa làm đc tới đâu thì hỏi cái đó , ngay cả với 1 số đứa em 05CDT đc em đưa cho capture,laypout , link 2 mạch này nhưng tụi nó la làng là ko nạp đc. Nguyên nhân là ko chịu copy 2 file cấu hình này . Do đó , em phải chỉ từng bứoc , up lun file lên ...

Cảm ơn a đã nhắc nhở !
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-05-2009, 01:32 AM   #6
hailuabk
Nhập môn đệ tử
 
Tham gia ngày: Aug 2008
Bài gửi: 9
:
Em thấy 2 cái mạch nạp trên làm nguồn 1 chiều tùm lum.có mạch mô dùng ít nguồn 1 chiều hơn không anh
hailuabk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-05-2009, 08:37 AM   #7
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
cho em tham gia với!
Nhân tiện em xin đưa chương trình "đo nhiệt độ "dùng cảm biến nhiệt LM35DZ hiển thị trên 2 led 7 đoạn anode chung ,dùng pic16f877a (phí quá,nhưng chip này do Thầy em cho).
cai mach in em vẽ thiếu chân nguồn cho 2 con led7,em nhát quá chạy lun cái jumper trước con trở Reset xuống luôn>


// |+++++++++++++++++++++++++++++++++++++++++++++++++ ++|
// | CHUONG TRINH HIENTHI NHIET DO TREN 2 LED 7 DOAN |
// | BAO CAO THUC TAP MACH SO UNG DUNG |
// | NGUYEN TIEN CHUAN-071250520207-07DT2 |
// |+++++++++++++++++++++++++++++++++++++++++++++++++ ++|


// ||||||||||||---------------------- KET NOI PHAN CUNG --------------------||||||||||||||||
//++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++\
//| RB0->6 KET NOI DEN CAC CHAN A,B,C,D,E,F,G CUA 2 LED 7 DOAN ANODE CHUNG. +\
//| CHAN 8(VCC) CUA 2 LED 7 D0AN DUOC DIEU KHIEN BOI 2 BJT THUAN PNP: A1015 +\
//| CHAN C CUA 2 BJT NOI VOI CHAN VCC CUA 2 LED 7 DOAN DE DIEU KHIEN QUET LED +\
//| CHAN E CUA BJT NOI VOI NGUON +\
//| CHAN B (BAM DIEN TRO 10K )CUA BJT HANG CHUC VA DON VI NOI LAN LUOT VOI CHAN RD1,RD0 +\
//|---------------------------------------------------------------------------------------+\
//| SU DUNG TRINH BIEN DICH PCWH COMPLIER VER:4.018 +\
//| SU DUNG TRINH WINPIC800 DE NAP FILE HEX LEN PIC QUA CHUAN GIAO TIEP ICSP +\
//|+++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++\



#include <16F877A.h> // KHAI BAO SU DUNG PIC 16F877A

#include <def_877a.h> // FILE DINH NGHIA CAC THANH GHI VA CAC BIT

#device *=16 adc=10 // KHAI BAO SU DUNG CON TRO 16 BIT VA ADC 10 BIT

// KHAI BAO CAU HINH CHO PIC 16F877A
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

// KHAI BAO SU DUNG DELAY VOI TAN SO DAO DONG NGOAI
#use delay(clock=12000000)

int8 high,low; // KHAI BAO CAC BIEN SO NGUYEN 1 BYTE

// KHAI BAO BANG MA LED 7 DOAN ANODE CHUNG
int8 const a[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };

// CHUONG TRINH CON TACH SO HANG CHUC VA HANG DON VI
void convert_bcd(int8 x)
{
low=x%10; // CHU SO HANG DON VI
high=x/10; // CHU SO HANG CHUC

}
// CHUONG TRINH CON HIEN THI RA 2 LED 7 DOAN
void display()
{
PORTB=a[low];
RD0=0;
delay_us(500);
RD0=1;
PORTB=a[high];
RD1=0;
delay_us(500);
RD1=1;
}

void main()
{
float value;
int16 i;
trisb = 0x00; // THIET LAP CAC CHAN PORTB LA OUTPUT
trisd = 0x00; // THIET LAP CAC CHAN PORT D LA OUTPUT
trise = 0x00; // THIET LAP CAC CHAN PORT E LA OUTPUT
trisa = 0xff; // THIET LAP CAC CHAN PORT A LA INPUT

// KHOI TAO ADC

setup_adc(ADC_CLOCK_INTERNAL); // THIET LAP THOI GIAN LAY MAU BANG XUNG CLOCK
setup_adc_ports(AN0); // THIET LAP CHAN AN0 LA CHAN VAO ADC
set_ADC_channel(0) ;
delay_us(10); // TRE 10US

value=(float)read_adc(); // DOC GIA TRI ADC
value = value/2.048; //
convert_bcd((int8)value); // GOI CHUONG TRINH CON CONVERT_BCD

i=0;
while(1)
{
i++;
value =(float) read_adc();
value = value/2.048;
if (i==500)
{
convert_bcd((int8)value);
i=0;
}
display();
}
}
File Kèm Theo
File Type: rar main.rar (59.3 KB, 53 lần tải)
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-08-2009, 05:38 PM   #8
sonduy1
Đệ tử 1 túi
 
Tham gia ngày: Jun 2009
Bài gửi: 20
:
bác coi giúp e cái !..!

#include <16f877a.h>
#fuses HS,NOWDT
#use delay(clock=4000000)
#byte trisb=0x86
#byte portb=0x06
#BYTE TRISD=0X88
#BYTE PORTD=0X08


char bang_ma[10]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
char n1,n2,n3,n4;
char sec,min,h;
#int_timer1
void ngat_TMR1()
{ int time,count;
set_timer1(15535);
time++;
if(time=1);//dc 1/2s
//<thuc hien cong viec>
{
count++;
if(count==1)
{ portb=bang_ma[N1];
OUTPUT_LOW(PIN_A0);
DELAY_MS(10);
OUTPUT_HIGH(PIN_A0);
}
if(count==2)
{ portb=bang_ma[N2];
OUTPUT_LOW(PIN_A1);
DELAY_MS(10);

}
if(count==3)
{ portD=bang_ma[N3];

OUTPUT_LOW(PIN_A4);DELAY_MS(10);
OUTPUT_HIGH(PIN_A4);
}
if(count==4)
{ portD=bang_ma[N4];
OUTPUT_LOW(PIN_A5);
DELAY_MS(10);
}
count==0;



}
time==0;
}
//SU DUNG HAM NGAT TIMER0 DE HIEN THI
#INT_TIMER0

void ngat_timer0()
{ int dem;

set_timer0(15536); //mac dinh gia tri ban dau cho TMR0

dem++;
if(dem==20) //20*50000=1s
{ dem=0;
sec++;
}
if(sec==60)
{ sec=0;
min++;
}
if(min==60)
{ min=0;
h++;
}
if(h==24)
{ h=0;
}
}





VOID main(void)
{ trisb=0x00;
portb=0xff;
TRISD=0X00;
PORTD=0XFF;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(15536);
enable_interrupts(int_timer0);
enable_interrupts(global);


setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
set_timer1(15535);
enable_interrupts(int_timer1);
enable_interrupts(global);
N1=H/10;
N2=H%10;
N3=SEC/10;
N4=SEC%10;
while(1)
{

NGAT_TIMER0();
N1=H/10;
N2=H%10;
N3=SEC/10;
N4=SEC%10;
ngat_TMR1();

}
}
sonduy1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-08-2009, 09:27 PM   #9
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Trích:
Nguyên văn bởi sonduy1 View Post
#include <16f877a.h>
#fuses HS,NOWDT
#use delay(clock=4000000)
#byte trisb=0x86
#byte portb=0x06
#BYTE TRISD=0X88
#BYTE PORTD=0X08


char bang_ma[10]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
char n1,n2,n3,n4;
char sec,min,h;
#int_timer1
void ngat_TMR1()
{ int time,count;
set_timer1(15535);
time++;
if(time=1);//dc 1/2s
//<thuc hien cong viec>
{
count++;
if(count==1)
{ portb=bang_ma[N1];
OUTPUT_LOW(PIN_A0);
DELAY_MS(10);
OUTPUT_HIGH(PIN_A0);
}
if(count==2)
{ portb=bang_ma[N2];
OUTPUT_LOW(PIN_A1);
DELAY_MS(10);

}
if(count==3)
{ portD=bang_ma[N3];

OUTPUT_LOW(PIN_A4);DELAY_MS(10);
OUTPUT_HIGH(PIN_A4);
}
if(count==4)
{ portD=bang_ma[N4];
OUTPUT_LOW(PIN_A5);
DELAY_MS(10);
}
count==0;



}
time==0;
}
//SU DUNG HAM NGAT TIMER0 DE HIEN THI
#INT_TIMER0

void ngat_timer0()
{ int dem;

set_timer0(15536); //mac dinh gia tri ban dau cho TMR0

dem++;
if(dem==20) //20*50000=1s
{ dem=0;
sec++;
}
if(sec==60)
{ sec=0;
min++;
}
if(min==60)
{ min=0;
h++;
}
if(h==24)
{ h=0;
}
}





VOID main(void)
{ trisb=0x00;
portb=0xff;
TRISD=0X00;
PORTD=0XFF;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(15536);
enable_interrupts(int_timer0);
enable_interrupts(global);


setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
set_timer1(15535);
enable_interrupts(int_timer1);
enable_interrupts(global);
N1=H/10;
N2=H%10;
N3=SEC/10;
N4=SEC%10;
while(1)
{

NGAT_TIMER0();
N1=H/10;
N2=H%10;
N3=SEC/10;
N4=SEC%10;
ngat_TMR1();

}
}
k biết u mún hỏi j , đọc sơ thì thấy hình như u chưa nắm ngắt timer
- K ai gọi hàm ngat_timer0() , ngat_timer1() cả ,khi khởi tạo ngắt timer , ta đã đặt thời gian ngắt , cứ khi mô timer tràn thì tạo ngắt , trong ct chính , ta k phảii gọi . Í tui nói ở đây là u xem hàm ngắt timer như 1 hàm con bình thường nên gọi . Hỉu sai chỗ í đó
- Đã dùng ngắt timer thì k ai còn gọi thêm delay nữa . Mục đích của ngắt timer là thay thế cho delay
- Trong hàm ngắt timer 1 , cuối ct ngắt có count ==0 để trống trơn t k hỉu u chỗ ni mún j , cóa phải u mún xóa biến count ??? Nếu xóa biến count thì ct k thực hiện đc if (count==2) , ==3 ... biết vì sao k ? Thử nhẩm sẽ thấy , vì count k bao h đếm lên đc tới 2
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-05-2009, 01:00 PM   #10
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Trích:
Nguyên văn bởi hailuabk View Post
Em thấy 2 cái mạch nạp trên làm nguồn 1 chiều tùm lum.có mạch mô dùng ít nguồn 1 chiều hơn không anh
nguồn 1 chiều đó mới quan trọng đó em . Nhờ nó mà mạch nạp đc nhiều con PIC. 1 số mạch nạp qua COM ko dùng lun nguồn máy tính nên list PIC hạn chế

Em dùng adapter (20k) để cấp nguồn 1 chiều này
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-06-2009, 09:30 PM   #11
hailuabk
Nhập môn đệ tử
 
Tham gia ngày: Aug 2008
Bài gửi: 9
:
Có bác mô ở ĐN gần Bách Khoa không giúp em với.Em đang ngụp lặn con DS1307 với con 89S52 mấy ngày ni mà chưa được
hailuabk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-06-2009, 10:12 PM   #12
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
ở đây chỉ thảo luận về PIC thui e . Nhưng thui , ae phá lệ . Vấn đề j nêu ra (quan trọng phải post code & mạch lên thì mới giúp đc đấy , chứ nói 0 0 thì chịu)
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-06-2009, 10:39 PM   #13
hailuabk
Nhập môn đệ tử
 
Tham gia ngày: Aug 2008
Bài gửi: 9
:
Em chỉ còn thắc mắc chỗ lấy dữ liệu ra ở con DS1307 rồi chuyển qua mã BCD sau đó lại đưa dữ liệu vào led 7 đoạn.Tại sao phải chuyển qua BCD mà không phải là số thập phân luôn
hailuabk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-06-2009, 11:45 PM   #14
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
Cần giúp đỡ về Spi của pic16f877a

Các Anh nào có tài liệu tiếng việt, hay code và mạch ví dụ về Spi của pic16f877a thì cho em xin với !Em mới nghiên cứu về phần này nhưng chẳng biết bắt đầu từ đâu?
Em vào Topic giao tiếp của diễn đàn nhưng thấy loạn xạ luôn!

Anh nào đi trước chỉ cho em với !

Cảm ơn các Anh nhiều !

tienchuanct@gmail.com
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-06-2009, 07:21 PM   #15
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Trích:
Nguyên văn bởi hailuabk View Post
Em chỉ còn thắc mắc chỗ lấy dữ liệu ra ở con DS1307 rồi chuyển qua mã BCD sau đó lại đưa dữ liệu vào led 7 đoạn.Tại sao phải chuyển qua BCD mà không phải là số thập phân luôn
em hỉu sai !Khi nạp vào con RTC 1307 , ta phải chuyển thành mã BCD .
vd : mún nạp ngày = 27 thì phải nạp 0x27 .

Còn khi đọc ra , dữ liẹu ta thu đc là số có dạng mã BCD , ta phải chuyển wa thành số thập phân để dễ làm việc khi xuất led

vd : ngay = read_rtc(0x04) ; // ngày = 0x27 <-- số này là số BCD
bước tiếp theo ngay = (ngay>>4)*10 + (ngay&0x0F) // lúc này ngày = 27 <-- số thập phân đây
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 11:02 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam