PDA

View Full Version : Bắt đầu học PIC, hoc từ 16F877A được không ???


thanhdanhtanthu
21-08-2010, 07:56 PM
E đan bắt đầu tìm hiểu học về Pic 16f877A, nhưng không biết học như thế nào, nghe giang hồ đồn ở đây cao nhân hạ nhân rất nhiều xin chỉ giáo e vài chiu. Trước mắt e có bài code này ma hog hiểu cũng không biết viết bằng chuơng trình j luôn, mong các tiền bối giúp đỡ dịch dùm e đoạn code với tinh thần là 1 người bắt đầu học về Pic hiểu được, e cảm kích rất nhiều.
hoa.tuyet275@gmail.com

baquyen
22-08-2010, 03:54 PM
Èo, ko biết bạn có phải là người mới bắt đầu ko nữa, bạn xem link này chắc có ích đó
http://www.picvietnam.com/forum/showthread.php?t=357

Mới học PIC http://www.picvietnam.com/forum/showthread.php?t=4

Lựa chọn trình dịch http://www.picvietnam.com/forum/showthread.php?t=5347

xungba22
27-09-2010, 08:08 PM
Ngôn ngữ viết là CCS.
Bài lập trình bạn poss lên đậy rất dài, khộng thể giải thích hết được, chỉ có thể giải thích phần nào bạn chưa hiểu thôi.
Mình có làm một bài giống hệt bài của bạn rồi, nhưng cách lập trình của mình khác với bài bạn poss ở đây.
Mình có một số gợi ý cho bạn như sau:
-Tìm hiểu về CCS.
-Tìm hiểu về DS1307.
-Lập trình thì phải chia nhỏ ra mà viết. Trong main chỉ để khai báo I/O với lải gọi các chương trình con thôi. Muốn làm gì thì viết chương trình con rồi gọi là ok. Viết như vậy thì dễ sửa, nhìn phần cứng(protech) chạy là biết sai ở đâu rồi.

-Cơ bản của bài bạn đưa ở đây gồm những bước sau:
+Khai báo sử dụng giao tiếp I2C:
#USE I2C(MASTER,FAST,SDA=PIN_C4,SCL=PIN_C3)
+Đặt giá trị ban đầu cho DS1307:
VOID INIT_TIME(){
i2c_start();//bắt đầu sử dụng giao tiếp I2C
i2c_write(0xd0);//chọn giao tiếp với ds1307(D0)
i2c_write(0x00);//Bắt đầu ghi từ địa chỉ 0x00
i2c_write(0x00);//giay
i2c_write(0x59);//phút
i2c_write(0x06);//giờ
i2c_write(0x02);//thứ
i2c_write(0x31);//ngày
i2c_write(0x07);//thàng
i2c_write(0x10);//năm
I2C_write(0x90);//tạo tần số 1hz tại chân số 7 của ds1307
i2c_stop();//dòng này ko giải thix chắc bạn cũng biết.
}

+Đọc giá trị từ ds1307 về:
VOID CLOCK()
{
I2C_start();
I2C_write(0xd0);
I2C_write(0x00);
I2C_start();
I2C_write(0xd1);
giay=I2C_read(1);//đọc giá trị giây về thanh ghi Giay//thanh ghi Giay tự khai báo//
phut=I2C_read(1);
gio=I2C_read(1);
thu=I2C_read(1);
ngay=I2C_read(1);
thang=I2C_read(1);
nam=I2C_read(1);
I2C_stop();
+Tách giá trị ra:giá trị đọc về là giá trị BCD.

VOID TACH_LED()
{
Led1=nhietdo/10;
Led2=nhietdo%10;

Led3=giay&0x0f;//hàng đơn vị của giây
Led4=(giay&0xf0)>>4;//Hàng chục của giây

Led5=phut&0x0f;
Led6=(phut&0xf0)>>4;

Led7=gio&0x0f;
Led8=(gio&0xf0)>>4;
}
+Quét led:delay_ms(2)
+Quay về làm lại như cũ nhưng không có cài giờ nha!(đặt chương trình cài giờ ngoài Main).
-Muốn hẹn giờ hay cài lại giờ hẹn thì tự viết thêm. Nếu không viết được pm mail Laivantuynhcddt@gmail.com mình chỉ cho.

kidmaster08
29-09-2010, 12:54 AM
Viet bang asem hay hon,de hieu

phamluu1991
05-12-2010, 05:42 PM
ạ co code dem san pham cho PIC6f877A cho em voi
chi tiet lien lac caysay_dethuong@yahoo.com.vn