05-11-2011, 09:31 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Jun 2011
Bài gửi: 14
: |
Mọi người kiểm tra giùm em code HT PIC về TIMER0
Em chào cả nhà..em mới chuyển tu CCS sang HT PIC nên còn bỡ ngỡ quá.em đang thử ngiệm chương trình nhấp nháy led ở PORT C với chu kì 500ms,điều khiển bằng timer0.nhưng không hiểu sao mạch mô phỏng chỉ sáng 1 led duy nhất rồi đơ.protues hiển thị dòng chữ cảnh báo : stack over flow rushing return address of interuppts.em nạp thử vào mạch thật cũng bị y như vậy.
em đã post code và file mô phỏng để mong mọi người giúp đỡ. |
06-11-2011, 10:54 AM | #2 | |
Nhập môn đệ tử
Tham gia ngày: Feb 2009
Bài gửi: 8
: |
Ok!
Trích:
Em chào cả nhà..em mới chuyển tu CCS sang HT PIC nên còn bỡ ngỡ quá.em đang thử ngiệm chương trình nhấp nháy led ở PORT C với chu kì 500ms,điều khiển bằng timer0.nhưng không hiểu sao mạch mô phỏng chỉ sáng 1 led duy nhất rồi đơ.protues hiển thị dòng chữ cảnh báo : stack over flow rushing return address of interuppts.em nạp thử vào mạch thật cũng bị y như vậy. em đã post code và file mô phỏng để mong mọi người giúp đỡ. |
|
21-11-2011, 10:24 AM | #3 |
Đệ tử 5 túi
|
chào bạn,bạn mới học thì nên steup timer 1 cách tường minh hơn.
code của bạn bị sai phần steup timer0,OPTION = 0B110 =>> bạn clear cả 2 bit T0SE=0,T0CS=0,không biết bạn tính dùng timer hay counter . với lại theo thứ tự thì bạn nên set trisc trước rồi mới tới portc đây là code tham khảo về setup timer 0 Code:
// MCU : 16f877a // XTAL : 4MHz // Connection: A led is connected to RD0. // Desctiption: Timer0 has overflowed: the led will blink after every 1 second. #include <htc.h> __CONFIG(XT & WDTDIS & LVPDIS & DEBUGDIS); #define _XTAL_FREQ 4000000 unsigned char count=0; //Ham main ******************************* void main(void) { ANSEL=0x00;//ADC OFF ANSELH=0x00; TRISC=0x00; PORTC=0x00; T0CS=0; //USE INTERNAL CLOCK PSA=0; //USE PRESCALER PS2=0; PS1=1; PS0=1; //1:16 T0IF=0; //Clear int flag T0IE=1; //Enable tmr0 int GIE=1; //Enable glb int TMR0=0x06; //TMR0 init while(1){}; //Waiting for int, so we dont do anything } }
__________________
Chỉ sợ thiếu tiền...... |
23-11-2011, 03:52 PM | #4 |
Đệ tử 1 túi
Tham gia ngày: Sep 2010
Bài gửi: 18
: |
Chào bạn! Chương trình nháy led port C của bạn có thể như sau, bạn tham khảo:
Code:
// MCU : 16f887 // XTAL : 4MHz #include <htc.h> __CONFIG(XT & WDTDIS & LVPDIS & DEBUGDIS); __CONFIG(BORV21); #define _XTAL_FREQ 4000000 unsigned char count=0; //Ham main ******************************* void main(void){ ANSEL=0; //ALL PORTS ARE DIGITAL ANSELH=0; TRISC=0; PORTC=0; T0CS=0; //USE INTERNAL CLOCK PSA=0; //USE PRESCALER PS2=0; PS1=1; PS0=0; //1:8 T0IF=0; //Clear int flag T0IE=1; //Enable tmr0 int GIE=1; //Enable glb int TMR0=5; //Timer0 will overflow after: 8*250*1us = 2ms while(1); //Waiting for int } void interrupt isr(){ //Do not rename isr ("interrupt isr()") if(T0IE && T0IF){ T0IF = 0; TMR0=5; ++count; if(count == 125){ //125*2ms = 250ms count = 0; PORTC ^= 0xff; } } } thay đổi nội dung bởi: internet.com, 23-11-2011 lúc 04:05 PM. |
|
|