历史上的今天
今天是:2025年08月12日(星期二)
2018年08月12日 | PIC24串口发送和接收程序
2018-08-12 来源:eefocus
做智能家居时,下位机用的时PIC24FJ64GA004,所以写了下面那个程序。
由于对PIC24的不熟悉,忘了加配置们,导致波特率一直不对,后面加上配置位就行了。
接收的数据按一定格式,用来控制继电器。
发送的数据暂时没用到。启用发送只要使能中断就行。
/*********************************************************
* PIC24串口发送和接收
*
* 文 件: main.c
* 作 者: ZhnJa
* 修改日期: 2013-4-6
* 说明: 9600波特率,暂时关闭发送。
************************************************************/
#include "p24FJ64GA004.h"
#define RELAY1 LATBbits.LATB14
#define RELAY2 LATBbits.LATB13
// Setup configuration bits
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & FWPSA_PR32 & WDTPS_PS2048 & ICS_PGx3) // JTAG/Code Protect/Write Protect/Clip-on Emulation mode/ Watchdog Timer/ICD pins select
_CONFIG2(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_HS & FNOSC_PRI) // Disable CLK switch and CLK monitor, OSCO or Fosc/2, HS oscillator,Primary oscillator
void UART2Init(void);
void Delay(unsigned int t);
unsigned char Rev[6];//接收数组
unsigned char Send[10]={0x69,1,2,3,4,5,6,7,8,9};//发送数组
unsigned char i=0;//发送位
unsigned char Index=0;//接收位
int main(void)
{
TRISBbits.TRISB13 = 0;//IO方向初始化
TRISBbits.TRISB14 = 0;
TRISBbits.TRISB5 = 1;
UART2Init();
while(1)
{
//接收判断
if(Rev[0]==0x68 && Rev[2]==0x69)
{
if(Rev[3]==0x01)
{
if(Rev[4] == 1)
RELAY1 = 1;
if(Rev[4] == 0)
RELAY1 = 0;
}
if(Rev[3]==0x02)
{
if(Rev[4] == 1)
RELAY2 = 1;
if(Rev[4] == 0)
RELAY2 = 0;
}
}
}
return 0;
}
/*****************************************************************
** Name: UART2Init
** Function: 串口2初始化
** Input:
** Output:
** Time: 2013.4.05
** Attention: 11.0596MHz,9600bunds
******************************************************************/
void UART2Init(void)
{
TRISCbits.TRISC5 = 1;//IO口方向
TRISCbits.TRISC4 = 0;
RPINR19bits.U2RXR = 21;//RP21
RPOR10bits.RP20R = 5;//RP20
U2MODEbits.BRGH = 1;//高速
U2BRG = 143; //波特率
U2STAbits.UTXISEL0 = 0;//当最后一个字符被移出发送移位寄存器时产生中断
U2STAbits.UTXISEL1 = 0;
U2MODEbits.UARTEN = 1;
SRbits.IPL = 3; //CPU优先级3
IPC7bits.U2TXIP = 4; //发送中断优先级4
IEC1bits.U2TXIE = 1; //允许发送中断
IFS1bits.U2TXIF = 0; //清标志位
IPC7bits.U2RXIP=5; //接收中断优先级
IEC1bits.U2RXIE=1; //允许接收中断
IFS1bits.U2RXIF=0; //清标志位
// U2STAbits.UTXEN = 1; //使能发送,同时产生发送中断
}
/*****************************************************************
** Name: _U2TXInterrupt
** Function: 串口2接收中断
** Input:
** Output:
** Time: 2013.4.05
** Attention:
******************************************************************/
void __attribute__((interrupt, no_auto_psv)) _U2RXInterrupt(void)
{
unsigned char temp;
IFS1bits.U2RXIF=0; //清标志位
temp=U2RXREG;
if(temp == 0x68) //判断是否为第一位
Index = 0;
if(Index>=sizeof(Rev)) Index=0;
Rev[Index]=temp;
Index++;
}
/*****************************************************************
** Name: _U2TXInterrupt
** Function: 串口2发送中断
** Input:
** Output:
** Time: 2013.4.05
** Attention:
******************************************************************/
void __attribute__((interrupt, no_auto_psv)) _U2TXInterrupt(void)
{
IFS1bits.U2TXIF = 0; //清中断标志
U2TXREG = Send[i] ; //发送数据
while(U2STAbits.TRMT == 0);
Nop();Nop();Nop();Nop();
i++;
if(i==10)
{
i=0;
}
}
void Delay(unsigned int t)
{
unsigned int i,j;
for(i=t;i>4;i--)
for(j=1;j<10000;j++);
}
上一篇:PIC单片机之反汇编
下一篇:PIC中断不同型号的不同写法
史海拾趣
|
例程大小:1583K 例程说明: 1.改移植和模板工程不包括操作系统核ucosⅡ的源代码,如需使用请向操作系统的供应商联系或者网上下载免费的源代码。 2.本移植使用的是 ucosⅡ 2.83版本,需要在OS文件夹下添加的操作系统源代码包括如下文件: os_fla ...… 查看全部问答> |
|
在网上找了个密码锁程序来学习,用KEIL编译,开始不能生成HEX文件,后来找到原因了,有些是数字0打成了字母O,有些是漏了冒号! 现在想问一下,这个程序应该怎样读?密码是如何设置的?刚学,搞不懂. org 0000h AJMP START ORG 0030H START:ACALL BP ...… 查看全部问答> |
|
在AXD中Load Image后无法正常加载,加载后的程序如下 __main [0x00000000] andeq r0,r0,r0 ...… 查看全部问答> |
|
刚接触开发板, 不清楚什么是片内RAM和片外RAM,以及片内Flash和片外Flash. 请大家解释一下, 我用的是philips的板子. 难道LPC2214处理器内部也有ARM和Flash吗? … 查看全部问答> |
|
最近需要开发一个擦除硬盘的工具,实现的功能就是将一整块硬盘挂到一台机器上,比如说是Windows系统的机器上,然后利用该工具将整块硬盘的数据清除,而且清除后不可以再恢复。并且这块硬盘不管它是在什么系统下用的硬盘(比如AIX、HP、SCO等等), ...… 查看全部问答> |
|
ADC配置为一次转换6个通道,使用DMA传送, SCAN位为0 CONT位为零.外部触发使用软件触发. 出现一个问题是,转换只能在最后一通道转换完成后产生DMA传送,前面5通道全部丢失. SCAN位置1也一样!… 查看全部问答> |
|
为什么UC3843驱动MOS管的波形,只有几个周期有波形,其它时间没有? 我现在用UC3843控制MOS管来做boost升压电路,测量UC3843的6脚输出波形发现,只有几个周期有波形,其它时间输出波形一直为低。24VDC升压到120VDC,0.25A,开关频率为220K。请问这是为什么? … 查看全部问答> |




