PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và 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

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 22-06-2007, 01:58 AM   #1
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
HỎi về "Previous identifier must be a pointer"?

Đây là chương trinh của em dùng chạy led?
Code:
#include <16F877A.h>
#device *=16 ADC=8
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)
#byte pb=0x106
#byte pa=0x05
#byte pc=0x07

//============Khai bao bien toan cuc====================//
int8 const led[]={1,2,4,8,16,32,64,128};
int i;
//=============khai bao ham====================//
void led();
void led1();
//============================================//



void main()
{
 while(1)
 {
  set_tris_b(0);pb=0;
  set_tris_c(0);pc=0;
  led ();
  led1 ();
 }
}

//=============chuong trinh con=================//

//===========nhay 1 chieu tu B-C============//
void led()
 {// int8 const led[]={1,2,4,8,16,32,64,128},a;
   for(i=0;i<8;i++)
    {
     pb=led[i];
     delay_ms(50);
    }pb=0;
   for(i=0;i<8;i++)
    {
     pc=led[i];
     delay_ms(50);
    }pc=0;
 }

//=============nhay 1 chieu tu C-B===========//
void led1()
 {// int8 const led[]={1,2,4,8,16,32,64,128},a;
   for(i=8;i>=1;i--)
    {
     pc=led[i-1];
     delay_ms(50);
    }pc=0;
   for(i=8;i>=1;i--)
    {
     pb=led[i-1];
     delay_ms(50);
    }
 }
Nó báo lỗi "Previous identifier must be a pointer" ở những chổ pb=led[i-1];
pc=led[i];
Chương trình trên nếu em khai báo int8 const led[]={1,2,4,8,16,32,64,128},a;
ở mỗi hàm con thì không bị lỗi nhưng khi đưa ra khai báo toàn cục thì lỗi như vậy. Mấy bác cao thủ giúp em với. Em cảm ơn nhiều.
dvnccbmacbt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-06-2007, 02:22 AM   #2
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
Bạn nên đọc tài liệu hướng dẫn của CCS C (download ở trang này http://www.ccsinfo.com/downloads.php, chọn link Compiler Manual bên tay phải). CCS C có sẵn các hàm để xuất ra hay đọc vào ở các port từ A đến K (tùy chip có bao nhiêu port). Ví dụ, để xuất 0x05 ra port A thì có thể viết:
Code:
OUTPUT_A(0x05);
Lệnh xuất led[i] ra port C của bạn có thể viết:
Code:
OUTPUT_C(led[i]);
Hiếm có ai viết code như bạn lắm, vì các thanh ghi nằm ở đâu thì trình biên dịch có thể dựa vào các tập tin include hoặc nhúng vào trong trình biên dịch, không có ai phải ngồi khai báo lại địa chỉ của các thanh ghi như bạn đâu. Bạn làm như vậy lại xung đột với việc tự động chọn bank dữ liệu của trình biên dịch.

Bạn đọc tài liệu hướng dẫn của trình biên dịch để hiểu cách dùng nó, đó là cách chính quy nhất.

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   Trả Lời Với Trích Dẫn
Old 22-06-2007, 09:38 AM   #3
dvnccbmacbt
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 65
:
Cool "Previous identifier must be a pointer"?

Em đã sửa lại chương trình theo hướng này rồi.
Nhưng em không biết tại sao có vẫn báo lỗi : "Previous identifier must be a pointer"
Code:
#include <16F877A.h>
#device *=16 ADC=8
#fuses NOWDT,HS,NOPROTECT
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(c)

//============Khai bao bien toan cuc====================//
int8 const led[]={1,2,4,8,16,32,64,128};
int i;
//=============khai bao ham====================//
void led();
void led1();
//============================================//
//==================ham chinh==================//
void main()
{
 while(1)
 {
  set_tris_b(0);output_b(0x00);
  set_tris_c(0);output_c(0x00);
  led ();
  led1 ();
 }
}

//=============chuong trinh con=================//

//===========nhay 1 chieu tu B-C============//
void led()
 {// int8 const led[]={1,2,4,8,16,32,64,128},a;
   for(i=0;i<8;i++)
    {
     output_b(led[i]);
     delay_ms(50);
    }output_b(0);
   for(i=0;i<8;i++)
    {
     output_c(led[i]);
     delay_ms(50);
    }output_c(0);
 }

//=============nhay 1 chieu tu C-B===========//
void led1()
 {// int8 const led[]={1,2,4,8,16,32,64,128},a;
   for(i=8;i>=1;i--)
    {
     output_c(led[i-1]];
     delay_ms(50);
    }output_c(0);
   for(i=8;i>=1;i--)
    {
     output_b(led[i-1]);
     delay_ms(50);
    }
 }
Nếu khai báo biến cục bộ như chỗ in đậm thì không có lỗi. CÒn đưa ra biến toàn cục thì lỗi như vậy tại những chỗ in đậm (i, i-1) .Em lục hết mấy bài viết rồi thấy ai viết output_B(led[i ])cũng chạy cả mà sao em lại không chạy. Các bác giúp em với.
dvnccbmacbt 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à 08:07 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