hujj 发表于 2018-9-2 08:56 3q,时隔一年的互动 ![]() |
FIGHLTDEAME 发表于 2017-4-9 20:01 芯片型号 : STC89C51RC/LE51RC 关于此芯片的重要说明: 固件版本在v7.0及以上时 . 芯片内部包含有全球唯一ID号 . 上电复位后,ID号会自动复制到RAM区域的F1H-F7H . 更新代码时可使用烧录选项将ID号烧录到程序区的最后7字节中 这是官方的,说明有这个型号。 |
ahshmj 发表于 2017-4-9 18:16 我的是51单片机,但是卖家说STC上没有51,型号选择“STC89C/LE52RC”这个就行,他说没有事儿 |
imxuheng 发表于 2017-4-9 18:25 恩恩 好的 谢谢了 |
|
来,试试我这个 #include<reg52.h> unsigned char cntRxd = 0; unsigned char cmdArrived = 0; unsigned char bufRxd[40]; //串口接收缓冲区 void ConfigUART(unsigned int baud) //串口配置函数,baud为波特率 { SCON = 0x50; //配置串口为模式1 TMOD &= 0x0F; //清零T1的控制位 TMOD |= 0x20; //配置T1为模式2 TH1 = 256 - (11059200/12/32) / baud; //计算T1重载值 TL1 = TH1; //初值等于重载值 ET1 = 0; //禁止T1中断 ES = 1; //使能串口中断 TR1 = 1; //启动T1 } void UartWrite(unsigned char *buf) //串口发送函数 { unsigned char i; for(i = 0;i<cntRxd;i++) //发送数据 { SBUF = *buf; buf++; } } void main () { EA = 1; //开总中断 ConfigUART(9600); //配置波特率为9600 while(1) { if (cmdArrived) //有命令到达时,读取处理该命令 { cmdArrived = 0; UartWrite(bufRxd); cntRxd = 0; } } } void InterruptUART() interrupt 4 //UART中断服务函数 { if(RI) { bufRxd[cntRxd++] = SBUF; //保存接收字节 while(!RI); RI = 0; //手动清零接收中断标志位 cmdArrived = 1; } if (TI) //字节发送完毕 { TI = 0; } } |
|
本帖最后由 ahshmj 于 2017-4-9 18:21 编辑 感觉你的波特率设置不对。晶振是多少? 你电脑界面上选的是“STC89C/LE52RC”,但是STC官方给出的如下: SCON = 0x50; //8位数据,可变波特率 AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //设定定时器1为16位自动重装方式 TL1 = 0xE8; //设定定时初值 TH1 = 0xFF; //设定定时初值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 (11.0592晶振) |