📄 main.c
字号:
/* ****************************************************************
** 功能描述: 串行通讯程序,单片机收到一个数据X后,向发送方返送X,X+1,X+2,X+3。每次只能发一个数据,延时一定时间后才能发下一个数据。不能向单片机同时发一串数据(连续发送)。若要实现一串数据的处理,可用数据存储接收数据再发送。
*************************************************************** */
#include "pic18.h" /* 所有PIC18系列的头文件 */
unsigned char recdata; //接收数据寄存器
unsigned i,No; // 定义循环用变量
unsigned char SciReceiveFlag=0; /* =1表示接收到新数据,=0表示未接收到新数据 */
/* ****************************************************************
** 函 数 名: initial()
** 功能描述: 系统初始化子程序,放在程序首部
*************************************************************** */
void initial()
{
INTCON=0x00; /* bit7-bit0:关总中断 */
ADCON1=0X07; /* 设置数字输入输出口 */
PIE1=0; /* PIE1 的中断不使能 */
PIE2=0; /* PIE2 的中断不使能 */
PIE3=0; /* PIE3 的中断不使能 */
}
/* ****************************************************************
** 函 数 名: sciinitial()
** 功能描述: 232串行通讯初始化子程序,设置低优先级中断接收,使能232收和发
*************************************************************** */
void sciinitial()
{
TXSTA=0x04; // 选择异步高速方式传输8位数据
RCSTA=0x80; // 允许串行口工作使能
TRISC=TRISC|0X80; // PIC18F458:将RC7(RX)设置为输入方式
TRISC=TRISC&0Xbf; // RC6(TX)设置为输出
SPBRG=25; // 4M晶振时波特率为25
PIR1=0x00; // 清中断标志
PIE1=PIE1|0x20; /* 允许串行通讯接口接收中断使能 */
RCIP=0; // 设置SCI接收中断为低优先级中断
CREN=1; // 允许串口接收数据
TXEN=1; // 允许串口发送数据
}
/* ****************************************************************
** 函 数 名: interrupt low_priority LOW_ISR()
** 功能描述: 低优先级中断子程序:RS232接收中断
*************************************************************** */
void interrupt low_priority LOW_ISR()
{
if(RCIF==1) // RS232接收中断
{
RCIF=0; // 清接收中断标志
recdata=RCREG; // 接收数据并存储
SciReceiveFlag=1; // 置接收到232数据标志
}
}
main()
{
initial(); // 系统初始化
sciinitial(); // 串行通讯初始化子程序
IPEN=1; // 使能中断高低优先级
INTCON=INTCON|0xc0; // 开总中断、开外围接口中断
while(1)
{
if(1==SciReceiveFlag) /* 是否接收到通信数据 */
{
SciReceiveFlag=0; /* 清接收到通信数据标志 */
No=0; /* 发送数据个数清0 */
for(i=0;i<4;i++)
{
TXREG=recdata++; /* 发送数据recdata,recdata+1,…,recdata+3 */
No++; /* 返送数据个数加1 */
while(1) /* 等待发送完成 */
{
if(TXIF==1) break; /* 发送完成,退出等待 */
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -