📄 rs232c.c
字号:
//******** 串口常用波特率 11.0592 MHz ********//
// ------------------------------------------ //
//| 工作方式 | 波特率 | SMOD | TMOD | TH1TL1 |//
//|----------|--------|------|------|--------|//
//| 方式1或3 | 19200 | 1 | 20 | 0xFD |//
//|----------|--------|------|------|--------|//
//| 方式1或3 | 9600 | 0 | 20 | 0xFD |//
//|----------|--------|------|------|--------|//
//| 方式1或3 | 4800 | 0 | 20 | 0xFA |//
//|----------|--------|------|------|--------|//
//| 方式1或3 | 2400 | 0 | 20 | 0xF4 |//
//|----------|--------|------|------|--------|//
//| 方式1或3 | 1200 | 0 | 20 | 0xE8 |//
//|----------|--------|------|------|--------|//
//| 方式1或3 | 600 | 0 | 20 | 0xD0 |//
//|----------|--------|------|------|--------|//
//| 方式1或3 | 300 | 0 | 20 | 0xA0 |//
// ------------------------------------------ //
#include<reg52.h>
#include <intrins.h>
unsigned char serial_report;
void open_serial();
void close_serial();
//--------------main program---------------//
void main()
{
open_serial();
while(~RI); //等待读入数据
_nop_();
SBUF=serial_report; //发送数据
while(~TI); //等待发送完成
close_serial();
while(1);
}
//------开启并设置串口中断数据------------------//
void open_serial()
{
PCON |= 0x80; //设置SMOD为1,波特率翻倍
TMOD=0x20; //设置定时器1工作在方式2
SCON=0x40; //设置串行口工作在方式1并关闭接收
SCON=0x50; //设置串行口工作在方式1并开启接收
TH1=0xFD; //置定时器初值,波特率9600*SMOD
TL1=0xFD; //----------晶振11.0592MHz
TR1=1; //开定时器1工作
IE=0x90; //开串行中断ES及总中断EA
}
//--------关闭中断--------------//
void close_serial()
{
IE=0x00;
TR1=0;
SCON=0x00;
TMOD=0x00;
PCON &= 0x80; //设置SMOD为0
}
//--------串口中断入口-------------//
void serial() interrupt 4 using 1
{
if(RI)
{
serial_report=SBUF;
RI=0;
}
else if(TI)
{
TI=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -