[程序源码] 关于串行同信!

[复制链接]
 楼主| 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()
{

本帖子中包含更多资源

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

×
 楼主| 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 | 显示全部楼层
乱码大多是因为波特率的原因
yichunshan 发表于 2016-10-25 09:04 | 显示全部楼层
你发的是ASCII吗?
 楼主| azdd 发表于 2016-10-25 14:11 | 显示全部楼层

是的,我发给单片机,单片机再返回来应该不需要把发的字符转换吧?
 楼主| azdd 发表于 2016-10-25 14:12 | 显示全部楼层

是的,我发给单片机,单片机再返回来应该不需要把发的字符转换吧?
 楼主| azdd 发表于 2016-10-25 14:13 | 显示全部楼层
长的帅怪我落 发表于 2016-10-25 08:56
乱码大多是因为波特率的原因

我按照单片机说明书一步一步算出来的,应该没有什么问题吧,我再去算一遍
 楼主| azdd 发表于 2016-10-25 14:15 | 显示全部楼层
长的帅怪我落 发表于 2016-10-25 08:56
乱码大多是因为波特率的原因

我按照单片机说明书一步一步算出来的,应该没有什么问题吧,我再去算一遍
yichunshan 发表于 2016-10-25 15:42 | 显示全部楼层
你先试试只发一个字节
 楼主| azdd 发表于 2016-10-25 17:18 | 显示全部楼层
yichunshan 发表于 2016-10-25 15:42
你先试试只发一个字节

发一个字节没有返回值
ningling_21 发表于 2016-10-25 18:51 | 显示全部楼层
azdd 发表于 2016-10-25 17:18
发一个字节没有返回值

重点检查波特率
 楼主| azdd 发表于 2016-10-26 15:46 | 显示全部楼层

好吧,我再去查一遍
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

86

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

28

主题

86

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部