我使用了以下內容:簡單的中斷程序陷阱/凍結CPU(USART/PIC18F/MICROCHIP/XC8)
- PIC18F4550,
- xc8編譯器,
- MPLAB個IDE V3.20,
- 發送器和接收器模塊(在沒有任何中斷和工作的情況下用主程序測試)。
- LED的連接到RD0,RD1和RD2(1 =亮)
- 按鈕連接到RB0,RB1和RB2(0 =按鈕被按下)//在這一點並不重要
顯然,這段代碼中的所有內容都可以正常工作,但是中斷"void interrupt SerialComm(void)"
(我已經制作了一個程序,沒有中斷並且指示燈亮起)。
主要甚至沒有加載;我已經把"PORTD = 0x0F"
,
(主程序的第3行)。
所以如果指示燈亮起,這意味着至少主程序的第三行工作。
(至少直到那條線,但led沒有。)
是否有任何註冊我必須禁用第一,我錯過了這個?
另外,我跟隨大多數教程可以有我錯過了什麼?, 我已經看到許多程序與#pragma,但我不知道如果我需要然後當我使用XC8編譯器。
/*
* File: transmit.c
* Author: steve
*
* Created on September 25, 2016, 12:36 AM
*/
#define _XTAL_FREQ 48000000
#include <xc.h>
#include <pic18f4550.h>
void DelayMs(int x);
char ButtonsChecker();
char ButtonsCheckValue = 0; //returned value
char data_received = 0;
void main(void) {
TRISB = 0x0F;
TRISD = 0b00000000;
TRISCbits.TRISC2 = 0; //TXD Power
TRISCbits.TRISC6 = 0; //RC6
TRISCbits.TRISC7 = 1; //RC7
PORTCbits.RC2 = 1;
RCSTA = 0x90;
TXSTA = 0x20;
SPBRG = 77;
RCREG = 0;
RCIF = 0;
PORTDbits.RD0 = 1;
PORTDbits.RD1 = 1;
PORTDbits.RD2 = 1;
RCIE = 1;
TXIE = 0;
PEIE = 1;
GIE = 1;
while (1) {
while (ButtonsChecker()) {
TXREG = ButtonsChecker();
}
//while (!TRMT); // waiting for a whole data frame to be ready for a transmission
//TXREG = PORTB;
//while (!RCIF); // waiting for a whole data frame to be received
//PORTD = RCREG;
}
}
void DelayMs(int x) {
while (x > 0) {
__delay_ms(1);
x--;
}
}
char ButtonsChecker() {
if (PORTBbits.RB0 == 0) {
ButtonsCheckValue = 1;
} else if (PORTBbits.RB1 == 0) {
ButtonsCheckValue = 2;
} else if (PORTBbits.RB2 == 0) {
ButtonsCheckValue = 4;
}//else if (PORTBbits.RB3 == 0) {
// ButtonsCheckValue = 8;}
else ButtonsCheckValue = 0;
return (ButtonsCheckValue);
}
void interrupt ReceiveData() {
if (RCIF == 1) {
RCIF = 0;
~PORTDbits.RD1;
}
}
您是否在中斷向量表中註冊了中斷? – Lundin
在開始時你做PORTD = 0x0F,但突然之後這被PORTD = 0x01覆蓋。什麼是連接到PORTD.0(lsb位)?檢查是否在該引腳上找到電壓(可能您會這樣做,所以您主要輸入while())。 – linuxfan
@linuxfan 如果位0 = 1,實際上有3個引腳連接到LED,其中一個LED將點亮,bit1和bit 2也一樣,所以0x0F所有3都將點亮,但是如果主程序完全啓動,則0x0F將會在while循環中被0x01非常快速地覆蓋,所以RD0中的指示燈將亮起,其餘的指示燈熄滅,但是沒有任何指示燈亮起,所以我假定它是我創建的中斷函數。 //我認爲是什麼東西是陷入我創建的中斷函數的CPU,但我不知道什麼 –