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)
-   -   ai thông dịch cho em đoạn code này với! Em đang cần gấp (http://www.picvietnam.com/forum/showthread.php?t=2272)

dovanhiep 19-04-2008 03:52 PM

ai thông dịch cho em đoạn code này với! Em đang cần gấp
 
/*
trinh dich MikroC
*/
#include"built_in.h"
//Khai bao cac bien
unsigned short cnt;
unsigned short T_dat;
unsigned short T_do;
unsigned short Hang_chuc;
unsigned short Hang_dv;
unsigned short t2;
unsigned int temp;
unsigned int T;
char *txt;
float t1;
//Cac tham so cua bo dieu khien
float a0;
float a1;
float a2;
float b1;
float b2;
//Cac bien qua trinh
float ek;
float rk;
float rk_1;
float rk_2;
float uk;
float M1;
float M2;

//Ham tinh dau ra
float Caculate_PID(){
ek = T_dat - T_do;
rk = ek + M1;

uk = a0*rk + M2;

rk_2 = rk_1;
rk_1 = rk;
M1 = (-1)*(b1*rk_1 + b2*rk_2);
M2 = a1*rk_1 + a2*rk_2;

t2=0;
return uk;
}



//Ham phuc vu ngat timer1
void interrupt() {
cnt++ ;
PIR1.TMR1IF = 0; // clear TMR1IF

T = T + Adc_Read(0);
if (cnt==20) {
temp = T/20;
T_do = temp*100/614;
T = 0;
temp = 0;
cnt = 0;
t2 = 1;
}
//Nap lai so dem
TMR1H = 0x3C;
TMR1L = 0xB0;
}//~

void init_Timer1() {
//dat thoi gian tre cho timer
TMR1H = 0x3C;
TMR1L = 0xB0;

TRISB = 0;
T1CON = 1;
PIR1.TMR1IF = 0; // clear TMR1IF
PIE1 = 1; // enable interrupts
}

void init_LCD(){
Lcd8_Config(&PORTD,&PORTB,0,2,1,7,6,5,4,3,2,1,0);
txt = "T_dat:";
Lcd8_Cmd(LCD_CURSOR_OFF); // Turn off cursor
Lcd8_Out(1, 1, txt); // Print text on LCD
txt = "T_do:";
Lcd8_Out(2,1,txt);
}

void update_LCD(){
//update T_dat
Hang_chuc = T_dat/10;
Lcd8_Chr(1,8,48+Hang_chuc);
Hang_dv = T_dat - Hang_chuc*10;
Lcd8_Chr(1,9,48+Hang_dv);
//update T_do
Hang_chuc = T_do/10;
Lcd8_Chr(2,8,48+Hang_chuc);
Hang_dv = T_do - Hang_chuc*10;
Lcd8_Chr(2,9,48+Hang_dv);
}


void main() {

ADCON1 = 0x80; // Configure analog inputs and Vref
TRISA = 0xFF; // PORTA is input
INTCON = 0xC0;
PORTB = 0xF0;

//Khoi tao gia tri ban dau cho cac bien
cnt=0;
T_dat=60;
//khoi tao timer1
init_Timer1();
//Khoi tao LCD
init_LCD();

//Khoi tao PWM
Pwm_Init(1000); // Initialize PWM module
Pwm_Start(); // Start PWM



while (1) {
update_LCD();
if (t2) {
t1 = Caculate_PID()/220;
};
Pwm_Change_Duty(t1*255); // set new duty ratio,


};
}//~!

namqn 19-04-2008 05:55 PM

Bạn không rõ chỗ nào thì hỏi chỗ đó, code đã chú thích tương đối đầy đủ, rõ ràng, và viết bằng C.

Thân,

dovanhiep 19-04-2008 10:27 PM

anh có thể giải thích cho em cụ thể hơn được không? Em mới quan tâm về C, nói chung la non kém lắm, anh hướng dẫn giúp em. Càng cụ thể càng tốt

namqn 21-04-2008 12:58 AM

Trích:

Nguyên văn bởi dovanhiep (Post 15637)
anh có thể giải thích cho em cụ thể hơn được không? Em mới quan tâm về C, nói chung la non kém lắm, anh hướng dẫn giúp em. Càng cụ thể càng tốt

Rất tiếc là tôi sẽ không giải thích toàn bộ chương trình cho bạn. Bạn đã post một chương trình đầy đủ chứ không phải một đoạn code.

Để nắm được những gì người khác giải thích cho bạn, bạn nên tự giải thích đoạn code/chương trình đó trước. Bạn hãy tin tôi, làm như vậy sẽ giúp bạn hiểu những gì người khác giải thích một cách nhanh chóng và dễ dàng hơn. Nên nhớ, người học là bạn chứ không phải người sẽ giúp bạn.

Nếu bạn mới học C, hãy tìm một quyển sách về C để đọc trước. Tôi không làm việc giải thích ngôn ngữ C ở đây đâu, khi đã có hàng trăm quyển sách viết C đã được viết.

Thân,

dovanhiep 22-04-2008 08:35 AM

cam on anh gop y ! em se co gang!


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