![]() |
#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 要測試下這個可不可以用 |
謝謝分享,初學很懵逼![]() |
謝謝謝謝!非常感謝!! |
謝謝謝謝!非常感謝!! |
我正要找 這個,可不可以用? |
謝謝!謝謝!非常感謝!! |
我要測試下這個可不可以用 |
標記謝謝分享 |