问题描述
我知道有#use rs232命令将其激活, 但我想知道如何分别设置寄存器以激活rs232 我正在使用PIC18f13k22。
我确实这样:
INTCON = 0xc2;
IPR1 = 0x7f;
PIE1 = 0x20;
PIR1 = 0x10;
BAUDCON = 0x48;
RCSTA = 0x90;
TXSTA = 0xA6;
SPBRG = 0x82;
SPBRGH = 0x06;
我查找了PIC18f13k22数据手册,找到了相关的寄存器,并进行了这样的设置。 没用 需要帮忙! 谢谢
解决方法
这是使用Microchip MPLABX和XC8 v2.30构建的完整代码:
/*
* File: main.c
* Author: dan1138
* Compiler: XC8 v2.30
*
* Created on October 6,2020,1:41 PM
*/
#pragma config FOSC = IRC,PLLEN = OFF,PCLKEN = ON,FCMEN = OFF,IESO = OFF
#pragma config PWRTEN = OFF,BOREN = SBORDIS,BORV = 19,WDTEN = OFF
#pragma config WDTPS = 32768,HFOFST = ON,MCLRE = ON,STVREN = ON,LVP = OFF
#pragma config BBSIZ = OFF,XINST = OFF,DEBUG = OFF,CP0 = OFF,CP1 = OFF
#pragma config CPB = OFF,CPD = OFF,WRT0 = OFF,WRT1 = OFF,WRTC = OFF
#pragma config WRTB = OFF,WRTD = OFF,EBTR0 = OFF,EBTR1 = OFF,EBTRB = OFF
#include <xc.h>
#include <stdio.h>
void putch(char txData)
{
if(1 == RCSTAbits.OERR)
{
RCSTAbits.CREN = 0;
RCSTAbits.CREN = 1;
}
while(0 == PIR1bits.TXIF)
{
}
TXREG = txData;
}
void main(void)
{
OSCCON = 0x60;
OSCCON2 = 0x04;
OSCTUNE = 0x00;
LATA = 0x00;
LATB = 0x00;
LATC = 0x00;
TRISA = 0x37;
TRISB = 0x70;
TRISC = 0xFF;
ANSEL = 0xFF;
ANSELH = 0x07;
WPUB = 0x00;
WPUA = 0x00;
INTCON2bits.nRBPU = 1;
BAUDCON = 0x08;
RCSTA = 0x90;
TXSTA = 0x24;
SPBRG = 0xCF;
SPBRGH = 0x00;
PIR1bits.TXIF = 0;
printf("\r\nPIC18F13K22 UART demo\r\n");
while (1)
{
}
}
您的问题的解决方案在于知道将配置字值设置为什么,以及如何理解可在数据表中找到哪些信息。
我知道数据表很密集,只记录了可以选择的内容,但不说明为什么要选择特定的值。
通过更多的经验,您可以学习如何阅读数据手册以及有用的信息。
由于您不努力在代码中发表评论,因此我发布的代码同样缺少任何有用的评论。