请教PIC16F1933怎样通过串口发送数据
我用单片机PIC16F1933的内部4M Hz振荡,想通过单片机的串口脚TX发送数据出去。程序如下://PIC16F1933无外部晶振,使用内部4M振荡
//RC6做TX,RC7做RX
#include <htc.h>
//配置字1
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_ON & CPD_ON & BOREN_ON &
CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF);
//配置字2
__CONFIG(WRT_ALL & VCAPEN_OFF & PLLEN_OFF & STVREN_ON & BORV_25 & LVP_ON);
typedef unsigned char UCHAR;
typedef unsigned int UINT;
volatile UCHAR cRC_Dat;
void PortInit1933(void);
void UARTinit(void);
void DLYxmS(UCHAR ci);
void DLYx10mS(void);
void PortInit1933(void)
{
ANSELA=0x0;
SRCON0=0x0;
TRISA=0x8; //RA4接Busy输出,RA3接/strobe输入
LATA=0x8; //RA4 0,RA3 1
ANSELB=0x0;
TRISB=0x3; //RB0接<-DB6, RB1接<-DB7
LATB=0xc3; //RB7,RB6是ISP引脚 RB0输入, RB1输入
OPTION_REG=0x0; //允许弱上拉
WPUB=0x3; //RB0、RB1上拉
LCDCON=0x0; //禁止LCD
TRISC=0xff; //RC7-RX in,RC6-TX out, RC5~0 in
LATC=0xff; //
}
void UARTinit(void)
{
SPBRGH=0x0;
SPBRGL=25; //9600bps
BAUDCON=0x0; //BRG16=0
//bit4:SYNC 0=异步模式 ,bit3: SENDB 1=在下一次发送时发送同步间隔字符 (完成时由硬件清零)
//bit2:高波特率选择位,1= 高速;;bit1:TRMT 发送移位寄存器状态位,1= TSR 为空
//bit0:TX9D 发送数据的第 9 位
TXSTA=0xc; //,
RCSTA=0x80; //bit7:SPEN=1使能串口, bit4:CREN连续接收使能位 0= 禁止接收器
}
void DLYxmS(UCHAR ci)
{
UINT ix;
for(; ci !=0; ci--)
{
for(ix=0x7fff; ix !=0; ix--)//ix=0x145
{
asm("nop");
}
}
}
void DLYx10mS(void)
{
UINT ix;
for(ix=0x589; ix !=0; ix--)//ix=0x145
{
asm("nop");
}
}
void main(void)
{
volatile UCHAR ci;
OSCCON = 0x6a; //4MHz01101010
do
{
asm("nop");
ci = OSCSTAT; //bit 4 HFIOFR:高频内部振荡器就绪位,1= HFINTOSC 就绪
}while(!(ci & 0x10));// Internal Clock Oscillator Status Stable bit
DLYx10mS();
PortInit1933();
UARTinit();
for(;;)
{
TXEN=1;
for(ci=0;ci<25;ci++)
{
cRC_Dat=ci;
TXREG=cRC_Dat;
DLYx10mS();
}
DLYxmS(250);
TXEN=0;
DLYxmS(250);
}
}
编译烧录正常,就是发不出数据。向大伙求助,哪里错了?请指点
在 void PortInit1933(void)函数里,将TRISC=0xff改成TRISC=0xbf后,发送出来的全是00,00 本帖最后由 wiisir 于 2019-10-4 16:30 编辑
我改用外部晶体振荡器,还是一样。用示波器看晶振波形。一会振荡,一会不振荡。应该原因是反复自动复位。可是我没开看门狗啊。问题还没有解决啊 装mplab x ide用Mcc配置下看 ersha4877 发表于 2019-10-4 18:19
装mplab x ide用Mcc配置下看
谢谢回复。发现自己犯了低级错误,复位电路电阻和电容刚好焊错位置了,焊正确就行了。谢谢你了
页:
[1]