搜索
bottom↓
回复: 11

PIC18F66J90串口通信的问题,求大神帮忙看下

[复制链接]

出0入0汤圆

发表于 2016-1-5 12:26:49 | 显示全部楼层 |阅读模式
下面是小弟写的程序:
#include "Allinclude.h"
/**********************************宏定义*************************************/
#pragma config OSC = INTOSC
#pragma config WDTEN = OFF
#define uchar unsigned char
#define uint unsigned int
//中断声明
void PIC18F_High_isr (void);
void PIC18F_Low_isr (void);
#pragma code high_vector_section=0x8        
void high_vector (void)
        {
           _asm goto PIC18F_High_isr _endasm
        }

#pragma code low_vector_section=0x18

void low_vector (void)
        {
           _asm goto PIC18F_Low_isr _endasm
        }

#pragma code  
//变量
uchar j;
uchar sendflag=0;
unsigned char LCDBuffer[2];
//系统时钟
void InitClok()
{
OSCCON=0x70;
}
//串口配置
void InitUart()
{
            TRISCbits.TRISC7=1;
            TRISCbits.TRISC6=1;                 // Set output for TXD
            BAUDCON1bits.BRG16=0;       //8位波特率发生器
                    TXSTA1bits.TX9=0;           //选择8位发送
                    TXSTA1bits.TXEN=1;          //发送使能
                    TXSTA1bits.SYNC=0;          //异步模式
            TXSTA1bits.BRGH=1;          //高速模式
            RCSTA1bits.SPEN=1;          //使能串口
            RCSTA1bits.RX9=0;           //选择8位接收
            RCSTA1bits.CREN=1;          //接受数据允许
            SPBRG=51;                 //波特率9600,8MHZ,0,1
            
}
//中断初始化
void Interrupt_Init()
{
PIE1bits.RCIE=1;    //允许USART接收中断
PIR1bits.RCIF=0;    //清USART接收中断标志
RCONbits.IPEN=0;    //低优先级中断
INTCON  |= 0xC0;   //CPU开中断并允许外设中断
}
//发送数据
void putch(unsigned char byte)        //发送一个字节的数据
{
        TXREG = byte;
        while(TXSTA1bits.TRMT==0)
        {
        Delay1KTCYx(10);
        }
        return;   
}
//主函数
void main(void)
{
InitClok();
InitUart();
Interrupt_Init();
while(1)
{
if(sendflag==1)
{
sendflag=0;
for(j=0;j<2;++j)
{
putch(LCDBuffer[j]);
}
}
}
}
/******************************---高优先级中断服务程序---*************************/

#pragma interrupt PIC18F_High_isr

void PIC18F_High_isr (void)
        {
    if(PIR1bits.RCIF&&PIE1bits.RC1IE)
    {

       LCDBuffer[j]=RCREG;  //保存每一次接收到的数?
   
             ++j;
                   if(j>2)
                           {
                       
        sendflag=1;
                j=0;
                           }
                       
    }

}
/******************************---低优先级中断服务程序---**************************/

#pragma interruptlow PIC18F_Low_isr
void PIC18F_Low_isr (void)
        {
                
         }
芯片用的是PIC18F66J90   串口通信中 串口调试助手是截图 如下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2016-1-5 12:29:18 | 显示全部楼层
还有就是单字节发送的时候  先发送0X55  然后 换成发送0X33   助手显示换数据发送以后 仍然会接受一段时间0X55  才会变成0X33  这个又是什么原因 求大神告知  卡好久了  这2个问题

出0入0汤圆

发表于 2016-1-5 12:33:08 | 显示全部楼层
WINDOWS反应很慢啊。

出0入0汤圆

 楼主| 发表于 2016-1-5 12:39:44 | 显示全部楼层
TBG1 发表于 2016-1-5 12:33
WINDOWS反应很慢啊。

没办法  公司只有这个系统  

出0入0汤圆

发表于 2016-1-5 21:26:55 | 显示全部楼层
if(j>2) 应改为 if(j>=2)吧,要不然接收数据保存数组会溢出吧,另换一个好用的串口调试助手

出0入0汤圆

 楼主| 发表于 2016-1-6 08:13:48 | 显示全部楼层
tdh03z 发表于 2016-1-5 21:26
if(j>2) 应改为 if(j>=2)吧,要不然接收数据保存数组会溢出吧,另换一个好用的串口调试助手 ...

谢谢  我试试

出0入0汤圆

 楼主| 发表于 2016-1-6 09:06:45 | 显示全部楼层
tdh03z 发表于 2016-1-5 21:26
if(j>2) 应改为 if(j>=2)吧,要不然接收数据保存数组会溢出吧,另换一个好用的串口调试助手 ...

不行   结果还是一样的  

出0入0汤圆

发表于 2016-1-6 10:11:19 | 显示全部楼层
发送也应该放在中断里....RAM放一段缓存,要发的数据全放里面...中断里一个一个往外送...

中断里PIC发数据时,

TXSTA1bits.TXEN=1;  //主程序里这条就是直接跳到中断里发送字节了....

好好的程序非要加while弄出阻塞,何必呢...

出0入0汤圆

发表于 2016-1-6 19:58:56 | 显示全部楼层
说实话,需要加强下C语言的练习
仔细看了下,j 是全局变量,你在中断和主循环中都进行了操作,很容易出现意想不到的后果,你发送2个字节看看,应该可以收到2个字节,但连续发送多个字节,估计不对

出0入0汤圆

 楼主| 发表于 2016-1-7 08:55:46 | 显示全部楼层
tdh03z 发表于 2016-1-6 19:58
说实话,需要加强下C语言的练习
仔细看了下,j 是全局变量,你在中断和主循环中都进行了操作,很容易出现意 ...

嗯  我也考虑到了这一点  但是如果把主函数的J 改成其他变量 根本无法通信    这点想不明白   这个程序 只能通信编译以后的第一次   第二次  第三次发送数据 就不行   

出0入0汤圆

 楼主| 发表于 2016-1-7 09:04:43 | 显示全部楼层
tdh03z 发表于 2016-1-6 19:58
说实话,需要加强下C语言的练习
仔细看了下,j 是全局变量,你在中断和主循环中都进行了操作,很容易出现意 ...

刚试了一下  虽然还有些数据丢包 但是 大部分数据 已经能通信成功   而已可以持续通信了

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-2 22:12

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

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