本帖最后由 Wayner 于 2019-10-4 09:11 编辑
[size=13.3333px]我用单片机PIC16F1933的内部4M Hz振荡,想通过单片机的串口脚TX发送数据出去。程序如下:
[size=13.3333px]//PIC16F1933无外部晶振,使用内部4M振荡
[size=13.3333px]//RC6做TX, RC7做RX
[size=13.3333px]#include <htc.h>
[size=13.3333px] //配置字1
[size=13.3333px] __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_ON & CPD_ON & BOREN_ON &
[size=13.3333px] CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF);
[size=13.3333px] //配置字2
[size=13.3333px] __CONFIG(WRT_ALL & VCAPEN_OFF & PLLEN_OFF & STVREN_ON & BORV_25 & LVP_ON);
[size=13.3333px] typedef unsigned char UCHAR;
[size=13.3333px] typedef unsigned int UINT;
[size=13.3333px]volatile UCHAR cRC_Dat[30];
[size=13.3333px]void PortInit1933(void);
[size=13.3333px]void UARTinit(void);
[size=13.3333px]void DLYxmS(UCHAR ci);
[size=13.3333px]void DLYx10mS(void);
[size=13.3333px] void PortInit1933(void)
[size=13.3333px] {
[size=13.3333px] ANSELA=0x0;
[size=13.3333px] SRCON0=0x0;
[size=13.3333px] TRISA=0x8; //RA4接Busy输出,RA3接/strobe输入
[size=13.3333px] LATA=0x8; //RA4 0,RA3 1
[size=13.3333px] ANSELB=0x0;
[size=13.3333px] TRISB=0x3; //RB0接<-DB6, RB1接<-DB7
[size=13.3333px] LATB=0xc3; //RB7,RB6是ISP引脚 RB0输入, RB1输入
[size=13.3333px] OPTION_REG=0x0; //允许弱上拉
[size=13.3333px] WPUB=0x3; //RB0、RB1上拉
[size=13.3333px] LCDCON=0x0; //禁止LCD
[size=13.3333px] TRISC=0xff; //RC7-RX in,RC6-TX out, RC5~0 in
[size=13.3333px] LATC=0xff; //
[size=13.3333px] }
[size=13.3333px] void UARTinit(void)
[size=13.3333px] {
[size=13.3333px] SPBRGH=0x0;
[size=13.3333px] SPBRGL=25; //9600bps
[size=13.3333px] BAUDCON=0x0; //BRG16=0
[size=13.3333px] //bit4:SYNC 0=异步模式 ,bit3: SENDB 1=在下一次发送时发送同步间隔字符 (完成时由硬件清零)
[size=13.3333px] //bit2:高波特率选择位,1 = 高速;;bit1:TRMT 发送移位寄存器状态位,1 = TSR 为空
[size=13.3333px] //bit0:TX9D 发送数据的第 9 位
[size=13.3333px] TXSTA=0xc; //,
[size=13.3333px] RCSTA=0x80; //bit7:SPEN=1使能串口, bit4:CREN连续接收使能位 0 = 禁止接收器
[size=13.3333px] }
[size=13.3333px]void DLYxmS(UCHAR ci)
[size=13.3333px]{
[size=13.3333px]UINT ix;
[size=13.3333px]for(; ci !=0; ci--)
[size=13.3333px] {
[size=13.3333px] for(ix=0x7fff; ix !=0; ix--) //ix=0x145
[size=13.3333px] {
[size=13.3333px] asm("nop");
[size=13.3333px] }
[size=13.3333px] }
[size=13.3333px]}
[size=13.3333px]void DLYx10mS(void)
[size=13.3333px]{
[size=13.3333px]UINT ix;
[size=13.3333px]for(ix=0x589; ix !=0; ix--) //ix=0x145
[size=13.3333px] {
[size=13.3333px] asm("nop");
[size=13.3333px] }
[size=13.3333px]}
[size=13.3333px]void main(void)
[size=13.3333px]{
[size=13.3333px]volatile UCHAR ci;
[size=13.3333px]OSCCON = 0x6a; //4MHz 01101010
[size=13.3333px]do
[size=13.3333px] {
[size=13.3333px] asm("nop");
[size=13.3333px] ci = OSCSTAT; //bit 4 HFIOFR:高频内部振荡器就绪位,1 = HFINTOSC 就绪
[size=13.3333px] }while(!(ci & 0x10)); //
[size=13.3333px]DLYx10mS();
[size=13.3333px]PortInit1933();
[size=13.3333px]UARTinit();
[size=13.3333px]for(;;)
[size=13.3333px] {
[size=13.3333px] TXEN=1;
[size=13.3333px] for(ci=0;ci<25;ci++)
[size=13.3333px] {
[size=13.3333px] cRC_Dat[ci]=ci;
[size=13.3333px] TXREG=cRC_Dat[ci];
[size=13.3333px]
[size=13.3333px] DLYx10mS();
[size=13.3333px] }
[size=13.3333px] DLYxmS(250);
[size=13.3333px] TXEN=0;
[size=13.3333px] DLYxmS(250);
[size=13.3333px] }
[size=13.3333px]}
[size=13.3333px]编译烧录正常,就是发不出数据。向大伙求助,哪里错了?请指点
|