搜索
bottom↓
回复: 4

请教PIC16F1933怎样通过串口发送数据

[复制链接]

出0入0汤圆

发表于 2019-10-3 17:30:36 | 显示全部楼层 |阅读模式
我用单片机PIC16F1933的内部4M Hz振荡,想通过单片机的串口脚TX发送数据出去。程序如下:
//PIC16F1933无外部晶振,使用内部4M振荡
//RC6做TX,  RC7做RX
#include <htc.h>

  //配置字1
  __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_ON & CPD_ON & BOREN_ON &
      CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF);

  //配置字2
  __CONFIG(WRT_ALL & VCAPEN_OFF & PLLEN_OFF & STVREN_ON & BORV_25 & LVP_ON);

  typedef unsigned char UCHAR;
  typedef unsigned int UINT;
volatile UCHAR cRC_Dat[30];

void PortInit1933(void);
void UARTinit(void);
void DLYxmS(UCHAR ci);
void DLYx10mS(void);

  void PortInit1933(void)
  {
   ANSELA=0x0;
   SRCON0=0x0;
   TRISA=0x8;     //RA4接Busy输出,RA3接/strobe输入
   LATA=0x8;      //RA4 0,RA3 1

   ANSELB=0x0;
   TRISB=0x3;     //RB0接<-DB6, RB1接<-DB7
   LATB=0xc3;      //RB7,RB6是ISP引脚 RB0输入, RB1输入
   OPTION_REG=0x0; //允许弱上拉
   WPUB=0x3;      //RB0、RB1上拉
   LCDCON=0x0;    //禁止LCD

   TRISC=0xff;    //RC7-RX in,RC6-TX out, RC5~0 in  
   LATC=0xff;     //
  }

  void UARTinit(void)
  {
   SPBRGH=0x0;
   SPBRGL=25;     //9600bps
   BAUDCON=0x0;   //BRG16=0
   //bit4:SYNC 0=异步模式 ,bit3: SENDB 1=在下一次发送时发送同步间隔字符 (完成时由硬件清零)
   //bit2:高波特率选择位,1  = 高速;;bit1:TRMT 发送移位寄存器状态位,1  = TSR 为空
   //bit0:TX9D 发送数据的第 9 位
   TXSTA=0xc;     //,
   RCSTA=0x80;    //bit7:SPEN=1使能串口, bit4:CREN连续接收使能位 0  = 禁止接收器

  }

void DLYxmS(UCHAR ci)
{

UINT ix;
for(; ci !=0; ci--)
   {
           for(ix=0x7fff; ix !=0; ix--)  //ix=0x145
        {
              asm("nop");
        }   
   }
}

void DLYx10mS(void)
{
UINT ix;
for(ix=0x589; ix !=0; ix--)  //ix=0x145
   {
           asm("nop");
   }
}

void main(void)
{
volatile UCHAR ci;
OSCCON = 0x6a;    //4MHz  01101010
do
   {
    asm("nop");
    ci = OSCSTAT;   //bit 4 HFIOFR:高频内部振荡器就绪位,1  = HFINTOSC 就绪
   }while(!(ci & 0x10));  // Internal Clock Oscillator Status Stable bit

DLYx10mS();  
PortInit1933();
UARTinit();
for(;;)
   {
    TXEN=1;
        for(ci=0;ci<25;ci++)
          {       
           cRC_Dat[ci]=ci;
           TXREG=cRC_Dat[ci];
          
           DLYx10mS();
          }               
    DLYxmS(250);
        TXEN=0;       
        DLYxmS(250);
   }
}       

编译烧录正常,就是发不出数据。向大伙求助,哪里错了?请指点

出0入0汤圆

 楼主| 发表于 2019-10-4 09:14:23 | 显示全部楼层
在 void PortInit1933(void)函数里,将TRISC=0xff改成TRISC=0xbf后,发送出来的全是00,00

出0入0汤圆

 楼主| 发表于 2019-10-4 14:05:37 | 显示全部楼层
本帖最后由 wiisir 于 2019-10-4 16:30 编辑

我改用外部晶体振荡器,还是一样。用示波器看晶振波形。一会振荡,一会不振荡。应该原因是反复自动复位。可是我没开看门狗啊。问题还没有解决啊

出0入0汤圆

发表于 2019-10-4 18:19:27 来自手机 | 显示全部楼层
装mplab x ide用Mcc配置下看

出0入0汤圆

 楼主| 发表于 2019-10-5 20:43:45 | 显示全部楼层
ersha4877 发表于 2019-10-4 18:19
装mplab x ide用Mcc配置下看

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

本版积分规则

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

GMT+8, 2024-4-20 04:11

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

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