![]() |
|
![]() |
#1 | |
Trưởng lão PIC bang
|
Trích:
NOWDT - Không dùng watchdog timer (cái này không nên dịch ra) XT - Dùng mức XT (mức công suất trung bình) cho bộ dao động với thạch anh ngoài NOPUT - Không dùng power up timer (làm trễ khi bật nguồn) NOPROTECT - Không bảo vệ code (không cấm đọc nội dung flash) BROWNOUT - Dùng chức năng bảo vệ chống thấp áp LVP - Cho phép chế độ nạp chương trình ở điện áp thấp NOCPD - Không bảo vệ EEPROM dữ liệu (không cấm đọc nội dung EEPROM) NOWRT - Không cấm ghi vào flash NODEBUG - Không dành riêng các chân RB6 và RB7 cho debug 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 |
|
![]() |
![]() |
#2 | |
Nhập môn đệ tử
Tham gia ngày: Nov 2006
Bài gửi: 4
: |
help
Ban co the giup 123? tai sao minh bo cai program nay vao complier thu, tra loi rang, unknow device, try dung pcm, nghia la sao? minh dung ccs 3.2. xin vui long giup dum minh
Trích:
|
|
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Mar 2006
Bài gửi: 2
: |
Cám ơn nhh đã trả lời cho mình, do lần trước mình khai báo chưa đúng cách giữa 16f877A và *=16 đúng ra phải viết liền như bạn minh lại viết cách ra như thế này "16f877A *=16". Nhân tiện cho mình hỏi luôn ý nghĩa của việc khai báo "#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT"
|
![]() |
![]() |
#4 | |
Đệ tử 9 túi
|
Trích:
Tui cứ tưởng ko ma nào vào luồng này chứ ! Khai báo: Code:
"#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT -NOWDT:tắt WDT -NOPROTECT:tắt PROTECT -NOLVP:không dùng LVP -NOBROWNOUT:ko BROWNOUT Còn cụ thể ý nghĩa thế nào,bạn vào help của CCS C gõ :"#fuses" Chào!
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: nhh, 01-04-2006 lúc 01:41 PM. |
|
![]() |
![]() |
#5 | |
Đệ tử 6 túi
Tham gia ngày: Oct 2006
Bài gửi: 147
: |
Trích:
"can not change device type this far into the code" thanhk! |
|
![]() |
![]() |
#6 |
Đệ tử 8 túi
|
Cái luồng bên này nhh vẽ hình cẩu thả quá!
Cái chân MCLR*, bạn phải nối thên cái công tắc ấn vào. nhh nối như vậy thì không reset được con PIC đâu Hai cái chân Vss phải được nối mass. Chân nào không xài, nhh nên đánh dấu bỏ đi (trong thanh công cụ của ORCAD có cái dấu này đó). Nếu mình chịu khó cẩn thận hơn một chút thì sẽ hạn chế được rất nhiều sự bỡ ngỡ cho người mới học. Bạn coi mấy cái hình mình vẽ trong mấy cái Tutorial thì thấy, từng chi tiết đều được chú ý cả, không thể tùy tiện được. ![]() |
![]() |
![]() |
#7 |
Đệ tử 9 túi
|
Thank you!
Đúng là mình ko chú ý chỗ này!Mình sẽ sửa và up lên lại!
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: nhh, 29-05-2006 lúc 01:53 PM. |
![]() |
![]() |
#8 |
Nhập môn đệ tử
Tham gia ngày: Apr 2006
Bài gửi: 1
: |
cho mình hỏi viết chương trình như thế nào để có thể nạp qua bootloader cho 877A dùng Tinybootloader . Bạn có thể viết 1 ví dụ nháy led như trên đc ko
|
![]() |
![]() |
#9 |
PIC Bang chủ
|
Viết chương trình như bình thường, không có gì thay đổi, nhưng vị trí đầu tiên của chương trình phải lưu ý. Bạn xem hướng dẫn tinybootloader.
Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
#10 |
Đệ tử 9 túi
|
![]() Hi....!
Trong Pic16f877a có 3 timer : + Timer0 : 8 bit + Timer1 : 16 bit + Timer2 : 8 bit Timer dùng cho nhiều ứng dụng : định thời, capture, pwm, ... 1.Timer0 Thanh ghi tác động: Các lệnh: Code:
setup_TIMER_0(mode); setup_COUNTERS (rtcc_state, ps_state); // hay setup_WDT() set_TIMER0(value); // hay set_RTCC(value) :xác định giá trị ban đầu (8bit) cho Timer0 get_TIMER0(); // hay get_RTCC() :trả về số nguyên (8bit) của Timer0 RTCC_INTERNAL : chọn xung clock nội RTCC_EXT_L_TO_H : chọn bit cạnh lên trên chân RA4 RTCC_EXT_H_TO_L : chọn bit cạnh xuống trên chân RA4 RTCC_DIV_2 :chia prescaler 1:2 RTCC_DIV_4 1:4 RTCC_DIV_8 1:8 RTCC_DIV_16 1:16 RTCC_DIV_32 1:32 RTCC_DIV_64 1:64 RTCC_DIV_128 1:128 RTCC_DIV_256 1:256 rtcc_state là một trong những constant sau: RTCC_INTERNAL RTCC_EXT_L_TO_H RTCC_EXT_H_TO_L ps_state là một trong những constant sau: RTCC_DIV_2 RTCC_DIV_4 RTCC_DIV_8 RTCC_DIV_16 RTCC_DIV_32 RTCC_DIV_64 RTCC_DIV_128 RTCC_DIV_256 WDT_18MS WDT_36MS WDT_72MS WDT_144MS WDT_288MS WDT_576MS WDT_1152MS WDT_2304MS Mình cũng chưa hiểu ý nghĩa của hàm WDT_..., ko biết có phải khai báo như trên thì sau khoảng thời gian ms bao nhiêu đó đặt sau WDT_ thì sẽ reset lại Pic ????? ![]() 2.Timer1 Thanh ghi tác động: Các lệnh: Code:
setup_TIMER_1(mode); set_TIMER1(value); // xác định giá trị ban đầu (16bit) cho Timer1 get_TIMER1(); // trả về số nguyên (16bit) của Timer1 T1_DISABLED : tắt Timer1 T1_INTERNAL : xung clock nội (Fosc/4) T1_EXTERNAL : xung clock ngoài trên chân RC0 T1_EXTERNAL_SYNC : xung clock ngoài đồng bộ T1_CLK_OUT T1_DIV_BY_1 T1_DIV_BY_2 T1_DIV_BY_4 T1_DIV_BY_8 3.Timer2 Thanh ghi tác động: Các lệnh: Code:
setup_TIMER_2(mode, period, postscale); set_TIMER2(value); // xác định giá trị ban đầu (8bit) cho Timer2 get_TIMER2(); // trả về số nguyên 8bit T2_DISABLED T2_DIV_BY_1 T2_DIV_BY_4 T2_DIV_BY_16 period là số nguyên từ 0-255, xác định giá trị xung reset postscale là số nguyên 1-16, xác định reset bao nhiêu lần trước khi ngắt.
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: nhh, 02-04-2006 lúc 11:34 AM. |
![]() |
![]() |
#11 |
Đệ tử 6 túi
Tham gia ngày: Mar 2007
Bài gửi: 150
: |
Timer ! Help !
Các bác có thể chỉ rõ hơn về timer ko? ví dụ như khi nào timer sẽ tràn( reset ) . giống như 8051( la TF =0)
Và muốn định khỏan thời gian đếm cho timer phải làm sao? Ví dụ như : tạo một xung vuông với tần số 1Hx, cách tính thời gian set timer như thế nào ? giá trị nạp cho timer là bao nhiêu ? Còn timer 16 bit .. sau khi reset có cần phải nạp lại gia trị ban đầu ko?( giống như 8051 vậy ..).. Ai có the so sanh giữa 8051 va 16f877 kô? Mong các bác giúp đỡ sớm để em mau biết rõ hơn ... Cam ơn các bác ! thay đổi nội dung bởi: LeDuc, 15-06-2007 lúc 03:17 PM. |
![]() |
![]() |
#12 | |
Đệ tử 2 túi
Tham gia ngày: Jan 2007
Bài gửi: 27
: |
Trích:
Mỉnh thấy nó nói khá rõ mà. |
|
![]() |
![]() |
#13 |
Đệ tử 9 túi
|
Intterupt
INTERRUPT
Các lệnh dùng cho ngắt: Code:
enable_interrupts(level); //cho phép ngắt kiểu level disable_interrupts(level); //cấm ngắt kiểu level ext_int_edge(edge); // chọn cách lấy xung loại edge GLOBAL : ngắt toàn cục INT_RTCC : tràn TMR0 INT_RB : có thay đổi trạng thái một trong các chân RB4 đến RB7 INT_EXT : ngắt ngoài INT_AD : chuyển đổi AD đã hoàn tất INT_TBE : bộ đệm chuyển RS232 trống INT_RDA : data nhận từ RS232 sẵn sàng INT_TIMER1 : tràn TMR1 INT_TIMER2 : tràn TMR2 INT_CCP1 : có capture hay compare trên CCP1 INT_CCP2 : có capture hay compare trên CCP2 INT_SSP : có hoạt động SPI hay I2C INT_PSP : có data vào cổng parallel slave INT_BUSCOL : xung đột bus INT_EEPROM : ghi vào eeprom hoàn tất INT_TIMER0 : tràn TMR0 INT_COMP : kiểm tra bằng nhau comparator edge bao gồm: L_TO_H : cạnh lên H_TO_L : cạnh xuống Sau khai báo trên để vào đoạn chương trình ngắt, khai báo: #INT_......... Ví dụ vào thực thi ngắt ngoài, ta có đoạn code: Code:
#INT_EXT void ngat_ngoai() { //Chương trình ngắt tại đây }
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 |
![]() |
![]() |
#14 | |
Đệ tử 2 túi
Tham gia ngày: Oct 2007
Bài gửi: 42
: |
Trích:
#include <16F877A.h> #byte portb = 0x06 #byte portc = 0x07 #use delay (clock = 20000000) int count=1; #INT_EXT void EXT_LED() { portc=count; count=count+1; delay_us(100); bit_clear(portb,0); } void main() { ext_int_edge(L_TO_H); enable_interrupts(INT_EXT); enable_interrupts(global); set_tris_b(0xff); set_tris_c(0x00); portc=0; bit_set(portb,0); while(1) { } } |
|
![]() |
![]() |
#15 |
Đệ tử 9 túi
|
Ngắt Timer0
Đây là chương trình dùng ngắt Timer0 định thì 1s.
Đầu tiên led ở chân RB0 sáng, sau 1s sẽ dịch sang trái, nghĩa là led 1 trên chân RB1 sáng , lần lượt như vậy cho các led trên portB và lặp lại mãi mãi. Code:
#include <16F877A.h> #fuses NOWDT,PUT,XT,NOPROTECT #use delay(clock=4000000) #byte PORTB = 0x06 int16 count; int8 a; //Chuong trinh ngat TMR0 #int_timer0 void interrupt_timer0() { set_timer0(6); ++count; if(count == 2000) // 2000*500us = 500000us = 1s { count=0; rotate_left(&a,1); } } //Chuong trinh chinh void main(void) { set_tris_b(0); enable_interrupts(int_timer0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); enable_interrupts(global); set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us a = 0x01; while(true) { PORTB = a; } }
__________________
Ngày mai bắt đầu từ ngày hôm nay Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này: http://www.picvietnam.com/forum//showthread.php?t=1263 thay đổi nội dung bởi: nhh, 22-09-2007 lúc 10:37 AM. Lý do: Update |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|
![]() |
||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
TUT về USART trong PIC16F877A | mafd_47a | MPASM | 16 | 19-02-2025 05:32 AM |
TUT ve I2C ( pic16f877a ) | mafd_47a | MPASM | 28 | 28-01-2025 10:45 PM |
Lập nhóm PIC16F877A | nhh | Cơ bản về vi điều khiển và PIC | 285 | 08-03-2017 11:08 PM |
Bộ so sánh và PWM cho PIC16F877A | anhquangngai | Cơ bản về vi điều khiển và PIC | 24 | 08-09-2012 09:00 AM |
Pic16f877a TỪ DỄ TỚi KhÓ | ntc | Cơ bản về vi điều khiển và PIC | 373 | 23-05-2009 10:24 PM |