PIC Vietnam

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

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

Lỗi lập trình ngôn ngữ cấp cao Những lỗi trường gặp trong lập trình. Khóa luồng khi bug được lỗi.

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 30-10-2008, 11:12 PM   #1
vohieuthao1
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 21
:
[CCS C] Khai báo biến

Mình đọc kết quả ADC tính toán xuất kết quả ra LCD, mình muốn dùng ngắt để mỗi khi tác động thì LCD hiển thị giá trị 0 và VDK củng lưu lại giá trị ADC để sau khị thoát khỏi ngắt thì dùng. Giá trị này được update khi ngắt được gọi lần nữa. Mình viết code nhưng khi mô phỏng thì dường như ngắt không chạy. Ai biết chỉ mình với. Hiện mình dùng RB7 nối nguồn thông qua nút ấn để thay đổi trạng thái chân RB7. Không biết mình mắc vậy đúng không?

code:

#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#device *=16 adc=10
#use delay(clock=4000000)
#include <thao2.c>// LCD 4bit.c
#use rs232(baud=9600,parity=n,xmit=pin_C6,rcv=pin_C7)



#INT_RB
Void RB_Chuan_Zero ( )
{
float a=0;
a=(float)read_adc();

}

void main()
{
trisb=0xF0;
enable_interrupts ( INT_RB ) ;
enable_interrupts ( GLOBAL ) ;

{
float value=0,a=0;

trisa=0xFF;
trisd=0x00;

LCD_Init ( );
LCD_putcmd(0x84);
LCD_putchar("KHOI LUONG");
LCD_putcmd(0xCA);
LCD_putchar(" g");

start:
setup_adc_ports( ALL_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_us(10);
value=(float)read_adc();
value=(value-a)*0.977;
LCD_putcmd(0xC5);
printf(LCD_putchar, "%f", value );
delay_ms( 500 );

goto start;
}
}
vohieuthao1 vẫn chưa có mặt trong diễn đàn  
Old 31-10-2008, 10:32 AM   #2
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
#INT_RB
Void RB_Chuan_Zero ( )
{
float a=0;
a=(float)read_adc();

}
đây là biến cục bộ, liệu rời khỏi chương trình này thì nó có còn giá trị nữa ko ?
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn  
Old 31-10-2008, 12:00 PM   #3
vohieuthao1
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 21
:
Nhưng khi mình khai báo biến a ở chương trình chính, khi biên dịch thì CCS báo lỗi a không được dịnh nghĩa và chỉ vào dòng lệnh "a=(float)read_adc();". Mình không biết làm sao nên khai thêm 1 biến trên đó.
vohieuthao1 vẫn chưa có mặt trong diễn đàn  
Old 31-10-2008, 01:21 PM   #4
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
bạn phải khai báo a là biến toàn cục (nằm ngoài tất cả các chương trình kể cả main)
float a=0;
void main()
{
...
}
mà chỉ cần khai báo int16 là được, cần chi float
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn  
Old 31-10-2008, 09:50 PM   #5
vohieuthao1
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 21
:
Mình sửa lại biên dịch vẫn bị lỗi đó. Mình bữa trước dịch rồi mô phỏng thành công, nhưng hôm nay cũng đoạn chương trình này nhưng báo lỗi mình không biết tại sao, ai biết chỉ mình với.
vohieuthao1 vẫn chưa có mặt trong diễn đàn  
Old 02-11-2008, 07:22 PM   #6
0903579509
Đệ tử 4 túi
 
Tham gia ngày: Mar 2007
Nơi Cư Ngụ: Da Nang
Bài gửi: 69
:
Exclamation

Bạn nên khai báo biến Float a tại đoạn đầu chương trình và bỏ tất cả các khai báo biến float a Trong main và #INT RB như sau thi biên dịch không bị lỗi:

#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#device *=16 adc=10
#use delay(clock=4000000)
#include <thao2.c>// LCD 4bit.c
#use rs232(baud=9600,parity=n,xmit=pin_C6,rcv=pin_C7)

float a;

#INT_RB
Void RB_Chuan_Zero ( )
{
// float a=0; ( bỏ dòng này)
a=(float)read_adc();

}

void main()
{
trisb=0xF0;
enable_interrupts ( INT_RB ) ;
enable_interrupts ( GLOBAL ) ;

{
float value=0 ;//a=0 (bỏ biến này)

trisa=0xFF;
trisd=0x00;

LCD_Init ( );
LCD_putcmd(0x84);
LCD_putchar("KHOI LUONG");
LCD_putcmd(0xCA);
LCD_putchar(" g");

start:
setup_adc_ports( ALL_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
delay_us(10);
value=(float)read_adc();
value=(value-a)*0.977;
LCD_putcmd(0xC5);
printf(LCD_putchar, "%f", value );
delay_ms( 500 );

goto start;
}
}

Còn ý đồ viết chương trình của bạn tôi chưa hiểu lắm.
Chúc vui!
0903579509 vẫn chưa có mặt trong diễn đàn  
Old 04-11-2008, 12:21 AM   #7
vohieuthao1
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 21
:
Thanks bạn.
vohieuthao1 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


Múi giờ GMT. Hiện tại là 12: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