单片机直接发送 电脑能全收到 电脑发送数据给单片机再转发回来 老是掉数据 用的是程序下载串口测试
程序如下:// 使用CPU芯片为STC12C5A16S2
#include "reg51.h"
#include "intrins.h"
//*******************
// 位操作用常量
#define Bits0Set 0x01 //
#define Bits1Set 0x02 //
#define Bits2Set 0x04 //
#define Bits3Set 0x08 //
#define Bits4Set 0x10 //
#define Bits5Set 0x20 //
#define Bits6Set 0x40 //
#define Bits7Set 0x80 //
#define Bits0Clr 0xfe //
#define Bits1Clr 0xfd //
#define Bits2Clr 0xfb //
#define Bits3Clr 0xf7 //
#define Bits4Clr 0xef //
#define Bits5Clr 0xdf //
#define Bits6Clr 0xbf //
#define Bits7Clr 0x7f //
//***************************************************
// 通信用定义
// Define Constants
//#define FOSC 18432000L
//#define FOSC 12000000L
#define FOSC 11059200L
#define BAUD 9600
// Define UART parity mode
#define NONE_PARITY 0
#define ODD_PARITY 1
#define EVEN_PARITY 2
#define MARK_PARITY 3
#define SPACE_PARITY 4
#define PARITYBIT NONE_PARITY
#define S2RI 0X01 // S2CON.0
#define S2TI 0X02 // S2CON.1
#define S2RB8 0X04 // S2CON.2
#define S2TB8 0X08 // S2CON.3
//***************************************************
// define SFR
sfr AUXR =0x8e;
// T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS
sfr AUXR1 =0xa2;
sfr INT_CLKO =0x8f;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sfr BRT = 0x9c;
sfr IE2 = 0xaf;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P5 = 0XC8;
sfr P4M1 = 0xB3;
sfr P4M0 = 0xB4;
sfr P4 = 0XC0;
sfr P4SW = 0XBB;
sfr P3M1 = 0xB1;
sfr P3M0 = 0xB2;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1ASF = 0x9D; // P1第二功能控制寄存器
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned int WORD;
BYTE RBUF,CHECK_SUM;
//*******************
//*******************
void Port_INIT()
{
// 端口0初始化,p0.1 作为联动输入口,其余全作输出口
P0M0 = 0xfd; //0b11111101; //
P0M1 = 0x02; //0b00000010; //
P0 = 0x02; //0b00000010;
// 端口1初始化为全输入且p1.0~ p1.3作为AD输入口
P1M0 = 0X0; //
P1M1 = 0Xff; //
P1ASF = 0x0f; //0b00001111; //
P1 = 0xff; //0b11111111;
// 端口2初始化为准双向口
P2M0 = 0X0; // 1000 0011
P2M1 = 0X0; // 0111 1100
P2 = 0x0; //0b00000000;
// p3.1 p3.2 p3.3 p3.4 p3.5 p3.6 为输出口,p3.0为输入口
P3M0 = 0Xfe; // 1111 1110
P3M1 = 0X01; // 0000 0001
// P3 = 0x07; //0b0000 0111;
// P3 = 0x3D; //0b0011 1101;
// P3 = 0x3f; //0b0011 1111;
P3 = 0x33; //0b0011 0011;
// p4.0(no use) p4.2(RXD2) p4.7(RST) 为输入口,
// p4.1(LCD_CSB) p4.3(TXD2) p4.4(LCD_DI) p4.5(LCD_CSA) p4.6(LCD_RST)为输出口
P4SW = 0X70; // 0111 0000
P4M0 = 0X7a; // 0111 1010
P4M1 = 0X85; // 1000 0101
P4 = 0x8d; //0b1000 1101;
// 端口5初始化为全输入
P5M0 = 0X00; //
P5M1 = 0Xff; //
P5 = 0xff; //0b11111111;
}
void UART_INIT()
{
SCON=0X50;
TMOD = 0X21;
// AUXR = 0x80;
// AUXR = 0x94; // 0X80+0X14
AUXR = 0xd4;
TH1 =TL1=-(FOSC/32/BAUD);
TR1 =1;
ES =1;
// EA =1;
}
void Uart_Isr() interrupt 4 using 1
{
if(RI)
{
RI=0;
RBUF=SBUF;
SBUF=RBUF; // test
}
if(TI)
{
TI=0;
CHECK_SUM++; // For Test
SBUF=CHECK_SUM; // For Test
}
}
void main()
{
Port_INIT();
UART_INIT();
EA =1;
while(1)
{
}
} |