新闻中心

EEPW首页>嵌入式系统>设计应用> PIC单片机通用同步异步收发器的编程应用

PIC单片机通用同步异步收发器的编程应用

作者: 时间:2011-12-28 来源:网络 收藏

voidinterrupt low_priorityLOW_ISR()/* 低优先级中断子程序 */
{
if(RCIF==1)/* RS232接收中断 */
{
RCIF=0;/* 清中断标志 */
receive232[receive_count]=RCREG;/* 接收数据并存储 */
send232[receive_count]=RCREG; /* 接收数据存放到发送缓冲数组 */
receive_count++;/* 接收计数器加1 */
if(receive_count>7)/* 如果已经接收到8个数据 */
{
receive_count=0;/* 接收计数器清0 */
SciReceiveFlag=1;/* 置接收到8个数据标志 */
}
}
elseif((0!=Send_Mode)(TXIF==1))/* 中断发送数据方式且为发送中断 */
{
if(send_count>7)/* 已经发送完8个数 */
{
TXEN=0;/* 发送不使能 */
return;
}
else
{
send_count++;/* 发送计数器加1 */
TXREG=*pointer++;/* 发送当前应发送数据,发送指针加1 */
}
}
}

main() /* 主程序 */
{
INTCON=0x00;/* 关总中断 */
ADCON1=0X07;/* 设置数字输入输出口,不用作模拟口 */
PIE1=0;/* PIE1 的中断不使能 */
PIE2=0;/* PIE2 的中断不使能 */
PIE3=0;/* PIE3 的中断不使能 */
Send_Mode=1;/* Send_Mode不为0,中断方式发送数据;
Send_Mode =0,非中断方式发送数据 */
sciinitial();/* 串行通讯初始化子程序 */
IPEN=1;/* 使能中断高低优先级 */
INTCON=INTCON|0xc0;/* 开总中断、开外围接口中断 */
while(1)
{
if(1==SciReceiveFlag)/* 是否接收到8个通信数据 */
{
SciReceiveFlag=0;/* 清接收到8个通信数据标志 */
if(0!=Send_Mode) /* Send_Mode不为0,中断方式发送 */
{
send_count=0;/* 发送数据计数清0 */
pointer=send232[0];/* 发送指针指向发送数据数组首地址 */
TXREG=*pointer++;/* 发送第一个数据后,将发送指针加1 */
TXEN=1;/* 使能发送 */
}
else /* Send_Mode =0,非中断方式发送数据 */
{
pointer=send232[0];/* 发送指针指向发送数据数组首地址 */
for(i=0;i8;i++)
{
TXREG=*pointer++;/* 发送数据后,将发送指针加1 */
while(1)/* 等待发送完成 */
{
if(TXIF==1)break;/* 等待发送完成 */
}
}
}
}
}
}


上一页 1 2 3 下一页

关键词:PIC18FXX8串行通信

评论


相关推荐

技术专区

关闭