PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   Có phải do lỗi trình biên dịch??? (http://www.picvietnam.com/forum/showthread.php?t=2695)

lcd_amptech 10-08-2008 12:44 AM

Có phải do lỗi trình biên dịch???
 
Xin chào cả nhà!
Em xài MPLAD C30 cho con dsPIC33FJ32MC202 và có một lỗi sau, không biết là do trình biên dịch hay do MCU mà nó không chạy đúng hay chương trình em viết có sai gì không. Mong các bác chỉ giáo.

Đoạn chương trình như sau:

Code:

#include <p33FJ32MC202.h>
//su dung thach anh ngoai 8MHz
_FOSCSEL(FNOSC_PRIPLL);
_FOSC(POSCMD_XT);
_FWDT(FWDTEN_OFF & WINDIS_OFF);
void delay_ms(unsigned int n);
#define a PORTBbits.RB5
#define b PORTBbits.RB6
#define c PORTBbits.RB7
#define d PORTBbits.RB12
#define e PORTBbits.RB13

//-----------------------------------
int main (void)
{
        TRISB=0;
        while(1)
        {
                a=0;
                b=0;
                c=0;
                d=0;
                e=0;
                delay_ms(500);
                a=1;
                b=1;
                c=1;
                d=1;
                e=1;               
                delay_ms(500);
        }
        return 0;

}

void delay_ms(unsigned int n)
{
        unsigned int n1;
        while (n!=0)
        {
                n1=12000;
                while(n1!=0)
                {
                        n1--;
                }
                n--;
        }
       
}

dịch đoạn chương trình trên, nạp vào IC thì chỉ có a,c,e dao động còn b và d đứng yên.
Em thử đổi lại hàm main trên như sau:
Code:

int main (void)
{
        TRISB=0;
        while(1)
        {
                b=0;
                a=0;
                c=0;
                d=0;
                e=0;
                delay_ms(500);
                b=1;
                a=1;
                c=1;
                d=1;
                e=1;               
                delay_ms(500);
        }
        return 0;

}
 lúc này b,c,e dao động còn a,d đứng yên. Em tiếp tục lại đổi:
int main (void)
{
        TRISB=0;
        while(1)
        {
                a=b=c=d=e=0;
                delay_ms(500);
                a=b=c=d=e=1;
                delay_ms(500);
        }
        return 0;

}

lúc này tất cả đều dao động.
Mong các bác cứu em. Thansk!!!

namqn 10-08-2008 01:02 AM

Vấn đề này đã được đề cập trên diễn đàn, khi xuất dữ liệu, bạn không nên tác động vào thanh ghi PORTx (hay các bit của nó), mà nên tác động vào thanh ghi LATx (và các bit của nó).

Vấn đề của bạn sẽ được giải quyết bằng việc đơn giản thay các PORT thành LAT trong các #define của bạn.

Thân,

lcd_amptech 10-08-2008 09:43 AM

Em đã sửa các define theo chỉ dẫn của bác và đã chạy được.
Cảm ơn bác namqn nhiều.


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