首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心理工论文电子通信
   PIC18FXX8单片机通用同步异步收发器的编程应用      ★★★ 【字体: 】  
PIC18FXX8单片机通用同步异步收发器的编程应用
收集整理:佚名    来源:本站整理  时间:2009-01-10 22:54:43   点击数:[]    

行接收和发送数据的例程,程序实现功能:PIC18单片机接收到PC机下发的8个数据后,将收到的8个数据以中断或非中断发送方式返送回PC机。

#include "pic18.h"    /* PIC18系列的头文件 */
unsigned char receive232[8];  /* 接收数据数组 */
unsigned char send232[8];  /* 发送数据数组 */
unsigned char receive_count=0; /* 接收数据个数计数 */
unsigned char send_count=0;  /* 发送数据个数计数 */
unsigned char *pointer;   /* 发送数据指针 */
unsigned char i;    /* 程序中用到的循环变量 */
unsigned char SciReceiveFlag; /* =1,接收到8个数据 */
unsigned char Send_Mode=0;  /* 不为0,中断方式发送;=0,非中断方式发送 */

void sciinitial()           /* 串行通讯初始化子程序 */
{
 TXSTA=0x04;    /* 选择异步高速方式传输8位数据 */
 RCSTA=0x80;    /* 允许串行口工作使能 */
 TRISC=TRISC0X80;  /* :将RC7(RX)设置为输入方式 */
 TRISC=TRISC&0Xbf;  /* RC6(TX)设置为输出 */
 SPBRG=25;    /* 4M晶振且波特率为9600时,SPBRG设置值为25 */
 PIR1=0x00;    /* 清中断标志 */
 PIE1=PIE10x20;   /* 允许串行通讯接口接收中断使能 */
 RCIP=0;     /* 设置SCI接收中断为低优先级中断  */
 CREN=1;     /* 允许串口连续接收数据 */
 if(0==Send_Mode) TXEN=1; /* Send_Mode=0,非中断方式发送,串口发送数据使能 */
 else      /* Send_Mode=1,中断方式发送 */
 {
  PIE1=PIE10x10;  /* 允许中断发送 */
  TXIP=0;    /* 发送低优先级中断 */
 }
}

void interrupt low_priority LOW_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个数据标志 */
  }
 }
 else if((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=INTCON0xc0;    /* 开总中断、开外围接口中断 */
 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;i<8;i++)
    {
     TXREG=*pointer++; /* 发送数据后,将发送指针加1 */
     while(1)    /* 等待发送完成 */
     {
      if(TXIF==1) break; /* 等待发送完成 */
     } 
    }
   }
  }
 }
}

参考文献
[1] Microchip Technology Inc. PIC18FXX8 Data Sheet.2003.



上一页  [1] [2] 


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:基于DSP的Bluetooth嵌入式系统应用

  • 下一篇文章:基于μPD78F0034单片机的出租车计费器的设计与实现
  • 返回上一页】【打 印】【关闭窗口
    中查找“PIC18FXX8单片机通用同步异步收发器的编程应用”更多相关内容 5VAR论文频道
    中查找“PIC18FXX8单片机通用同步异步收发器的编程应用”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››嵌入式系统的通信规约管理平台设计...
  • ››一种基于七号信令的局间话单采集系...
  • ››对于变频器的制动技术分析
  • ››电子文件管理元数据宏观结构多维分...
  • ››浅论卫星电视接收机的常见故障的检...
  • ››信息时代网络用户信息检索焦虑的心...
  • ››论GIS在高校房产管理中的实际应用
  • ››关于电力通信发展战略的思考 金李莎...
  • ››2G、3G切换精细化优化分析思路探讨...
  • ››光纤自动化生产的需求与时机
  • ››PIC16F877单片机的图形液显示模块接...
  • ››PIC18FXX8单片机通用同步异步收发器...
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .