此串口处理程序是基于以下的协议写成的:
帧内容FRAME=帧头FA+帧长度len(不包括帧头帧尾)+数据流data+帧尾FB。
串口中断子程序里对整个数据流进行处理,而不是一个字节一个字节地处理,在中断中等待处理完所有的字节。
void Uart_Int(void) interrupt 4 //串口要加帧头与FA帧尾FB
{
unsigned char len, i;
unsigned int j=0;
unsigned char serialStart;
if(RI) //收到数据
{
serialStart=SBUF;
RI=0;
if(serialStart==0xFA)
{
while(RI==0);
len=SBUF; //第一个字节是数据包的长度
RI=0; //清零RI以便接收下一个
for(i=0;i {
while(!RI)
{
j++;
if(j>1000)
{
break; //break跳出循环语句
}
}
if(j<1000)
{
serialBuffer[i]=SBUF;
RI=0;
j=0;
}
else
{
break;
}
}
if((i==len+1)&&(serialBuffer[i-1]==0xFB)) //最后一位是0xFB。
{
REN=0; // 清零接收位
serialCmd=TRUE; //接收完毕,收到命令有效,置位1 又说明pc发送的数据单片机接收成功
}
else
return;
}
else
return;
}
else if(!RI && TI) //发送-RI=0,TI=1
{
TI=0; //TI是为了进入中断而故意软件设置的,所以先清0
SBUF=0xFA;
while(!TI);
TI=0;
len=serialBuffer[0]; //发送的第一个字节是包的长度
for(i=0;i {
SBUF=serialBuffer[i];
while(!TI); //等待发送完毕
TI=0;
}
SBUF =0xFB;
while(!TI);
TI =0;
REN =1;
//ren=receive enable
}
}
关键字:C51 串口中断 子程序
引用地址:
C51的串口中断处理子程序
推荐阅读最新更新时间:2024-03-16 15:22
Keil C51对C语言的关键词扩展之十八:using
在8051系列单片机中,内部ram的前32个字节被分为4组,每组8个寄存器。每组的8个寄存器名字都为R0-R7。通过设置PSW寄存器的两个位,可以选择使用4组寄存器中的哪一组。 寄存器组在处理中断或者使用实时操作系统时非常有用,可以在进入中断或者切换任务时使用不同寄存器组,而不用把8个寄存器的内容保存到堆栈。在退出中断或返回原任务时,只需切换回原来的寄存器组即可。 指定一个函数使用的寄存器组: void rb_function (void) using 3 { . . . } using后跟数字0-3,不允许使用符号表达式指定代替该数字常量。只有定义函数时才可使用using关键词,在做函数原型声明时不允许使用usin
[单片机]
c51单片机中断号及中断向量
1、外部中断 0、 1;分别由引脚/INT0、/INT1的电平信号引起。 2、定时/计数器 0、1;分别由T0、 T1的溢出引起。 3、串行口发送、接收;发送完一个字节或接收到一个字节引起。 上述共5个中断源。 一、中断号 外部中断0 0 定时器T0 1 外部中断1 2 定时器T1 3 串口中断 4 二、 interrupt 和 using 在C51中断中的使用 8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个
[单片机]
C51:LCD1602 显示测量值
#include reg51.h #include intrins.h #include stdlib.h #define uchar unsigned char //延时1 毫秒 程序 void delayms(); //延时 s 毫秒 程序 void delay(uchar s); //初始化 LCD void InitLCD(); //写LCD 指令 void WriteInstruction(uchar); //写LCD 数据 void WriteData(uchar); //写地址 void WriteAdd(uchar); //读LCD 状态 uchar BusyTest(); //LCD
[单片机]
c51单片机中断函数
以串口中断为例: 如: void serial() interrupt 4 { } 和 void serial_uart() interrupt 4 { } 两个函数的功能都是定义串口中断函数。函数名字不一样不重要,重要的是函数名字后面的interrupt 4(中断向量表地址)要正确。
[单片机]
【C51自学笔记】概述与准备
使用atmel公司:AT89S52 使用烧录工具:progisp 使用编写工具:Keil uVision 使用开发板:天狼星TLX-1C开发板 后续出现的代码已打包:https://download.csdn.net/download/f_zmmfs/10560847(侵删) 结构: 内部集成8位CPU,4K字节的ROM,128字节RAM,4个8位并行I/O口,一个全双工串行口,2个16位定时器/计数器,5个中断源。 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器 RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;(非记忆性)
[单片机]
C51-基础知识必备
基础知识必备 概念 在一片硅片上集成了微处理器,存储器及各种输入/输出接口的芯片。(单片微型计算机) 主要知识 中央处理器 程序处理器 数据存储器 定时器/计数器 并行I/O口 全双工串行口 中断系统 时钟震荡电路 主要内容 总图
[单片机]
51单片机串口通讯之中断法
程序讲解: /*---------------------------------------------------------------*/ //串口通讯 //按下按钮,单片机发送数据 Come On!\r\n 给主机 //单片机晶振:11.0592MHz //波特率: 9600bps /*-------------------------------------------------------------*/ //包含头文件 #include at89x52.h unsigned char co de tab ={ Come On!\r\n }; #define k1 P3_2 //对应开发板
[单片机]
采用C51与插拔式FLASH闪存设计无纸记录仪
ATMEL公司推出的带有看门狗功能的单片机AT89C55WD带有20K的程序存储器,是8051系列中一款较为先进的产品,其看门狗功能可以大大提高产品的稳定性,大容量的内部程序存储器可以容纳功能丰富的软件。
以往的许多无纸记录仪均采用3.5英寸软盘作为数据存贮介质,但软盘存贮的可靠性差、存储容量有限、成本较高等诸多缺点实在难以克服。
作为一种高科技的非易失性存储设备,FLASH闪存首先在数码相机、PDA、移动电话等数字产品当中得到了应用,随着工艺的进步和价格的下降,逐步向其他应用领域扩展,其容量大、功耗低、速度快、不易受损等优点正受到人们越来越多的青睐,而且最大的好处是,随着技术水平的进步,FLASH闪存的容量也在不断
[测试测量]