我正在開發固件來控制定製電路板上的PIC18F45k80引腳排列。 在使用最終版本加載和編程此圖片之前,我正在用最簡單的用戶代碼測試我的程序/調試環境(MPLABX IDE + Pickit3):以50 ms的週期切換一些portD輸出。如何正確配置PIC18端口D的輸出方向?
它們的3個引腳可以正常工作(RD6,RD5,RD4),但不是RD3和R2的情況。他們沒有信號,他們永遠不會開啓。該引腳仍然具有0的所有執行時間。所有的引腳配置,並在同一時間以同樣的方式被激活,你可以在接下來的代碼中看到:
的main.c文件:
//C libraries
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <pic18f45k80.h>
#include "18f45k80_mainconfig.h"
#include <xc.h>
//Application dependent libraries
#include "gold_whyl_task.h"
/*outputs defines*/
#define CADENZA PORTDbits.RD2 //problem with this bit
#define CAPW PORTDbits.RD3 //problem with this bit
#define FREQFISSA PORTDbits.RD4
#define FISSAWAIL PORTDbits.RD5
#define COMCICLOSIR PORTDbits.RD6
/*inputs - debug*/
#define PGC PORTBbits.RB6
#define PGD PORTBbits.RB7
int main()
{
TRISDbits.TRISD0=1;//input ACTIVACIOn
TRISDbits.TRISD1=1;//input CLACSON
TRISBbits.TRISB6=1;//pdg
TRISBbits.TRISB7=1;//pdc
/*outputs*/
TRISDbits.TRISD2=0;//output CADENZA //problem with this
TRISDbits.TRISD3=0;//output CAPW //problem with this
TRISDbits.TRISD4=0;//output FREQFIJA
TRISDbits.TRISD5=0;//output FIJAWAIL
TRISDbits.TRISD6=0;//output COMCICLOSIR
while(1)
{
COMCICLOSIR=0;
FISSAWAIL=0;
CAPW=0;
CADENZA=0;
FREQFISSA=0;
__delay_ms(50);
COMCICLOSIR=1;
FISSAWAIL=1;
CAPW=1; //this assignment has no effect --> it stills 0
CADENZA=1;//this assignment has no effect--> it stills 0
FREQFISSA=1;
__delay_ms(50);
}
}
什麼能發生? 定義,端口配置等有問題嗎?
我們有單獨的微控制器和電子交換站點:http://electronics.stackexchange.com/ – arminb
你是什麼意思?我遵循指示,我總是以相同的方式配置輸入和輸出,但是我從來沒有隻有端口的一部分工作,並且沒有其他部分工作,即使以完全相同的方式配置完整端口。數據表能給我關於這種行爲的什麼樣的信息? –
這些引腳怎麼樣?所有電路都一樣嗎?也許你必須使用寄存器「PADCFG1」啓用上拉。 – LPs