📄 main.c
字号:
#include "main.h"
/******************************
modbus RTU 程序
单片机pic16f917
通信波特率 9600 8位数据 1位停止位 485通信接口
单片机控制板地址 localAddr(变量)
通信可设置数据的地址:
字地址 0 - 255 (只取16位的低8位)
位地址 0 - 255 (只取16位的低8位)
*******************************/
uint8 sendBuf[16],receBuf[16]; //发送接收缓冲区
uint8 receTimeOut; //接收超时
bank2 uint16 bt1ms,g_wLstTick; //定时计数
bank2 uint8 g_bRcvedOK, byTemp;
// 串行中断程序
void interrupt commIntProc(void)
{
if(TXIF)
{
TXIF= 0;
if(sendPosi <=sendCount)
{
TXREG = sendBuf[sendPosi];
sendPosi++;
}
else
{
// receCount = 0; //清接收地址偏移寄存器
sendPosi =0;
b485Send = 0; //发送完后将485置于接收状态
TXIE =0; //关闭发送中断
TXEN = 0;
RCIE =1;
}
}
if(RCIF)
{
RCIF= 0;
if(receCount < 16)
{//最多一次只能接收16个字节
receBuf[receCount] = RCREG;
g_wLstTick = bt1ms;
receCount++; //接收地址偏移寄存器加1
}
else
{
byTemp = RCREG;
}
}
//定时器2处理
if(TMR2IE && TMR2IF)
{
TMR2IE = 0;
TMR2IF = 0;
bt1ms++;
if(bt1ms-g_wLstTick > 100 && receCount>0)
{
//这一帧结束
g_bRcvedOK = 1;
}
TMR2IE = 1;
}
}
/*
//定时处理
void timeProc(void)
{
TMR2IE = 0;
if(bt1ms==10)
{
bt1ms = 0;
if(receTimeOut>0)
{
receTimeOut--;
if(receTimeOut==0 && receCount>0 ) //判断通讯接收是否超时
{
b485Send = 0; //将485置为接收状态
receCount = 0; //将接收地址偏移寄存器清零
}
}
}
TMR2IE = 1;
}
*/
//初始化串口
void initUart(void)
{
//初始化UART
SPBRG = 51;//12M--18,11.0592--17
TXSTA = 0x04;
RCSTA = 0x90;
RCIF = 0;
TXIF = 0;
RCIE = 1;
PEIE =1;
b485Send = 0;
TRISC4 = 0;
}
//初始化中断
void initInt(void)
{
//=====================================================
//T2定时1ms
PR2 = 128;
T2CON |= 0x07;//四分频
PIE1 |= 0x02;//enable timer2
PIR1 &= 0xfd;//clear timer2 interrupt flag
//=====================================================
initUart();
GIE = 1;
}
void SetPort(void)
{
//关闭LCD
LCDCON = 0x40;
LCDPS = 0;
LCDSE0 = 0;
LCDSE1 = 0;
LCDSE2 = 0;
LCDA = 0;
PORTC = 0x00;
TRISC = 0x80;
}
//初始化
void initProg(void)
{
initInt();
b485Send = 0;
}
void main(void)
{
int iLp;
receCount =0;
INTCON=0; // purpose of disabling the interrupts.
SetPort();
initProg();
while(1)
{
// timeProc();
// for(iLp=0; iLp<10000; iLp++);
checkComm0Modbus();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -