找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 2407|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)向PC端發(fā)送字符程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 KeepYn 于 2021-6-27 13:24 編輯

## 說(shuō)明
打開(kāi)串口,任意向單片機(jī)發(fā)送一字符,單片機(jī)向PC端返回一段字符“HELLO”,每發(fā)送一次便返回一次。以下直接放代碼,有什么地方錯(cuò)誤歡迎大家指出討論,一起進(jìn)步。
### 程序部分
老樣子,還是基于模塊化
以下是主程序

#include "init.h"               //自定義的頭文件,此頭文件以包erg51.h頭文件,因此不用在此聲明

uchar code array[]="HELLO";     //定義一個(gè)數(shù)組用來(lái)儲(chǔ)存發(fā)送的數(shù)據(jù)

void main()                     //主程序
{
        init();                     //初始化此函數(shù)
        while(1)//主循環(huán)
        {
                if(a == 1)              //主循環(huán)中檢測(cè)a是否等于1
                {
                        ES = 0;             //當(dāng)a等于1時(shí),關(guān)閉串口中斷
                        for(c=0;c<5;c++)    //通過(guò)5次循環(huán)將數(shù)組中的字符寫(xiě)入串口中
                        {
                                SBUF = array[c];
                                while(!TI);     //TI為發(fā)送中斷標(biāo)志位(相應(yīng)中斷后硬件置1)判斷是否相應(yīng)中斷
                                TI = 0;         //相應(yīng)中斷后手動(dòng)清零(否則會(huì)一直向主機(jī)申請(qǐng)中斷)
                        }
                        SBUF = b;           //將b的字符寫(xiě)給串口
                        while(!TI);         //等待是否發(fā)送完畢
                        TI = 0;             //
                        ES = 1;             //允許串口中斷
                        a = 0;              //將a清零,以便主程序下次判斷串口是否發(fā)送數(shù)據(jù)
                }
        }
}



#include "init.h"

void init()    //配置定時(shí)器,串口
{
        TMOD = 0x20;//定時(shí)器/計(jì)數(shù)器工作方式寄存器(高4位配置T1,低4位反之)T1定時(shí)器工作方式2
        TH1  = 0xfd;//T1定時(shí)器裝初值(9600bsp、晶振11.0592對(duì)應(yīng)初值0XFD/SMOD=0情況下)
        TL1  = 0xfd;//T1定時(shí)器裝初值
        TR1  = 1;   //T1定時(shí)器運(yùn)行控制位(運(yùn)行T1定時(shí)器運(yùn)行)
        REN  = 1;   //串行接收位(允許串口接收數(shù)據(jù))
        SM0  = 0;   //SM0、SM1配置串口工作方式
        SM1  = 1;   //串口工作方式1
        EA   = 1;   //打開(kāi)總中斷
        ES   = 1;   //串口中斷允許位 (打開(kāi)串口中斷)
}

//#include "init.h"對(duì)應(yīng)H文件

#ifndef __INIT_H__
#define __INIT_H__

#include <reg51.h>   //51單片機(jī)頭文件


typedef unsigned int uint;    //給unsigned int定義新名字為uint
typedef unsigned char uchar;  //同上

extern uchar a,b,c;           //聲明a、b、c數(shù)據(jù)類型 (無(wú)符號(hào)字符型)

extern void init(void);       //外部可調(diào)用此函數(shù)

#endif



#include "ser.h"

void UART_Routine(void) interrupt 4
{
        RI = 0;   //接收中斷標(biāo)志位,接收數(shù)據(jù)后必須手動(dòng)清零
        b  = SBUF;//將串口中的字符寫(xiě)給b
        a  = 1;   //串口中斷發(fā)送時(shí)將a置1,給主程序判斷用
}

#include "ser.h" 對(duì)應(yīng)H文件

#ifndef __SER_H__
#define __SER_H__

#include "init.h"

#endi

串口返回.jpg (225.27 KB, 下載次數(shù): 81)

串口返回.jpg

模塊化 串口向PC端返回字符.rar

22.88 KB, 下載次數(shù): 8, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

板凳
ID:903848 發(fā)表于 2021-6-27 13:25 | 只看該作者
BIGBANG的板子 發(fā)表于 2021-6-26 10:35
沒(méi)有圖片啥的嗎?

有的,上傳了

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:889490 發(fā)表于 2021-6-26 10:35 | 只看該作者
沒(méi)有圖片啥的嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表