打印
[程序源码]

关于串行同信!

[复制链接]
956|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
azdd|  楼主 | 2016-10-24 20:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我用pic16f1825单片机按照说明书中的寄存器编了一个串行通信的程序,测试时能接收到数据,但全是乱码,这可能是什么原因引起的,程序如下。

// CONFIG1
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON       // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON        // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = ON       // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON         // Low-Voltage Programming Enable (Low-voltage programming enabled)

#include<pic.h>
#define uint unsigned int
#define uchar unsigned char
void init();
void interrupt com();
void main()
{

QQ图片20161024201347.png (41.74 KB )

测试就是乱码

测试就是乱码

相关帖子

沙发
azdd|  楼主 | 2016-10-24 20:15 | 只看该作者
好像有字数限制,具体程序如下
void init();
void interrupt com();
void main()
{
        init();
    TXREG=0X31;
    while(!TRMT);
        while(1);
}
void init()
{
    OSCCON=0X6A;     //4MHz                                       
    TRISC=0XFF;
    TXSTA=0X24;
    RCSTA=0X90;
    //BAUDCON=0X08;
    BRG16=1;
    SPBRGH=0X67;
    SPBRGL=0X01;
    //SPBRG=0XCEO1;
    GIE=1;
        PEIE=1;
        RCIE=1;
    }
void interrupt com()
{
        if(RCIE&&RCIF)
        {
      //  RCIF=0;
                TXREG=RCREG;
                while(!TRMT);
        }
}

使用特权

评论回复
板凳
NE5532| | 2016-10-25 08:44 | 只看该作者
示波器查看波特率是否正确。

使用特权

评论回复
地板
长的帅怪我落| | 2016-10-25 08:56 | 只看该作者
乱码大多是因为波特率的原因

使用特权

评论回复
5
yichunshan| | 2016-10-25 09:04 | 只看该作者
你发的是ASCII吗?

使用特权

评论回复
6
azdd|  楼主 | 2016-10-25 14:11 | 只看该作者

是的,我发给单片机,单片机再返回来应该不需要把发的字符转换吧?

使用特权

评论回复
7
azdd|  楼主 | 2016-10-25 14:12 | 只看该作者

是的,我发给单片机,单片机再返回来应该不需要把发的字符转换吧?

使用特权

评论回复
8
azdd|  楼主 | 2016-10-25 14:13 | 只看该作者
长的帅怪我落 发表于 2016-10-25 08:56
乱码大多是因为波特率的原因

我按照单片机说明书一步一步算出来的,应该没有什么问题吧,我再去算一遍

使用特权

评论回复
9
azdd|  楼主 | 2016-10-25 14:15 | 只看该作者
长的帅怪我落 发表于 2016-10-25 08:56
乱码大多是因为波特率的原因

我按照单片机说明书一步一步算出来的,应该没有什么问题吧,我再去算一遍

使用特权

评论回复
10
yichunshan| | 2016-10-25 15:42 | 只看该作者
你先试试只发一个字节

使用特权

评论回复
11
azdd|  楼主 | 2016-10-25 17:18 | 只看该作者
yichunshan 发表于 2016-10-25 15:42
你先试试只发一个字节

发一个字节没有返回值

使用特权

评论回复
12
ningling_21| | 2016-10-25 18:51 | 只看该作者
azdd 发表于 2016-10-25 17:18
发一个字节没有返回值

重点检查波特率

使用特权

评论回复
13
azdd|  楼主 | 2016-10-26 15:46 | 只看该作者

好吧,我再去查一遍

使用特权

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

本版积分规则

28

主题

86

帖子

1

粉丝