"); //-->
第三十八课 串口通讯之中断法
程序讲解:
/*---------------------------------------------------------------*/
//串口通讯
//按下按钮,单片机发送数据"Come On!\r\n"给主机
//单片机晶振:11.0592MHz
//波特率: 9600bps
/*-------------------------------------------------------------*/
//包含头文件
#include<at89x52.h>
unsigned char code tab[]={"Come On!\r\n"};
#define k1 P3_2 //对应开发板硬件
/*-------------------------------------------------------------*/
//串口初始化
void UART_Init(void)
{
SCON = 0x50; //串口工作方式为1,串行允许接受
TMOD = 0x20; //定时器1工作在方式2
PCON = 0x80; //SMOD = 1; 波特率加倍
TH1 = 0xfA; //波特率 9600bps fosc="11".0592MHz
TL1 = 0xfA;
ES = 1; //开串口中断
TR1 = 1; //允许定时器1工作
EA = 1; //开总中断
}
/*-------------------------------------------------------------*/
//延时5000+0us 函数定义
void delay5ms(void)
{
unsigned char i,j,k;
for(i=135;i>0;i--)
for(j=2;j>0;j--)
for(k=7;k>0;k--);
}
/*-------------------------------------------------------------*/
//串口发送一个字节
void Uart_SendChar(unsigned char dat)
{
SBUF = dat; //待发送的数据写入缓冲区
while(!TI); //等待发送完成
TI = 0; //清零发送标志位
}
/*-------------------------------------------------------------*/
//串口发送一个字符串
void Uart_SendString(unsigned char *dat)
{
while(*dat!='\0')
{
Uart_SendChar(*dat); //发送当前数据
dat++; //指向下一个要发送的数据
}
}
/*-------------------------------------------------------------*/
//主函数
void main(void)
{
UART_Init(); //初始化串口
while(1)
{
if(k1==0)
{
delay5ms();
if(k1==0)
{
Uart_SendString(tab); //发送数据
while(P3_2==0);
}
}
}
}
/*-------------------------------------------------------------*/
//串口接收中断函数
void INT_UartRcv(void) interrupt 4
{
unsigned char Rcv = 0;
if(RI) //查询接收标志位(有数据发送过来时置为1)
{
RI = 0; //接收标志位清零
Rcv = SBUF; //存储缓冲区的数据
Uart_SendChar(Rcv); //让从电脑上传到单片机的数据,传回的电脑显示
}
}
本节重点:
1、ES 串行通信中断使能在中断使能寄存器IE 中
寄存器对应位:EA - ET2 ES ET1 EX1 ET0 EX0
EA 使能标志位置位则所有中断使能复位则禁止所有中断
- 保留
ET2 定时器2 中断使能
ES 串行通信中断使能
ET1 定时器1 中断使能
EX1 外部中断1 使能
ET0 定时器0 中断使能
EX0 外部中断0 使能
2、当有数据从串口传送到单片机时,串口接收中断标志位RI会置位,此时若相关中断均使能则会进入串口接收中断服务函数
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
新浪的一则消息
WL-751型微波治疗机电路原理图
电子生物波理疗仪电路原理图
品英Pickering为光电信息领域提供先进的开关、仿真方案和测试系统
新浪上的一则消息
新浪上的一则消息
瑞萨电子Minicube2
新浪上的一则消息
台积电对日德厂期望值再降 关税、车市不妙双隐忧
为什么这项关键芯片技术对中美之间的人工智能竞赛至关重要
KA22135 音响IC电路
在线调试工具EZ-CUBE参考设计
Windows CE开发初步
UCIe IP 子系统支持 36G 芯片间数据速率
V850 Stick套件
WinCE下的触控屏驱动程序源代码(MS提供)
瑞萨电子工具E1
飞机也能电动化? 华裔科学家发明「钠空气电池」
一站式打卡智驾未来,AWC 2025观众登记通道火热开启
麦克斯韦方程组和麦克斯韦关系式有什么区别?
头部车企终将入局人形机器人领域?
Windows NT下最负盛名的专用调试工具
电风扇定时控制器(长城FS7—40)
人工智能与无人机的组合如何撕开俄空天军的 “核心“
Windows CE BSP 1.2
KA2214 音响IC电路
wince的屏幕旋转程序
瑞萨电子工具e8a
新浪的一则消息
三防漆7大死角终结者!PCBA防水新工艺如何实现360°零盲区防护