精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

51單片機與串口通信的源代碼詳細概述

Wildesbeast ? 來源:單片機教程網 ? 作者:單片機教程網 ? 2020-06-13 11:13 ? 次閱讀

1. 發送:向總線上發命令

2. 接收:從總線接收命令,并分析是地址還是數據。

3. 定時發送:從內存中取數并向主機發送。

經過調試,以上功能基本實現,目前可以通過上位機單片機進行實時控制。

程序如下:

//這是一個單片機C51串口接收(中斷)和發送例程,可以用來測試51單片機的中斷接收

//和查詢發送,另外我覺得發送沒有必要用中斷,因為程序的開銷是一樣的

#i nclude 《reg51.h》

#i nclude《stdio.h》

#i nclude 《string.h》

#define INBUF_LEN 4 //數據長度

unsigned char inbuf1[INBUF_LEN];

unsigned char checksum,count3 , flag,temp,ch;

bit read_flag=0;

sbit cp=P1^1;

sbit DIR=P1^2;

int i;

unsigned int xdata *RAMDATA; /*定義RAM地址指針*/

unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ;

void init_serialcomm(void)

{

SCON=0x50; //在11.0592MHz下,設置串行口波特率為9600,方式1,并允許接收

PCON=0x00;

ES=1;

TMOD=0x21; //定時器工作于方式2,自動裝載方式

TH0=(65536-1000)%256;

TL0=(65536-1000)/256;

TL1=0xfd;

TH1=0xfd;

ET0=1;

TR0=1;

TR1=1;

// TI=0;

EA=1;

// TI=1;

RAMDATA=0x1F45;

}

void serial () interrupt 4 using 3

{

if(RI)

{ RI=0;

ch=SBUF;

TI=1; //置SBUF空

switch(ch)

{

case 0x01 :printf(“A”); TI=0;break;

case 0x02 :printf(“B”); TI=0;break;

case 0x03 :printf(“C”); TI=0;break;

case 0x04 :printf(“D”); TI=0;break;

default :printf(“fg”); TI=0;break;

}

}

}

//向串口發送一個字符

void timer0() interrupt 1 using 3{

// char i;

flag++;

TH0=0x00;

TL0=0x00;

if(flag==10)

{// cp=!cp;

// for(i=0;i《6;i++)

P2=0x25;

TI=1;

temp=*RAMDATA;

printf(“%c”,temp);

TI=0;

// RAMDATA--;

flag=0;

}

}

//主程序

main()

{

init_serialcomm(); //初始化串口

//向6264中送數據

{

*RAMDATA=0x33;

}

while(1)

{

*RAMDATA=0x33;;

}

}

調試過程中遇到的問題:

1. 發送過程:在發送時必須保證TI=1:即發送緩沖器為空,否則將導致數據發不出去,如果想強制發送可以用:TI=1.具體發送數據:利用printf(“akjdfaklfj”);函數直接發送即可。

2. 接收過程:在接收時多選用中斷方式,這樣可以節約CPU的時間,提高效率,

1 Windows API通信函數方法

與通信有關的Windows API函數共有26個,但主要有關的有:

CreateFile() 用 “comn”(n為串口號)作為文件名就可以打開串口。

ReadFile() 讀串口。

WriteFile() 寫串口。

CloseHandle() 關閉串口句柄。

初始化時應注意CreateFile()函數中串口共享方式應設為0,串口為不可共享設備,其它與一般文件讀寫類似。以下給出API實

現的源代碼。

1.1 發送的例程

//聲明全局變量

HANDLE m_hIDComDev;

OVERLAPPED m_OverlappedRead, m_Over lappedWrite;

//初始化串口

void CSerialAPIView::OnInitialUpdate()

{

CView::OnInitialUpdate();

Char szComParams[50];

DCB dcb;

Memset(&m_OverlappedRead, 0, sizeof (OVERLAPPED));

Memset(&m_OverlappedWrite, 0, sizeof (OVERLAPPED));

m_hIDComDev = NULL;

m_hIDComDev = CreateFile(“COM2”, GENERIC_READ│GENERIC_WRITE, 0, NULL,

OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL│FILE_FLAG_OVERLAPPED, NULL);

if (m_hIDComDev == NULL)

{

AfxMessageBox(“Can not open serial port!”);

goto endd;

}

memset(&m_OverlappedRead, 0, sizeof (OVERLAPPED));

memset(&m_OverlappedWrite, 0, sizeof (OVERLAPPED));

COMMTIMEOUTS CommTimeOuts;

CommTimeOuts.ReadIntervalTimeout=0×FFFFFFFF;

CommTimeOuts.ReadTotalTimeoutMultiplier = 0;

CommTimeOuts.ReadTotalTimeoutConstant = 0;

CommTimeOuts.WriteTotalTimeoutMultiplier = 0;

CommTimeOuts.WriteTotalTimeoutConstant = 5000;

SetCommTimeouts(m_hIDComDev, &CommTimeOuts);

Wsprintf(szComparams, “COM2:9600, n, 8, 1”);

m_OverlappedRead. hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

m_OverlappedWrite. hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

dcb. DCBlength = sizeof(DCB);

GetCommState(m_hIDComDev, &dcb);

dcb. BaudRate = 9600;

dcb. ByteSize= 8;

unsigned char ucSet;

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    3004

    瀏覽量

    73900
  • 51單片機
    +關注

    關注

    273

    文章

    5699

    瀏覽量

    123229
  • 串口通信
    +關注

    關注

    34

    文章

    1620

    瀏覽量

    55428
收藏 人收藏

    評論

    相關推薦

    基于51單片機的多路溫度檢測調節及串口顯示

    ,利用虛擬串口模塊實時將平均溫度值實現串口顯示。仿真演示視頻:基于51單片機的多路溫度檢測調節及串口顯示-仿真視頻設計介紹 
    的頭像 發表于 10-22 14:13 ?107次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的多路溫度檢測調節及<b class='flag-5'>串口</b>顯示

    基于51單片機的遙控開關仿真(雙機通信)

    單片機最小系統、繼電器及LED燈構成;(4)由于仿真無法模擬無線模塊通信,故利用單片機RXD、TXD端口模擬,通過遙控器的開關實現對主機LED燈的控制,實現LED燈的點亮及熄滅。仿真演示視頻:基于
    的頭像 發表于 10-22 14:12 ?188次閱讀
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的遙控開關仿真(雙機<b class='flag-5'>通信</b>)

    如何實現51單片機與PC的串行通信

    詳細步驟和方法。 硬件連接 首先,我們需要將51單片機與PC的串行接口連接起來。通常,我們使用RS-232接口進行連接。RS-232接口是一種常用的串行
    的頭像 發表于 10-21 11:35 ?439次閱讀

    單片機SPI通信實現

    在深入探討單片機(如基于STM32、AVR、PIC等)如何通過SPI(Serial Peripheral Interface)進行通信之前,我們先概述SPI通信的基本原理,隨后以STM
    的頭像 發表于 09-09 17:00 ?434次閱讀

    基于51單片機煙霧檢測報警器設計

    本資源內容概要:? ? ? ?這是基于51單片機煙霧檢測報警器設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開)、元件清單(excel表格打開)。本
    發表于 06-26 10:51 ?0次下載

    基于51單片機無線溫度傳輸控制設計

    本資源內容概要:? ? ? ?這是基于51單片機無線溫度傳輸控制設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開)、元件清單(excel表格打開
    發表于 06-26 10:50 ?0次下載

    基于51單片機數字時鐘數碼管顯示設計

    本資源內容概要:? ? ? ?這是基于51單片機數字時鐘數碼管顯示設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開)、元件清單(excel表格打開
    發表于 06-25 10:42 ?0次下載

    基于51單片機數字時鐘鬧鐘設計

    本資源內容概要:? ? ? ?這是基于51單片機數字時鐘鬧鐘設計包含了PDF版本電路圖、C語言程序源代碼(keil軟件打開)、proteus仿真。本資源適合人群:? ? ? 單片機愛好
    發表于 06-25 10:17 ?0次下載

    基于51單片機熱釋紅外報警設計

    本資源內容概要:? ? ? ?這是基于51單片機熱釋紅外報警設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開)、元件清單(excel表格打開
    發表于 06-25 10:15 ?0次下載

    基于51單片機24秒倒計時設計

    本資源內容概要:? ? ? ?這是基于51單片機24秒倒計時設計包含了 C語言程序源代碼(keil軟件打開) 。本資源適合人群:? ? ? 單片機愛好者、電子類專業學生、電子diy愛好
    發表于 06-25 10:03 ?0次下載

    ?51單片機串口通信詳細介紹-小白必看

    51單片機串口通信單片機與外部設備通信的重要方式,它基于串行
    的頭像 發表于 04-17 09:33 ?1878次閱讀
    ?<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b><b class='flag-5'>詳細</b>介紹-小白必看

    單片機串口通信的接收與發送

    單片機串口通信是一種常見的通信方式,它可以實現單片機與外部設備的數據交換。在實際應用中,單片機
    的頭像 發表于 12-20 14:03 ?3528次閱讀

    單片機串口通信的接收與發送程序

    等功能。本文將詳細介紹單片機串口通信的接收與發送程序。 二、串口通信基礎
    的頭像 發表于 12-19 13:57 ?5830次閱讀

    基于51單片機的正弦信號發生器的設計

    正弦信號是電子電路設計中非常重要的信號之一。在很多電子設備和系統中,需要正弦信號作為輸入源。基于51單片機的正弦信號發生器設計是一種較為簡單且常見的方法。本文將詳細介紹如何設計一個基于51
    的頭像 發表于 12-07 16:20 ?1695次閱讀

    51單片機中斷系統介紹

    51單片機中斷系統介紹與運用外部中斷系統觸發數碼管顯示數字的代碼實驗
    發表于 12-05 09:10 ?2次下載