单片机等待发送完成的程序是

单片机等待发送完成的程序是,第1张

单片机定时器一1ms12MHz

C语言单片机等待询问_单片机C语言之串口通信协议

weixin_39972768

关注

0点赞·125人阅读

现实生活中, 我们总是要与人打交道,互通有无。单片机也一样,需要跟各种设备交互。例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需要从汽车的底层控制器取得数据。而这个数据的获得过程就是一个通信过程。类似的例子还有控制器通常是单片机或者PLC与变频器的通信。通信的双方需要遵守一套既定的规则也称为协议,这就好比我们人之间的对话,需要在双方都遵守一套语言语法规则才有可能达成对话。

通信协议又分为硬件层协议和软件层协议。硬件层协议主要规范了物理上的连线,传输电平信号及传输的秩序等硬件性质的内容。常用的硬件协议有串口,IIC, SPI, RS485, CAN和 USB。软件层协议则更侧重上层应用的规范,比如modbus协议。

好了,那这里我们就着重介绍51单片机的串口通信协议,以下简称串口。串口的6个特征如下。

(1)、物理上的连线至少3根,分别是Tx数据发送线,Rx数据接收线,GND共用地线。(2)、0与1的约定。RS232电平,约定﹣5V至﹣25V之间的电压信号为1,﹢5V至﹢25V之间的电压信号为0 。TTL电平,约定5V的电压信号为1,0V电压信号为0 。CMOS电平,约定33V的电压信号为1,0V电压信号为0 。其中,CMOS电平一般用于ARM芯片中。(3)、发送秩序。低位先发。(4)、波特率。收发双方共同约定的一个数据位(0或1)在数据传输线上维持的时间。也可理解为每秒可以传输的位数。常用的波特率有300bit/s, 600bit/s, 2400bit/s, 4800bit/s, 9600bit/s。(5)、通信的起始信号。发送方在没有发送数据时,应该将Tx置1 。当需发送时,先将Tx置0,并且保持1位的时间。接受方不断地侦测Rx,如果发现Rx常时间变高后,突然被拉低(置为0),则视为发送方将要发送数据,迅速启动自己的定时器,从而保证了收发双方定时器同步定时。

(6)、停止信号。发送方发送完最后一个有效位时,必须再将Tx保持1位的时间,即为停止位

先清进位再进行9AHH-60H+61H后再调整整成十进制。哈!可能编程员想用本机的十进制功能来转换9BH等于十进制的多少吧。转换完的数放在62H中。如真是这可烦了点,就只加一次就可用的了。

是的,但你疑问的问题也是存在的。

针对不同的单片机,有不同的编译器,每种单片机的c语言编译器都对c语言做了适用于单片机的扩展。

编译器在编译单片机c语言的代码时要有一些设置选项或者makefile之类的设置,这些设置对了,程序才能适应选定的单片机。

有很多编译器为了让单片机程序更适合用c语言,还将一些固定的程序(比如中断入口、主程序入口、时钟设置等)用汇编写好后,嵌入到c语言程序的工程中,使C语言更适合单片机编程。

做了这么多工作后,用这种编译器编译的程序就可以下载到单片机中执行了。

当然会了,只是有一些具体的值编译器帮你完成了,指针就是地址。

具体如下:

1、如果加入D抖动的特别厉害,试试只用PI控制。

2、还有PID参数都是一步一步调出来的,我建议你做个上位机,就是个简单的VB串口程序,用来设置PID参数

3、然后在单片机这边弄个串口接收程序,这里就是个简单的串口程序,人人都会,把接收到的PID存储在缓冲区里。

4、然后单片机程序直接调用。单片机带EEPROM的话,当接收到改变的PID参数时,存储这些参数。去STC官网下你的单片机资料,上面有EEPROM测试程序,直接套用。

1、确定目标:确定单片机要实现的功能和目标。

2、选择硬件:选择适合实现目标的单片机和相关外设。

3、准备开发环境:安装并配置单片机的开发环境,包括IDE、编译器、调试器、下载器等。

4、编写程序:根据目标和选择的硬件,使用C语言、汇编语言或其他语言编写控制程序。

5、调试程序:将程序下载到单片机中进行测试和调试,查找和修复错误。

#include <reg52h>

#define KEY_1 P30

#define KEY_2 P31

#define KEY_3 P32

#define KEY_4 P33

sbit P30 = P3^0;

sbit P31 = P3^1;

sbit P32 = P3^2;

sbit P33 = P3^3;

unsigned char dis_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x00};

unsigned char g5,g4,g3,g2,g1,g0;

unsigned int t1_count,key_count;

unsigned char key_value;

unsigned char dis_count;

void com_int_set(); //中断设置

void dis(); //显示程序

void key_process();

void main()

{

com_int_set();

while(1)

{

key_process(); //键盘处理程序

}

}

/=========================================================

中断设置程序

==========================================================/

void com_int_set()

{

TMOD = 0x10;

TH1 = 0xfc;

TL1 = 0x17; //毫秒

TR1  = 1;

ET1  = 1;

EA   = 1;

}

/=========================================================

TIME1 中断入口程序

==========================================================/

void Time1_Interrupt_Pro() interrupt 3

{

TH1 = 0xfc;

TL1 = 0x17;

KEY_1 = 1;

KEY_2 = 1;

KEY_3 = 1;

KEY_4 = 1;

if((KEY_1&KEY_2&KEY_3&KEY_4)==0)

{

key_count++;

if(key_count>=200)

{

  key_count=0;

  if(KEY_1 ==0) key_value = 1;

  if(KEY_2 ==0) key_value = 2;

  if(KEY_3 ==0) key_value = 3;

  if(KEY_4 ==0) key_value = 4;

}

}

t1_count++ ;

if(t1_count==5)

{

t1_count = 0;

dis_count++;

if(dis_count == 7) dis_count = 1;

}

dis();

}

/=========================================================

显示程序

==========================================================/

void dis()

{

P2 = ~(0x01 << (dis_count-1));

switch(dis_count)

{

case 1:

P1 = dis_code[g5];

break;

case 2:

P1 = dis_code[g4];

break;

case 3:

P1 = dis_code[g3];

break;

case 4:

P1 = dis_code[g2];

break;

case 5:

P1 = dis_code[g1];

break;

case 6:

P1 = dis_code[g0];

break;

}

}

/=========================================================

键盘处理程序

==========================================================/

void key_process()

{

if(key_value!=0)

{

g5 = g4;

g4 = g3;

g3 = g2;

g2 = g1;

g1 = g0;

g0 = key_value;

key_value = 0;

}

}

以上就是关于单片机等待发送完成的程序是全部的内容,包括:单片机等待发送完成的程序是、单片机程序 下面的程序又何种功能、用c语言编写的单片机程序(就是书上的程序),进行烧录之后就可以让单片机工作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9770792.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存