51单片机串口通讯实验

2025-02-25

51单片机串口通讯实验(共2篇)

1.51单片机串口通讯实验 篇一

51单片机实验报告 实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。

实验代码 #include 〈reg51、h> void Delay10ms(unsigned int c); void main(){)1(elihwﻩ { ﻩ

P0

= 0x00;

Delay10ms(50);

;ffx0 =

0Pﻩ

;)05(sm01yaleDﻩ } } void Delay10ms(unsigned int c){

unsigned char a,b;

for(;c>0;c-—)

{)——b;0〉b;83=b(rofﻩ { ﻩ ﻩ

for(a=130;a〉0;a--);

} ﻩ ﻩ }

} 实验原理

W W hi i le(1)表示一直循环。

循环体内首先将 P0 得所有位都置于零,然后延时约5 5 0 *10=500ms,接着 0 P0 位全置于 1 1,于就是 D LED 全亮了。接着循环,直至关掉电源..延迟函数就是通过多个for r 循环实现得。

实验 2 流水灯(不运用库函数)

实验现象 起初 led 只有最右面得那一个不亮,半秒之后从右数第二个led也不亮了,直到最后一个也熄灭,然后 led 除最后一个都亮,接着上述过程 #include <reg52、h> #include <intrins、h> void Delay10ms(unsigned int c);

main(){

unsigned char LED;

LED = 0xfe;

while(1)

{ ﻩ

;DEL = 0Pﻩ

Delay10ms(50);

;1 〈〈 DEL = DELﻩ)00x0 == 0P(fiﻩ {

;efx0 = DELﻩ

} ﻩ } ﻩ} void Delay10ms(unsigned int c)

unsigned char a,b;

for(;c>0;c-—)

{)—-b;0〉b;83=b(rofﻩ { ﻩ ﻩ ﻩ

;)--a;0>a;031=a(rofﻩ

} ﻩ

} ﻩ} 实验原理

这里运用了C语言中得位运算符, , 位运算符左移, , 初始值得二进制为1 111 1 11 0, 之后左移一次变成1 111 1 100 0,当变成0000

0 0000 时通过 f if 语句重置 1 1 11 1 11110、延迟函数在第一个报告已经说出了,不再多说..实验 3 流水灯(库函数版)实验现象

最开始还就是最右边得一个不亮,然后不亮得灯转移到最右边得第二个,此时第一个恢复亮度,这样依次循环.实验代码 #include 〈reg51、h> #include 〈intrins、h〉 void Delay10ms(unsigned int c); void main(void){

unsigned char LED;

;EFx0 = DELﻩ)1(elihwﻩ { ﻩ

P0 = LED;

;)05(sm01yaleDﻩ ﻩ

;)1,DEL(_lorc_ = DELﻩ } ﻩ} void Delay10ms(unsigned int c){

unsigned char a, b;

for(;c〉0;c——)

{ ﻩ

for(b=38;b〉0;b—-)

{ ﻩ ﻩ

;)-—a;0〉a;031=a(rofﻩ

} ﻩ } } 实验原理

利用头文件中得函数,_cro l _(,), 可以比位操作符更方便得进行 2 2 进制得移位操作, , 比位操作符优越得就是,该函数空位 补全时都就是用那个移位移除得数据, , 由此比前一个例子不需要f if 语句重置操作..数码管实验

实验现象 单个数码管按顺序显示0-9与 A-F。

#include<reg51、h> void Delay10ms(unsigned int c);unsigned char code DIG_CODE[16]={0x3F,0x06, 0x5B,0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; void main(void){

;0 = i rahc dengisnuﻩ while(1)

{ ﻩ

P0= ~DIG_CODE[i];

;++iﻩ)61 == i(fiﻩ

;0 = iﻩ } ﻩ

;)05(sm01yaleDﻩ }

ﻩ} void Delay10ms(unsigned int c)

//Î ó² î 0us

unsigned char a, b;

for(;c>0;c—-)

{ ﻩ

for(b=38;b〉0;b--)

{

;)—-a;0〉a;031=a(rofﻩ

} ﻩ }

} 实验原理

根据数码管得点亮原理,依次找到代表 0 0 -9 ,A--F F 得位码,用循环与延迟函数就可以达到要求了。

实验 动态数码管 #include〈reg51、h> #define GPIO_DIG

P0 ﻩ#define GPIO_PLACE P1

unsigned char code DIG_PLACE[8] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code DIG_CODE[17] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char DisplayData[8];void DigDisplay();void main(void)

unsigned char i;

for(i=0; i<8;i++)

{ ﻩ

DisplayData[i] = DIG_CODE[i];

} ﻩ while(1)

{ ﻩ

;)(yalpsiDgiDﻩ }

ﻩ ﻩ} void DigDisplay()

;i rahc dengisnuﻩ

;j tni dengisnuﻩ for(i=0;i<8; i++)

{

;]i[ECALP_GID = ECALP_OIPGﻩ ﻩ

;]i[ataDyalpsiD = GID_OIPGﻩ

;01 = jﻩ ﻩ ﻩ

ﻩwhile(j—-);ﻩ

};00x0 = GID_OIPGﻩ ﻩ} 实验原理

依然找到相应数字与字母得编码, , 由于必须通过快速扫 描利用视觉暂留来实现数码管得显示, , 分段码与位码,不断扫描。最后如果更换数字得话, , 需要消隐操作,防止数码管重复显示所带来得不清楚..实验 外部中断 实验现象

每按一下独立按键,就会在数码管显示屏上+1.#include 〈 reg51、h 〉 #include sbit LS138A=P2^2;

sbit LS138B=P2^3;sbit LS138C=P2^4;

unsigned int LedNumVal_1,LedNumVal_2,LedOut[8];Unsigned char code Disp_Tab[]= {0x3f,0x06,0x5b,0x4f, 0x66,0x6d , 0x7d,0x07,0x7f,0x6f , 0x40};

void delay(unsigned int i)

{

char j;

for(i;i > 0; i--)

for(j = 200;j > 0;j—-);} void main(void)

unsigned char i;

P0=0xff;

P1=0xff;

P2=0xff;

IT0=1;

EX0=1;

IT1=1;

EX1=1;

EA=1;

while(1)

LedOut[0]=Disp_Tab[LedNumVal_1%10000/1000];

LedOut[1]=Disp_Tab[LedNumVal_1%1000/100]|0x80;

LedOut[2]=Disp_Tab[LedNumVal_1%100/10];

LedOut[3]=Disp_Tab[LedNumVal_1%10];

;]0001/00001%2_laVmuNdeL[baT_psiD=]4[tuOdeLﻩ

LedOut[5]=Disp_Tab[LedNumVal_2%1000/100];

LedOut[6]=Disp_Tab[LedNumVal_2%100/10];

LedOut[7]=Disp_Tab[LedNumVal_2%10];

for(i=0;i<8; i++)

{

;]i[tuOdeL = 0Pﻩ

switch(i)ﻩ

ﻩcase 0:LS138A=0;LS138B=0;LS138C=0; break; case 1:LS138A=1; LS138B=0;LS138C=0;break; case 2:LS138A=0; LS138B=1; LS138C=0;break; case 3:LS138A=1; LS138B=1;LS138C=0; break;case 4:LS138A=0;LS138B=0;LS138C=1;break;case 5:LS138A=1; LS138B=0; LS138C=1;break;case 6:LS138A=0;LS138B=1; LS138C=1; break;

case 7:LS138A=1;LS138B=1; LS138C=1; break;

}

;)051(yaledﻩ } ﻩ

} } void

counter0(void)interrupt 0

using 1 {

EX0=0;

LedNumVal_1++;

EX0=1; } void

counter1(void)interrupt 2 using 2 {

EX1=0;

LedNumVal_2++;

EX1=1;} 实验原理 对于数码管得显示采用 138译码器,通过 switch 语句与数字一一对应,通过 P3、2 P3、3外部中断接口使数码管成功计数。外部中断函数为 INT0与INT1。

2.51单片机串口通讯实验 篇二

1.1 RS-232-C技术指标。目前, 一种被广泛应用的标准通信协议即RS-232-C串行通信接口, 它是美国电气工业协会和BELL公司共同开发的, 已广泛应用于终端、外设和PC中。一般智能仪器和计算机间的通信常用2脚数据输入, 3脚数据输出, 7脚信号地3个引脚和两个信号, 最大传输速率为20kbit/s, 传输距离也只有15米。而RS-232-C标准则包含25个引脚和21个信号, 它主要负责电平移位、转换即信号反相等工作, 自身具备电平转换和驱动芯片, 如MC1488型的发送设备和MC1489型的接收设备。

1.2 MCS-51单片机串行通信。鉴于上述的通信标准, 要想MCS-51单片机与PC机之间达成有效的串行通信, 就必须在两者之间建立有效的串行接口对接。而RS-232串行口采用的电平是EIA电平, MCS-51单片机串行通信采用的电平是TTL电平, 因此必须在两者之间置入电平准换芯片, 才能到达到数据有效传输的目的。根据上述情况和技术指标要求, 以及经济上的考虑、选用MAXIM公司生产的MAX232芯片, 其功耗更低, 而且属于单电源供电, 本身具有电源电压变换器, 只需+5V电源即可将其变换成RS-232输出电平所需的±10V电压, 所以可有效实现RS-32的技术指标, 因此无论从经济上, 还是功能实现上都具有较好的效果。

1.3 PC机的通信设计。PC机采用可编程串行异步通信控制器8251A来实现, 通过对INS8251A初始化可以控制串行数据传送格式和速度及其工作方式, 使得它与单片机的通信方式一致, 从而实现PC机与单片机之间的通信。为有效实现远距离的数据传输, 则可在此系统中植入两片MAX485芯片, 并可采用两级光电隔离以提高系统的抗干扰能力。

二、串行通信的程序设计

2.1 MCS-51主从式多机通信原理。在MCS-51进行多机通信时, 以其工作方式3为例, 每发送一帧数据为11位:1位起始位 (0) , 8位数据位和1位停止位 (1) , 附加的第9位数据在非多机系统中为奇偶校验位, 在发送端有SCON的TB8产生, 在接收端传送到SCON的RB8。它还可设定为“0”或“1”作为在多机通信中区分数据帧 (标志0) 还是地址帧 (标志1) 的标志。此外, 在MCS-51主从式多级通信中, 还应明确以下通信原理, 即当主机发出信息时, 所有从机均处于听命状态, 以确保有效接受主机发来的地址信息, 若从机接收的一帧信息为“1”, 则表明主机发送的信息为地址信息, 此时所有从机接收中断, 反之则中断屏蔽。当某一从机进入中断服务程序后, 便会将接收的地址和本机地址比对, 若符合则向主机发回本机地址作为应答, 并与主机建立联通关系, 即准备接收主机发来的相应数据信息, 反之, 若对比地址不符, 则从机会退出中断服务程序。如此, 便可有效实现从机对主机地址帧数据和数据信息数据的分离。

2.2 MCS-51单片机多机串口通信协议。如上文所述, 要实现MCS-51单片机和PC机的有效通信, 就必须置入电平准换芯片, 即确保双方具有相同的波特率、起始位、停止位、奇偶校验位, 进而实现数据传输, 同时还应建立必要的通信应答信号。

2.2.1单片机的通信方式。单片机的灵活性强, 在同步移位寄存器方式下和通用异步收发器 (UART) 方式下均可工作。而串行口的通信方式是由特殊功能寄存器SCON控制的, 所以工作模式设定为为SM0和SM1;多机通信控制位可使用方法2或3;接收和发送数据分别为第9位的RB8和TB8;发送和接收中断标志发送分别为TI和RI。即若选用工作方式3, 则9位UART定时器T1作为波特率发生器。

2.2.2 PC机的通信方式。PC机的通信接口子为异步通信接口, 它可设定1位、1.5位或2位停止位, 传输数据可在5~8位之间任意选择, 通信频率在0~9.6Kbps之间, 包括奇偶校验、帧校验、溢出校验3种方式, 并可由此对其进行相应的初始化处理。PC机有明确的数据口地址和控制口地址, 并由其状态字寄存器保持其工作状态, 以为MCS-51的CPU进行读取。其通信协议包括以下3点, 即 (1) 串行通信波特率为1200bps; (2) 帧格式为8位数据位, 一位起始位, 一位可编程的第9位, 一位停止位; (3) 主机和从机遵循主从原则, 主机通过呼叫选择从机, 数据可双向传递, 各从机间的通信则需通过主机为媒介。

三、通信程序设计的实现

可见, MCS-51单片机多串口通信的实现又通信程序控制, 包括主机程序, 从机主程序和中断服务程序3个部分。其中, 主机程序负责8251A的初始化工作, 以及主机与各从机之间的通信, 从机主程序负责串行口的初始化工作, 以及判断与8251A的波特率是否符合, 并进行相应的设置, 中断程序如上文所述, 其主要是控制MCS-51单片机和PC机的数据通信。

总结

文本所阐述的软件系统及硬件设备, 通过在IBMPC/XT机和DICE系列的MCS-51单片机实践调试, 运行效果良好, 尤其对中小型的工控系统效果更佳, 因此可切实地应用到实际系统的操作中。

参考文献

[1]许丽佳, 陈阳舟.PC机与多MCS-51单片机间的串行通信设计[J].单片机, 2009 (5) .

上一篇:公安边防消防警卫部队接收普通高等学校毕业生工作实施细则下一篇:第四单元小数的意义和性质教学反思