我做的是單項智能電表的RS485現場總線通信與監控管理系統,目前需要我的單片機接收一個人的單片機,單片機之間使用串口通信,都stc89c52的,我需要接收他的數據,所以這一塊的程序怎么寫?加到我的程序的主函數么?還是怎么辦?
- #include"main.h"
- uchar idata uart1_rec_buff[34];
- uchar uart1_send_buff[21] = {0x01,0x03,0x10,'v','o','l','t','c','u','r',
- 'r','p','o','w','e','k','w','.','h','H','L'};
- uchar reg1,reg2,reg3,date[11],*time,*balance;
- void Init_Uart1() //初始化串口1
- {
- TMOD = (TMOD&0x0F)|0x20; //定時器1工作在方式2,8位自動重裝
- SCON = 0x50; //串口1工作在方式1,10位異步收發,REN=1允許接收
- TH1 = 0xFD;
- TL1 = 0xFD;
- TR1 = 1;
- ET1 = 0;
- EA = 1;
- ES = 1;
- IP = 0x10; //設置串口1中斷為最高優先級
- time = &(uart1_rec_buff[16]); //賦時間地址給指針time
- balance = &(uart1_rec_buff[25]); //賦余額地址給指針balance
- }
- void Wait_Uart1_Send_Ok() //等待Uart1把這個字節發送完畢
- {
- while(TI == 0);
- TI = 0;
- }
- void Uart1_Send_RTC_Data() //Uart1把所有實時數據發送給PC
- {
- uchar i;
- for(i=0; i<21; i++)
- {
- SBUF = uart1_send_buff[i];
- Wait_Uart1_Send_Ok(); //等待Uart2發送完畢
- }
- }
- void Uart1_Processing() interrupt 4 //串口1對接收的數據進行處理
- {
- static uchar i;
- if(RI)
- {
- RI = 0;
- uart1_rec_buff[i++] = SBUF;
- if(uart1_rec_buff[0] == 0x01) //檢驗地址
- {
- if(i > 1) //接收到地址和功能碼之后,再做檢驗
- {
- if(uart1_rec_buff[1] == 0x03) //讀保持寄存器功能碼
- {
- if(i == 8) //接收完畢,此處可省略CRC校驗
- {
- i = 0;
- Get_Electric_Data(); //獲取電能數據
- Uart1_Send_RTC_Data(); //Uart1把所有實時數據發送給PC
- }
- }
- else if(uart1_rec_buff[1] == 0x10) //寫多個保持寄存器功能碼
- {
- if( (i>25)&&(uart1_rec_buff[i-1]=='\0') ) //接收完畢,此處可省略CRC校驗
- {
- reg1 = uart1_rec_buff[2]; //警報信號
- reg2 = uart1_rec_buff[3]; //開關信號
- reg3 = uart1_rec_buff[4]; //清零信號
- for(i=0; i<11; i++)
- {
- date[i] = uart1_rec_buff[i+5];
- }
- i = 0;
- }
- }
- if( (uart1_rec_buff[1]!=0x03)&&(uart1_rec_buff[1]!=0x10) )
- {
- i = 0;
- }
- }
- }
- else
- {
- i = 0;
- }
- }
- }
復制代碼
|