导航:首页 > 操作系统 > 单片机双机通信c程序

单片机双机通信c程序

发布时间:2023-03-31 17:57:44

① 51单片机的双机通信 跪求大神帮我读懂程序,马上采纳

ORG 0000H
LJMP START
ORG 0023H //定时器中哪丛断入口地址
LJMP SINT1 //定时器中断程序
ORG 0040H//主程序从0040h开始执行
START:
MOV SP,#60H//设置堆栈
MOV TMOD,#20H//初始化定时器控制寄存器
MOV TH1,#0F3H
MOV TL1,#0F3H//设置定时器1初值
SETB TR1//开启定时器1
MOV SCON,#0C0H;方式3//设置串口控制寄存器
MOV PCON,#00H
SETB EA//允许总中断
SETB ES//允许串口中断
{ MOV R0,#20H
MOV A,@R0
MOV C,P//p和tb8估计是用伪指令定义的东西
MOV TB8,C
MOV SBUF,A} 读取地址20h里的内容发送到串口

(JNB TI,$//等待发送完
CLR TI);//发送完以后清除发送标志 这两句不需要了
AJMP $//原地等待
SINT1:
PUSH PSW
PUSH A//压入堆栈保护
CLR TI 清发送标志
INC R0 //寄存器ro里面的内容加1
MOV A,@R0//间接寻址 读取ro所指向地址的内容 比如:ro里面是21h 就是读取21h地址的内容到 a
MOV C,P
MOV TB8,C
MOV SBUF,A
CJNE R0,#2FH,RET1 //比较是否发送完如果完了就离开中断没有的蔽贺话继续发送 ;跳出中断

CLR TI//清标志
CLR ES//不允许串口中断
CLR EA//关总中断

POP A
POP PSW //弹出a和psw的数据 回复psw中断之前的数值
RET1: RETI
END

这个发送程序就是通过定时器中断依次把数据送到串口发送寄存器。

接收程序:
ORG 0000H
LJMP START
ORG 0023H
LJMP SINT1
ORG 0040H
START:
MOV SP,#60H
MOV TMOD,#20H
MOV TH1,#0F3H
MOV TL1,#0F3H
SETB TR1
MOV SCON,#0D0H
MOV PCON,#00H
SETB EA
SETB ES
MOV R0,#20H
AJMP $
SINT1: PUSH PSW
PUSH A //a和psw压入堆栈保护
CLR RI//清串口接收标志
MOV A,SBUF//读取串口的数值

MOV C,P
JNC L1
JNB RB8,ERROR//这几句是判断 如果错误就跳转到错误处理程序

AJMP NORMAL//没问题宏缓派的话跳转到正常执行
L1:JB RB8,ERROR
NORMAL:MOV @R0,A 读取a的内容到ro所指向的地址 单片机间接寻址
INC R0 //
CJNE R0,#30H,RET1 // 比较 如果够了就中断返回 ;跳出中断
POP A //还不够
POP PSW //还不够恢复a 和psw的值 准备下一次中断接收
RET
ERROR: “出错了”
CLR RI
CLR ES
CLR EA //错误处理 关掉串口中断和总中断 不恢复psw里面的值。单片机将无事可做。老在执行 AJMP $
RET1: RETI
END

够详细了吧
自己多查查资料。

② 51单片机c语言串行双机通信的问题。请直接给我程序,要有注释说明。

先设计出来电路,然后再谈编程的问题。

③ 双机串行通信

这里有个基本的双机串行通信范例:
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/b738c5d010b2ce349a5027ee.html
是否可以解决您的问题?

④ 求一个51 双机通信 的程序 C语言编写 内容 单片机A传送数字0~255

参凯掘考资料

51 双机通搏庆信基孙握

⑤ 单片机双机通信程序

双机器通信很容易的。如果用Proteus仿真的话还得安装虚拟端口软件。

⑥ 单片机双机串口通信程序设计

初始化程序:
BTLEQU2FH;波特率放在内部RAM的2FH单元
MOVTMOD,#21H;T0方式1,16位计数器,T1方式2,串口用
SETBTR0;启动T0
MOVBTL,#0F3H;波特率设定为1200
MOVSCON,#0C0H;串口方式3,9位数据,禁止接收
接收及验证程序:
NUMEQU2BH;同步符个数值存放在内部RAM的2BH单元
TEMPEQU2CH
ROM-CH:DB55H,55H,55H,55H,55H,55H,55H,55H,55H,55H
DB55H,55H,55H,55H,55H,55H,55H,55H,55H,55H;20字节同步符
MIMDB'WSC':3字节密码“WSC”
SETBP3.5;置电台收状态
SETBREN;允许串口接收
A1:MOVNUM,#0;记录连续到同步符55H的个数
A2:JBRI,A2;串口有数据转A3
A3:CLRRI;清接收中断标志
MOVA,SBUF;读串口数据
CJNEA,#55H,A1;不是同步符转A1
INCNUM;收到的同步符个数加1
MOVA,NUM;取收到的同步符个数
CJNEA,#5,A2;未收够连续5个55H转A2
A4:MOVNUM,#0;密码验证,记录收到密码字节数
A5:MOVDPTR,#MIM;密码字符首址
MOVA,NUM
MOVCA,@A+DPTR;查表取密码
MOVTEMP,A;保存密码
JBRI,A6;串口收完一个字节转A6

A6:CLRRI;清接收中断标志
MOVA,SBUF;读串口数据
CJNEA,TEMP,A4;与密码不符转A4
INCNUM;收到的密码个数加1
MOVA,NUM;取已收到的密码字节数
CJNEA,#3,A5;密码未收完转A5
发送程序:
CLRP3.5;置电台发状态
MOVB,#23
MOVDPTR,#ROM-CH
B1:CLRA
MOVCA,@A+DPTR;查表发送同步符和密码共24字节
INCDPTR
LCALLSEND-CH;调发送单字节子程序
DJNZB,B1

CLRA
MOVDPTR,#7000H;外部RAM数据首址,发送外部RAM中的数据到电台
B2:CJNER4,#0,B3
CJNER3,#0,B3;R4R3=发送字节数
B3:MOVXA,@DPTR;取数据
INCDPTR
LCALLSEND-CH
CJNER3,#0,B4
CJNER4,#0,B5
B4:DECR3
LJMPB2
DECR3
DECR4
LJMPB2

SEND-CH:SETBTB8
MOVSBUF,A
DB0,0,0,0,0,0,0,0
JNBTI,$;延时4μs
CLRTI
RET
结语

⑦ 单片机双机通信,两个单片机的一方作为发送,另一方作为接收,分别调

#include<reg51.h>
#define uchar unsigned char
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
main()
{
uchar i;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x40;
while(1)
{
for(i=0;i<16;i++)
{
SBUF=distab[i];
whileTI==0);
TI=0;
delay(200);
}
}
}
#include<reg51.h>
#define uchar unsigned char
main()
{
uchar i;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
if(RI)
{
RI=0;
P1=SBUF;
}
}
}

⑧ 双机串行口方式1单工通信(求大神帮帮忙C程序代码)

http://blog.163.com/asm_c/blog/static/24820311320146138270129/

参樱乱考脊族档。穗拦

⑨ 您好请问一下,两个单片机互相传数据的程序怎么写

两个单片机互相传数据,其实很简单的 就是两个单片机的串口通信,当然需要一个串口通信的协议,如指令码、数据长度、数据等等,就是什么指令需要怎么操作、操作数据是什么。如这是两个单片机简单通信操作的仿真实例可以作为参考。

#include <reg52.h> // 单片机1

#define uchar unsigned char

#include <stdio.h>

unsigned char* c;

sbit k0=P3^2;

sbit k1=P3^3;

sbit led1=P3^5;

uchar k;

bit y0,y1;

bit t,s;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main()

{

SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr

TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

TH1 = 0xF4; //TH1: reload value for [email protected]

TR1 = 1; //启动定时器1

ES = 1; //允许串口中断位

EA = 1; //允许总中断位

c=0;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "az";

SendString(c); //发送字符串

}

if(k0==1 ) { y0=0; }

if(k1==0 && y1==0)

{

y1=1;

c = "as";

SendString(c); //发送字符串

}

if(k1==1 ) { y1=0; }

// for(i = 0; i < 4000; i++); //延迟一小段时间

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') { k++;led1=~led1; }

s=1; t=0;

if(k==10) { k=0;}

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

------------------

#include <reg51.h> // 单片机2

#define uchar unsigned char

unsigned char* c;

sbit led1=P3^2; // 接收 az , P.2 输出低电平, P3.3 输出高电平。

sbit led2=P3^3; // 接收 aa , P.2 输出高电平, P3.3 输出低电平。

sbit k0=P3^5;

bit y0,t,s;

uchar k;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main (void)

{

SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1

TMOD = 0x21; // 定时器工作方式2

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

TH1 = 0xF4; // TH1 = 0xFD; 波特率 2400

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

TR1 = 1;

ES = 1; // 开串口中断

EA = 1; // 开总中断

// ET0=1;

// TR0=1;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "az";

SendString(c); //发送字符串

}

if(k0==1 ) { y0=0; }

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') {led1=0;led2=1; k++; }

if(SBUF=='s') {led1=1;led2=0; k--; }

s=1; t=0;

if(k==10) { k=0;}

if(k==255) { k=9; }

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

void T0_time()interrupt 1

{

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

k++;

if(k==10) // 这里修改时间

{

k=0;

led1=1;

led2=1;

}

}

⑩ 单片机C语言双机通信求修改

发给我看看

我做单片机的

阅读全文

与单片机双机通信c程序相关的资料

热点内容
python中的idle 浏览:998
五轴联动数控编程 浏览:963
换一台电脑如何远程云服务器 浏览:130
阿里云怎么买云服务器 浏览:662
java提取文字 浏览:95
阿里云服务器同人账号问题 浏览:418
5分钟解压轴题 浏览:339
安卓桌面二级文件夹 浏览:186
eps文档加密 浏览:261
手机怎么做pdf 浏览:162
ug曲面pdf 浏览:279
液化气还是压缩气 浏览:950
阿里云公共ntp服务器地址 浏览:991
金字塔学习机编程 浏览:684
多边形扫描线算法Python 浏览:718
快手app快手粉条在哪里 浏览:256
mysql备份数据库命令linux 浏览:544
车辆解压手续怎么样 浏览:432
怎么提安卓版本号 浏览:622
pdf转换成word网页版 浏览:313