2015-10-17 63 views
0

是否有任何方式使用MikroC Pro的PIC庫在基於變化的soft_uart中產生中斷?基於中斷的Soft_Uart與MikroC庫

通過下面的例程讀取的字節是垃圾。我使用的是20MHz晶振,當我拿到一個時,會嘗試32MHz晶振。

char error, data_; 

void interrupt(){ 
    if (IOCAF.IOCAF2){ 
    do{ 
     data_ = Soft_Uart_Read(&error); 
    }while(error); 
    Soft_Uart_Write(data_); 
    IOCAF.IOCAF2 = 0; 
    } 
} 

void main() { 
    //set RA2, pin 11, as input 
    TRISA = 0b001100; 
    TRISC = 0; 
    ANSELA = 0; 
    ANSELC = 0; 
    //enable interrupts 
    INTCON.GIE = 1; 
    //enable interrupt on change 
    INTCON.IOCIE = 1; 
    //Clear all IOC flags in PORTA 
    IOCAF = 0; 
    //enable rising edge detection on RA2, pin 11 
    IOCAP.IOCAP2 = 1; 
    //Initialise software uart Pin11 = Rx, Pin12 = Tx 
    error = Soft_Uart_Init(&PORTA, 2,1,9600,0); 
} 

回答

0

我已經解決了這個問題。我使用了錯誤的中斷;您使用INT引腳而不是IOC引腳。

以供將來參考:

INT引腳: 「INT引腳可用於產生異步 邊沿觸發中斷」

char error, data_; 

void interrupt(){ 
    if (INTCON.INTF){ 
    do{ 
     data_ = Soft_Uart_Read(&error); 
    }while(error); 
    Soft_Uart_Write(data_); 
    } 
    INTCON.INTF = 0; 
} 

void main() { 
    //set RA2, pin 11, as input 
    TRISA = 0b001100; 
    TRISC = 0; 
    ANSELA = 0; 
    ANSELC = 0; 
    //enable interupts 
    INTCON = 0; 
    INTCON.GIE = 1; 
    INTCON.INTE = 1; 
    //set falling edge option for INTE; start condition for uart com 
    OPTION_REG.INTEDG = 0; 
    //Initialise software uart Pin11 = Rx, Pin12 = Tx 
    error = Soft_Uart_Init(&PORTA, 2,1,9600,0); 
} 

顯然,soft_uart_read()可以阻斷,並用它在一箇中斷程序中,你不能打破它。

字節傳輸的通信是可靠的。