![]() |
|
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ử 2 túi
Tham gia ngày: Feb 2006
Bài gửi: 31
: |
em có đoạn chương trình này!
// Period of square-wave (chu kì của một sóng vuông)
/*Variables for capture and interrupt*/ static volatile bit flag=0; static volatile unsigned int t1=0,t2=0; void capture_setup(void) { CCPR1L=0; CCPR1H=0; //Clear capture registers TMR1H=0; TMR1L=0; //Clear timer1 registers CCP1CON = 0b00000111; //Capture every 16th rising edge on CCP1(RC2) T1CON = 0b00100101; //Configure Timer1 module in timer mode with 1:4 prescale and start Timer1 CCP1IE=1; //Enable CCP interrupts TMR1IE=0; //Disable Timer1 interrupts PEIE=1; GIE=1; //Enable global interrupts } static void t1func(void) { t1=CCPR1L; t1+=(CCPR1H << 8); } static void t2func(void) { t2=CCPR1L; t2+=(CCPR1H << 8); t2-=t1; } static void interrupt isr(void) { if (CCP1IF && CCP1IE) //Clock line every 16th rising edge on CCP1IF, RC2, pin 13 on micro { CCP1IF=0; if(flag==1) //Save value to t1 on every even interrupt { t1func(); flag = 0; } else //Save value to t2 on every odd interrupt { t2func(); flag = 1; } } } Nhà mình có bác nào dảnh thì giải thích giúp em cái này cái: ![]() static volatile bit flag=0; static volatile unsigned int t1=0,t2=0; Khai báo biến kiểu này là kiểu gì thế? |
|
|
|
|
|
#2 | |
|
Đệ tử 9 túi
|
Trích:
Kiểu dữ liệu volatile được dùng để báo cho trình dịch biết rằng đối tượng được khai báo kiểu volatile có thể không cần lưu trữ lại giá trị giữa các lần truy cập liên tiếp. Điều đó làm cho chương trình có sự tối ưu hoá từ việc là những dư thừa rõ ràng đang được loại ra khi sử dụng một đối tượng có kiểu volatile bởi ví đối tượng đó có thể thay đổi tuỳ theo chương trình hoạt động như thế nào. Tất cả các port I/O và tất cả các biến mà bị thay đổi giá trị trong trình phục vụ ngắt nên khai báo kiểu volatile. Ví dụ: Code:
volatile static near unsigned char PORTA @ 0xF80; Kết luận: như vậy là khai báo volatile được dùng với biến phải sử dụng liên tục. Khi khai báo như thế thì tiết kiệm được địa chỉ của RAM. Khi các bạn mở các file include ra sẽ thấy được rằng bọn nó khai báo địa chỉ cho các port đều theo kiểu này ![]() |
|
|
|
|
![]() |
|
|
Similar Threads
|
||||
| Ðề 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 |