![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 | ||
Đệ tử 9 túi
|
Trích:
Chế độ timer (T0CS = 0) thì TMR0 sẽ tăng lên 1 sau mỗi chu kì lệnh (khi prescaler = 1, nếu khác 1 thì là bộ của chu kì lệnh). Chế độ counter thì T0CS =1 khi đó TMR0 sẽ tăng lên mỗi khi có một sườn lên hoặc sườn xuống xuất hiện trên chân T0CKI (RA4) ( chân này dạng open - drain nên bình thường nếu set dạng I/O bình thường thì phải mắc thêm trở kéo lên). Và chúng ta phải chọn sườn lên hay sườn xuống qua bít T0SE. Trích:
Lưu ý: timer0 là bộ free - auto counter sau khi thiết lập ở chế độ timer thì nó sẽ đếm mãi mà không dừng. thanh ghi OPTION ở chế độ sau reset = 0xFF nên ban đầu nó ở chế độ Counter sẽ đếm xung bên ngoài. Mình xin ví dụ một hàm ngắt với timer0 dùng HTPIC. Với thạch anh 20MHZ thì hàm ngắt timer0 1ms -> TMR0 = 6 Code:
void interrupt inter0(void){ static unsigned char i; static unsigned int counter; // bien dem su kien ngat timer0 if(T0IF & T0IE){ // neu co ngat Timer0 xay ra TMR0 = 6; T0IF = 0 ; // xoa co ngat, cong viec khong the thieu sau ham ngat ++ counter; if (counter == a ) { // do something }; }; } Code:
void init(void){ // khoi tao cho các port // Khoi tao cho cac thanh ghi OPTION = 0x00; // dung prescaler cho timer0 voi ti le la 1:2 // Khoi tao cho ngat Timer0 GIE = 1; // cho phep ngat toan cuc T0IE = 1; // cho phep ngat timer0 T0IF = 0; // xoa co ngat timer0 TMR0 = 6; // khoi tao } thay đổi nội dung bởi: ngohaibac, 20-03-2006 lúc 02:39 PM. |
||
![]() |
![]() |
![]() |
#2 |
Đệ tử 2 túi
Tham gia ngày: Dec 2005
Bài gửi: 27
: |
![]() ![]() Có gì khác nhau nhiều giữa Timer0 và các timer khác ko. Bạn có đoạn code nào về Timer ko. Mình đang làm thử một ứng dụng đơn giản là: điều khiển led nháy với thời gian thay đổi phụ thuộc vào nút bấm nhưng mình đang gặp vấn đề về Timer (chưa cụ thể về cách điều khiển về nó). Mong bạn hướng dẫn. Mình chỉ mới làm quen với Assembly nên các đoạn mã dùng C đọc ko hiểu mấy. Theo bạn thì mình có nên chuyển sang học C hay là thuần thục Assembly rồi mới chuyển. Mình cũng đang mới bắt đầu với PIC nên cần học nhiều.Thank! thay đổi nội dung bởi: lamhoang, 27-03-2006 lúc 11:59 AM. |
![]() |
![]() |
![]() |
#3 | |
Đệ tử 1 túi
Tham gia ngày: Nov 2005
Bài gửi: 17
: |
Trích:
Mình có thể vừa dùng ngắt timer vừa dùng ngắt ngoài để điều chỉnh có được không á... Bác nhh và mod ntc cho ý kiến đi ! |
|
![]() |
![]() |
![]() |
#4 | |
Đệ tử 9 túi
|
Trích:
Code:
BCF OPTION_REG,PSA Timer0 và timer2 là timer 8bit,timer1 là timer 16bit,ngoài chức năng định thì thì timer còn nhiều ứng dụng khác. Cụ thể bạn xem thêm trong datasheet mấy cái thanh ghi ở phần Timer! Theo ý nhh để điều chỉnh thời gian như bạn nói bằng nút bấm (ko biết bạn dùng mấy nút?), mình làm như sau : Với 3 nút bấm chẳng hạn và thời gian ấn nút 1 sẽ delay 1s;nút 2 delay 500ms; nút 3 delay 100ms ,viết mấy cái lệnh kiểm tra xem cái nút nào on thì nhảy đến cái nhãn đó, ấn nút 1 -> nhảy vào Button_1 thì 500+400+100=1000ms=1s,rồi quay ngược về,hai nhãn còn lại cũng tương tự, Trong phần main mình sẽ đặt những cái nhãn : Code:
.... Button_1 Call delay_500ms Button_2 Call delay_400ms Button_2 Call delay_100ms ..... http://www.picvietnam.com/forum//sho...p?t=238&page=2 Ý tưởng là vậy,bạn thử viết và post lên (cả sơ đồ nguyên lí nhé!) để anh em nhà pic cùng phá luôn !
__________________
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, 27-03-2006 lúc 04:01 PM. |
|
![]() |
![]() |
![]() |
#5 | |
Đệ tử 2 túi
Tham gia ngày: Dec 2005
Bài gửi: 27
: |
![]() Trích:
BCF option_reg,PSA Mình cũng mới viết xong nhưng do không định được thời điểm Timer khởi động nên thời gian delay ko chính xác. Hình như các bác ở SG và HN hết thì phải . không biết có cao thủ nào ở ĐN không nhỉ. Phải phát triển phong trào sử dụng PIC ở ĐN chứ các bác nhỉ? |
|
![]() |
![]() |
![]() |
#6 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#7 |
Đệ tử 6 túi
Tham gia ngày: Mar 2007
Bài gửi: 150
: |
Trong hàm init chọn như sau: dùng pre cho timer0 với tỉ lệ 1:2
Code:
void init(void){ // khoi tao cho các port // Khoi tao cho cac thanh ghi OPTION = 0x00; // dung prescaler cho timer0 voi ti le la 1:2 // Khoi tao cho ngat Timer0 GIE = 1; // cho phep ngat toan cuc T0IE = 1; // cho phep ngat timer0 T0IF = 0; // xoa co ngat timer0 TMR0 = 6; // khoi tao } Bác Ngô ơi giúp em với,trong CCS cờ ngắt timer0 là gì vậy? em đọc trong trong thư viện 16f877a.h kô thấy no định nghĩa chỗ này.Em liều lam đại thì nó ko chịu--->em pó tay.Và cái cho phép ngắt toàn cục ko thấy ai nói đến vậy?Và cách tính khoản giá trị nạp ban đầu cho timer? VD : em muốn tạo ra một xung với tần số là 10Khz o portD.7 . f=100Khz =>T=1/10=0.1ms=100micro giây. | chu ky may dai 1 micro s, ==> cần có 50 micro s tương đương với 50 lần đếm lên của timer ==> giá trị cần nạp cho timer la : 256 - 50=206=0xCE Nếu là 8051 thi ta nạp vào thanh TH0=0xCE ; Vậy đối với Pic 16f877A cái giá trị đó giờ phải viết vào đâu vậy bác Ngô ?giúp em với. Các bác có thể chỉ rõ hơn về vấn đề timer này khi dùng CCS ko vậy? Thanks các bác . |
![]() |
![]() |
![]() |
Ð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 |
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 |
CCS C for PIC16F877A | nhh | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 405 | 24-04-2008 12:00 PM |