-
大小: 41KB文件類型: .zip金幣: 2下載: 0 次發布日期: 2021-05-10
- 語言: 其他
- 標簽: STC15F2K60S2??串口??
資源簡介
STC15F2K60S2串口通信程序

代碼片段和文件信息
//**********************************************
//STC15F2K60S2串口通信程序將串口接受到的數據從串口發出去
//采用22.1184M晶振波特率115200
//為方便大家調試特附該程序的項目工程文件下載地址下載打開即可調試下載到單片機
//
//*********************************************
#include? //調用stc15f系列頭文件下載地址:?http://pan.baidu.com/s/1eRUbjLS
/*************常量定義****************/
#define?MAIN_Fosc 22118400L //主時鐘晶振頻率不同的直接在這里修改頻率
#define?serial_one_read_max? 32 //定義緩存區的長度
#define?serial_one_baud_rate 115200L //波特率只需在這里修改波特率就可以了
#define Timer1_Reload (65536UL?-(MAIN_Fosc?/?4?/?serial_one_baud_rate)) ???//用定時器1做波特率發生器,計算定時器1的重裝值
/*************變量定義****************/
u8??serial_one_read_data[serial_one_read_max]; //定義串口接受數據緩存區
u8??serial_one_read_count=0; //接受數據的個數
//初始化串口1
void?serial_one_init()
{
SCON?|=?0x40; //8位數據
P_SW1?&=??~0xc0; //UART1?使用P30?P31口 默認
TR1?=?0; //關閉定時器
AUXR?&=?~0x01; //S1?BRT?Use?Timer1;
TMOD?&=?~(1<<6); //Timer1?set?As?Timer
TMOD?&=?~0x30; //Timer1_16bitAutoReload;2
AUXR?|=??(1<<6); //Timer1?set?as?1T?mode
TH1?=?(u8)(Timer1_Reload?>>?8);
TL1?=?(u8)Timer1_Reload;
TR1??=?1; //打開定時器
PS?=?1; //高優先級中斷
REN?=?1; //允許接收
ES??=?1; //允許中斷
EA?=?1; //允許全局中斷
}
//延時10毫秒
void?Delay10ms() //@22.1184MHz
{
unsigned?char?i?j?k;
_nop_();
_nop_();
i?=?1;
j?=?216;
k?=?35;
do
{
do
{
while?(--k);
}?while?(--j);
}?while?(--i);
}
//串口1發送一個字節
void?serial_one_send_byte(u8?dat)
{
SBUF?=?dat;//發送數據
while(!TI);//等待發送完畢
TI=0; ?//清除發送標志
}
//串口1發送字符串
void?serial_one_send_string(u8?*dat)
{
while(*dat)
serial_one_send_byte(*dat++);
}
//串口1發送指定指定長度數據
void?serial_one_send_length_string(u8?*datu8?length)
{
u8?i=0;
for(;i? serial_one_send_byte(dat[i]);
}
void?main()
{
Delay10ms();//延時10毫秒
Delay10ms();//延時10毫秒
serial_one_init();//串口初始化
while(1)
{
if(serial_one_read_count?>?0)//如果接受到數據
{
Delay10ms();//延時10毫秒,等待數據全部讀入
serial_one_send_length_string(serial_one_read_dataserial_one_read_count);//發送接收到的數據
serial_one_read_count?=?0;//接收計數清0
}
}
}
/*********************?串口1中斷函數************************/
void?UART1_int?(void)?interrupt?UART1_VECTOR
{
if(RI)
{
RI?=?0;//清除接受標志
serial_one_read_data[serial_one_read_count]?=?SBUF;//將數據存入數組
if(++serial_one_read_count?>?serial_one_read_max) ?//避免溢出
serial_one_read_count?=?0;
}
// if(TI)
// {
// }
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-06-18?18:49??串口通信\
?????文件????????2780??2017-06-18?18:48??串口通信\main.c
?????文件????????5985??2017-06-18?18:48??串口通信\main.LST
?????文件???????26252??2017-06-18?18:48??串口通信\main.OBJ
?????文件???????25455??2017-06-18?18:48??串口通信\serial
?????文件????????1348??2017-06-18?18:48??串口通信\serial.hex
?????文件??????????42??2017-06-18?18:48??串口通信\serial.lnp
?????文件????????8873??2017-06-18?18:48??串口通信\serial.M51
?????文件???????15858??2017-06-18?18:48??串口通信\serial.plg
?????文件???????71938??2017-06-18?18:49??串口通信\serial.uvgui.Administrator
?????文件????????5374??2017-06-18?18:49??串口通信\serial.uvopt
?????文件???????13414??2017-06-18?18:49??串口通信\serial.uvproj
?????文件???????32794??2017-06-12?21:40??串口通信\STC15Fxxxx.H
評論
共有 條評論