51串口通信程序Word文件下载.docx
- 文档编号:21602688
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:7
- 大小:18.60KB
51串口通信程序Word文件下载.docx
《51串口通信程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《51串口通信程序Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。
串行中断服务程序
***********
主程序开始
*******************
org30h
main:
movsp,#30h
设置堆栈
lcallrest
初始化
lcallcomm
串口初始化
jmp$
原地等待
*************
初始化
*********************
rest:
movp0,#00h
禁止数码管显示
movp2,#255
clr
禁止蜂鸣器
movp1,#255
禁止LED显示
RET
返回
**************
串口初始化
*****************
设置串行口工作方式1,定时器1作为波特率发生器
波特率设置为
2400
comm:
movtmod,#20h
设置定时器T1工作方式2
movtl1,#0f3h
定时器计数初值,波特率2400
movth1,#0f3h
定时器重装值
setbea
允许总的中断
setbes
允许串行中断
movpcon,#00h
波特率不倍增
movscon,#50h
设置串口工作方式1,REN=1允许接收
setbtr1
定时器开始工作
ret
***************
串口中断服务程序
***********
如果接收
0FF
表示上位机需要联机信号,单片机发送0FFH作为
应答信号,如果接收到数字1~n,表示相应的功能;
这里,如果收到1,则单片机向计算机发送字符
'
H'
如果收到2,则单片机向计算机发送字符
e'
如果收到其他的数据,则发送
J'
com_int:
clres
禁止串行中断
clrri
清除接收标志位
mova,sbuf
从缓冲区取出数据
movp1,a
movdptr,#tab
cjnea,#0ffh,in_1
检查数据
movsbuf,#255
收到联机信号,发送联机信号
jnbti,$
等待发送完毕
clrti
清除发送标志
reti
中断返回
in_1:
cjnea,#1H,in_2
如果收到1
movca,@a+dptr
movsbuf,a
发送'
h'
clr
ti
清除发送中断标志
in_2:
cjnea,#2,in_3
接收到
2
清除发送中断
in_3:
mova,#03h
j'
tab:
db'
2'
'
end
51单片机串口调试程序一例
/*定义为中断方式串口处理*/
#defineINTERSENDSTR
/*不为8032系列芯片*/
//#defineCHIP_8032
#include<
absacc.h>
reg51.h>
string.h>
#include"
err.h"
#ifdefINTERSENDSTR
unsignedcharxdatasSendComBuf[256],sRecComBuf[256];
unsignedchardatabOut,bIn,bSout,bSin;
#else
#defineDEFSENDCHARTI=0;
SBUF=ACC;
while(!
TI);
TI=0;
#endif
//bps设置9600就是PSetBps(96)(11.0592Mhz)
unsignedchar
PSetBps(unsignedintbps)SMALL
{
unsignedintt1;
unsignedchart2;
/*如果使用中断方式发送数据,必须等待发送数据完毕才能更换波特率*/
while(bSin!
=bSout)
}
ES=0;
#endif
#ifdefCHIP_8032
if(3456%bps)
returnERR_SET_BPS;
t1=3456/bps;
t1--;
t1=~t1;
RCAP2H=t1/256;
RCAP2L=t1;
T2MOD=0x00;
/*使用定时器2做波特率发生器*/
T2CON=0x34;
/*TF2=0;
EXF2=0;
RCLK=1;
TCLK=1;
EXEN2=0;
TR2=1;
C/T2=0;
CP/RL2=0
*/
t1=576/bps;
if((576%bps)||((t1==0))||(t1>
=2*256))
if(t1>
256)
PCON=00;
t2=256-(288/bps);
else
PCON=0x80;
t2=256-t1;
TH1=t2;
TL1=t2;
TR1=1;
/*模式3*/
SM0=0;
RI=0;
REN=1;
SM1=1;
SM2=1;
#ifdefINTERSENDSTR
bOut=bIn;
bSout=bSin;
ES=1;
returnOK;
voidPSendChar(unsignedcharch)SMALL
unsignedchartch;
tch=bSin+1;
while(tch==bSout)
sSendComBuf[bSin]=ch;
if((bSout==bSin))
SBUF=sSendComBuf[bSin];
bSin++;
#else
ACC=ch;
DEFSENDCHAR;
unsignedcharPGetChar()SMALL
unsignedcharch;
#ifdef
INTERSENDSTR
ch=sRecComBuf[bOut];
bOut++;
returnch;
ch=SBUF;
bitPCharInCom()SMALL
if(bIn!
=bOut)
return1;
return0;
returnRI;
voidPSendString(unsignedchar*st)SMALL
while(*st)
PSendChar(*st);
st++;
voidPSendArray(unsignedchar
*st,unsignedint
len)SMALL
unsignedintii;
for(ii=0;
ii<
len;
ii++)
PSendChar(st[ii]);
voidPSerialInt()interrupt4
if(RI)
sRecComBuf[bIn]=SBUF;
bIn++;
if(TI)
if(bSout!
=bSin)
bSout++;
SBUF=sSendComBuf[bSout];
51单片机的定时/计数器
2010-09-2417:
09
16位定时/计数器
MCS51的定时/计数器的基本部件是两个8位的计数器(TH1、TL1是T1的计数器,TH0、TL0是T0的计数器)拼装而成。
在作定时器使用时,输入的时钟脉冲是由晶振的输出经12分频后得到的。
所以定时器也可看作是对计算机机器周期的计数器。
如果晶振频率为12MHz,则定时器每接收一个输入脉冲捍间为1us。
当它用作对外部事计数时,接相应的外部输入引脚T0(P3.4)或T1(P3.5)。
很少工作在此种模式。
MCS51定时/计数器相关的寄存器
MCS51定时/计数器有四种工作方式,其工作方式的选择及控制都由两个特殊功能寄存器(TMOD、TCON)的内容来决定。
定时器的方式寄存器TMOD
高4位用于定时器1,低4位用于定时器0。
工作方式选择(M1,M0)
00:
13位定时器/计数器
01:
16位定时器/计数器
10:
自动装入时间常数的8位定时器/计数器
11:
对T0分为两个8位独立计数器,对T1置方式3时停止工作
定时器/计数器方式选择位C/T
C/T:
为1时,是计数器方式,为0时,定时器方式。
定时器/计数器运行控制位GATE
用来确定对应的外部中断请求引脚的操作控制。
GATE=0时,只要定时器控制寄存器TCON中的TR0(或TR1)被置1时,T0(或T1)被允许开始计数;
GATE=1时,不仅要TCON中的TR0(或TR1)被置位,还需要P3口的相应引脚为高电平,才允许计数和。
MCS51定时器使用频骤(工作于方式1)
1)初始化TMOD,设置工作模式。
2)根据定时间隔,计算并初始化TH0与TL0的数值;
计算公式:
TH0:
TL0=(2^16-1)-晶振频率/12
3)如果中断方式使用定时器,则需要置位中断允许控制寄存器(IE)中的ET0或ET1,而且要打开全局中断(EA=1)。
同时要写好中断服务函数。
4)将TCON的TR0或TR1置位,启动定时器。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 串口 通信 程序