![]() |
|
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 |
![]() |
#61 |
Đệ tử 8 túi
|
Ahahaha. Đúng như mình dự đoán. Không trật đi chỗ nào cả.
![]() Bây giờ nhh tính khắc phục như thế nào. Thử nêu vài giải pháp theo suy nghĩ của nhh coi. Bạn có thể tin là code không có gì sai. Vấn đề ở đây là một cái gì đó rất khó chịu. Nó là cái gi?? |
![]() |
![]() |
![]() |
#62 |
Đệ tử 8 túi
|
Cái Timer thì thời gian chỉ cần tương đối thôi, không cần chính xác.
Về phần thiết kế phần cứng cũng ổn rồi. ![]() Cái mình muốn đưa ra thảo luận trong ứng dụng này là cái chỗ bí mà nhh mắc phải. Cái lệnh ORG, bạn có thể không cần sử dụng trước bảng tra, mà có thể để cho trình biên dịch tự sắp xếp, để tránh hiện tượng bị code đè lên. Mà trường hợp này khi biên dịch bằng MPASM thì nó có báo lỗi mà. Stack! Bàn đầu mình cũng nghĩ vấn đề chương trình chạy không đúng là do stack. Nhưng hình như không phải. ![]() |
![]() |
![]() |
![]() |
#63 | |
Đệ tử 9 túi
|
Trích:
__________________
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 |
|
![]() |
![]() |
![]() |
#64 |
Đệ 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. |
![]() |
![]() |
![]() |
#65 | |
Đệ 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 ! |
|
![]() |
![]() |
![]() |
#66 | |
Đệ 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. |
|
![]() |
![]() |
![]() |
#67 |
Đệ tử 9 túi
|
Về việc bắt đầu viết chương trình bằng ngôn ngữ gì ASM,CCS C,HT-PIC,...,theo mình tốt hơn vẫn nên học cơ bản bằng ASM trước sau đó đào sâu thì càng tốt không thì nhảy qua các ngôn ngữ khác cũng dễ chịu rồi !
Bạn nên đọc luồng này để tham khảo cách học của mọi người : http://www.picvietnam.com/forum//showthread.php?t=91 Chúc bạn mau chóng tìm cho mình cách học hiệu quả nhấ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 |
![]() |
![]() |
![]() |
#68 |
Đệ tử 8 túi
|
Dùng bao nhiêu ngắt cũng được. Cái quan trọng là ban phải phát hiện ra ngắt nào xảy ra để xử lí.
Như vậy, khi bắt đầu chương trình ngắt, bạn phải có đoạn chương trình kiểm tra xem ngắt nào xảy ra bằng cách kiểm tra các cờ ngắt. Ngắt nào xảy ra thì cờ ngắt tương ứng với ngắt đó sẽ nhảy lên mức logic 1. Kiểm tra xong thì ra lệnh cho vi điều khiển nhảy đến đoạn chương trình xử lí tương ứng. |
![]() |
![]() |
![]() |
#69 |
Đệ tử 8 túi
|
PIC16F877A có tất cả 3 Timer. Mìhn không nhớ thật sự chi tiết, nhưng đại khái nó như vầy:
Timer 0 và Timer 2 là bộ đếm 8 bit. Timer 0 có bộ chia tần số (prescaler) dùng chung với Watchdog Timer. Nghĩa là khi bộ chia tần số này được sử dụng bởi WDT, thì cái Timer 0 không được quyền xài nó và ngược lại. Timer 2 có cả 2 bộ chia tần số phía trước và phía sau (prescaler và postscaler) cho phép ta ấn định tỉ số chia linh hoạt hơn để tạo ra khoảng thời gian thích hợp cho ứng dụng. Timer 0 và Timer 2 tuy là bộ đếm 8 bit, nhưng tỉ số chia của các bộ chia lớn hơn Timer 1. Như vậy nó cũng cho phép tạo ra các khoảng thời gian delay với độ trễ thích hợp với các ứng dụng trong thực tế. Timer 1 là bộ đếm 16 bit, được hỗ trợ bởi bộ chia tần số prescaler. Tuy nhiên tỉ số chia này nhỏ (1:1 đến 1:16). Mỗi Timer có cấu tạo khác nhau, điều đó cũng có nghĩa mỗi Timer sẽ thích hợp hơn với một tình huống nào đó trong thực tế, và tùy theo cái tình huống mà lựa chọn Timer thích hợp. Sơ lược như vậy, bạn tham khảo datasheet để biết thêm chi tiết, mình chỉ nhớ mang máng như vậy thôi, không biết có chỗ nào nhớ lộn không nữa. Về việc tham khảo cách khởi tạo và sử dụng Timer, bạn tham khảo thêm các hướng dẫn trong tài liệu "mid-range PIC mcu reference manual" trong micro chip. Trong đó hướng dẫn rất chi tiết, bạn chỉ việc dựa trên cái sườn bài có sẵn trong cái tài liệu đó và thay đổi các thông số cài đặt cho thích hợp là ok. ![]() |
![]() |
![]() |
![]() |
#70 |
Đệ tử 8 túi
|
Chắc bữa nào phải sửa lại cái Timer cho đàng hoàng rồi post lên cho anh em quá. Hic, dạo này bị bác F chơi, quăng việc liên tục, mệt gần chết, cũng hết thời gian rảnh luôn.
Về cái Timer của nhh. Bạn khắc phục như thế này thử xem: cái bảng dữ liệu, bạn chuyển lên đặt ở phía trên, sao cho các lệnh của phần table nó nằm trong vùng code 256 byte đầu của bộ nhớ chương trình, không đặt nó ở cuối chương trình nữa. Nhiều khi do chương trình phía trên bạn viết dài, nên cái table bị rơi ra khỏi vùng 256 word đầu tiên của bộ nhớ chương trình. Chắc ăn là chuyển hẳn nó lên phía trên chương trình start luôn, tức là viết table xong thì tới cái label start. Có phải cái chương trình của bạn khi viết xong, bạn không thể kiểm soát được là nó sẽ chạy theo kiểu nào đúng không. ![]() nhh hiểu ý mình không. Sửa lại rồi thông báo tình hình cho anh em như thế nào nhé! ![]() thay đổi nội dung bởi: ntc, 27-03-2006 lúc 11:19 PM. |
![]() |
![]() |
![]() |
#71 |
Nhập môn đệ tử
Tham gia ngày: Oct 2005
Bài gửi: 5
: |
em có 1 bài toán bên mục của bác Chính,nhờ mọi người chỉ cho
![]() |
![]() |
![]() |
![]() |
#72 | |
Đệ 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ỉ? |
|
![]() |
![]() |
![]() |
#73 | |
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 |
|
![]() |
![]() |
![]() |
#74 |
Đệ tử 8 túi
|
Timer 1 của PIC16F877A có chế độ cho phép bật tắt Timer.
![]() |
![]() |
![]() |
![]() |
#75 | |
Đệ tử 9 túi
|
Trích:
Code:
BSF T1CON,TMR1ON ;bat Timer1 BSF T2CON,TMR2ON ;bat Timer2
__________________
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 |
|
![]() |
![]() |
![]() |
Ð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 |