詳解RS485通信
/*****************************main.c 文件程序源代碼******************************/
view plaincopy to clipboardprint?
- #include
- unsignedcharT0RH=0;//T0重載值的高字節
- unsignedcharT0RL=0;//T0重載值的低字節
- voidConfigTimer0(unsignedintms);
- externvoidUartDriver();
- externvoidConfigUART(unsignedintbaud);
- externvoidUartRxMonitor(unsignedcharms);
- externvoidUartWrite(unsignedchar*buf,unsignedcharlen);
- voidmain(){
- EA=1;//開(kāi)總中斷
- ConfigTimer0(1);//配置T0定時(shí)1ms
- ConfigUART(9600);//配置波特率為9600
- while(1){
- UartDriver();//調用串口驅動(dòng)
- }
- }
- /*串口動(dòng)作函數,根據接收到的命令幀執行響應的動(dòng)作
- buf-接收到的命令幀指針,len-命令幀長(cháng)度*/
- voidUartAction(unsignedchar*buf,unsignedcharlen){
- //在接收到的數據幀后添加換車(chē)換行符后發(fā)回
- buf[len++]=;
- buf[len++]=;
- UartWrite(buf,len);
- }
- /*配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間*/
- voidConfigTimer0(unsignedintms){
- unsignedlongtmp;//臨時(shí)變量
- tmp=11059200/12;//定時(shí)器計數頻率
- tmp=(tmp*ms)/1000;//計算所需的計數值
- tmp=65536-tmp;//計算定時(shí)器重載值
- tmp=tmp+33;//補償中斷響應延時(shí)造成的誤差
- T0RH=(unsignedchar)(tmp>>8);//定時(shí)器重載值拆分為高低字節
- T0RL=(unsignedchar)tmp;
- TMOD&=0xF0;//清零T0的控制位
- TMOD|=0x01;//配置T0為模式1
- TH0=T0RH;//加載T0重載值
- TL0=T0RL;
- ET0=1;//使能T0中斷
- TR0=1;//啟動(dòng)T0
- }
- /*T0中斷服務(wù)函數,執行串口接收監控*/
- voidInterruptTimer0()interrupt1{
- TH0=T0RH;//重新加載重載值
- TL0=T0RL;
- UartRxMonitor(1);//串口接收監控
- }
現在看這種串口程序,是不是感覺(jué)很簡(jiǎn)單了呢?串口通信程序我們反反復復的使用,加上隨著(zhù)學(xué)習的模塊越來(lái)越多,實(shí)踐的越來(lái)越多,原先感覺(jué)很復雜的東西,現在就會(huì )感到簡(jiǎn)單了。從設備管理器里可以查看所有的 COM 口號,我們下載程序用的是 COM4,而 USB 轉RS485 虛擬的是 COM5,通信的時(shí)候我們用的是 COM5 口,如圖 18-3 所示。
評論