![]() |
|
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
Lỗi timer2 của 16F886
Chào các bác.
Em vừa mua mấy con 16f886 về dùng thử, em cũng mới học về PIC. Em làm một chương trình phát xung nho nhỏ ra mấy chân PORTC, dùng timer2. Tuy nhiên nếu dùng prescaler và postscaler cùng tỉ lệ 1:16 thì mới chạy, còn không thì không chạy. Các bác xem code nhé: Code:
//--------------------------------------------------- #include <pic16f887.h> unsigned char dem; void main() { TRISC=0;//C out //max frequency: //OSCCON=(7<<IRCF0)|(1<<SCS)|(1<<HTS); //OSCTUNE=15; //timer2: T2CON=(1<<TMR2ON)|(15<<TOUTPS0)|(1<<T2CKPS1);//dòng này chuối PR2=10; while(1) { if((PIR1&(1<<TMR2IF))!=0) { PIR1=PIR1&(255-(1<<TMR2IF)); if(++dem==10) PORTC=0; else if(dem==20) { dem=0; PORTC=7; } } } } Nếu thay dòng chuối như sau thì không chạy: T2CON=(1<<TMR2ON); hoặc: T2CON=(1<<TMR2ON)|(9<<TOUTPS0)|(1<<T2CKPS1);//postscaler 16 hoặc: T2CON=(1<<TMR2ON)|(15<<TOUTPS0); Các bác xem giúp em lỗi gì với. thay đổi nội dung bởi: namqn, 19-12-2008 lúc 04:37 PM. |
![]() |
![]() |
![]() |
#2 |
Trưởng lão PIC bang
|
Bạn cho biết đang dùng trình biên dịch nào luôn.
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 |
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
em dùng Hi-Tech ANSI C compiler, bản lite
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
không biết có đúng là nó không, lúc build thì có dòng này, hi vọng bác nhìn nó sẽ rõ hơn:
//-------------------------------------------------------------- HI-TECH C PRO for the PIC10/12/16 MCU family (Lite) V9.60PL3 Copyright (C) 1984-2008 HI-TECH SOFTWARE (1273) Omniscient Code Generation not available in Lite mode //-------------------------------------------------------------- Tiện thể cho em hỏi luôn là muốn tìm phần giải thích chi tiết tập lệnh asm cho một con pic thì tìm ở đâu ạ. thay đổi nội dung bởi: datk45d, 19-12-2008 lúc 06:07 PM. |
![]() |
![]() |
![]() |
#5 | |
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 |
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
|
![]() |
![]() |
![]() |
#7 | |
Trưởng lão PIC bang
|
Trích:
Code:
#include <htc.h> #include <pic16f887.h> __CONFIG(HS & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS & DEBUGDIS); __CONFIG(BORV21); unsigned char cnt; void interrupt PIC16_ISR(void) { } void Init_Ports(void) { TRISB = 0xFE; ANSELH = 0x00; } void Init_Timer2(void) { T2CON = 0x78; //1:1 prescaler, 1:16 postscaler PR2 = 249; // TMR2IE = 1; TMR2IF = 0; TMR2ON = 1; // PEIE = 1; // GIE = 1; } void main(void) { Init_Ports(); Init_Timer2(); cnt = 250; RB0 = 0; while (1) { if (cnt == 0) { RB0 = RB0 ^ 1;; //Toggle every 1 milion inst. cycles cnt = 250; } if (TMR2IF == 1) { cnt--; TMR2IF = 0; } }; } 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 |
|
![]() |
![]() |
![]() |
|
|