|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
STC的范列程序太难理解了又长又丑 一怒之下
看了数据手册还是自己写吧
程序比较简单 很多关键的地方都做了详细的注释
可以当做 串口通信模板来用了
有需要的直接贴过去就OK
使用方法
在STC ISP串口助手上调试通过
硬件使用stc15w204s
下载好程序然后打开串口助手
然后打开串口选择对应的串口
在发送区输入要发送的数据就
可以在接收缓冲区看到发送的数据了
/*****************
stc15w204s
_______
P1.2--1 | | 16--P1.1
P1.3--2 | | 15--P1.0
P1.4--3 | | 14--P3.7--txd
P1.5--4 | | 13--P3.6--rxd
P5.4--5 | | 12--P3.3
VCC --6 | | 11--P3.2
P5.5--7 | | 10--P3.1--txd
GND --8 |_______| 9 --P3.0--rxd
***/
//若无特别说明,工作频率一般为11.0592MHz
#include "reg51.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define FOSC 11059200L //系统频率
#define BAUD 115200 //串口波特率
sfr P5 = 0xC8; //xxxx,1111 端口5
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr AUXR = 0x8e; //辅助寄存器
sfr T2H = 0xd6; //定时器2高8位
sfr T2L = 0xd7; //定时器2低8位
sfr P_SW1 = 0xA2; //外设功能切换寄存器1
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
uchar flag ;
uint a;
sbit led = P5^5;
void main()
{
//a=1;
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
SCON = 0x50; //8位可变波特率
SCON = 0xda; //9位可变波特率,校验位初始为1
SCON = 0xd2; //9位可变波特率,校验位初始为0
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2为1T模式, 并启动定时器2
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
ES = 1; //开串口1中断
EA = 1; //开总中断
while(1)
{
if(flag==1)
{
ES = 0; //关串口中断开关
flag=0;//标志位清零
SBUF=a;//
//要发送什么数据就直接SBUF=你要发送的数据
//假设要发送ADC数据可以SBUF=ADC[];
while(!TI);//等待数据发送结束
TI=0; //数据发送结束软件清零
ES = 1; //开串口中断开关
}
}
}
/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{
a=SBUF;//吧接收到的数据放到a这个变量中
led=a;//
RI=0;//软件清零清除串口接收中断标志位
flag=1;//软件置1当做标志位到主函数里在清零
}
|
| |