#include#include
#include "config.h"
本文引用地址:http://m.butianyuan.cn/article/201611/320669.htm#defineucharunsigned char
#define uintunsigned int
#define BEEPP0_5
ucharReceiveBuf;//定義接受緩沖區(qū)
ucharSendBuf[] = {11, 22};//將發(fā)送的數(shù)組放在數(shù)組SendBuf[]中
// 延時(shí)函數(shù)
void delay(uint n)
{
uint i, j;
for(i = n; i > 0; i--)
for(j = 115; j > 0; j--);
}
//串行口的初始化函數(shù)
void series_init()
{
SCON = 0X50;//串口工作方式1,允許接收
TMOD = 0X20;//定時(shí)器T1工作方式2
TH1 = 0XFD; TL1 = 0XFD;//定時(shí)初值
PCON &= 0X00;//SMOD=0
TR1 = 1;//開啟定時(shí)器1
EA = 1;//開總中斷
ES = 1;//開串行中斷
}
void main(void)
{
series_init();
for(;;){//等待中斷
}
}
void series() interrupt 4
{
RI = 0;//接收中斷清零
ES = 0;//暫時(shí)關(guān)閉串口中斷
ReceiveBuf = SBUF;//將接收到得數(shù)據(jù)保存到ReceiveBuf中
if(islower(ReceiveBuf) || isupper(ReceiveBuf) || isdigit(ReceiveBuf)){
SBUF = ReceiveBuf;//將接收到的字符發(fā)送出去
while(!TI);//等待發(fā)送完畢
TI = 0;//發(fā)送完畢,TI(發(fā)送中斷標(biāo)志)清0
BEEP = 1;
delay(100);
BEEP = 0;
}
ES = 1;//打開串口中斷
}
串行中斷程序的編寫步驟:
1. 設(shè)置串行口工作方式
2. 設(shè)置定時(shí)器T1工作方式,定時(shí)器T1作為波特率發(fā)生器,一般選用方式2,因?yàn)槠淇梢宰詣?dòng)裝入初值功能,可以使波特率更加穩(wěn)定
3. 設(shè)置定時(shí)初值
4. 設(shè)置波特率倍增位,不能位尋址,可以通過PCON設(shè)置,最高位就是SMOD倍增位,1時(shí)倍增
5. 開定時(shí)器和中斷
6. 串行中斷程序中,首先接收中斷清零,關(guān)閉串口中斷
7. 取出接收到 的數(shù)據(jù)進(jìn)行處理然后發(fā)送
8.發(fā)送完后打開串行中斷繼續(xù)接收數(shù)據(jù)
評(píng)論