PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   CCS C cho PIC/dsPIC phiên bản 4.xxx (http://www.picvietnam.com/forum/showthread.php?t=2296)

vinhlec4 08-12-2009 01:44 PM

mình đang cân tập lệnh trong ccs để viết chương trình đây nhung không biết lam sao. ai có cho minh với?
cho mình hoi với:#FUSES NOWDT , HS , NOPROTECT
dòng tren co nghĩa là j? lam sao biết các chế độ đó

vinhlec4 08-12-2009 01:46 PM

ai co đã dùng pic8f4331 roi chỉ dạy em với? làm sao để viết chuong trình pwm 4331 day?vì mình chưa biết tập lệnh mà:
các bác dạy e với

ngoyeungoc 11-12-2009 07:32 AM

Không biết mình hỏi không rõ ràng hay các cao thủ ít vào luồng này nữa hay sao mà chẳng thấy ai giúp mình hết vậy?Tại mình đang làm đồ án về điều khiển động cơ bước với 5 switch:
SW1: stop
SW2: quay cùng chiều kim đồng hồ(KDH).
SW3: quay ngược chiều KDH.
SW4: quay cùng chiều KDH có tốc độ tăng dần mỗi lần ấn.
SW5: quay ngược chiều KHD tốc độ tăng dần sau mỗi lần ấn.
Mình mới tìm hiểu về PIC, mình đã tự tìm hiểu, đã cố gắng lập trình nhưng chỉ làm được 3 điều khiển đầu tiên, điều khiển tốc độ động cơ tăng dần mình chưa làm được.Vì sắp bảo vệ đồ án rồi nên mình rất mong các bạn có thể giúp mình.Mình không hi vọng các bạn sẽ làm tất cả cho mình: viết code,vẽ mạch,...(phải có cái gì đó của mình nữa chứ), mình chỉ mong các bạn có thể hướng dẫn cho mình cách dùng chức năng PWM của con PIC để điều khiển tốc độ tăng dần cho step motor.Rất mong các bạn có thể giúp mình sớm sớm.Thời gian không còn nhiều nữa.Mình thực sự bó tay rồi.Chưa có tiền mua mạch nạp nữa chứ,hỏi mượn nhưng chờ đứa bạn làm xong mới cho mình mượn.Mình cảm ơn các bạn rất nhiều.

8051topic 13-12-2009 10:59 AM

Hic, mình cũng đang tìm hiểu về PWM (CCP), mình có đoạn code này bạn thử xem sao nha.
Code:

  // Setup the CCP1 for PWM
  setup_ccp1(CCP_PWM);
  setup_timer_2(T2_DIV_BY_1, 255, 1);
  set_pwm1_duty(100);    //cái này là giá trị duty, bạn thay đổi giá trị này nhé, từ 0 -> 255

Về mạch nạp bạn có thể làm mạch PG2C để dùng, mạch này đơn giản lại không cần chip Master chỉ có điều PC của bạn phải có cổng COM, cáp USB-COM không dùng được với mạch này nha.
Chúc bạn sớm hoàn thành đề tài.

lkkt_group 14-12-2009 09:59 AM

Giup xem xet loi trong code giup em voi
 
Em đang làm mạch điện điều khiển motor bằng ngắt timer.Em đang dùng Pic C 4.069Em dùn. g timer0 de ngat. Tuy nhiên không hiểu sao không thấy hiển thị ra led sau thời gian 6 giay em đã set (đã test thử các chương trình in put output mấy cổng đó thấy ok) chắc tại ngắt timer có vấn đề nhưng không tìm ra lỗi. Các sư huynh nào biết tham khảo rồi chỉ dùm với. Cảm ơn rất nhiều http://www.picvietnam.com/forum/images/icons/icon9.gif

Em gửi file lập trình và sơ đồ mạch cho các sư huynh tham khảo

http://www.4shared.com/file/17243005...ter_PicC1.html
http://www.4shared.com/file/17243006...lap_trinh.html
http://www.4shared.com/file/17243005..._roaster1.html

Các sư huynh chịu khó down về nghen

necati 07-01-2010 04:41 AM

pcwhd
 
http://www.fileden.com/files/2010/1/4/2713447/C4104.rar
password: charon

http://rapidshare.com/files/330322076/C4104.rar
same pw unlimited

http://www.megaupload.com/?d=041Y86AW

http://www.sonsivri.com/forum/index.php?board=3.0

Kevin 03-02-2010 03:02 PM

Trích:

Nguyên văn bởi necati (Post 32887)

password la gi`?

hangocminh1989 08-04-2010 08:33 PM

Trích:

Nguyên văn bởi Kevin (Post 33511)
password la gi`?

charon.....pass ngay đó mà sao ko đọc??????????

haruoi 08-04-2010 11:53 PM

Các bác hướng dẫn e cách lập trình cho dispic 30f4011 bằng CCS với. E cài CSS bản 4.023 nhưng không hỗ trợ cho dispic. Thanks nhiều!

hoanghuy911 19-04-2010 01:03 AM

ADC và PWM điều khiển độ sáng 1 led công suât.
 
Xin chào các cao thủ trên diễn đàn PIC VIỆT NAM mình là người mới tìm hiểu về PIC và đang dùng PIC16F877A mình muốn hỏi chương trình dùng tín hiệu vào ADC và dùng PWM để điều khiển độ sáng cho một con LED công suất. Bác nào có chương trình mẫu thì cho mình tham khảo với đây là chương trình của mình nhưng khi mô phỏng thấy im re biên dịch thì không có lỗi.
Phần cứng: Nút nhấn trên RB0 và biến trở nối với nguồn 5V và cho vào AN0.
Tạm thời mình chưa tìm hiểu cách post hình lên diễn đàn và đóng khung code nên mới viết như vậy mong mọi ng thông cảm. Mong hồi âm và xin chân thành cảm ơn!

code______________________________________________ _____________________

#include "C:\Documents and Settings\SMART HOME\Desktop\LAP TRINH PIC\CCS for PIC16F877A\PWM\cht\main.h"
// su dung adc o che do 8 bit
// chuong chinh doc 3 moc gia tri adc xuat ra tuong ung 3 muc sang cua den led
byte value;
void main()
{
byte value;

setup_adc_ports(AN0); // Thiet lap cong AN0 la cong vao ADC.
setup_adc(ADC_CLOCK_INTERNAL ); // Thiet lap che do xung mo rong
// setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(0);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// TODO: USER CODE!!
set_tris_b(0x0f);
while(true)
{
if(input(PIN_B0)==1) //Tin hieu cam bien

{
set_adc_channel( 0 );
value = read_adc();
if((value>0)&&(value<100))
set_pwm1_duty(50);
else if((value>100)&&(value<200))
set_pwm1_duty(150);
else
set_pwm1_duty(255);
delay_ms(10);
}
else
set_pwm1_duty(0);
}

}
__________________________________________________ _______________________

hoanghuy911 19-04-2010 01:19 AM

Delay với thời gian thực
 
Thêm một điều nữa mình dùng PIC16F877A và thạch anh 4Mhz để cho led sáng trong 1s tắt trong 1s thì mình delay_ms(?) mình khai báo là delay_ms(1000) mà mô phỏng trên ông Proteus nó vẫn cứ nháy loạn hết cả lên mà không đúng 1s. Xin các bạn giải thích dùm mình với? Xin chân thành cám ơn.

Hard 03-05-2010 06:50 AM

1 Attachment(s)
Trích:

Nguyên văn bởi hoanghuy911 (Post 35266)
Xin chào các cao thủ trên diễn đàn PIC VIỆT NAM mình là người mới tìm hiểu về PIC và đang dùng PIC16F877A mình muốn hỏi chương trình dùng tín hiệu vào ADC và dùng PWM để điều khiển độ sáng cho một con LED công suất. Bác nào có chương trình mẫu thì cho mình tham khảo với đây là chương trình của mình nhưng khi mô phỏng thấy im re biên dịch thì không có lỗi.
Phần cứng: Nút nhấn trên RB0 và biến trở nối với nguồn 5V và cho vào AN0.
Tạm thời mình chưa tìm hiểu cách post hình lên diễn đàn và đóng khung code nên mới viết như vậy mong mọi ng thông cảm. Mong hồi âm và xin chân thành cảm ơn!

code______________________________________________ _____________________

#include "C:\Documents and Settings\SMART HOME\Desktop\LAP TRINH PIC\CCS for PIC16F877A\PWM\cht\main.h"
// su dung adc o che do 8 bit
// chuong chinh doc 3 moc gia tri adc xuat ra tuong ung 3 muc sang cua den led
byte value;
void main()
{
byte value;

setup_adc_ports(AN0); // Thiet lap cong AN0 la cong vao ADC.
setup_adc(ADC_CLOCK_INTERNAL ); // Thiet lap che do xung mo rong
// setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(0);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

// TODO: USER CODE!!
set_tris_b(0x0f);
while(true)
{
if(input(PIN_B0)==1) //Tin hieu cam bien

{
set_adc_channel( 0 );
value = read_adc();
if((value>0)&&(value<100))
set_pwm1_duty(50);
else if((value>100)&&(value<200))
set_pwm1_duty(150);
else
set_pwm1_duty(255);
delay_ms(10);
}
else
set_pwm1_duty(0);
}

}
__________________________________________________ _______________________

Hi,
Đôi khi mô phỏng Protues không chạy nhưng thực tế lại chạy ngon ơ đó. Protues có một lỗi khi mô phỏng PWM, để khắc phục trước mắt xem chương trình của bác có chạy không thì bác thêm vào một dòng setup_timer_2(xxx) ngay sau khi thực hiện set_pwm1_duty(xx).
Để khắc phục lỗi củ chuối này của Protues, bác down file Pic16.dll sau và thay thế file Pic16.dll trong thư mục cài đặt. Lúc này không cần phải setup_timer_2(xx) nữa.
Thân ái.

hatbui 04-05-2010 12:57 PM

giúp em lỗi của chương trình
 
1 Attachment(s)
Chào các bác

Em đang tập viết chương trình dùng CCSC

chương trình đơn giản bên dưới. Compile không báo lỗi nhưng khi chạy mô phỏng thì không chạy/

Code:

#include <16f877A.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT,
#use delay(clock=20000000)


//===========Chuong trinh chinh================
void main()
{
unsigned char i;

While(true)
{
for (i=0x01;i<0x80;i++)
{
PORTB=i;
delay_ms(100);
}
for (i=0x80;i>0x01;i--)
{
PORTB=i;
delay_ms(100);
}
}
}

Các bác giúp em với.

trieucn 26-05-2010 05:50 PM

Alo! có ai biết trong CCS, hàm so sánh xem xâu S2 có trong xâu S1 là j` không ạ?
Sử dụng như thế nào ạ?
Em đọc trong help thì hình như là hàm strstr();
Nhưng em so sánh ko thành công

nguyenvu149 05-06-2010 12:25 PM

Chào mọi người, mình mới bắt đầu nghiên cứu về PIC, hiện tại cũng đang cài đặt và sử dụng CCS 4.65, tuy nhiên vì chưa biết gì nên lúc vào thử viết code thì không biết phải viết ở mục nào, chọn PIC trong CCS ra sao, liên kết với MPLAB như thế nào, sau khi biêt xong thì dịch ra file cho PIC như thế nào, file này cuối cùng có phải là nạp vào PIC để mô phỏng trong protues không?

Ai biết chỉ giáo dùm với? chỉ cần viết cũng được, không cần minh họa hình ảnh.

tungtot_vl 05-06-2010 01:02 PM

led
 
Trích:

Nguyên văn bởi hatbui (Post 35676)
Chào các bác

Em đang tập viết chương trình dùng CCSC

chương trình đơn giản bên dưới. Compile không báo lỗi nhưng khi chạy mô phỏng thì không chạy/

Code:

#include <16f877A.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT,
#use delay(clock=20000000)


//===========Chuong trinh chinh================
void main()
{
unsigned char i;

While(true)
{
for (i=0x01;i<0x80;i++)
{
PORTB=i;
delay_ms(100);
}
for (i=0x80;i>0x01;i--)
{
PORTB=i;
delay_ms(100);
}
}
}

Các bác giúp em với.

thêm dòng lệnh là chạy được
set_tris_b(0x00);

tranquoclap 09-06-2010 02:06 PM

cho em xin link down ccs c với các bác ơi!!!
 
anh em nào có link down ccs c post lại cho mình với!!! link bác F post từ đời nào rồi, giờ ko down dc!

pocolo276 21-06-2010 06:47 PM

1 Attachment(s)
là gà Pic.Nên cho mình hỏi lỗi này trong CCS

bean984 11-08-2010 04:12 PM

xin các bác giải thích các dùng watchdog hiệu quả?
nếu có ví dụ kèm theo thì tốt quá.thấy mọi người nói cái này rất quan trọng nhưng khi hướng dẫn thì không thấy các bác nhắc tới.
thanks mọi người!

bean984 26-08-2010 03:07 PM

cac cao thủ giấu bài kinh quá
không ai giúp đỡ mình sao

gawafer 06-09-2010 12:28 PM

Các bác ơi giúp em với. em muốn lập trình cho led ma trận chạy chữ với pic6F877A bằng ngôn ngữ C ,em không biết lập trình như thế nào các bác giúp em với
Địa chi mail của em : gawafer@yahoo.com

Mr.Bi 06-01-2011 10:04 AM

Trích:

Nguyên văn bởi pocolo276 (Post 36872)
là gà Pic.Nên cho mình hỏi lỗi này trong CCS

chữa lại (bỏ 2 dòng đó đi)
Code:

// long CCP_1
 // long CCP_2

tui không hiểu vì sao trong thư viện của u lại có vậy ,vì tui nhìn dòng bên dưới thì thấy đã định nghĩa
Code:

# byte CCP_1 ...
# byte CCP_2


Mr.Bi 06-01-2011 10:05 AM

Trích:

Nguyên văn bởi nguyenvu149 (Post 36543)
Chào mọi người, mình mới bắt đầu nghiên cứu về PIC, hiện tại cũng đang cài đặt và sử dụng CCS 4.65, tuy nhiên vì chưa biết gì nên lúc vào thử viết code thì không biết phải viết ở mục nào, chọn PIC trong CCS ra sao, liên kết với MPLAB như thế nào, sau khi biêt xong thì dịch ra file cho PIC như thế nào, file này cuối cùng có phải là nạp vào PIC để mô phỏng trong protues không?

Ai biết chỉ giáo dùm với? chỉ cần viết cũng được, không cần minh họa hình ảnh.

đọc lại bài 1 của luồng này

quangvanvo 09-01-2011 09:59 AM

các anh chị ơi em dịch chương trình thì được nhưng nó cứ báo warning la sao nhưng vẫn dich sang file de chạy trên prôtust được

bean984 15-02-2011 10:17 AM

mọi người cho mình hỏi dòng PIC nào hỗ trợ 2 cổng USART vây?
Thanks!

phu_vinh77 19-03-2011 04:01 PM

Các anh các bạn các vị tiền bối ơi, sao em đọc thấy nhiều topic nói mà ko thấy trả lời.
CCS có hổ trợ compiler cho dsPIC ko vậy ạ.
Em cảm ơn.

hamster.khin 04-06-2011 10:08 AM

giúp code điều khiển động cơ
 
Trích:

Nguyên văn bởi popeye_ts22 (Post 18497)
Chào các bác.Có chút vướng mắc,các bác giúp em với.
Mục đích:Điều khiển động cơ phản hồi tốc độ về LCD
Thực hiện:Điều khiển được động cơ nhưng chưa phản hồi đc.
Em không biết sau mỗi lần gọi ngắt có cần phải để 1 vòng while() để đợi ngắt không.
Em dùng 16F877A,bây giờ điều khiển 1 kênh đã phải cần:TIMER2-PWM,TIMER 0:Đếm xung,TIMER1:Đếm thời gian,dùng để tính toán vận tốc.
Vậy nếu em dùng động cơ thứ 2 phải làm thế nào,có thuật toán nào ko ạ.
Có đoạn code và chương trình mô phỏng,các bác xem cho em:
Code:

#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=8000000)
#include <lcd_lib_4bit.c>
int16 cnt,cnt2,xung,v;
int8 a,b,c;
#int_TIMER0
void  TIMER0_isr(void) //TIMER0 dem xung ve
{
set_timer0(255);
if(tmr0if==1)
 {
 cnt++;
 tmr0if=0;
 }
}
#int_TIMER1          //TIMER1 dem tgian,tinh van toc
void  TIMER1_isr(void)
 {
 set_timer1(5565);
 if(tmr1if==1)
  {
    xung=get_timer0()*4; 
    v=(xung*60)/((100*60*0.001));
    tmr1if=0; 
  }
 }
void Lcd()
{
while(1)
  {
  a=(int)v/100;
  b=(int)(v-a*100)/10;
  c=(int)v%10;
  LCD_putcmd(0xC0);
  LCD_putchar("xung encoder");
  LCD_putcmd(0x80);
  LCD_putchar(a+48);
  LCD_putcmd(0x81);
  LCD_putchar(b+48);
    LCD_putcmd(0x82);
    LCD_putchar(c+48);
  } 
}
void Ngat()
{
  set_timer0(255);
  setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_4);
  enable_interrupts(INT_TIMER0);
  setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
  set_timer1(5565);
  enable_interrupts(INT_TIMER1);
  enable_interrupts(GLOBAL);
  }
void PWM()
{
  setup_timer_2(T2_DIV_BY_16,255,1);
  setup_ccp1(CCP_PWM);
  setup_ccp2(CCP_PWM);
  set_pwm1_duty(1000);
  set_pwm2_duty(1022); 
}
void main()
{
  set_tris_d(0);
  set_tris_a(0xff);    //Cho tin hieu di vao RA4
  set_tris_c(0);
  LCD_Init();
  PWM();
  Ngat();
  Lcd();
  delay_ms(100);
}


bạn có thể up file lên được không cho mình xem với, mình cop code về sao không buil được file hex, xem giúp mình với !

auto_tvt 09-08-2011 12:08 AM

phần mềm lập trình cho pic Mikro-C
 
minh mới tập tành học vxl, va hiện mình Mikro-C , nhưng vì mới làm quen vxl nên lang thang trên mạng nhưng chẳng có code cho nó gì hết ah,
sao mọi người không ai dùng phần mềm này ah,
qua đây cho mình hỏi có ai dùng thi chỉ giáo cho mình với.. thanks mọi người.
mail của em: auto.tvt@gmail.com

caremlanh 09-08-2011 03:59 PM

Trích:

Nguyên văn bởi auto_tvt (Post 47940)
minh mới tập tành học vxl, va hiện mình Mikro-C , nhưng vì mới làm quen vxl nên lang thang trên mạng nhưng chẳng có code cho nó gì hết ah,
sao mọi người không ai dùng phần mềm này ah,
qua đây cho mình hỏi có ai dùng thi chỉ giáo cho mình với.. thanks mọi người.
mail của em: auto.tvt@gmail.com

tốt nhất là dùng CCS đi, ko thì HT PIC chứ Micro C chả hỏi được ai đâu

nguyenminhthi90 03-10-2011 02:28 PM

nhờ các pro chỉ giúp phần RS232
 
1 Attachment(s)
chào các bác!
em tập theo cái tuto của pác linh thì đã có thể gửi ký tự từ PC lên LCD bình thường rồi, nhưng phần ngược lại, dù có printf cỡ nào nó cũng không truyền được vào hyper terminal được ah :(. cái này em mô phỏng bên con 8051 thì ngon lành cành đào ạ, hix :|
sau đây là code của e:

#include <16f877a.h>
#include <def_877a.h>
#use delay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9)

#include <lcd_lib_4bit.c>
//#include <input.c>

int8 count=0;
int1 t=1;

#INT_RDA
Receive_isr() {
char c;
count++;
c = getc();
putc(c);
if (c=='z')
{
LCD_putcmd(0x01); //Clear Screen
count=0;
}

if ((count<=16) && (c!='z'))
{
LCD_putchar(c);
}
if ((count > 16) && (t==1))
{
count=1;
LCD_putcmd(0xc0);
LCD_putchar(c);
t=0;
}
if ((count > 16) && (t==0))
{
count=1;
LCD_putcmd(0x01);
LCD_putchar(c);
t=1;
}
}
void main()
{

enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
lcd_init();
lcd_putcmd(0x01);
lcd_putcmd(line_1);
printf("hello!");
while (1) {}
}

em có gửi theo mấy cái file, mọi người chỉ giúp e nhé :).

ngdnhanbk 11-01-2012 02:59 AM

Trích:

Nguyên văn bởi dungnt7 (Post 17765)
Theo mình biết thì giá trị value được biểu diễn bằng 10bit, giá trị lớn nhất của value là 1024.

Value không phải lúc nào cũng nhỏ hơn period, theo datasheet thì (pwm_duty/pwm_period)=(value/(4*(tmr2+1))).

Đoạn chương trình sau xuất xung PWM 50%, f=5Khz, ở chân CCP1
void main()
{
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,249,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(512);
set_tris_c(0x00);
}


Vấn đề của bạn ngtdung.nguyen mình cũng chưa hiểu vì sao bị như vậy.

Không cần set_tris_c(0x00) liệu có ảnh hưởng gì ko bạn

ngdnhanbk 11-01-2012 03:13 AM

Trích:

Nguyên văn bởi namqn (Post 18415)
Có nhiều vấn đề liên quan đến câu hỏi của bạn mà hiện giờ tôi cũng chưa có thời gian tìm lại các tài liệu. Bạn có thể xem qua phần "Common Design Mistakes" trong tài liệu "ABCs of ADCs" của National Semiconductor (link download dưới đây), để từ đó tránh được một số lỗi thiết kế thường gặp. Điều này đôi khi có thể giúp bạn có được một thiết kế đủ tốt, chứ chưa cần đến những kỹ thuật phức tạp khác.

http://www.national.com/appinfo/adc/...Cs_of_ADCs.pdf

Thân,

Anh có thể up lại tài liệu trên được không, link die rồi ạ

DunLop 30-03-2012 12:27 PM

đo nhiệt độ dùng lm335 và 16f877a hiển thị led 7 đoạn
 
1 Attachment(s)
e mới học vdk...đang viết 1 mạch đo nhiệt độ dùng lm335 và 16f877a hiển thị led 7 đoạn
ko bik đoạn code e viết sai chỗ nào, mong ae giúp cho..thanks
# include <16f877a.h>
# fuses hs,nowdt,nolvp
# DEVICE 16f877a*=16 ADC=10
# use delay (clock=4000000)

int Maled[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X9 0};
int hc=0,hdv=0,nhietdo,giatriadc;
# int_timer1
void ngattimer()
{
set_adc_channel(0);
delay_ms(10);
giatriadc=read_adc();
nhietdo=((giatriadc-558.558)/2.048);
hc=nhietdo/10;
hdv=nhietdo%10;
set_timer1(40536);
}
void hienthi();
void main()
{
set_tris_a (0xff);
set_tris_b (0x00);
set_tris_c (0x00);
setup_timer_1(t1_internal|t1_div_by_8);
set_timer1(40536);
enable_interrupts(int_timer1);
enable_interrupts(global);
setup_adc(adc_clock_internal);
setup_adc_ports(AN0);

while(1)
{

hienthi();
}

}
void hienthi()
{

output_high (pin_c0);
output_low (pin_c1);
output_b (Maled[hc]);
delay_ms(5);
output_high (pin_c1);
output_low(pin_c0);
output_b (Maled[hdv]);
delay_ms (5);


}

sơ đồ mạch:

lt10dkdt 06-04-2012 10:42 AM

Trích:

Nguyên văn bởi tyhon (Post 15992)
Em có đoạn code sau nhưng em không hiểu là lệnh adcHI và adcLO làm gì (với khai báo
char adcHI,adcLO).Anh nào giải thích hộ em

Code:

  while(TRUE)
        {
              adcValue = read_adc(); // Get ADC reading
 
              adcHI = (char)((adcValue >> 5)& 0x1f);     
              adcLO = (char)((adcValue & 0x1f)|0x80);   
                     
              putc(adcHI); 
              putc(adcLO); 
 
              delay_ms(10);  // Preset delay, repeat every 10ms
        }
}


em có đoạn code sau.tình hình là như thế này.em kết hợp nút ấn bên ngoài với ngắt. đoạn nhấp nháy thì oke hết rùi.nhưng khi khai báo ở void main thì toàn báo lỗi ở *case" ai biết chỉ dùm em với.em đang học về pic thôi.tim mãi mà không ra:

#include "16f877a.h"
#use delay(clock=20000000)
#int_rb

unsigned char x,i,a,b,tre;
int16 mode;

void trai()// chuong trinh con nhay trai sang
{

x=0x01;
output_d(x);
delay_ms(tre);
for(i=1;i<=7;i++)
{x=x<<1;
output_d(x);
delay_ms(tre);
}
}

void phai()//chuong trinh con nhay phai sang
{

x=0x80;
output_d(x);
delay_ms(tre);
for(i=1;i<=7;i++)
{
x=x>>1;
output_d(x);
delay_ms(tre);
}
}

void trong() //chuong trinh con nhay trong ra
{
a=0x01;
b=0x80;
for(i=1;i<=7;i++)
{
a<<=1;
b>>=1;
output_d(a|b);
delay_ms(tre);
}
}
void ngat()
{
if(input(pin_b0))
if(mode<2)mode++;//chuyen che do tang len o b0
if(input(pin_b1))
if(mode<0 )mode--;//chuyen che do tang len o b1
if(input(pin_b2))
if(tre<100) tre=tre+100;//tang thoi gian tre cho led
if(input(pin_b3))
if(tre>100) tre=tre-100;//giam thoi gian tre cho led

}

void main()
{
set_tris_b(0xff);
enable_interrupts(int_rb);
enable_interrupts(GLOBAL);

mode=0;
while (true)
case 0: trai();break;
case 1: phai();break;
case 2: trong();break;
}

yannibandari 04-05-2012 01:00 AM

mọi người ơi giúp mình với. mình tìm chương trình pic c cả ngày rồi,cài vào rồi lại xóa không biết bao nhiêu lần mà cũng không tìm ra phiên bản thích hợp. cứ mỗi lần compile cái file.c (đã chạy tốt trên máy khác,có thể phiên bản cũ) thì nó lại báo error! mình xài win 7 64bit untimate. ức chế quá!

vietthanh123 28-08-2012 05:25 PM

Trích:

Nguyên văn bởi lt10dkdt (Post 55690)
đoạn nhấp nháy thì oke hết rùi.nhưng khi khai báo ở void main thì toàn báo lỗi ở *case" ai biết chỉ dùm em với.em đang học về pic thôi.tim mãi mà không ra:

Báo lỗi vì cấu trúc của hàm case bị thiếu. Cấu trúc có nó là:
switch (cmd)
{
case 0: sthing;
break;
case 1: sthing;
break;
case 2: sthing;
break;

}

tranhien5291 04-11-2012 11:14 PM

help!!!
 
Các bác ơi cho e hỏi e cài CCS nhưng mà bị báo lỗi " Exception EInoutError in module pcwwiz.exe at 00833f6 I/O error 123 " , k biết phải làm thế nào nữa. Các pro chỉ cho e với ạ!!! e cảm ơn ạ.

huydungsh 06-11-2012 04:14 PM

các anh cho em hỏi đoạn chương trình sau co nghĩa như thế nào ak?
#int_timer0
void interrupt_timer0(){
int1 a;
int16 count;
set_timer0(56);
++count;
if(count == 500)
{
count=0;
a=~a;
RB0=a;
}


}
theo em nghĩ thì khi timer0 đêm được 200 lần( set_timer0(56); 256-56=200) thì biến cuont tăng lên 1. vậy trong quá trình chờ biến count đếm được 500 lần tương ứng với 100ms thì con pic16f877a có làm gì không? nếu làm thì khi thỏa mãn điều kiện IF thì làm sao pic có thể thực hiện các lệnh trong điều kiện đó. thanks all!

quanghuy_125 07-11-2012 01:31 AM

Trích:

Nguyên văn bởi huydungsh (Post 79132)
các anh cho em hỏi đoạn chương trình sau co nghĩa như thế nào ak?
#int_timer0
void interrupt_timer0(){
int1 a;
int16 count;
set_timer0(56);
++count;
if(count == 500)
{
count=0;
a=~a;
RB0=a;
}


}
theo em nghĩ thì khi timer0 đêm được 200 lần( set_timer0(56); 256-56=200) thì biến cuont tăng lên 1. vậy trong quá trình chờ biến count đếm được 500 lần tương ứng với 100ms thì con pic16f877a có làm gì không? nếu làm thì khi thỏa mãn điều kiện IF thì làm sao pic có thể thực hiện các lệnh trong điều kiện đó. thanks all!

Đúng theo bạn nói" timer0 đêm được 200 lần( set_timer0(56); 256-56=200) thì biến count tăng lên 1. vậy trong quá trình chờ biến count đếm được 500 lần "
Cái 100ms không tính được vì nó phụ thuộc vào xung nhịp mà mình đưa vào.
Khi count=500; thì count=0; a = đảo a; chân RB0 =a; và quá trình lại được tiếp diễn...

huydungsh 07-11-2012 01:56 AM

cảm ơn các anh đã giải thích! nguyên code là như sau:
#include <16F877A.h>
#include <DEFS_16F877A.h>
#device 16F877*=16 ADC=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)

#int_timer0
void interrupt_timer0(){
int1 a;
int16 count;
set_timer0(56);
++count;
if(count == 500)
{
count=0;
a=~a;
RB0=a;
}


}
void main()
{
set_tris_b(0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(int_timer0);
enable_interrupts(global);
set_timer0(56);

while(true)
{
}
}
em chỉ copy ở page 1 thôi thắc ở cái đoạn đó mong các anh giải thích giúp em!! thanks all


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam