|
本帖最后由 KeepYn 于 2021-6-27 13:24 編輯
## 說明
打開串口,任意向單片機發(fā)送一字符,單片機向PC端返回一段字符“HELLO”,每發(fā)送一次便返回一次。以下直接放代碼,有什么地方錯誤歡迎大家指出討論,一起進步。
### 程序部分
老樣子,還是基于模塊化
以下是主程序
#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ā)送中斷標志位(相應(yīng)中斷后硬件置1)判斷是否相應(yīng)中斷
TI = 0; //相應(yīng)中斷后手動清零(否則會一直向主機申請中斷)
}
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單片機頭文件
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; //接收中斷標志位,接收數(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
|
-
-
-
模塊化 串口向PC端返回字符.rar
2021-6-26 00:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
22.88 KB, 下載次數(shù): 8, 下載積分: 黑幣 -5
評分
-
查看全部評分
|