PIC单片机-RS232串口通信

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_32582203/article/details/60324516

编写程序实现以下功能。在计算机上使用串口大师向开发板发每次发送1个字符。开发板每接收到一个数据,则交换该数据的高低4位,再发送回计算机。

端口初始化时使能发送与接收,使用扫描方式接收数据,接收到数据后立即交换高低四位并发送,交换高低四位方式如下:

i = ((RCREG & 0xff) << 4) | (RCREG >> 4)

完整程序:

/*******************************************************************************
* 标    题: 异步串口通讯
* 功能描述: 在计算机上使用串口大师向开发板发每次发送1个字符。
* 开发板每接收到一个数据,则交换该数据的高低4位,再发送回计算机。
********************************************************************************/
#include <htc.h>

#define uint8 unsigned char
#define uint16 unsigned int

__CONFIG(FOSC_HS &WDTE_OFF &BOREN_OFF &PWRTE_OFF &LVP_OFF); //设置配置位
//WDTE_OFF:disable watchdog timer       看门狗禁止
//LVP_OFF:low voltage programming disabled  低电压编程禁止
//FOSC_HS:high speed crystal/resonator  4M以上晶振选择HS高速
//PWRTDIS:disable power up timer
//BOREN_OFF:disable brown out reset

/***************************声明函数*******************************************/

void SCI_Init(void); //串口初始化

/*******************************************************************************
* 函 数 名: SCI_Init(void)
* 函数功能: 异步串口通讯初始化
* 入口参数: 无
* 返    回: 无
*******************************************************************************/

void SCI_Init(void)
{
    SPBRG = 129;    //高速 波特率9600
    TXSTA = 0x24;   //使能发送,8位数据
    RCSTA = 0xB0;   //8位数据接收,使能连续接收,
    TRISC6 = 1;     //设置为输入状态
    TRISC7 = 1;
}

/******************************************************************************
* 函 数 名: mian(void)
* 函数功能: 接收到一个数据,交换该数据的高低4位,再发送回计算机
* 入口参数: 无
* 返    回: 无
*******************************************************************************/

void main(void)
{
    uint8 i;
    SCI_Init();     //串口初始化
    while(1)
    {
        if(RCIF == 1)   //等待接收
        {
            i = ((RCREG & 0xff) << 4) | (RCREG >> 4); //交换接收到的数据高低四位,存放于i
            TXREG = i; //发送数据
            while(TRMT == 0); //等待发送完成
        }
    }
}
展开阅读全文

请教pic单片机与传感器串口通信问题

08-23

[color=#FF0000](模块与单片机是通过USATR通信)我写了一个关于AHRS的程序用来测量加速度,陀螺仪值,磁场,但是在晃动PCB时Watch窗口的值一直没有更新(程序进不了中断)不知道为什么,求助大家。(我用的是MPLAB IDE V8.8 编译工具MCC18. 编译通过)。麻烦大家审下代码,谢谢大家:[/color]rn#include rn#include rn#include rn#define uchar unsigned charrn#define uint unsigned intrnrn//^^^^^^^^^^^^^^^^^^^^^配置位的软件设置^^^^^^^^^^^^^^^^^^^^^^//rn#pragma config WDT = OFF //看门狗禁止rn#pragma config OSC = HS //晶振rn#pragma config LVP = OFF //低电压编程禁止rnrnrnfloat Acc[3],Gyr[3],Mag[3],rpy[3];rnfloat ROLL,PITCH,YAW;rnunsigned char Re_buf[11];rnunsigned char sign;rnunsigned char counter=0;rnrnrn//********串口函数声明*******// rnvoid USART_Init(void);rnvoid USART_SendByte(char dat);rnvoid USART_SendStr(unsigned char *ptr,unsigned char length);rn//void UartReceive();rnrnvoid delayms(unsigned char time) //延时函数rnrn unsigned char i;rn unsigned char s;rn for(s=time;s<0;s--)rn for(i=192;i;i--);rnrnrn//^^^^^^^^^^^^^^^^^^^^^单片机串口初始化^^^^^^^^^^^^^^^^^^^^^^//rnvoid USART_Init(void) rnrn TRISCbits.TRISC7=1; //IO方向初始化RC7、RC6口设置为输入rn TRISCbits.TRISC6=1; rn PIE1bits.RCIE=1; //串口接收中断rn PIE1bits.TXIE=1; //串口发送中断 rn RCSTA=0x90; //使能串行端口,使能连续接收rn TXSTA=0x24; //使能发送,高速波特率 rn SPBRG=51; //设置波特率寄存器X=51,波特率为9600;波特率=Fosc/[16(X+1)]rn INTCON=0xC0; //全局中断GIE打开;使能外部中断PEIErnrn//^^^^^^^^^^^字节发送函数^^^^^^^^^^^^^^^^^^^//rnvoid USART_SendByte(char dat)rnrn TXREG=dat;rn while(!TXSTAbits.TRMT);rnrn//^^^^^^^^^^^字符串发送函数^^^^^^^^^^^^^^^^^^^//rnvoid USART_SendStr(unsigned char *ptr,unsigned char length) //*s^^^^ptrrnrn int i=0;rn while(i 论坛

没有更多推荐了,返回首页