打印
[PIC®/AVR®/dsPIC®产品]

PIC12LF1822串口通信求助,弄了一个多星期了,看不出了实在·~

[复制链接]
1371|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
robin_chen559|  楼主 | 2013-12-12 09:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

要实现通过串口助手给单片机发一个数据,单片机再把数据回发给串口助手。仿真和ICD3在线调试都试了。能接收,放了颗LED做测试,但数据不对,也发不回来。

俺的智能蓝牙遥控调光LED格栅灯还差蓝牙遥控部分,实现了俺开源,大家一玩。
/************************************************************
项目名称:串口接收
要求:串口接收/发送
设计:robin_chen559
日期:2013.12.05
备注:
************************************************************/
#include<pic.h>              //包含头文件pic12lf1822.h
#include<stdio.h>

#define LED_G  RA0             //RA0为LED_G口
#define uchar unsigned char
#define uint  unsigned int

uchar Uart_Data = 0x00;


//子程序声明

void Init_star(void);       //系统初始化
void Init_UART(void);       //串口初始化
void Delay_MS(uint MS);     //延迟子程序

//子程序
void Init_star(void)        //系统初始化子程序
{
   OSCCON = 0b01101010;        //4M系统时钟
   APFCON = 0b10000100;        //端口复用定义RA5/4 RD TX,RA2 CPP
   TRISA  = 0b00101010;        //A口输入输出设置,RA5/1/3输入,RA4/0/2输出
   ANSELA = 0b00000000;        //RA2设模拟输入,其他全部是数字输入
}

void Init_UART(void)
{
INTCON  = 0b11000000;         //开总中断GIE,外设中断PEIE
TXIE    = 1;                  //允许发送中断
RCIE    = 1;                  //允许接收中断
TXSTA   = 0b00100110;         //串口配置字
RCSTA   = 0b10010000;         //接受寄存器配置P295
BAUDCON = 0b11001001;         //16位波特率计数器
SPBRGH  = 0b00000000;         //011,16位异步,9600波特率,查表103
SPBRGL  = 0b01111101;
}


void Delay_MS(uint MS)         //延时函数
{
  uchar i;
  uint j;

   for(i=0;i<MS;i++)        
      for(j=115;j>0;j--);         
}


void interrupt ISR(void)       //中断子程序无需声明
{
if(RCIF == 1)
{
   Uart_Data = RCREG;           //读串口数据  
   //LED_G = 0;       //test1

   TXIE   = 1;                  //开串口发送中断
   while(TXIF == 0);            //待串口准备好      
   TXREG = Uart_Data  ;         //Uart_Data
   while(TRMT == 0);            //串口发送中,等待
   TXIE   = 0;                  //防止串口发送中断一直申请
}
}


void main (void)             //主程序
{
Init_star();                //开机初始化
Init_UART();               //中断初始化


while(1)
{
   if(Uart_Data == 0x0A)
   {
    LED_G = 0;
   }
   if(Uart_Data == 0x0B)
   {
    LED_G = 1;
   }

  }
}
附件 :仿真包,原程序。malab8.7 proteus7.10
沙发
robin_chen559|  楼主 | 2013-12-12 09:19 | 只看该作者
原文件仿真包

复件 UART.rar

154.8 KB

使用特权

评论回复
板凳
yklstudent| | 2013-12-12 21:07 | 只看该作者
本帖最后由 yklstudent 于 2013-12-12 22:32 编辑

编辑原因 没看资料 说错了
看资料 重新搞了一下 把波特率设置改为固定的 接收 发送没问题了 可以控制你的小灯了

pic_UART.rar

146.62 KB

使用特权

评论回复
地板
robin_chen559|  楼主 | 2013-12-13 13:00 | 只看该作者
yklstudent 发表于 2013-12-12 21:07
编辑原因 没看资料 说错了
看资料 重新搞了一下 把波特率设置改为固定的 接收 发送没问题了 可以控制你的小 ...

兄台大才呀,弄了好久,都没找到原因。试了,十分感谢~~
找颗八脚带串口/pwm的芯片不容易,都准备看端口模拟串口程序了,太感谢了~~
俺的智能遥控LED格栅灯有最后一部分有希望的了~~~

使用特权

评论回复
5
robin_chen559|  楼主 | 2013-12-13 14:51 | 只看该作者
谢谢 yklstudent 兄台
有两个原因:
(1)波特率写错了103--》1100111又对齐01100111 SPBRGL  = 0b01100111;才对,主要是这个写错了,什么弄都是错的。
(2)BAUDCON = 0b01001000 设置固定波特率。调试的时候这个参数改了好多回,自动固定都试过,就是前头写错了。
做项目小心细致为上,一个小错误,能把人给搞死。
现以可以调出,十分感谢,下一步试试蓝牙串口了。

使用特权

评论回复
6
robin_chen559|  楼主 | 2013-12-13 15:03 | 只看该作者
十分感谢,问题得以解决~~~嗷嗷

使用特权

评论回复
7
robin_chen559|  楼主 | 2013-12-13 15:05 | 只看该作者
为哈不能结贴呢,说是分数分配错误~~

使用特权

评论回复
8
robin_chen559|  楼主 | 2013-12-13 16:03 | 只看该作者

使用特权

评论回复
9
yklstudent| | 2013-12-13 20:29 | 只看该作者
本帖最后由 yklstudent 于 2013-12-13 20:32 编辑

做好就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

300

帖子

10

粉丝