#include //C51通用串口收发数据C语言程序模块#define uchar unsigned char
#define uint unsigned int
uchar shu;
bit i;
sbit led1=P0^0;
void delayms(uint xms) //1ms;
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--) ;
}
/************************************************************************/
void UART_init()
{
TMOD=0X20;//定时器1方式 2
SCON=0X50;//K串口方式
TH1=0XFD;
TL1=0XFD;
EA=1;
ES=1;
TR1=1;
}
/*********************************
函数:void main(void)
____________________________________
说明:主函数,程序执行从这里开始
********************************/
void main(void)
{
UART_init();
while(1 ) ;
}
/*********************************
函数:void Inter() interrunpt 4
____________________________________
说明:串口中断处理程序
********************************/
void Inter() interrupt 4
{
uchar i=0;
if(RI) //判断是否接收完毕
{
RI=0; //是则RI清零,准备下一次接收
shu=SBUF;
SBUF=shu;
}
if(TI) //发送数据回去
{
TI=0;
}
if(shu== 0x30) //判断接收到的数据, 并作出相应处理
{
led1=1;//LED灯灭
}
if(shu == 0x31) //判断接收到的数据, 并作出相应处理
{
led1=0;
}
if(shu== 0x32) //判断接收到的数据, 并作出相应处理
{
for(i=0;i<10;i++)
{
led1=~led1;
delayms(200);
}
}
}
关键字:C51 通用串口 收发数据
引用地址:
C51通用串口收发数据C语言程序
推荐阅读最新更新时间:2024-11-09 11:47
C51编程7-数码管(工作原理1)
如果将单片机的比喻计算的主机,而按键相当于电脑的输入设备(键盘或者鼠标),那么LED灯可以作为输出设备的显示器;如果8位数据,使用8个LED显示数据表示,相当于是以二进制显示数据,非常不利于阅读。 为了追求成本低,便于阅读,人们生产出数码管,通过控制数码管直接显示对应的数字,如下图所示。 共阴数码管与共阳数码管 数码管实际上是8段LED组成(7段LED+1个圆圈),LED的接线有两种方式,第一种将LED负极接在一起,称为共阴数码管,图1;第二种将正极接在一起,称为共阳数码管,图2。 图1 图2 从上两图可以看出,共阴数码管通过给正极高电平可以导通LED,而共阳数码管通过给负极低电平可以导通点亮LED。
[单片机]
C51单片机对共阳极数码管的控制设计
这是共阳极数码管的电路图,其中JP3接到P0口,JP3的8-1对应数码管的a-dp引脚。 共阳极数码管的编码表如下,注意a---最低位,dp---最高位: 【0---3】0xco,0xf9,0xa4,0xb0, 【4---7】0x99,0x92,0x82,0xf8, 【8---B】0x80,0x90,0x88,0x83, 【C---F】0xc6,0xa1,0x86,0x8e。 C51程序显示数字0-9: #include #define uchar unsigned char void delay(); uchar smg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
[单片机]
MSP430F169(三) ---- 使用UART实现PC与单片机的数据收发并在1602 液晶显示
本代码需要注意的细节 每次字符串的发送时间至少间隔三秒,发送的字符的数量最好在32个以内,防止数据接收不全。 本代码波特率的设置为1200.如果波特率设置过高,会出现数据接收不全的问题。我试过9600的波特率,会出现问题。读者可以自行修改代码,实现更高的传输速率。 有关的细节会在代码中说明 代码实现 主函数 #include msp430f169.h #include Config.h #include LCD.h #include Init.h #include UART.h //#include stdlib.h 本来想用全局指针来存储接收的数据 // 结果发现自己用不来....
[单片机]
C51 中data, idata, xdata, pdata, code的作用
从数据存储类型来说,8051系列有片内、片外程序存储器,片内、片外数据存储器。片内程序存储器还分为直接寻址区和间接寻址区。 data:将数据存储在0x00 - 0x7f的128B的RAM空间,可以用acc直接读写,速度最快,生成的代码也最少。 idata:将数据存储在0x00 - 0xff的256B的RAM空间,与data的区别在于访问方式不同,idata数据需要通过间接方式访问。 xdata:将数据存储在外部0x0000 - 0xffff RAM空间,用DPTR访问。 pdata:将数据存储在外部扩展RAM的低256字节空间。 code:将数据存储在ROM区域。 bdata:C51自定义语句,非标准
[单片机]
C51编程19-中断篇(串行通讯3)
MCS-51单片机提供了4种串口的方式,但是我们只有方式1最常用(可变的10位串行通讯方式),下面就方式1的使用进行讲解。 在开始之前先明确一个概念,中断会产生中断标志位,而CPU检测到中断标志位后,如果没有其他更高的中断在执行,CPU会响应该中断,并进入中断服务函数。串行通讯属于中断方式的一种,它服从这个概念。此外串行通讯并不是需要进入串行通讯的时候,会产生中断标志位;而是发送或者接收成功后,会产生中断标志位。 通过中断向量,可以知道串行通讯只有一个中断号4,也就是说当进入无论是发送或者接收成功,都会触发中断服务函数,因此如果需要区分发送与接收需要在中断服务函数中实现区分,可以通过判断中断标志位(TI == 1或者RI
[单片机]
单片机入门教程第22课-串行口应用编程实例
1. 串口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就可以扩展一个并行口。 例:用8051串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,可以靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通讯之前,都要先对控制
[单片机]
C51单片机学习笔记(二)——花样流水灯的实现
1.单片机引脚、晶振、复位的作用 复位电路:,复位是单片机的初始化操作。单片机启动时都需要先付薇,其作用是“清零”,也就是CPU和其他部件处于一个确定的初始状态,并从这个初始状态开始。 复位实质上是单片机的复位脚保持很短时间的高电平,按键复位就是通过按键接高电平(按一下的时间已经足够) 时钟电路(晶振):产生时间信号,使单片机按照一定的时间规律进行指令,晶振频率越高,时钟信号的周期就小,单片机运行也就越快。 32个I/O口 P1.0 ~ P1.7 对应1 ~ 8 号引脚 P2.0 ~ P2.7 对应21 ~ 28 号引脚 P3.0 ~ P3.7 对应10 ~ 17 号引脚 P0.0 ~ P0.7 对应39
[单片机]