PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 19-05-2010, 05:10 PM   #1
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
các bác nào giúp em khởi tạo timer1 zoiii

bác nào khởi tạo timer1 để tạo thời gian trễ 5s dùm em với
cám ơn các bác nhiều
à em dùng em 16f88
GIE=1;
PIE1=1;
TMR1IE=1;
TMR1IF=0;
TMR1CS=0;
T1SYNC = 0;
T1OSCEN = 0;
T1CKPS1=1;
T1CKPS0=1;
em khởi tạo vậy đúng ko nhỉ? sao ko thấy chạy nhỉ?

thay đổi nội dung bởi: kiemkhach10, 19-05-2010 lúc 10:24 PM.
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-05-2010, 08:03 AM   #2
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
ko bác nào giúp em à?em đang cần gấp lắm mà!
em đã thử cả 100 lần rùi mà ko được. đã gãy chân mất 2 em 16f88 rùi.cứ phải tháo ra tháo vào mà ko xong.
bác nào đã khởi tạo thành công 5s trong timer1 của pic 16f88 thì giúp em cái
cám ơn các bác nhiều!
em sài Hi-TechPic
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-05-2010, 09:59 AM   #3
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi ngocthanh07 View Post
Bạn thử giải thích từng dòng code của bạn đi, comment từng dòng để nguời khác hiểu ý bạn, con số 5s bạn thể hiện nó ở chỗ nào trong đoạn trên vậy. Bạn làm sao biết code không chạy ?
Bạn làm không đuợc thì phải bình tĩnh suy nghĩ, đọc tài liệu, làm không đuợc mà bạn nạp chết 100 con Pic cũng ko đuợc chứ đừng nói nạp 100 lần.
mình muốn khởi tạo hàm dùng timer1,cái này nếu khởi tạo được thì mình sẽ viết tiếp cho nháy led chẳng hạn.
nhưng khởi tạo mãi ko được do vậy chẳng thể làm gì.
còn kiểm tra thì đơn giản mà bạn.chỉ việc tính đúng 5s thì cho 1 led nháy
nhưng cái đó đòi hỏi phải khởi tạo thành công timer1 đã
chẳng nhẽ mọi người ko ai sử dụng timer1 hay sao ý
buồn quá!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2010, 08:26 AM   #4
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
hic mình đã đợi gần 1 tuần mà chuă thấy bạn nào hồi âm hết.
đây là code mình viết:

MÌNH DÙNG PIC 16F88.

void main(void)
{
timer1_init();
while(1)
{
if(RA2==1)
{
RA3=1;//RA3 NỐI VỚI CÒI BÍP
}
}
}
//////
timer1_init()
{
GIE=1;//cho phep ngắt tổng
PIE1=1;// cho phép ngắt ngoại vi
TMR1IE=1;//cho phép ngắt timer1
TMR1IF=0;//xóa cờ ngắt
TMR1H =0;// giá trị ban đầu của timer1
TMR1L =0;
TMR1CS=0;//chon xung fso/4
T1RUN=0;//cái nay mới thấy lần đầu,chắc là cho phép chạy chế độ timer1
T1OSCEN = 1;
T1CKPS1=1;//chọn độ chia 1:8
T1CKPS0=1;
TMR1ON=1; //bắt đầu chạy timer1
}
void interrupt inter1(void)
{
RA2=1//RA2 NỐI VỚI 1LED đơn
TMR1H =0;
TMR1L =0;
TMR1IE=1;
TMR1IF=0;
TMR1ON=1;
}

CODE MÌNH KO THẤY GÌ SAI,NHƯNG SAO TIMER1 KO CHẠY NHỈ?
CÁC CAO THỦ XEM DÙM EM CÁI!
CÁM ƠN RẤT NHIỀU!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2010, 08:34 AM   #5
nhamdtk4
Đệ tử 3 túi
 
nhamdtk4's Avatar
 
Tham gia ngày: Feb 2009
Bài gửi: 47
:
Bạn vào đây C:\program files\PICC\Examples đọc bài EX_STWT.C của CCS xem họ khởi tạo Timer thế nào rồi tính tiếp.
__________________
tatcachilanguybien
nhamdtk4 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2010, 10:40 AM   #6
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi nhamdtk4 View Post
Bạn vào đây C:\program files\PICC\Examples đọc bài EX_STWT.C của CCS xem họ khởi tạo Timer thế nào rồi tính tiếp.
khổ lỗi mình lại viết bằng Hi-TechPic bây giờ chắc phải download lại ccs mà dùng thui,
khổ thân tui thế
bạn có thê port cái EX_STWT.C của CCS cho mình xem được ko?mạng chỗ mình yếu lắm ,chắc download lâu quá mà lại hay bị đứt mang nứa.
cám ơn bạn nhiều!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2010, 11:54 AM   #7
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi ngocthanh07 View Post
Mình không dùng cái Hi-techPic gì đó, nhưng mình thấy bạn viết chuơng trình ngắn mà có vẽ như hơi bị thiếu. Không biết có phải Hi-tech Pic có chức năng tự tạo cho bạn nhẫn chức năng thiếu đó ?.
Ví dụ:
- Chiều cho chân RA2 là in hay out. Chân này có trùng chân analog không ? , có bỏ chức năng analog ra chưa,
- Thêm một điều nữa là bạn nên lưu tâm tới việc xóa cờ ngắt truớc hay sau khi enable ngắt.
-Chuơng trình của bạn có ngắt thì đèn cháy àh, vậy bạn làm sao biết đuợc nó ngắt bao nhiêu lần, ban đầu chưa có ngắt đèn có cháy chưa. Thời gian giữa hai lần ngắt theo tính toán của bạn là bao nhiêu, có đủ để bạn nhận biết đuợc hiện tượng mà bạn tạo ra để thử chưa, Bạn có làm đuợc led cháy/ tắt khi không có timer 1 chưa ?
Timer 1 không chạy là "chẩn đoán của bạn, suy đoán của bạn", hoàn toàn không phải là cái lỗi của chuơng trình. Suy đoán sai hay đúng thì chưa biết!
Thời gian 1 tuần là hơi ít nhưng cũng đủ để bạn viết một chuơng trình cho nó đàng hoàng....thay vì ngồi đợi, bạn tự làm, tự tính, 100% là được. Ngồi đợi, khả năng cũng đuợc nhưng chẳng hiểu đến đâu cả.
cái đó mình có làm mà,mình chỉ port nhưng phần liên quan đến timer1 thui,còn các khai báo mình cũng đã khai báo đủ mà.
bạn port hộ mình cái ví dụ dùng timer1 trong ccs ,để mình tham khảo cái,vì mình download hoài mà ko được.
cám ơn bạn nhiều
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2010, 10:52 PM   #8
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi ngocthanh07 View Post
Code:
/////////////////////////////////////////////////////////////////////////
////                           EX_STWT1.C                            ////
////                                                                 ////
////  This program uses timer 1 and interrupts to keep a             ////
////  real time seconds counter.  A simple stop watch function is    ////
////  then implemented.                                              ////
////                                                                 ////
////  Jumpers:                                                       ////
////     PCM,PCH    pin C7 to RS232 RX, pin C6 to RS232 TX           ////
////                                                                 ////
////  This example will work with the PCM and PCH compilers.  The    ////
////  following conditional compilation lines are used to include a  ////
////  valid device for each compiler.  Change the device, clock and  ////
////  RS232 pins for your hardware if needed.                        ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2004 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////


#if defined(__PCM__)
#include <16F877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#endif

#define INTS_PER_SECOND 19         // (20000000/(4*4*65536))

int8 seconds;      // A running seconds counter
int8 int_count;    // Number of interrupts left before a second has elapsed


#INT_TIMER1                        // This function is called every time
void clock_isr() {                 // timer 1 overflows (65535->0), which is
                                   // approximately 19 times per second for
    if(--int_count==0) {           // this program.
      ++seconds;
      int_count = INTS_PER_SECOND;
    }
}


void main() {
   int_count = INTS_PER_SECOND;
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
   set_timer1(0);
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);

   while(TRUE) {
      printf("Press any key to begin.\n\r");
      getc();
      int_count = INTS_PER_SECOND;
      seconds = 0;
      printf("Press any key to stop.\n\r");
      getc();
      printf("%u seconds.\n\r", seconds);
   }
}
Code:
////////////////////////////////////////////////////////////////// Timer 1
// Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1
// Constants used for SETUP_TIMER_1() are:
//      (or (via |) together constants from each group)
#define T1_DISABLED         0
#define T1_INTERNAL         0x85
#define T1_EXTERNAL         0x87
#define T1_EXTERNAL_SYNC    0x83

#define T1_CLK_OUT          8

#define T1_DIV_BY_1         0
#define T1_DIV_BY_2         0x10
#define T1_DIV_BY_4         0x20
#define T1_DIV_BY_8         0x30

////////////////////////////////////////////////////////////////// Timer 2
Thứ lỗi cho mình hỏi, bạn căn cứ vào đâu để biết
1. Pic chạy
2. Timer của bạn không chạy.

Với những gì bạn làm và chưong trình bạn viết, từ "đủ" của bạn tớ không tin!, đó chỉ là cảm giác và suy nghĩ chủ quan của bạn.
mình đã test bằng delay.cứ 1s thì led nhấp nháy 1 lần.nhưng khi chuyển dùng timer1 thì led ko nhấp nháy nữa.do đó 100% do mình khởi tạo hàm timer1 sai.
bạn cho mình hỏi thêm (#define T1_INTERNAL 0x85) thì các bít nào =1 và các bít nào =0.và nó ở thanh ghi nào?
cám ơn nhiều
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2010, 11:18 PM   #9
ngocthanh07
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 44
:
Bạn có thể post nguyên cái code của bạn ko, bạn hỏi nguời khác, mà bạn cứ cắt xén câu hỏi như vậy, nguời ta phải đoán bạn làm gì rồi, chưa làm gì rồi
rất là khó
Code:
/* service routine for timer 0 interrupt */
void interrupt
timer0_isr(void)
{
	if(reload == 0){
		// effect a change on PORTB whenever our desired period is reached.
		// Note this timing will contain a margin of error.
		reload = RELOADS + 1;
		seconds++;
		PORTB++;	// effect a change on PORTB
	}
	reload--;
	T0IF = 0;
}
Đó là một ví dụ về ngắt timer 0 trong HT PIC, tớ không rành về cách viết HT PIC, nhưng liệu bạn có chắc chuơng trình của bạn sẽ nhảy vào ngắt không.

Tớ up cho bạn mổ cái file manual của HT PIC, trong chuơng năm nguời ta có 1 ví dụ về timer1 thì phải.
File Kèm Theo
File Type: pdf quickstart.pdf (245.3 KB, 97 lần tải)

thay đổi nội dung bởi: ngocthanh07, 21-05-2010 lúc 11:31 PM.
ngocthanh07 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-05-2010, 07:11 AM   #10
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
Trích:
Nguyên văn bởi ngocthanh07 View Post
Bạn có thể post nguyên cái code của bạn ko, bạn hỏi nguời khác, mà bạn cứ cắt xén câu hỏi như vậy, nguời ta phải đoán bạn làm gì rồi, chưa làm gì rồi
rất là khó
Code:
/* service routine for timer 0 interrupt */
void interrupt
timer0_isr(void)
{
	if(reload == 0){
		// effect a change on PORTB whenever our desired period is reached.
		// Note this timing will contain a margin of error.
		reload = RELOADS + 1;
		seconds++;
		PORTB++;	// effect a change on PORTB
	}
	reload--;
	T0IF = 0;
}
Đó là một ví dụ về ngắt timer 0 trong HT PIC, tớ không rành về cách viết HT PIC, nhưng liệu bạn có chắc chuơng trình của bạn sẽ nhảy vào ngắt không.

Tớ up cho bạn mổ cái file manual của HT PIC, trong chuơng năm nguời ta có 1 ví dụ về timer1 thì phải.
hi! cám ơn ngocthanh07
đêm qua mình ngồi suy nghi lại và đọc thêm 1 số bài.hóa ra mình thiếu cho phép ngắt ngoaij vi PEIE=1, vì tmer1 là mọt ngoại vi.
mình đã bổ xung và timer1 chạy ngon lành cành đào vui quá)
nhưng lại có thêm 1 vấn đề nữa
khi mình dùng timer0 và timer1 cùng 1 lúc, thì trình dịch báo lỗi (symbol "interrupt_function" defined more than) có nghĩa là khai báo hàm ngắt quá 1 lần.
mính gọi hai hàm ngắt liên tục như thế này

void interrupt inter0(void)
{
//thực hiện lênh1.
}
void interrupt inter1(void)
{
//thực hiện lênh2.
}

có ki nào xung đột ko nhỉ mà khi dịch thì nó báo lỗi hoài?
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-05-2010, 09:03 AM   #11
ngocthanh07
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 44
:
Hì, việc này bạn xem ví dụ của HT PIC nhé, theo như ví dụ này, bạn chỉ có một hàm ngắt chung cho các ngắt, trong hàm ngắt bạn phải kiểm tra cờ ngắt của từng đứa. (Liên quan đến vụ vector ngắt và source ngắt của con PIC của bạn, hình như nó chỉ có 1 vector ngắt thôi). Tức là bạn phải kiểm tra cờ T0IF, T1IF trong chuơng trình ngắt. Không dùng hai hàm ngắt được.

Thêm một điều, bạn có thể không QUOTE bài của mìnhd duợc không vậy, vui lòng bỏ phần QUOTE đó ra dùm. Các bài đó có giá trị gì đâu QUOTE làm gì, để tài nguyên cho cái nào có ý nghĩa hơn.
ngocthanh07 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-05-2010, 06:23 PM   #12
kiemkhach10
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 114
:
ok.cám ơn bạn nhiều, để mình xem lại.
đúng là pic chỉ có 1 vecter ngắt ở địa chỉ 0x04.
dù sao cũng cám ơn ban nhiều.đã giúp mình khá nhiều
chúc vui!
kiemkhach10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 10:11 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam