91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

Wildesbeast ? 來源:單片機教程網(wǎng) ? 作者:單片機教程網(wǎng) ? 2020-06-13 11:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 發(fā)送:向總線上發(fā)命令

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

3. 定時發(fā)送:從內(nèi)存中取數(shù)并向主機發(fā)送。

經(jīng)過調(diào)試,以上功能基本實現(xiàn),目前可以通過上位機單片機進行實時控制。

程序如下:

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

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

#i nclude 《reg51.h》

#i nclude《stdio.h》

#i nclude 《string.h》

#define INBUF_LEN 4 //數(shù)據(jù)長度

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下,設(shè)置串行口波特率為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;

}

}

}

//向串口發(fā)送一個字符

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中送數(shù)據(jù)

{

*RAMDATA=0x33;

}

while(1)

{

*RAMDATA=0x33;;

}

}

調(diào)試過程中遇到的問題:

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

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

1 Windows API通信函數(shù)方法

與通信有關(guān)的Windows API函數(shù)共有26個,但主要有關(guān)的有:

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

ReadFile() 讀串口。

WriteFile() 寫串口。

CloseHandle() 關(guān)閉串口句柄。

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

現(xiàn)的源代碼。

1.1 發(fā)送的例程

//聲明全局變量

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;

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3215

    瀏覽量

    76412
  • 51單片機
    +關(guān)注

    關(guān)注

    278

    文章

    5716

    瀏覽量

    134621
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1662

    瀏覽量

    58059
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    51單片機驅(qū)動HMI串口屏,串口屏的下載方式

    串口串口屏是一個集成了單片機的屏幕模塊,采用的是TTL串口協(xié)議,可以直接通過對應(yīng)指令控制屏幕, 本文采用的串口屏是T0系列的基本型,目的
    的頭像 發(fā)表于 03-17 11:44 ?138次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>驅(qū)動HMI<b class='flag-5'>串口</b>屏,<b class='flag-5'>串口</b>屏的下載方式

    智能顯示模塊串口單片機連接通信成功,偶爾收到的命令是亂碼有哪些什么原因?

    智能顯示模塊串口單片機連接通信成功,偶爾收到的命令是亂碼有哪些什么原因?
    發(fā)表于 03-17 11:28

    MCU單片機串口數(shù)據(jù)記錄儀方案

    在工業(yè)控制、環(huán)境監(jiān)測、物流追蹤等眾多領(lǐng)域,如何可靠、便捷地記錄設(shè)備串口數(shù)據(jù)成為不少工程師關(guān)注的焦點。基于MCU單片機串口數(shù)據(jù)記錄儀方案,正以其高效集成、靈活存儲和簡便操作的特點,成為數(shù)據(jù)采集與記錄場景中的理想選擇。
    的頭像 發(fā)表于 11-27 15:02 ?375次閱讀

    32位單片機PY32F003的特性概述

    邏輯、數(shù)據(jù)采集和通信應(yīng)用來說是足夠的。定位非常明確,可以作為一些8位/32位單片機的直接替代和競爭產(chǎn)品。
    的頭像 發(fā)表于 11-07 16:02 ?1277次閱讀
    32位<b class='flag-5'>單片機</b>PY32F003的特性<b class='flag-5'>概述</b>

    51單片機RS485編程實例資料

    詳細介紹51單片機RS485通信接線和編程代碼
    發(fā)表于 10-20 14:57 ?4次下載

    單片機燒錄原理是怎樣的?輝芒微單片機燒錄程序詳細步驟講解

    燒錄(Programming)就是把 .hex/.bin 文件里的機器碼搬運進單片機片內(nèi) Flash 的過程。輝芒微(FMD)單片機內(nèi)部有一塊 自舉 BootROM,上電時會先跑這段程序;如果檢測
    的頭像 發(fā)表于 09-17 16:14 ?2526次閱讀
    <b class='flag-5'>單片機</b>燒錄原理是怎樣的?輝芒微<b class='flag-5'>單片機</b>燒錄程序<b class='flag-5'>詳細</b>步驟講解

    單片機怎么燒程序

    單片機燒程序是將編寫好的程序代碼寫入單片機內(nèi)部存儲單元,讓單片機按照預(yù)設(shè)邏輯工作的過程,是單片機應(yīng)用開發(fā)中不可或缺的環(huán)節(jié)。無論是簡單的燈光控
    的頭像 發(fā)表于 07-23 11:47 ?1532次閱讀

    AT89C51 單片機中文資料

    電子發(fā)燒友網(wǎng)站提供《AT89C51 單片機中文資料.pdf》資料免費下載
    發(fā)表于 06-24 15:29 ?1次下載

    使用USB轉(zhuǎn)TTL串口板和ST-LINK調(diào)試下載器給STM32單片機下載程序

    本文詳細介紹如何使用ST-LINK/V2和USB轉(zhuǎn)TTL串口板為STM32單片機下載程序,包括STM32啟動模式、JTAG與SWD接口對比、驅(qū)動安裝及官方軟件STM32ST-LINKUtility和FlashLoaderDemo
    的頭像 發(fā)表于 06-20 17:26 ?2849次閱讀
    使用USB轉(zhuǎn)TTL<b class='flag-5'>串口</b>板和ST-LINK調(diào)試下載器給STM32<b class='flag-5'>單片機</b>下載程序

    2.4寸TFT彩屏配套測試程序-51單片機

    如題,2.4寸TFT彩屏配套測試程序-51單片機。
    發(fā)表于 06-04 16:26 ?0次下載

    英銳恩精選筆記UART串口通信#單片機開發(fā)#單片機芯片#UART串口通信#單片機

    單片機
    英銳恩科技
    發(fā)布于 :2025年05月15日 16:09:05

    基于51單片機的溫濕度檢測與調(diào)節(jié)系統(tǒng)電路圖

    電子發(fā)燒友網(wǎng)站提供《基于51單片機的溫濕度檢測與調(diào)節(jié)系統(tǒng)電路圖》資料免費下載
    發(fā)表于 05-12 17:23 ?4次下載

    51+單片機TCP-IP+協(xié)議棧ZLIP源碼

    概述 單片機上網(wǎng)技術(shù),是當前的一個熱門技術(shù)。單片機上網(wǎng)技術(shù)中的一個重要部分是在單片上實現(xiàn) TCP/IP 協(xié)議?!,F(xiàn)在可獲得的 TCP/IP 源代碼
    發(fā)表于 04-22 15:11

    新概念51單片機C語言教程入門、提高、開發(fā)、拓展全攻略

    。 目錄: 第1篇 入門篇 1.1 單片機概述 1.1.1 什么是單片機 1.1.2 單片機標號信息及封裝類型 1.1.3 單片機能做什么
    發(fā)表于 04-15 13:57

    基于51/32單片機按鍵控制步進電機正反轉(zhuǎn),A4988驅(qū)動

    基于51/32單片機按鍵控制步進電機正反轉(zhuǎn),A4988驅(qū)動
    發(fā)表于 04-14 15:05 ?7次下載