PDA

View Full Version : Hỏi về lệnh ASM tương đương và số chu kỳ máy mà PIC xử lý


nbb3i
07-02-2010, 08:26 AM
Trước đây mình mới chỉ tìm hiểu về PIC thông qua ngôn ngữ C và trình dịch CCS. Bây giờ muốn quay lại nghiên cứu lại ngôn ngữ ASM để có thể hiểu sâu hơn về phương thức làm việc của dòng vi xử lý này.
Bạn nào có thể giúp mình giải đáp thắc mắc sau đây với:

#define DATA input(PIN_B0)
int32 pointer[];
int32 counter=0,timer=0;
for(counter=1;counter<10000000;counter++)
{
if (DATA==1)
{
pointer[timer]=counter;
timer++;
}
while(DATA==1) counter++;
}

Đoạn trên mình định lập trình để ghi lại sườn lên của một tín hiệu chu kỳ lớn nhưng bề rộng xung nhỏ. trong vòng for gồm 2 lệnh là tăng counter và so sánh DATA. Tuy nhiên thắc mắc của mình là:
- Những lệnh trên có thể viết lại bằng ASM như thế nào?
- Số chu kỳ lệnh tương xứng với các lệaanh ASM đó có tính được hay không?
Ai biết xin giải đáp giúp mình với nhé! Xin cảm ơn! :)

namqn
09-02-2010, 06:34 PM
Trước đây mình mới chỉ tìm hiểu về PIC thông qua ngôn ngữ C và trình dịch CCS. Bây giờ muốn quay lại nghiên cứu lại ngôn ngữ ASM để có thể hiểu sâu hơn về phương thức làm việc của dòng vi xử lý này.
Bạn nào có thể giúp mình giải đáp thắc mắc sau đây với:

#define DATA input(PIN_B0)
int32 pointer[];
int32 counter=0,timer=0;
for(counter=1;counter<10000000;counter++)
{
if (DATA==1)
{
pointer[timer]=counter;
timer++;
}
while(DATA==1) counter++;
}

Đoạn trên mình định lập trình để ghi lại sườn lên của một tín hiệu chu kỳ lớn nhưng bề rộng xung nhỏ. trong vòng for gồm 2 lệnh là tăng counter và so sánh DATA. Tuy nhiên thắc mắc của mình là:
- Những lệnh trên có thể viết lại bằng ASM như thế nào?
- Số chu kỳ lệnh tương xứng với các lệaanh ASM đó có tính được hay không?
Ai biết xin giải đáp giúp mình với nhé! Xin cảm ơn! :)
Nếu bạn chỉ muốn biết các lệnh trên được viết thế nào bằng hợp ngữ thì có thể mở file listing của trình dịch C để xem đoạn mã hợp ngữ tương ứng (tính năng này thường có trong các trình dịch C, nhưng tôi không dùng CCS C nên không rõ trình dịch đó có tính năng này hay không, với các trình dịch C của Microchip thì tôi biết chắc là có tính năng này).

Nếu đã có đoạn mã hợp ngữ thì có thể tính được số chu kỳ lệnh tương ứng.

Thân,

nghia_tdh21
18-02-2010, 11:03 PM
Như anh Nam đã nói, muốn biết câu lệnh ASM tương ứng như thế nào thì trong mỗi trình dịch đều có chức năng View Assembly (MikroC). Tuy nhiên nếu nbb3i muốn làm các ứng dụng đòi hỏi đáp ứng thời gian thực có độ chính xác cỡ mili giây tốt nhất là nên dùng ngắt timer thì chính xác và chương trình cũng dễ kiểm soát hơn.