本帖最后由 zyk12345 于 2024-11-30 16:48 编辑
在测试串口数据是发现MCU自动复位
换了根数据线好了!!!!!!!!!!!!!!!!!!
接受缓冲区是1024,但这才120+就会复位
低于120个字符,则正常。
接受缓冲区是1024,但这才120+就会复位
低于120个字符,则正常。
定时器
- #include "Timer.h"
- #include "Led.h"
- #include "Usart1.h"
- void Timer_Init()
- {
- TMOD = 0x00;
- TL0 = (65536-50000)%256;
- TH0 = (65536-50000)/256;
- TR0 = 1;
- ET0 = 1;
- EA = 1;
- T0x12=0;
- }
- void Timer0() interrupt 1
- {
- if(Usart1_IsRecv>1)
- {
- Usart1_IsRecv-=1;
- if(Usart1_IsRecv==1)
- {
- Usart1_IsRecv=0;
- Usart1_data.IsEnd=1;
- }
- }
- }
复制代码
串口1实现- #include "Usart1.h"
- #include "intrins.h"
- USART1_Data Usart1_data;
- bit busy;
- int Usart1_IsRecv=0;
- unsigned int wptr;
- unsigned int rptr;
- void Usart1_Init()
- {
- P3M0 = 0x00;
- P3M1 = 0x00;
-
- SCON = 0x50;
- T2L = BRT;
- T2H = BRT>>8;
- S1BRT = 1;
- T2x12 = 1;
- T2R = 1;
- wptr = 0x00;
- rptr = 0x00;
- busy=0;
- ES =1;
- EA =1;
- }
- void Usart1_ClearData(void)
- {
- Usart1_IsRecv=0;
- for(rptr=0;rptr<BUFFSIZE;rptr++)
- {
- Usart1_data.Buffer[rptr]=0;
- }
- wptr=0;
- Usart1_data.IsEnd=0;
- }
- void Usart1_Send(char dat)
- {
- while(busy);
- busy=1;
- SBUF = dat;
- }
- void Usart1_SendChars(char *str)
- {
- while(*str)
- {
- Usart1_Send(*str++);
- }
- }
- void Usart1_Isr() interrupt 4
- {
- Usart1_IsRecv++;
- Usart1_data.IsEnd=0;
- if(TI)
- {
- TI=0;
- busy=0;
- }
- if(RI)
- {
- RI=0;
-
- Usart1_data.Buffer[wptr] = SBUF;
- wptr++;
- if(wptr>BUFFSIZE)
- {
- wptr=0;
- }
- }
- }
复制代码
main函数- #include <STC32G.H>
- #include "intrins.h"
- #include "Led.h"
- #include "Delay.h"
- #include "Timer.h"
- #include "Usart1.h"
- #include <stdio.h>
- #include <string.h>
- char Data[100];
- int c=0;
- int main()
- {
- EAXFR = 1;
- CKCON = 0x00;
- WTST = 0x00;
- Usart1_Init();
- Timer_Init();
-
- Usart1_SendChars("Timer-USART1 Test!\r\n");
- while(1)
- {
- if(Usart1_data.IsEnd)
- {
- if(strcmp(Usart1_data.Buffer,"LEDON")==0)
- {
- Led_On(Led_1);
- Usart1_SendChars("Led On!\r\n");
- Usart1_ClearData();
- }
- else if(strcmp(Usart1_data.Buffer,"LEDOFF")==0)
- {
- Led_Off(Led_1);
- Usart1_SendChars("Led Off!\r\n");
- Usart1_ClearData();
- }
- else
- {
- sprintf(Data,"STC32G12K128:%s\r\n",Usart1_data.Buffer);
- Usart1_SendChars(Data);
- Usart1_ClearData();
- }
- }
-
- }
- return 0;
- }
复制代码
|