本实验主要是U1通过串口线TXD端将流水灯控制码以方式1发送到单片机U2的RXD,U2再利用接受的控制码控制流水灯点亮其P1口的8个发光二极管
单片机U1发送端
首先建立建立一个文件夹send,之后建立工作send,再添加一个send.c源文件,代码如下
#include
unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void Send(unsigned char dat)
{
SBUF=dat;
while(TI==0) //若发送中断标志位没有置"1",就等待
{
;
}
TI=0;
}
void delay(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
void main()
{
unsigned char i;
TMOD=0x20; //定时器工作在方式2
SCON=0x40; //串口工作方式1
PCON=0x00; //设置波特率为9600b/s
TH1=0xfd;
TL1=0xfd;
TR1=1;
while(1)
{
for(i=0;i<8;i++)
{
Send(Tab[i]);
delay();
}
}
}
单片机U2接收端
首先建立建立一个文件夹receid,之后建立工作receive,再添加一个receid.c源文件,代码如下
#include
unsigned char Receive(void)
{
unsigned char dat;
while(RI==0) //只要接受中断标志位RI没有被置"1"就等待,直至接受完毕
;
RI=0;
dat=SBUF;
return dat;
}
void main(void)
{
TMOD=0x20; //定时器T1工作在方式2
SCON=0x50; //串口工作在方式1,允许接受(REN=1)
PCON=0x00; //主要设置波特率为9600b/s
TH1=0xfd;
TL1=0xfd;
TR1=1; //启动定时器T1
while(1)
{
P1=Receive();
}
}
关键字:51单片机 方式1 单工通信
引用地址:
51单片机 基于方式1的单工通信
推荐阅读最新更新时间:2024-03-16 14:43
C51单片机————定时器计数器
51单片机定时器/计数器 定时(定时控制、测量、延时。。。)和计数(对外部事件统计数目)。 软件定时|数字电路定时|可编程定时/计数器 它们都是怎么实现的呢? 额! 你猜 。。。 软件定时 机器执行一个程序,这个程序没有其他用处,只是为了延时!以达到定时的目的。 数字电路硬件定时 555之类的器件,完成定时 可编程定时/计数器 硬件定时,但是是可编程的,可以通过软件初始化设置定时的要求。 1.结构 定时/计数器实质上是一个加一计数器,可以工作在两种方式里,实际上都是对脉冲计数,只是说脉冲的来源不一样而已! 1. 定时 1. 加一计数。 2. 脉冲来自振荡器的12分频后的脉冲(Fosc/12),简单的
[单片机]
51单片机基础——数码管动态显示
#include reg52.h #define wu P0 #define uchar unsigned char sbit wei1=P2^4;//定义第一位LED显示器 sbit wei2=P2^5;//定义第二位LED显示器 sbit wei3=P2^6;//定义第三位LED显示器 sbit wei4=P2^7;//定义第四位LED显示器 //共阴极数码表 uchar code gy ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; voi
[单片机]
51单片机之——外部中断0(INT0)
寄存器是干什么的?怎么配置它?配置完寄存器后,有什么作用呢? 寄存器是中央处理器内的组成部分。它是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。寄存器可以用来暂存指令、暂存数据、暂存地址。换而言之,我们配置寄存器,便是给寄存器中赋予一定的值,而这些值又要与我们的目的想对应,这样它便会有相应的作用。 例如,芯片的资料规定,当给芯片的 A 寄存器赋“0x11”时,它会出现 B 现象;赋“0x77”时,它会出现 C 现象。那么当我们目的是完成 B 现象时,我们就只需要配置 A 寄存器为“0x11”即可。 虽说看起来很简单,并且去完成目的时的流程并非这么容易。但是,实实在在而言,这些就是控制寄存器的根本! 这里以外部中断0(
[单片机]
51单片机控制的数字温度计
总览部分 MCU部分 显示部分 开仿真以后实时显示温度 因为这个程序比较简单,我就直接上代码了,有不明白的请看我以前的文章,谢谢哦! 参考代码如下: #include “reg51.h” char disp ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; char disp_dot ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0}; sbit DQ = P1^3; //定义通信端口 //晶振12MHz void delay_18B20(unsigned int i) {
[单片机]
51单片机基础之串口通信
原理: 这里需要解释一下,串口通信是需要占用定时器1的,所以使用了串口通信就不能使用定时器1,除非是代码优化。 这个需要配置几个寄存器,都比较简单,TMOD寄存器设置定时器计数器的工作方式,SCON则是设置串口通信的工作方式,PCON则是波特率加倍操作,都是比较简单的。 计时器初始值的设置有专门的工具 链接:https://pan.baidu.com/s/1BSi8YCaRWtBGLaV2gslpSw 提取码:1234 使用方法: 设置定时器工作方式,单片机晶振,所需波特率,是否开启倍频,最好让误差为零。 代码: #include reg51.h typedef unsign
[单片机]
基于51单片机的步进电机控制以及仿真
给你一段简单的程序代码,控制步进电机的,不过你要好好看看程序的编写,以适应你的硬件(主要是连线),你可以在实现这个的基础上实现你所说的目标,个人觉得你参考这个程序然后自己实现你所说的功能比较好: #include reg52.h unsigned char code F_Rotation ={0x08,0x10,0x20,0x40};//正转表格 unsigned char code B_Rotation ={0x40,0x20,0x10,0x08};//反转表格 void Delay(unsigned int i)//延时 { while(--i); } main() { unsigned char i; wh
[单片机]
51单片机学习二 led流水灯与按键控制
单片机芯片型号 STC89C516 需求 需要的知识 1.关于延时函数 void Delay100ms() //晶振频率12mhz的100s延时函数 { unsigned char i, j; i = 195; j = 138; do { while (--j); } while (--i); } 可以延时上个语句对应时间,使用辅助程序可以生成 2.关于c51语言位运算中的移位 符号 为 “ ”, “ ” a m,a和m必须是整型表达式,要求m =0,将整型数a按二进制位向左移动m位,高位移出后,将低位补0。 a m,a和m必须是整型表达式,要求m =0。,将
[单片机]
基于80C51单片机和CH375芯片实现打印机驱动系统的设计
引言 本课题来源于北京普析通用公司的一个项目。由于公司现有单机版光谱仪器产品(如1810、T6等)采用的是并行口打印技术,而随着USB打印机技术的逐渐普及,并行口打印机越来越不好买到,而且有些用户的打印机只是USB接口而非并行口,因此现有仪器产品对打印机的支持变得不能适应用户需要。为了实现能将公司的并行口仪器直接和USB打印机相连进行打印,决定设计开发一款LPT-USB打印机的驱动器,负责并口仪器和USB打印机的连接。 本文利用单片机和USB总线接口芯片实现LPT-USB打印机的驱动器设计。利用该设计将能够实现并行打印口数据可以在USB打印机上的直接打印工作,克服了有些并口仪器必须连接并口打印机才能打印的弊端,极大地方便了用户
[单片机]