#include "UART.h" #include "Key.h" #include "Record.h" uint8_t Rcv_Buf[RCV_LENGTH]; uint8_t Snd_Buf[SND_LENGTH]; volatile uint8_t recvbyte=0; uint8_t RcvFlag = 0; volatile uint16_t ScanTimeMs; volatile uint16_t SysOverTime; uint8_t InitStartEnable; uint8_t SendAdd; uint16_t SysCallStatus1=0; uint16_t SysCallStatus2=0; uint16_t SysCallStatus1Bak=0; uint16_t SysCallStatus2Bak=0; uint16_t alarm = 0; bit MyAddStart; bit Over1min; bit OverTimeFlag; bit OtherMaster; bit OtherMasterChecked; volatile uint16_t DisableSendTimeMs; volatile uint16_t u16_OverTimeMs; void UART1_ISR() interrupt 4 using 1 { if(RI) { RI = 0; SysOverTime = 0; UartErr = 0; Rcv_Buf[recvbyte] = SBUF; //接收数据 if(Rcv_Buf[0] == 0x53) { recvbyte++; } if((Rcv_Buf[recvbyte-1]==0x0a) && (Rcv_Buf[recvbyte-2]==0x0d)) //接收到帧尾 { RcvFlag = 1; //置位接收标志 recvbyte = 0; //接收下标清零 } } } void Uart1_Init(void) { // SCON = 0x50; // TMOD &= 0x0f; // // TH1 = BAUD>>8; // TL1 = BAUD; // // TR1 = 1; // AUXR |= 0x40; // ES = 1; // EA = 1; // // // RS485_RcevEnable(); TR1 = 0; AUXR &= ~0x01; //S1 BRT Use Timer1; AUXR |= (1<<6); //Timer1 set as 1T mode TMOD &= ~(1<<6); //Timer1 set As Timer TMOD &= ~0x30; //Timer1_16bitAutoReload; TH1 = (uint8_t)(BAUD >> 8); TL1 = (uint8_t)BAUD; ET1 = 0; // 禁止Timer1中断 // INT_CLKO &= ~0x02; // Timer1不输出高速时钟 // INT_CLKO |= 0x02; // Timer1输出高速时钟 TR1 = 1; // 运行Timer1 SCON = (SCON & 0x3f) | (1<<6); // 8位数据, 1位起始位, 1位停止位, 无校验 // PS = 1; //高优先级中断 ES = 1; //允许中断 REN = 1; //允许接收 // if(MasterAdd !=0) // { // MyAddStart = 0; // } OtherMaster = 1; OtherMasterChecked = 0; DisableSendTimeMs = 0; SysOverTime = 0; Over1min = 0; RS485_RcevEnable(); } void UART1_Send_Char(unsigned char c) { RS485_SendEnable(); _nop_(); _nop_(); _nop_(); SBUF = c; while(!TI); TI = 0; _nop_(); _nop_(); _nop_(); RS485_RcevEnable(); } void UART1_Send_String(unsigned char *s) { while(*s) { UART1_Send_Char(*s++); } } void UART1_Send_Int(unsigned int c) { UART1_Send_Char(c/10000+0x30); UART1_Send_Char(c%10000/1000+0x30); UART1_Send_Char(c%1000/100+0x30); UART1_Send_Char(c%100/10+0x30); UART1_Send_Char(c%10+0x30); UART1_Send_Char(0x0d); UART1_Send_Char(0x0a); } void UART1_Send_Buf(unsigned char *s,unsigned char len) { unsigned char i; for(i=0;i<len;i++) { UART1_Send_Char(s[i]); } } void UART_Timer_Ms(void) { SysOverTime++; if(SysOverTime > 10000) { UartErr = 1; MyAddStart = InitStartEnable; ScanTimeMs = 0; } if(MyAddStart) { ScanTimeMs++; 请教一下,这个程序中初始波特率是多少呢 |
标记,下载测试下 |
非常感谢,正在被这个串口2收发问题困扰,赶紧下下来测试。 |
谢谢,学习了 |
谢谢分享,收获很大 |
谢谢提供,测试看看... |
谢谢分享,正在找相关资料呢!![]() |
学习了,谢谢分享! |
谢谢分享 |
谢谢分享,帮助很大,谢谢 |
无常 发表于 2018-5-8 15:24 要测试下这个可不可以用 |
谢谢分享,初学很懵逼![]() |
谢谢谢谢!非常感谢!! |
谢谢谢谢!非常感谢!! |
我正要找 这个,可不可以用? |
谢谢!谢谢!非常感谢!! |
我要测试下这个可不可以用 |
标记谢谢分享 |