pic32源程序如下:
/********************************************************************************************************
*********************************************************************************************************
*
* File : RS485.c
* Hardware Environment: easyPIC pro v2
* Build Environment : MPLAB V8.66 + PIC32 V2.01
* Microcontroller : PIC32MX795F512L
* Version : V1.0
* By : JEFF
* DATE : 20150320
*
* Hardware Connection:
CN5(0~5)-----RB8~RB13, Segment LED Connetion
CN6(0~7)-----RD0~RD7
RE/DE------RB15
RO ------RF4
DI ------RF5
*
*(c) Copyright 2010-2018, Logifind Tech CO.,LTD
*http://www.logifind.com
*All Rights Reserved
*
*********************************************************************************************************
********************************************************************************************************/
//
// 实验描述:串口助手发送数据,接收16 Byte数据,RS485 发出16Byte数据
// LED及数码管 显示缓冲区数据.
//
// 头 文 件:C:Program FilesMicrochipMPLAB C32 Suitepic32-libsincludeproc
//
// 配 置 位:菜单栏 -> Help -> Topics.. -> PIC32MX Config Setting
//
// 波 特 率:9600 N 8 1
//
// 注意事项:每次必须累积 16Byte 数据,单片机才回传数据
//
//-------------------------------------------------------------------------------
#include
//-------------------------------------------------------------------------------
// POSCMOD = XT, FNOSC = PRIPLL, FWDTEN = OFF
// PLLIDIV = DIV_2, PLLMUL = MUL_20
// PBDIV = 4 (default)
// Main clock = 4MHz /2 * 20 = 40MHz
// Peripheral clock = 40MHz /4 = 10MHz
// SYSCLK = 40 MHz (4MHz Crystal/FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 10 MHz
#pragma config POSCMOD = XT //主振荡器
#pragma config FNOSC = PRIPLL //倍频模式
#pragma config FPLLIDIV = DIV_2 //输入分频 1:2
#pragma config FPLLMUL = MUL_20 //PPL 倍频 1:20
#pragma config FPLLODIV = DIV_1 //输出分频 1:1
#pragma config FPBDIV = DIV_4 //外设时钟
#pragma config FWDTEN = OFF //关闭看门狗
//#pragma config ICESEL = ICS_PGx1 //调试端口1
#pragma config ICESEL = ICS_PGx2 //调试端口2
#define SysLED _LATB5 //CPU LED
#define SPEKAK _LATD8 //蜂呜器
#define RELAY _LATD8 //继电器
#define bctl_485 _LATB15 //485控制端
#define Smg_a 0xFE //定义段码
#define Smg_b 0xFD
#define Smg_c 0xFB
#define Smg_d 0xF7
#define Smg_e 0xEF
#define Smg_f 0xDF
#define Smg_g 0xBF
#define Smg_dp 0x7F
#define Bmp0Map Smg_a & Smg_b & Smg_c & Smg_d & Smg_e & Smg_f
#define Bmp1Map Smg_b & Smg_c
#define Bmp2Map Smg_a & Smg_b & Smg_d & Smg_e & Smg_g
#define Bmp3Map Smg_a & Smg_b & Smg_c & Smg_d & Smg_g
#define Bmp4Map Smg_b & Smg_c & Smg_f & Smg_g
#define Bmp5Map Smg_a & Smg_c & Smg_d & Smg_f & Smg_g
#define Bmp6Map Smg_a & Smg_c & Smg_d & Smg_e & Smg_f & Smg_g
#define Bmp7Map Smg_a & Smg_b & Smg_c
#define Bmp8Map Smg_a & Smg_b & Smg_c & Smg_d & Smg_e & Smg_f & Smg_g
#define Bmp9Map Smg_a & Smg_b & Smg_c & Smg_d & Smg_f & Smg_g
#define BmpAMap Smg_a & Smg_b & Smg_c & Smg_e & Smg_f & Smg_g
#define BmpBMap Smg_c & Smg_d & Smg_e & Smg_f & Smg_g
#define BmpCMap Smg_a & Smg_d & Smg_e & Smg_f
#define BmpDMap Smg_b & Smg_c & Smg_d & Smg_e & Smg_g
#define BmpEMap Smg_a & Smg_d & Smg_e & Smg_f & Smg_g
#define BmpFMap Smg_a & Smg_e & Smg_f & Smg_g
const unsigned char SegCode[] = //显示段码表
{
Bmp0Map,Bmp1Map,Bmp2Map,Bmp3Map,Bmp4Map,Bmp5Map,Bmp6Map,Bmp7Map,
Bmp8Map,Bmp9Map,BmpAMap,BmpBMap,BmpCMap,BmpDMap,BmpEMap,BmpFMap
};
unsigned char DpyNum[6] = {Smg_g,Smg_g,Smg_g,Smg_g,Smg_g,Smg_g}; //显示缓冲区
unsigned char RxBuffer[16] = {0,0,0,0}; //串口接收缓冲区
unsigned char SysTick = 0; //系统时基
unsigned char COM2_RecvCnt = 0; //计数清零
unsigned char COM2_RecvFlag = 0; //接收标志
unsigned char COM2_SendDatCnt = 0; //发送计数
unsigned char COM2_SendDatLength = 0; //发送长度
//-------------------------------------------------------------------------------
// 延时函数
//-------------------------------------------------------------------------------
void Delay_xmS(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{
Nop();
for(j=0;j<255;j++)
{
Nop();
ClearWDT();
}
}
}
//-------------------------------------------------------------------------------
// 串口2初始化函数
//-------------------------------------------------------------------------------
void UART2_Init(void)
{
bctl_485 = 0; // 接收模式
U2MODEbits.SIDL = 0; // IDLE工作
U2MODEbits.IREN = 0; // 禁止IrDA
U2MODEbits.UEN = 0; // 使能RX TX引脚
U2MODEbits.WAKE = 0; // 禁止唤醒
U2MODEbits.ABAUD = 0; // 禁止自动BUD
U2MODEbits.RXINV = 0; // 空闲状态为1
U2MODEbits.BRGH = 0; // 16x标准波特率
U2MODEbits.PDSEL = 0; // 8位无奇偶校验
U2MODEbits.STSEL = 0; // 1个停止位
U2STAbits.ADM_EN = 0; // 关自动地址检测
U2STAbits.UTXISEL1 = 0; // 发送完所有字符后中断
U2STAbits.UTXISEL0 = 1;
U2STAbits.UTXINV = 0; // 空闲状态为1
U2STAbits.URXEN = 1; // 接收器使能
U2STAbits.UTXBRK = 0; // 禁止发送间隔位
U2STAbits.UTXEN = 1; // 发送器使能
U2STAbits.URXISEL1 = 0; // 接收1个字符中断
U2STAbits.URXISEL0 = 0;
U2BRG = 64; // PBCLK 10MHz N 8 1 9600 BRG = 64;
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』