標(biāo)題: 51單片機(jī)向PC端發(fā)送字符程序 [打印本頁]

作者: KeepYn    時間: 2021-6-26 00:56
標(biāo)題: 51單片機(jī)向PC端發(fā)送字符程序
本帖最后由 KeepYn 于 2021-6-27 13:24 編輯

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

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

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

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



#include "init.h"

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

//#include "init.h"對應(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ù)類型 (無符號字符型)

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

#endif



#include "ser.h"

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

#include "ser.h" 對應(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


作者: BIGBANG的板子    時間: 2021-6-26 10:35
沒有圖片啥的嗎?
作者: KeepYn    時間: 2021-6-27 13:25
BIGBANG的板子 發(fā)表于 2021-6-26 10:35
沒有圖片啥的嗎?

有的,上傳了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1