📄 6014_main.c
字号:
#include <p30f6014.h>
#include <stdio.h> // 钎霖窃荐 力傍
#include <uart.h> // RS-232 烹脚侩 窃荐 力傍
#include <timer.h>
#include <adc12.h> // 10bit侩 Analog to Digital 窃荐 力傍
#include <spi.h> // SPI 烹脚侩 窃荐 力傍
_FOSC(CSW_FSCM_OFF & EC_PLL16); // 寇何 努钒 * 16硅狼 努钒栏肺 悼累
_FWDT(WDT_ON & WDTPSA_64 & WDTPSB_4); // Watch Dog Timer ON, 矫胶袍 促款 矫 磊悼 汗蓖
_FBORPOR(MCLR_EN & PWRT_64 & PBOR_ON & BORV_20 );
_FGS(CODE_PROT_OFF);
#define LED1 PORTCbits.RC1
#define LED2 PORTCbits.RC2
#define LED3 PORTCbits.RC3
#define LED4 PORTCbits.RC4
#define MAIN_FUN1 PORTAbits.RA12
#define MAIN_FUN2 PORTAbits.RA13
#define APPR1 PORTBbits.RB6
#define APPR2 PORTBbits.RB7
#define APPR3 PORTBbits.RB2
#define MOTOR1_SEL PORTDbits.RD1
#define MOTOR2_SEL PORTDbits.RD2
#define MOTOR6_SEL PORTDbits.RD6
#define MOTOR7_SEL PORTDbits.RD7
signed int datard;
long delay,del_va;
unsigned long motor6;
unsigned long motor7;
signed int torque[2]={0,0};
signed int pwm[2]={0,0};
unsigned int i=0,j=0,k=0; // 阿 窜拌 搬沥
unsigned int cnt=0, input_data_pan=880;
void __attribute__((__interrupt__)) _SPI1Interrupt(void)
{
datard=ReadSPI1();
IFS0bits.SPI1IF = 0;
SPI1STATbits.SPIROV = 0;
}
void __attribute__((__interrupt__)) _U1RXInterrupt(void)
{
static int ch;
static int seq_no=0;
static int input_id;
static int input_data;
ch = ReadUART1();
switch(seq_no)
{
case 0:
{
if(ch==0xff) seq_no=1;
else seq_no=0;
break;
}
case 1:
{
if(ch==0x01 || ch==0x02 || ch==0x03 || ch==0x04)
{
input_id=ch;
seq_no=2;
}
else seq_no=0;
break;
}
case 2:
{
input_data = ch;
if(input_id==0x01)
{
if(input_data==0x01)
{
LED1=1;
}
else
{
LED1=0;
}
}
if(input_id==0x02)
{
if(input_data==0x01)
{
LED2=1;
}
else
{
LED2=0;
}
}
if(input_id==0x03)
{
if(input_data==0x01)
{
LED3=1;
}
else
{
LED3=0;
}
}
if(input_id==0x04)
{
if(input_data==0x01)
{
LED4=1;
}
else
{
LED4=0;
}
}
seq_no=0;
break;
}
default:
{
seq_no=0;
break;
}
}
IFS0bits.U1RXIF = 0;
}
void __attribute__((__interrupt__)) _U1TXInterrupt(void)
{
IFS0bits.U1TXIF = 0;
}
int main()
{
//*************************************** RS232 Initilization ******************************************************
ConfigIntUART1(UART_RX_INT_EN & // EN, DIS
UART_RX_INT_PR2 & // 0 ~ 7
UART_TX_INT_DIS & // EN, DIS
UART_TX_INT_PR4); // 0 ~ 7
OpenUART1( UART_EN & // EN, DIS
UART_IDLE_CON & // CON, STOP
UART_EN_WAKE & // EN_WAKE, DIS_WAKE
UART_DIS_LOOPBACK & // EN_LOOPBACK, DIS_LOOPBACK
UART_EN_ABAUD & // EN_ABAUD, DIS_ABAUD
UART_NO_PAR_8BIT & // NO_PAR_9BIT, NO_PAR_8BIT, ODD_PAR_8BIT, EVEN_PAR_8BIT
UART_1STOPBIT, // 2STOPBITS, 1STOPBIT
UART_INT_TX_BUF_EMPTY & // INT_BUF_EMPTY, INT_TX
UART_TX_PIN_NORMAL & // NORMAIL, LOW
UART_TX_ENABLE & // ENABLE, DISABLE
UART_INT_RX_CHAR & // RX_BUF_FUL, RX_3_4_FUL, RX_CHAR
UART_ADR_DETECT_DIS & // EN, DIS
UART_RX_OVERRUN_CLEAR, // CLEAR
51); // 16=115200BPS, 34=57600BPS, 51=38400, 103=19200, Fcy/(16(UxBRG+1))
//*************************************** SPI Initilization **********************************************
ConfigIntSPI1(SPI_INT_DIS & // EN, DIS
SPI_INT_PRI_1); // 0 ~ 7
OpenSPI1( FRAME_ENABLE_OFF & // ON, OFF
FRAME_SYNC_OUTPUT & // INPUT, OUTPUT
ENABLE_SDO_PIN & // DISABLE, ENABLE
SPI_MODE16_ON & // ON, OFF
SPI_SMP_ON & // ON, OFF
SPI_CKE_OFF & // ON, OFF
SLAVE_ENABLE_OFF & // ON, OFF -> SS 巧阑 ACTIVE肺 荤侩且 巴牢瘤 搬沥
CLK_POL_ACTIVE_HIGH & // LOW, HIGH
MASTER_ENABLE_ON & // ON, OFF -> MASTER绰 亲惑 ON栏肺 瘤沥
SEC_PRESCAL_1_1 & // 1_1 ~ 8_1
PRI_PRESCAL_4_1, // 1_1, 4_1, 16_1, 64_1
SPI_ENABLE & // ENABLE, DISABLE
SPI_IDLE_CON & // CON, STOP
SPI_RX_OVFLOW_CLR); // CLR
//*************************************** A/D Conversion Initilization **********************************************
SetChanADC12(ADC_CH0_POS_SAMPLEA_AN0 &
ADC_CH0_NEG_SAMPLEA_NVREF); // ADC_CH0_POS_SAMPLEA_AN0, ADC_CHX_POS_SAMPLEA_AN0AN1AN2
ConfigIntADC12(ADC_INT_DISABLE & // ENABLE, DISABLE
ADC_INT_PRI_5); // 0 ~ 7
OpenADC12( ADC_MODULE_ON & // ON, OFF
ADC_IDLE_CONTINUE & // IDLE_STOP, IDLE_CONTINUE
ADC_FORMAT_INTG & // SIGN_FRACT, FRACT, SIGN_INT, INTG
ADC_CLK_AUTO & // AUTO, MPWM, TMR, INT0, MANUAL
ADC_AUTO_SAMPLING_ON & // ON, OFF
ADC_SAMP_ON, // ON, OFF
ADC_VREF_AVDD_AVSS & // AVDD_AVSS, EXT_AVSS, AVDD_EXT, EXT_EXT
ADC_SCAN_ON & // ON, OFF
ADC_SAMPLES_PER_INT_16 & // 1 ~ 16
ADC_ALT_BUF_OFF & // ON, OFF
ADC_ALT_INPUT_OFF, // ON, OFF
ADC_SAMPLE_TIME_0 & // 0 ~ 31
ADC_CONV_CLK_SYSTEM & // INTERNAL_RC, SYSTEM
ADC_CONV_CLK_16Tcy, // Tcy13, Tcy, 3Tcy2 ~ 32Tcy
ENABLE_ALL_ANA, // ALL_ANA, ALL_DIG, AN0_ANA~AN15_ANA_ANA
SCAN_ALL); // NONE, ALL, SKIP_SCAN_AN0 ~ 15
//*************************************** I/O(D/A) PORT Initilization **********************************************
TRISA = 0b1111000000000000;
TRISB = 0b1111111111111111;
TRISC = 0b0000000000000000;
TRISD = 0b1100000000000000;
TRISF = 0b0000000010010011;
TRISG = 0b0000000001000001;
//*************************************** TIMER Initilization ******************************************************
ConfigIntTimer1(T1_INT_PRIOR_1 & // 0~7 => 弥家 1 捞惑 汲沥且 巴
T1_INT_OFF); // ON, OFF
WriteTimer1(0);
OpenTimer1( T1_ON & // ON, OFF
T1_IDLE_CON & // CON, STOP
T1_GATE_OFF & // ON, OFF
T1_PS_1_8& // 1_1, 1_8, 1_64, 1_256
T1_SYNC_EXT_ON & // ON, OFF (ON 鞘荐)
T1_SOURCE_INT, // EXT, INT
65535); // Match_value
//*************************************** MAIN **********************************************
MOTOR6_SEL=1; ClrWdt();
MOTOR7_SEL=1; ClrWdt();
while(1)
{
MOTOR6_SEL = 0;
WriteSPI1(torque[1]);
for(delay=0;delay<5;delay++);
motor6=ReadSPI1();
MOTOR6_SEL = 1;
ClrWdt();
MOTOR7_SEL = 0;
WriteSPI1(torque[2]);
for(delay=0;delay<5;delay++);
motor7=ReadSPI1();
MOTOR7_SEL = 1;
ClrWdt();
printf("m6 = %ld tor1 = %d m7 = %ld tor2 = %d k = %d\r\n",motor6,torque[1],motor7,torque[2],k);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -