本帖最后由 zhp 于 2023-12-5 22:42 编辑
因为你的第一个数据本来就没有正确发送
发送代码要这样修改
- void Send(uchar temp)
- {
- unsigned serial;
- serial=temp;
- while(TI!=1);
- TI=0;
- SBUF=(uchar)temp;
- }
复制代码
不过建议串口发送也使用串口中断控制,否则会频繁进入串口中断
参考代码
- #include "reg51.h"
- #include "intrins.h"
-
- #define FOSC 11059200UL
- #define BRT (65536 - FOSC / 115200 / 4)
-
- sfr AUXR = 0x8e;
- sfr T2H = 0xd6;
- sfr T2L = 0xd7;
-
- sfr P0M1 = 0x93;
- sfr P0M0 = 0x94;
- sfr P1M1 = 0x91;
- sfr P1M0 = 0x92;
- sfr P2M1 = 0x95;
- sfr P2M0 = 0x96;
- sfr P3M1 = 0xb1;
- sfr P3M0 = 0xb2;
- sfr P4M1 = 0xb3;
- sfr P4M0 = 0xb4;
- sfr P5M1 = 0xc9;
- sfr P5M0 = 0xca;
-
- bit busy;
- char wptr;
- char rptr;
- char buffer[16];
-
- void UartIsr() interrupt 4
- {
- if (TI)
- {
- TI = 0;
- busy = 0;
- }
- if (RI)
- {
- RI = 0;
- buffer[wptr++] = SBUF;
- wptr &= 0x0f;
- }
- }
-
- void UartInit()
- {
- SCON = 0x50;
- T2L = BRT;
- T2H = BRT >> 8;
- AUXR = 0x15;
- wptr = 0x00;
- rptr = 0x00;
- busy = 0;
- }
-
- void UartSend(char dat)
- {
- while (busy);
- busy = 1;
- SBUF = dat;
- }
-
- void UartSendStr(char *p)
- {
- while (*p)
- {
- UartSend(*p++);
- }
- }
-
- void main()
- {
- P0M0 = 0x00;
- P0M1 = 0x00;
- P1M0 = 0x00;
- P1M1 = 0x00;
- P2M0 = 0x00;
- P2M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P4M0 = 0x00;
- P4M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
-
- UartInit();
- ES = 1;
- EA = 1;
- UartSendStr("Uart Test !\r\n");
-
- while (1)
- {
- if (rptr != wptr)
- {
- UartSend(buffer[rptr++]);
- rptr &= 0x0f;
- }
- }
- }
-
复制代码
|