📄 uart.c
字号:
//利用中断接收 A1 5F 00 FE 发送8字节数据
//IFS0: CNIF MI2CIF SI2CIF NVMIF ADIF U1TXIF U1RXIF API1IF
// T3IF T2IF OC2IF IC2IF T1IF 0X1IF IC1IF INT0IF
#include "p30f6010A.h"
_FOSC(CSW_FSCM_OFF & XT_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & MCLR_EN);
_FGS(CODE_PROT_OFF);
#define Fcy 7370000
unsigned int i=0;
unsigned int cnt1;
unsigned char rx_value[4];
unsigned char tx_value[]={0xFF,0xFE,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8};
void ini_TMR1(void);
void ini_485(void);
void delay_sec(int);
void main(void)
{
ini_TMR1();
ini_485();
T1CONbits.TON = 1; //启动T1
asm (" NOP");
asm (" NOP");
LATFbits.LATF5=1; //1480BEPI ENABLE
while(1)
{
delay_sec(2);
}
}
void __attribute__((interrupt)) _U1RXInterrupt(void)
{
IFS0bits.U1RXIF=0;
rx_value[i++]=U1RXREG;
if(i==4)
i=0;
}
void __attribute__((interrupt)) _T1Interrupt(void)
{
IFS0bits.T1IF=0; //clear interrupt flag
IFS0bits.U1TXIF=0;
if(rx_value[0]==0xA1 && rx_value[1]==0x5F && rx_value[2]==0 && rx_value[3]==0xFE)
{
for(i=0;i<4;i++)
rx_value[i]=0;
LATFbits.LATF5=0;
for(i=0;i<8;i++)
{
for(cnt1=0;cnt1<0xff;cnt1++);
U1TXREG=(int)tx_value[i];
for(cnt1=0;cnt1<0xff;cnt1++);
while(IFS0bits.U1TXIF==0);
for(cnt1=0;cnt1<0xff;cnt1++);
IFS0bits.U1TXIF=0;
}
LATFbits.LATF5=1;
}
else
{
delay_sec(10);
}
}
void ini_TMR1(void)
{
TMR1=0;
PR1=(Fcy/256)/4;
IFS0bits.T1IF=0;
IEC0bits.T1IE=0;
T1CON=0x8030;
}
void ini_485(void)
{
TRISFbits.TRISF5 =0;
TRISFbits.TRISF2 =1;
TRISFbits.TRISF3 =0;
U1BRG =47; //9600 baud rate
// U1BRG =192; //2400 baud rate
// U1BRG =95; //4800 baud rate
IPC2bits.U1RXIP=7;
IEC0bits.U1TXIE=0;
IEC0bits.U1RXIE=1;
U1MODE =0x8000;
U1STAbits.UTXEN =1;
}
void delay_sec(int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<50000;j++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -