商业联盟  用户: 密码: 注册  忘记密码
会员专区 会员手册 增值服务 帮助 商业论坛 “帖不够”广告信息


商业中国
博雅艺术
经营管理

专题
 
 您当前的位置:首页>>行业分类>>电子电气>>技术知识>>设计方案>>正文
PIC18FXX8单片机通用同步异步收发器编程
  发布时间:2006-1-28 15:35:15 阅读次数:
来源:21IC中国电子网 作者:刘钊 刘和平 王春燕
 


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=TRISC|0X80;  /* :将RC7(RX)设置为输入方式 */
 TRISC=TRISC&0Xbf;  /* RC6(TX)设置为输出 */
 SPBRG=25;    /* 4M晶振且波特率为9600时,SPBRG设置值为25 */
 PIR1=0x00;    /* 清中断标志 */
 PIE1=PIE1|0x20;   /* 允许串行通讯接口接收中断使能 */
 RCIP=0;     /* 设置SCI接收中断为低优先级中断  */
 CREN=1;     /* 允许串口连续接收数据 */
 if(0==Send_Mode) TXEN=1; /* Send_Mode=0,非中断方式发送,串口发送数据使能 */
 else      /* Send_Mode=1,中断方式发送 */
 {
  PIE1=PIE1|0x10;  /* 允许中断发送 */
  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=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;i<8;i++)
    {
     TXREG=*pointer++; /* 发送数据后,将发送指针加1 */
     while(1)    /* 等待发送完成 */
     {
      if(TXIF==1) break; /* 等待发送完成 */
     }
    }
   }
  }

本新闻共3页,当前在第2页  1  2  3  

 
行业知识    
机械电子 能源化工 矿产物流 建材房产 纺织家电 手机通讯 医卫医改 财经商务 股票期货
媒体动漫 广告旅游 教育农业 餐饮娱乐 钢铁汽车 政策法律 碑帖青铜 书法国画 陶瓷收藏

相关新闻                    办公软件应用
·SAM8系列S3C825A型单片机及其软件设计
·AVR单片机捕获中断实现红外线解码
·AT89C52单片机 ARINC429航空总线接口设计
·C51系列单片机设计物体分级设备测量光幕
·用ZHX1010实现单片机之间的红外通信
热点新闻
 
相关 连接  
 
 
站内搜索
    
最新新闻
·绿色能源的五种优势
·太阳能
·可燃冰
·氢能
·天然气
·乙醇汽油
·生物质能
·风能
·水能
·核能

热点话题         行行出状元!
 
Google
关键词导航
商业 机械 创业 车床 化工 期货 股票 财经
 
 
 
Google
 
Web www.Bizing.com