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

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 08-06-2007, 06:31 PM   #211
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
cho em hoi trong ccs co ho tro vong lap " for" ko vay cac bac .. sao em lam hoai ma ko duoc vay .. bien dich van dung ma chay thi ko duoc...
--------------------------------
Code:
#include<16F877.h>
#device *=16 ADC=8
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=10000000)
#use fast_io(b)
#byte p3=0x06
#byte porta=0x05

void main()
{  
   int8 const led[]={1,2,4,8,16,32,64,128},a;
   set_tris_b(0);
   set_tris_a(0);
   set_tris_c(0);
   set_tris_d(0);
   
   while(true)
    {
      for( a=0;a<8;a++)
      p3=led[a];
      delay_ms(100);
    }

}

thay đổi nội dung bởi: namqn, 08-06-2007 lúc 07:52 PM.
LeDuc vẫn chưa có mặt trong diễn đàn  
Old 08-06-2007, 07:56 PM   #212
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Như thế nào là chạy không được?

Theo code của bạn, trong vòng while quá trình sau sẽ được thực hiện, nếu a là biến:
1. Xuất 8 lần dữ liệu ra p3 (địa chỉ 0x06)
2. Làm trễ 100 ms
3. Quay lại bước 1

Tôi không dùng CCS C nên bạn phải kiểm tra lại xem khai báo như bạn đã làm thì a là biến hay là hằng.

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 10-06-2007, 12:21 AM   #213
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Em biet no sai o dau roi. Sau moi lan gia tri a tang len 1 . phai delay mot khoan thoi gian, neu ko no se chay den gia tri cuoi cung roi xuat ra portb , vay p3=led[7]=128; nhu vay xem nhu vong lap ko co tac dung(co vay thoi cugn so y thiet(~_~).. Vay doan code dung la 8 con led se chay duoi nhau hoai (^_^)..)
-----------------------------
Code:
#include<16F877.h>
#device *=16 ADC=8
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=10000000)
#use fast_io(b)
#byte p3=0x06

void main()
{  
   int8 const led[]={1,2,4,8,16,32,64,128},a;
   set_tris_b(0);
   while(true)
    {
      for(a=0;a<8;a++)
      {
      p3=led[a];
      delay_ms(20);
      }
    }
}
namqn: bạn nên đặt phần code của bạn giữa hai tag [ code] và [ /code] để định dạng cho phần code (hai tag không có khoảng trắng nào hết chứ không phải như được hiển thị ở đây).

thay đổi nội dung bởi: namqn, 10-06-2007 lúc 12:57 AM.
LeDuc vẫn chưa có mặt trong diễn đàn  
Old 11-06-2007, 03:08 PM   #214
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Timer ! Help !

Các bác có thể chỉ rõ hơn về timer ko? ví dụ như khi nào timer sẽ tràn( reset ) . giống như 8051( la TF =0)
Và muốn định khỏan thời gian đếm cho timer phải làm sao?
Ví dụ như : tạo một xung vuông với tần số 1Hx, cách tính thời gian set timer như thế nào ? giá trị nạp cho timer là bao nhiêu ?
Còn timer 16 bit .. sau khi reset có cần phải nạp lại gia trị ban đầu ko?( giống như 8051 vậy ..).. Ai có the so sanh giữa 8051 va 16f877 kô?
Mong các bác giúp đỡ sớm để em mau biết rõ hơn ...
Cam ơn các bác !

thay đổi nội dung bởi: LeDuc, 15-06-2007 lúc 03:17 PM.
LeDuc vẫn chưa có mặt trong diễn đàn  
Old 21-06-2007, 06:53 PM   #215
nguyen.geo
Đệ tử 2 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 27
:
Trích:
Nguyên văn bởi LeDuc View Post
Các bác có thể chỉ rõ hơn về timer ko? ví dụ như khi nào timer sẽ tràn( reset ) . giống như 8051( la TF =0)
Và muốn định khỏan thời gian đếm cho timer phải làm sao?
Ví dụ như : tạo một xung vuông với tần số 1Hx, cách tính thời gian set timer như thế nào ? giá trị nạp cho timer là bao nhiêu ?
Còn timer 16 bit .. sau khi reset có cần phải nạp lại gia trị ban đầu ko?( giống như 8051 vậy ..).. Ai có the so sanh giữa 8051 va 16f877 kô?
Mong các bác giúp đỡ sớm để em mau biết rõ hơn ...
Cam ơn các bác !
Theo mình thì bạn cần xem lại datasheet của 16F877A Từ Trang 47-60.
Mỉnh thấy nó nói khá rõ mà.
nguyen.geo vẫn chưa có mặt trong diễn đàn  
Old 26-06-2007, 11:54 AM   #216
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
To LeDuc:
Bạn nên sử dụng ngắt sẽ rất dễ dàng.
1. Nạp cho Timer giá trị cần tạo ra
2. Cho phép ngắt Timer(Ví dụ Timer0(8bit) hoặc Timer1(16bit))
3. Xử lý ngắt(Không cho phép ngắt để lấy giá trị và tính toán)
4. Cho phép ngắt
Giá trị nạp cho Timer được tính tương tự như đối với 8051.

Chúc bạn thành công!

An Hiệp
An Hiep vẫn chưa có mặt trong diễn đàn  
Old 26-06-2007, 12:01 PM   #217
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
Bạn chú ý đối với từng Timer thì việc nạp giá trị là khác nhau.
Ví dụ Timer0: 8bit = 256 giá trị
Nếu bạn sử dụng lệnh set_timer0(10); thì thời gian bạn thu được là 256-10 = 246 giá trị. Còn set_timer1(10); thì thời gian bạn thu được là 65536-10 =65526 giá trị.

Chúc bạn thành công!


An Hiệp
An Hiep vẫn chưa có mặt trong diễn đàn  
Old 27-06-2007, 10:32 AM   #218
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Cool Hỏi về ngắt trên chân RB4-RB7!!

Em viết chương trình như sau: chương trình dùng để chạy led thuận trên portD, khi có ngắt trên RB7 thì chạy led ngược lại.
Code:
/#include <16F877A.h>
#device *=16
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#use fast_io(d)
#use fast_io(e)

#byte intcon=0x000B
#bit RBIF=intcon.0

int8 const led[]={1,2,4,8,16,32,64,128};
int8 a=0,j=0,i=0;
int16 dem=0;
//========ham ngat timer0==========//
#int_rb
void ngat_rb()
 {
   for(j=8;j>0;j--)
    {
     output_d(led[j-1]);
     delay_ms(10);
    }output_d(0);RBIF=0;
 }
//===========ham chinh=============//
void main()
{set_tris_d(0);
 set_tris_b(0xff);
 enable_interrupts(global);
 enable_interrupts(int_rb);
ext_int_edge(L_TO_H );
 while(1)
 {   for(i=0;i<8;i++)
    {
     output_d(led[i]);
     delay_ms(10);
    }output_d(0);
 }
}
còn đây là sơ đồ mạch:



đầu tiên nó chạy thuận thì đúng rồii. khi bấm nut thì nó chạy ngược lại cũng đúng nhưng sau đó thì nó cứ chạy ngược mãi mà không chạy thuận lại. Em nghĩ khi nó chạy xong chương trình ngắt rồi thì nó sẽ thực hiện chương trình chính chứ. Ở đây hàm delay có gây ra lỗi ko?

Cho em Hỏi thêm 1 ý nữa: Ngắt sẽ xảy ra khi có chuyển trạng thái trên chân RB4-Rb7. vây nếu trong chương trinh ta thiêt lập là output và cho chuyển trạng thái bằng lệnh thì có xảy ra ngắt ko? Sự khác nhau giữa ngắt ngoài trên chân RBO và ngắt trên RB4->RB7 là gì?
dvnccbmacbt vẫn chưa có mặt trong diễn đàn  
Old 27-06-2007, 11:34 AM   #219
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi ngoalongdochanh View Post
Cám ơn nhh đã trả lời cho mình, do lần trước mình khai báo chưa đúng cách giữa 16f877A và *=16 đúng ra phải viết liền như bạn minh lại viết cách ra như thế này "16f877A *=16". Nhân tiện cho mình hỏi luôn ý nghĩa của việc khai báo "#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT"
sao mình khai báo #device 16F877*=16 ADC=8 mà nó vẫn báo:
"can not change device type this far into the code"
thanhk!
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 27-06-2007, 05:29 PM   #220
anh_gioi
Đệ tử 6 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 147
:
Trích:
Nguyên văn bởi nhh View Post
Chào cả nhà !

Sao không thấy bác nào post bài vào luồng này vậy kà !Trầm quá...!Trầm quá...!Hay cái CCS C này không hấp dẫn mọi người chăng!
Không ai viết gì, tớ vẫn post cho nó đỡ trầm....!

Đã ví dụ về ngắt Timer, sau đây là 2 ví dụ về ngắt ngoài trên chân RB0 và trên các chân RB4 đến RB7:

Chương trình sau dùng ngắt ngoài trên RB0 đếm số lần cái button được nhấn xuống, hiển thị lên led 7 đoạn (common cathode).Nếu số lần nhấn vượt quá 9, chương trình sẽ quay về hiển thị lên led từ số 1.
Code:
//*****************************************************************************
// Author  : nhh
// Date    : 03/04/06
// Hardware: PIC16F877A
//*****************************************************************************
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)
#byte portb=0x06
#byte portd=0x08
const unsigned char digital[]={0b00000110, 0b01011011, 0b01001111, 0b01100110,\
						0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};
                  // ma hoa digital duoi dang mang
// Chuong trinh ngat
#int_ext
void ngat_RB0()
{
int i;
   if(i<9)
      {
      portd=digital[i];
      ++i;
      }
   if(i==9)
      {
      i=0;
      }
}
// Chuong trinh chinh
main()
{
set_tris_b(0b00000001);
set_tris_d(0);
enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
portd=0b00111111;
while(true)
   {
   // chi doi ngat nen vong lap nay ko co gi ca !
   }
}
sao bai nay chỉ sủ dụng RB0 là chân vào thôi vậy.còn các chân khác sao lại không dc.
thank!
anh_gioi vẫn chưa có mặt trong diễn đàn  
Old 27-06-2007, 06:02 PM   #221
picpicpic
Đệ tử 2 túi
 
picpicpic's Avatar
 
Tham gia ngày: Jan 2006
Bài gửi: 36
:
Bác nhh này biến đi đâu lâu quá ko thấy xuất hiện, ko biết làm mod kiểu gì đây ???

To dvnccbmacbt: mô phỏng bằng proteus, bạn ko cần mắc thạch anh vào đâu.

To anh_gioi: thì chương trình đó chỉ viết cho ngắt RB0 mà bạn.
__________________
************************************************** **
The only wrong thing would be to deny what your heart truly feels!
************************************************** **
picpicpic vẫn chưa có mặt trong diễn đàn  
Old 27-06-2007, 06:39 PM   #222
LeDuc
Đệ tử 6 túi
 
LeDuc's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 150
:
Code:
#include <16F877A.h>
#device *=16 ADC=8
#fuses NOWDT,HS,NOPROTECT

#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(a)
#use fast_io(d)
#use fast_io(e)

#byte intcon=0x000B
#byte portb=0x6

#bit RB7 =portb.7
#bit RBIF=intcon.0
#bit RBIE=intcon.3
//-----------------------------
int8 const led[]={1,2,4,8,16,32,64,128};
int8 j=0,i=0;

//========ham ngat tren RB ==========//
#int_rb
void ngat_rb()
{
   if(rb7==0)
   for(j=8;j>0;j--)
   {
      output_d(led[j-1]);
      delay_ms(10);
   }
}
//===========ham chinh=============//
void main()
{
   set_tris_d(0);
   set_tris_b(0xff);
   enable_interrupts(global);
   enable_interrupts(int_rb);
   ext_int_edge(L_TO_H );
   while(true)
   { 
      for(i=0;i<8;i++)
      {
          output_d(led[i]);
          delay_ms(10);
      }
   }
}
Mình đã sửa lại đoạn code của bạn rồi ..thay đổi một chút thôi.
Mình đã kiểm tra và chạy ok rồi... Nhưng có lẽ dùng delay trong hàm ngắt là ko nên . Nên tìm 1 giải thuật khác , dịch bit chẳng hạn ...
Còn sự khác biệt giữa các ngắt :" bạn xem lại phía trên các anh có chỉ dẫn đó ...
hy vọng mọi người sẽ cùng nhau tìm hiểu nhiều hơn...có sai nhiều .. có sửa nhiều ..--->> tiến bộ nhiều (^_^)!!!
Rất cảm ơn vì đã gởi thắc mắc lên đây.. qua bài trên mình đã tìm hiểu thêm được nhiều điều mới..
__________________
_________________________________________________
Le Trung Duc
Industry Research & Application Center
NTT Institute of Hi_technolog
ltduc@ntt.edu.vn
leduc_cktd@yahoo.com.vn
http://www.nttc.edu.vn
CNC DIY : http://quangcaosanpham.com/shop/driverservo
0909300332
LeDuc vẫn chưa có mặt trong diễn đàn  
Old 28-06-2007, 12:03 AM   #223
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Em đã làm thử một bài tập về RB4-Rb7. Có phải chỉ khi nào các chân từ RB4-Rb7 là chân input thì mới có thể tạo ra ngắt được đựoc không? Nếu là output thì dù có chuyển trạng thái cũng không tạo ra ngắt, đúng không? Nếu vậy tại sao các chân này không gọi là ngắt ngoài nhỉ? Các bác giải thích giùm em với. Nếu có 1 đoạn code mẫu thì càng tốt. Cảm ơn các bác nhiều.
dvnccbmacbt vẫn chưa có mặt trong diễn đàn  
Old 28-06-2007, 12:14 AM   #224
picpicpic
Đệ tử 2 túi
 
picpicpic's Avatar
 
Tham gia ngày: Jan 2006
Bài gửi: 36
:
Trích:
Nguyên văn bởi dvnccbmacbt View Post
Em đã làm thử một bài tập về RB4-Rb7. Có phải chỉ khi nào các chân từ RB4-Rb7 là chân input thì mới có thể tạo ra ngắt được đựoc không? Nếu là output thì dù có chuyển trạng thái cũng không tạo ra ngắt, đúng không? Nếu vậy tại sao các chân này không gọi là ngắt ngoài nhỉ? Các bác giải thích giùm em với. Nếu có 1 đoạn code mẫu thì càng tốt. Cảm ơn các bác nhiều.
Tất nhiên, đã là ngắt RB4-RB7 thì nó phải là các ngõ input, ngắt RB0 cũng vậy. Ngắt RB0 đã gọi là ngắt ngoài rồi, chả lẽ lại gọi trùng tên, nên tiên sư microchip nó đặt là ngắt RB.
http://www.picvietnam.com/forum/show...p?t=357&page=2
__________________
************************************************** **
The only wrong thing would be to deny what your heart truly feels!
************************************************** **
picpicpic vẫn chưa có mặt trong diễn đàn  
Old 28-06-2007, 01:10 AM   #225
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Các bác giúp em một câu nữa nhé. Em thắc mác chỗ TIMER1. Chế độ đếm đồng bộ là sao và không đồng bộ là sao? Em thấy trong các tài liệu và HELP giải thích dơn giản quá chẳng hiểu gì cả. Các bác cho em xin một ví dụ và ứng dụng của món này với. Cảm ơn các bác nhiều.
dvnccbmacbt vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá


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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 26 07-05-2024 08:55 AM
TUT về USART trong PIC16F877A mafd_47a MPASM 11 04-05-2024 04:43 AM
Lập nhóm PIC16F877A nhh Cơ bản về vi điều khiển và PIC 285 08-03-2017 11:08 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


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


Đượ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