stc12c56 串口(没有用独立波特率发生器,用T1不分频。中断式接受与发送)
//烧写程序时,一定要选用外部晶振(烧写软件默认为内部晶振(5M~6M))
//烧写时,有时候写不进去,尝试断开地线,然后接上上电
#include<reg51.h>
#include<intrins.h>
sfr AUXR=0x8e;
//sfr AUXR1=0xA2;
//sfr BRT=0x9c;
unsigned char array[9]={0,2,4,6,8,10,12,14,16} ;
#define RELOAD_COUNT 0xf3; //4M晶振,smod=0,9600bps 实际波特率=4000000/(256-243)/32=9615.误差=15/9600=0.16%
//具体计算看《STC12C5A60S2》第79页及其之后
void serial_port_initial(void);
void send_UART(unsigned char i);
void UART_Interrupt_Receive(void);
void main()
{
unsigned char i=0;
serial_port_initial();
for(i=0;i<9;i++)
{
send_UART(array[i]);
}
while(1) ;
}
void serial_port_initial(void) // 使用独立波特率发生器作为波特率发生器
{
SCON=0x50;//8位可变波特率,无奇偶校验位
TMOD=0X21;
AUXR=0x40; //T1定时器不分频,1T的速度
TH1=RELOAD_COUNT;
TL1=RELOAD_COUNT;
TR1=1;
ES=1; // 允许串口中断
EA=1; // 开总中断
}
void send_UART(unsigned char i)
{
ES=0; // 关串口中断
TI=0; // 清零串口发送完成中断请求标志
SBUF=i;
while(TI==0); // 等待发送完成
TI=0; // 清零串口发送完成中断请求标志
ES=1; // 允许串口中断
}
void UART_Interrupt_Receive(void) interrupt 4
{
unsigned char k=0;
if(RI==1)
{
RI=0;
k=SBUF;
send_UART(k);
}
else
{
TI=0;
}
}
完整资料打包
STC51单片机学习笔记4-stc12c56串口资源-单片机文档类资源-CSDN下载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)