搜索
bottom↓
回复: 1

请求帮忙:78F0513A串口的UART6发送异常。已贴上代码

[复制链接]

出0入0汤圆

发表于 2013-3-21 14:28:19 | 显示全部楼层 |阅读模式
/*--------------------选项字节配置------------------------*/
#pragma location = "OPTBYTE"
__root const unsigned char opbyte0 = 0x00;//屏蔽看门狗,内部低速振荡器可由软件停止
#pragma location = "OPTBYTE"
__root const unsigned char opbyte1 = 0x00;//设置POC模式为1.5v默认模式
#pragma location = "OPTBYTE"
__root const unsigned char opbyte2 = 0x00;//选项字节保留区域
#pragma location = "OPTBYTE"
__root const unsigned char opbyte3 = 0x00;//选项字节保留区域
#pragma location = "OPTBYTE"
__root const unsigned char opbyte4 = 0x00;//禁止片上调试功能

/*---------------------------------------------------------
通讯--初始化
----------------------------------------------------------*/
void UART6_Init()
{
  TXE6 = 0;        // 停止发送
  RXE6 = 0;        // 停止接收
  
  STMK6 = 1;        // 屏蔽发送完成中断
  SRMK6 = 1;        // 屏蔽接收完成中断
  SREMK6 = 1;// 屏蔽接收完成错误中断
  
  STIF6 = 0;        // 清除发送完成中断标志
  SRIF6 = 0;        // 清除接收完成中断标志
  SREIF6 = 0;        // 清除接收完成错误中断标志
  
  ASIM6 = 0x05; // 关闭接收错误中断、数据位8位、停止位1位、无校验位
  ASICL6 = 0x16;// 低位先传送,输出方式--正常
  CKSR6 = 0x01; // 系统内部时钟8M    Fprs/2 = 4M
  BRGC6 = 0xD0; // 208   波特率= 4/2*208 = 9615.3846  误差0.16%
  
  STPR6 = 0;    // INTST6 优先级:低
  SRPR6 = 1;    // INTSR6 优先级:低
  SREPR6 = 1;   // INTSRE6 优先级:低
  
  //STMK6 = 1;        // 屏蔽发送完成中断
  //SRMK6 = 1;        // 屏蔽接收完成中断
  //SREMK6 = 1;        // 屏蔽接收完成错误中断
  
  POWER6 = 1;// uart6 使能:开
  TXE6 = 1;        // uart6 发送:开
  RXE6 = 0;        // uart6 接收:关
  
  TxD6 = 1;     //发送IO口电平拉高
}

/*---------------------------------------------------------
通讯--发送数据
----------------------------------------------------------*/
void UART6_Send()
{
  UART6_DE = 1;
  
  UART6_TX_ADDRESS = &UART6_TX_BUFF[0];
  UART6_TX_CNT = 1;
  
  STMK6 = 1;
  TXB6 = *UART6_TX_ADDRESS;
  UART6_TX_ADDRESS++;
  UART6_TX_CNT--;
  STMK6 = 0;  
  NOP();NOP();
}

/*--------------------------------------------------------------------------
串口发送数据中断函数
---------------------------------------------------------------------------*/
#pragma vector = INTST6_vect
__interrupt void MD_INTST6()
{
  if(UART6_TX_CNT > 0)//发送未完成
  {
    TXB6 = *UART6_TX_ADDRESS;
    UART6_TX_ADDRESS++;
    UART6_TX_CNT--;
  }
  else
  {
    UART6_SEND_OK = 1;
  }
  
  STIF6 = 0;
}
我设定买一秒发送一次,但是我用示波器抓TxD6脚,有的时候有数据发出,有的时候没有数据发出,不知道是什么问题,请求帮助!

出0入0汤圆

 楼主| 发表于 2013-4-17 09:33:32 | 显示全部楼层
竟然没有人回复。。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 23:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表