实验报告_实验一 IAR 串口通信
串口实验实验报告
串口实验实验报告串口实验报告一、引言串口是一种常见的数据传输接口,广泛应用于电子设备之间的数据通信。
本次实验旨在通过串口通信实验,深入了解串口的工作原理和使用方法,并实现简单的数据传输。
二、实验目的1. 理解串口通信的基本原理;2. 掌握串口通信的硬件连接方式;3. 学会使用串口通信协议进行数据传输;4. 实现简单的串口通信程序。
三、实验器材1. 一台个人电脑;2. 一块开发板;3. 一条串口数据线。
四、实验步骤1. 将开发板与个人电脑通过串口数据线连接起来;2. 打开串口通信软件,并进行相应的设置;3. 在开发板上编写程序,实现数据的发送和接收;4. 在个人电脑上编写程序,实现数据的接收和显示;5. 进行数据传输实验,观察数据是否能正常传输。
五、实验结果与分析经过实验,我们成功地实现了串口通信,并能够正常地进行数据传输。
通过观察数据接收端的显示,我们可以清晰地看到发送端发送的数据被准确地接收并显示出来。
这说明我们的串口通信实验是成功的。
六、实验总结通过本次实验,我们深入了解了串口通信的原理和使用方法,并成功地实现了串口通信的数据传输。
串口通信在电子设备之间的数据传输中有着广泛的应用,掌握串口通信技术对于我们的学习和工作都具有重要的意义。
七、参考文献[1] XXXX. 串口通信原理与应用[M]. 电子工业出版社, 2010.八、致谢感谢实验中给予我们帮助和指导的老师和同学们,没有你们的支持,我们无法顺利完成本次实验。
九、附录实验中使用的程序代码如下:发送端代码:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <Windows.h>int main(){HANDLE hSerial;DCB dcbSerialParams = { 0 };COMMTIMEOUTS timeouts = { 0 };// 打开串口hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hSerial == INVALID_HANDLE_VALUE){printf("无法打开串口\n");return 1;}// 配置串口参数dcbSerialParams.DCBlength = sizeof(dcbSerialParams);if (!GetCommState(hSerial, &dcbSerialParams)) {printf("无法获取串口参数\n");return 1;}dcbSerialParams.BaudRate = CBR_9600;dcbSerialParams.ByteSize = 8;dcbSerialParams.StopBits = ONESTOPBIT;dcbSerialParams.Parity = NOPARITY;if (!SetCommState(hSerial, &dcbSerialParams)) {printf("无法设置串口参数\n");return 1;}// 设置串口超时时间timeouts.ReadIntervalTimeout = 50;timeouts.ReadTotalTimeoutConstant = 50;timeouts.ReadTotalTimeoutMultiplier = 10;timeouts.WriteTotalTimeoutConstant = 50;timeouts.WriteTotalTimeoutMultiplier = 10;if (!SetCommTimeouts(hSerial, &timeouts)){printf("无法设置串口超时时间\n");return 1;}// 发送数据char data[] = "Hello, Serial!";DWORD bytesWritten;if (!WriteFile(hSerial, data, strlen(data), &bytesWritten, NULL)){printf("无法发送数据\n");return 1;}// 关闭串口CloseHandle(hSerial);return 0;}```接收端代码:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <Windows.h>int main(){HANDLE hSerial;DCB dcbSerialParams = { 0 };COMMTIMEOUTS timeouts = { 0 };// 打开串口hSerial = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hSerial == INVALID_HANDLE_VALUE){printf("无法打开串口\n");return 1;}// 配置串口参数dcbSerialParams.DCBlength = sizeof(dcbSerialParams);if (!GetCommState(hSerial, &dcbSerialParams)){printf("无法获取串口参数\n");return 1;}dcbSerialParams.BaudRate = CBR_9600;dcbSerialParams.ByteSize = 8;dcbSerialParams.StopBits = ONESTOPBIT;dcbSerialParams.Parity = NOPARITY;if (!SetCommState(hSerial, &dcbSerialParams)) {printf("无法设置串口参数\n");return 1;}// 设置串口超时时间timeouts.ReadIntervalTimeout = 50;timeouts.ReadTotalTimeoutConstant = 50;timeouts.ReadTotalTimeoutMultiplier = 10;timeouts.WriteTotalTimeoutConstant = 50;timeouts.WriteTotalTimeoutMultiplier = 10;if (!SetCommTimeouts(hSerial, &timeouts)){printf("无法设置串口超时时间\n");return 1;}// 接收数据char data[100];DWORD bytesRead;if (!ReadFile(hSerial, data, sizeof(data), &bytesRead, NULL)){printf("无法接收数据\n");return 1;}// 显示接收到的数据printf("接收到的数据:%s\n", data);// 关闭串口CloseHandle(hSerial);return 0;}```十、联系方式作者:XXXEmail:XXX。
串口通信实验报告
串⼝通信实验报告⼤连理⼯⼤学实验报告成绩:串⼝通信实验⼀、实验⽬的和要求了解串⼝通信的原理与机制掌握基于8051的串⼝通信硬件电路设计⽅法掌握8051串⼝通信程序调试⽅法⼆、实验原理和内容实验原理:1.串⼝通信简介串⼝通信是指数据在⼀根数据线上按照⼆进制数的数位⼀位接⼀位的传输。
其特点是通信线路简单,只要⼀对传输线就可以实现通信(如电话线),可⼤⼤地降低成本,适⽤于远距离通信。
缺点是传送速度慢。
2. 51单⽚机串⾏⼝简介51单⽚机的串⾏⼝是⼀个可编程全双⼯的通信接⼝,具有UART(通⽤异步收发器)的全部功能,能同时进⾏数据的发送和接收,也可以作为同步移位寄存器使⽤。
51单⽚机的串⾏⼝主要由两个独⽴的串⾏数据缓冲寄存器SBUF组成,它可以通过特殊功能寄存器SBUF对串⾏接收或串⾏发送寄存器进⾏访问,两个寄存器共⽤⼀个地址99H,但在物理上是两个独⽴的寄存器,由指令操作决定访问哪⼀个寄存器。
执⾏写指令时访问串⾏发送寄存器;执⾏读指令时,访问串⾏接收寄存器。
3.串⾏⼝控制寄存器SCON串⾏⼝控制寄存器SCON⽤来设定串⾏⼝的⼯作⽅式、接收或发送控制位以及状态标志位等。
在本实验中设定SM0为0,SM1为1,采⽤串⾏⼝的⼯作⽅式1(8位异步收发,波特率可变,由定时器控制)。
允许串⾏接收位REN设置为1,其它控制、标志位设置为0。
(即令SCON=0X50)4.定时器/计数器模式控制寄存器TMOD定时器/计数器模式控制寄存器TMOD是⼀个逐位定义的8位寄存器,其中低四位(即D0 ~ D3)定义定时器/计数器T0,⾼四位(即D4 ~ D7)定义定时器/计数器T1。
在本实验中使⽤定时器1,设定M1=1,M2=0,,采⽤定时器T1的⼯作⽅式2(⾃动重载8位定时器/计数器),其它控制位设置为0。
并由晶振频率(11.0592MHZ)和波特率(9600)计算初始化定时器T1:TH1=TL1=0xfd。
最后通过对TR1置1启动定时器T1。
串口通信实验
字符串(‘0’)截图:(学号50的最后一位0)
(2)源代码:
#include <reg51.h>
void send(unsigned char *p)
{
unsigned char i;
for(i=0;p[i]!='\0';i++)
{
SBUF=p[i];
while(TI==0);
TI=0;
《单片机原理及应用》实验报告
实验序号:7 实验项目名称:串口通信
学 号
xx
姓 名
Xx
专业、班
xx
实验地点
xx
指导教师
xx
实验时间
xx
一、实验目的及要求
掌握串口数据的发送和接收。
二、实验设备(环境)及要求
Keil uVision4 、单片机开发箱。
三、实验结果与数据处理
用串口进行数据发送和接收,并在键盘上实现按哪一个键,Led灯显示该键的ASCI码。
P0=~SBUF;
RI=0;
}
}
四、分析与讨论(心得)
掌握了串口数据的发送和接收。
五、教师评语
签名:
日期:
成绩}Biblioteka }void main()
{
unsigned char pSent[]="50";
TMOD=0x20;
TH1=0xF3;
TL1=0xF3;
ET1=0;
ES=0;
EA=0;
PCON=0X80;
SCON=0x50;
TR1=1;
REN=1;
send(pSent);
while(1)
{
while(RI==0);
单片机实验报告-串口通信
单片机实验报告姓名___ _ 学号___一、实验项目单片机串行口通讯实验二、实验要求利用单片机串行口,实现两个实验台之间的串行通讯。
其中一个实验台作为发送方,另一侧为接收方。
发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。
三、实验目的1.掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。
2.了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3.学习串口通讯的中断方式的程序编写方法。
四、实验说明1、8051、80C196 的RXD、TXD接线柱在POD51/96 仿真板上,8088/86的TXD、RXD在POD8086仿真板上的8251芯片旁边。
2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。
也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。
3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。
可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。
可以用实验仪上的逻辑分析仪采样串口通信的波形五、程序框图六、源程序发射程序:org 0000hljmp mainorg 0023hljmp com_in ;串行口中断服务子程序入口org 1000hmain: mov sp,#50h ;设置堆栈指针mov dptr,#7f00h ;81c55初始化mov a,#03hmovx @dptr,amov tmod,#20h ;设置定时器T1工作方式为方式2mov th1,#0f4h ;设置定时器T1计数初值mov tl1,#0f4hmov pcon,#80h ;波特率加倍setb tr1 ;打开定时器mov scon,#40h ;设置串行口工作方式为方式1,8位异步收发,波特率可变mov ie,#90h ;打开中断允许寄存器,采用中断方式发送数据clr ti ;关闭发送中断标志位T1loop: acall key1 ;调用读取键值子程序mov r0,a ;键值存入R0setb ti ;开发送中断标志位T1ljmp loopcom_in: clr ti ;关闭发送中断标志位T1mov sbuf,r0 ;发送数据retikey1: acall ks1 ;调用判定有无键闭合子程序jnz lk1 ;有键闭合,跳转lk1acall dir ;无键闭合,调用显示子程序ajmp key1lk1: acall dir ;可能有键闭合,延时24msacall diracall ks1 ;调用判定有无键闭合jnz lk2 ;经去抖动,判断有键闭合跳转lk2acall dir ;无键闭合,调用延时子程序ajmp key1lk2: mov r2,#0feh ;列选码送到R2mov r4,#00h ;r4为列号计数器lk4: mov dptr,#7f01h ;列选码送到PA口mov a,r2movx @dptr,amov dptr,#7f03Hmovx a,@dptr ;读PC口jb acc.0,lone ;0行线为高电平,无键闭合,跳转lone,转判1行mov a,#00h ;0行有键闭合,首键号0→Aajmp lkp ;跳转lkp,计算键号lone: jb acc.1,ltw0 ;1行线为高电平,无键闭合,跳转ltwo,转判2行mov a,#06h ;1行有键闭合,首键号8→Aajmp lkp ;跳转lkp,计算键号ltw0: jb acc.2,lthr ;2行线为高电平,无键闭合,跳转lthr,转判3行mov a,#12h ;2行有键闭合,首键号10H→Aajmp lkp ;跳转lkp,计算键号lthr: jb acc.3,next ;3行线为高电平,无键闭合,跳转next,准备下一列扫描mov a,#18h ;3行有键闭合,首键号18H→Alkp: add a,r4 ;计算键号,即行首键号+列号=键号push a ;键号进栈保护lk3: acall dir ;调用显示子程序,延时6msacall ks1 ;调用判定有无键闭合子程序,延时6msjnz lk3 ;判定键释放否,未释放,则循环pop a ;键已释放,键号出栈→Aretnext: inc r4 ;列计数器加1,为下一列扫描做准备mov a,r2 ;判定是否已扫到最后一列jnb acc.5,knd ;键扫描已到最后一列,跳转knd,重新扫描rl a ;键未扫到最后一列,位选码左移一位mov r2,a ;位选码→R2ajmp lk4knd: ajmp key1ks1: mov dptr,#7f01h ;判定有无键闭合子程序,全0→扫描口(PA口)mov a,#00h ;即列线全为低电平movx @dptr,amov dptr,#7f03h ;PC口地址movx a,@dptr ;从PC口读行线状态cpl a ;行线状态取反,如无键按下,则A中内容为0anl a,#0fh ;屏蔽无用的高四位ret接受程序:org 0000hljmp mainorg 0023hljmp com_inorg 1000hmain: mov sp,#50h ;设置堆栈指针mov 60h,#0 ;显示缓冲区初始化mov 61h,#0mov 62h,#0mov 63h,#0mov 64h,#0mov 65h,#0mov dptr,#7f00h ;81c55初始化mov a,#03hmovx @dptr,aacall dir ;调用显示子程序mov tmod,#20h ;设置定时器T1工作方式为方式2mov th1,#0f4h ;设置定时器T1计数初值mov tl1,#0f4hmov pcon,#80h ;波特率加倍setb tr1 ;打开定时器mov scon,#50h ;设置串行口工作方式为方式1,允许串行接受位REN置1 mov ie,#90h ;打开中断允许寄存器,采用中断方式发送数据com_in: clr ri ;接收中断标志位清0mov a,sbuf ;接收数据retiloop: mov r1,a ;键值转换为显示数据mov r0,#0f0hmov a,r1anl a,r0mov 61h,a ;61h对应的数码管显示大于16的数mov r2,#0fhmov a,r1anl a,r2mov 60h,a ;60h对应的数码管显示小于16的数acall dirhere: sjmp $dir: mov r0,#60h ;置缓冲器指针初值mov r3,#01h ;位选码的初值送R3mov a,r3ld0: mov dptr,#7f01h ;位选码→PA口movx @dptr,ainc dptr ;指向PB口mov a,@r0 ;显示数据送到Aadd a,#0dh ;加偏移量movc a,@a+pc ;根据显示数据来查表取段码movx @dptr,a ;段码→PB口acall delay ;延时1ms,即该位显示1msinc r0 ;显示数据缓冲区指针指向下一个数据单元mov a,r3 ;位选码送入A中jb acc.5,ld1 ;判断是否扫描到最右边的LED,如到,则返回rl a ;位选码向左移一位,准备让显示位右边的下一位LED亮mov r3,a ;位选码送r3中保存ajmp ld0ld1: rettab: db 3fh,06h,5bh,4fh,66h,6dh ;共阴极LED段码表db 7dh,07h,7fh,6fh,77h,7chdb 39h,5eh,79h,71h,73h,3ehdb 31h,6eh,1ch,23h,40h,03hdb 18h,00hdelay: mov r7,#02h ;延时1ms子程序D1: mov r6,#0FFHD2: djnz r6,D2djnz r7,D1ret七、实验小结单片机实验报告姓名:毛幸林班级:2010138学号:201013803专业:电子信息工程。
单片机串口应用实验报告(一)
单片机串口应用实验报告(一)单片机串口应用实验报告引言•介绍单片机串口应用实验的背景和意义•提出实验的目的和重要性实验原理•串口的工作原理和基本概念•单片机与串口通信的原理和方法实验步骤1.准备实验所需材料和工具2.配置单片机与串口的连接3.编写单片机程序,完成串口通信的初始化设置4.设计并实现发送和接收数据的功能5.调试程序,验证通信是否正常实验结果与分析•描述实验过程中的观察和测量结果•对实验结果进行分析和解释实验总结•总结实验的目标、方法和结果•分析实验中可能存在的问题和改进的空间•强调实验对于学习和应用单片机串口的重要性参考资料•列出参考过的相关教材、论文或网络资源以上是关于“单片机串口应用实验报告”的相关文章,希望对您有所帮助。
抱歉,以上是一份简要的实验报告的大纲,以下是对每个部分的详细描述:引言在引言部分,可以简要介绍单片机串口应用实验的背景和意义。
可以提到单片机串口通信在电子产品中的广泛应用,以及为什么学习和掌握串口通信对于创作者和工程师来说非常重要。
实验原理在实验原理部分,可以详细介绍串口的工作原理和基本概念。
可以解释串口是如何通过串行传输数据的,以及常见的串口通信协议。
还可以介绍单片机与串口通信的原理和方法,包括如何将单片机与电脑或其他设备连接进行通信。
实验步骤在实验步骤部分,可以按照以下方式列出实验步骤: 1. 准备实验所需材料和工具:列出实验所需的单片机模块、串口模块、电脑等设备。
2. 配置单片机与串口的连接:描述如何将单片机与串口模块连接起来。
3. 编写单片机程序:详细介绍如何编写单片机程序,并完成串口通信的初始化设置,包括波特率、数据位、校验位等。
4. 设计并实现发送和接收数据的功能:介绍如何设计程序使单片机能够发送和接收数据,可以包括简单的数据收发、数据加工处理等。
5. 调试程序:描述如何进行程序调试,验证通信是否正常,可以介绍使用示波器、串口调试助手等工具。
串口实验报告
《嵌入式系统开发》课程实验报告班级:电信141*名:***学号: *********实验日期: 5月6日电子通信工程系实验一串口通信实验学时安排:2学时一、实验目的:1、熟悉STM32的编程环境的使用;2、掌握STM32的串口的编程;二、实验步骤:1.在keil环境下编辑源文件,并编译。
2.在野火STM32实验板上运行,调试程序,观察实验现象,理解并掌握相关知识。
3.编写STM32 的串行通信程序,实现由串口调试助手输入任意字符串,STM接收后返回到串口调试助手输出。
三、实验内容:设计思路及程序代码。
1、建立工程,编写主要代码2、时钟配置RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);3、GPIOA配置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // USART1_TX (PA.9)GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1_RX (PA.10)GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA104、USART 初始化设置USART_ART_BaudRate = bound;//一般设置为9600;USART_ART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_ART_StopBits = USART_StopBits_1;//一个停止位USART_ART_Parity = USART_Parity_No;//无奇偶校验位USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式USART_Init(USART1, &USART_InitStructure); //初始化串口USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断USART_Cmd(USART1, ENABLE); //使能串口5、串口中断初始化函数void USART1_IRQHandler(void) //串口1中断服务程序{u8 Res;#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.OSIntEnter();#endifif(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据if((USART_RX_STA&0x8000)==0)//接收未完成{if(USART_RX_STA&0x4000)//接收到了0x0d{if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始else USART_RX_STA|=0x8000; //接收完成了}else //还没收到0X0D{if(Res==0x0d)USART_RX_STA|=0x4000;else{USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;} } }#ifdef OS_TICKS_PER_SEC //如果时钟节拍数定义了,说明要使用ucosII了.OSIntExit();#endif }7、在main函数编写int main(void) {u8 t;u8 len;delay_init(); //延时函数初始化NVIC_Configuration(); // 设置中断优先级分组uart_init(9600); //串口初始化为9600LED_Init(); //初始化与LED连接的硬件接口while(1) {if(USART_RX_STA&0x8000) { //接收完毕len=USART_RX_STA&0x3fff; //得到此次接收到的数据长度printf("\r\n您发送的消息为:\r\n");for(t=0;t<len;t++){USART_SendData(USART1,USART_RX_BUF[t]); //发送一个字节的数据while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); } //等待发送结束LED1=!LED1;delay_ms(200);LED1=!LED1;printf("\r\n\r\n"); //插入换行USART_RX_STA=0;}else{printf("请输入数据,以空格键结束\r\n");delay_ms(15000); }}}四、实验结果:通过本次试验,经过一次次失败后,终于完成了串口实验;最重要的不是作出实验结果,而是你在实验结果中学会到了什么,排出困难,通过解决困难,才能学到真正的知识。
IAR for stm8平台 寄存器版 串口通信 实验程序
18 #endif /* __UART_H */
19
20
21 //"uart.c" 程序文件
22 #include "uart.h"
23 #include <stdarg.h>
24 #include <stdio.h>
25
26 #define HSIClockFreq 16000000
27 #define BaudRate 38400
42
43
UART1_CR5 = (0<<2)|(0<<1);
44
//使用智能卡模式需要设置的,可以不Fra bibliotek改45
46
//设置波特率
47
baud_div =HSIClockFreq/BaudRate; //分频因子
48
UART1_BRR2 = baud_div & 0x0f;
49
UART1_BRR2 |= ((baud_div & 0xf000) >> 8);
75
UART1_Re_Buf=((uint8_t)UART1_DR);
76
return UART1_Re_Buf;
77 }
78
79
80
81
82 int fputc(int ch, FILE *f)
83 {
84 /*将Printf内容发往串口*/
85 UART1_DR=(unsigned char )ch;
86 while (!(UART1_SR & UART1_FLAG_TXE));
87 return (ch);
88 }
串行通信_实验报告
一、实验目的1. 理解串行通信的基本原理和概念;2. 掌握串行通信的常用接口和协议;3. 学会使用串行通信进行数据传输;4. 熟悉串行通信在嵌入式系统中的应用。
二、实验原理串行通信是一种数据传输方式,通过一根或多根数据线,将数据一位一位地按顺序传送。
与并行通信相比,串行通信在传输速度和成本上具有优势,广泛应用于嵌入式系统、工业控制、远程通信等领域。
串行通信的基本原理如下:1. 数据格式:串行通信中,数据以字节为单位进行传输,每个字节由起始位、数据位、校验位和停止位组成。
2. 通信方式:串行通信主要有同步通信和异步通信两种方式。
a. 同步通信:通信双方使用统一的时钟信号进行数据传输,数据在传输过程中保持同步。
b. 异步通信:通信双方使用不同的时钟信号进行数据传输,数据在传输过程中不保持同步。
3. 串行通信接口:常用的串行通信接口有RS-232、RS-485、USB等。
三、实验设备1. 单片机开发板:STC89C52;2. 串口通信模块:MAX232;3. 串口通信线;4. 电脑;5. 串口调试助手。
四、实验步骤1. 连接电路:将单片机开发板、串口通信模块和电脑通过串口通信线连接起来。
2. 初始化单片机串口:设置单片机串口的工作方式、波特率、校验位和停止位等参数。
3. 编写串口发送程序:在单片机上编写程序,实现数据的串行发送。
4. 编写串口接收程序:在单片机上编写程序,实现数据的串行接收。
5. 使用串口调试助手进行测试:在电脑上打开串口调试助手,设置相应的通信参数,发送和接收数据。
五、实验结果与分析1. 实验结果:通过串口调试助手,成功实现了单片机与电脑之间的数据传输。
2. 分析:a. 在初始化单片机串口时,设置了正确的波特率、校验位和停止位等参数,保证了数据的正确传输。
b. 在编写串口发送程序时,正确地实现了数据的串行发送。
c. 在编写串口接收程序时,正确地实现了数据的串行接收。
六、实验总结1. 通过本次实验,掌握了串行通信的基本原理和概念;2. 学会了使用串行通信进行数据传输;3. 熟悉了串行通信在嵌入式系统中的应用。
串行通信实验报告
串行通信实验报告班级姓名学号日期一、实验目的:1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串口通讯的程序编写方法。
二、实验要求1.单机自发自收实验:实现自发自收。
编写相应程序,通过发光二极管观察收发状态。
2.利用单片机串行口,实现两个实验台之间的串行通讯。
其中一个实验台作为发送方,另一侧为接收方。
三、实验说明通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。
也可以将本机的TXD接到RXD上。
连线方法:在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。
波特率定为600,SMOD=0。
在第二个实验中,将两台实验箱的RXD和TXD交叉相连。
编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。
通过运行程序观察存储单元内数值的变化。
四、程序甲方发送程序如下:ORG 0000HLJMP MAINORG 0023HLJMP COM_INTORG 1000HMAIN: MOV SP,#53HMOV 78H,#20HMOV 77H,00HMOV 76H,20HMOV 75H,40HACALL TRANS HERE: SJMP HERE TRANS: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1MOV SCON,#40H MOV IE,#00HCLR F0MOV SBUF,78H WAIT1: JNB TI,WAIT1 CLR TIMOV SBUF,77H WAIT2: JNB TI,WAIT2 CLR TIMOV SBUF,76H WAIT3: JNB TI,WAIT3 CLR TIMOV SBUF,75H WAIT4: JNB TI,WAIT4CLR TIMOV IE,#90HMOV DPH,78HMOV DPL,77HMOVX A,@DPTRMOV SBUF,A WAIT: JNB F0,WAITRETCOM_INT: CLR TIINC DPTRMOV A,DPHCJNE A,76H,END1 MOV A,DPLCJNE A,75H,END1 SETB F0CLR ESCLR EARETEND1: MOVX A,@DPTRMOV SBUF,AEND乙方发送程序如下:ORG 0000HLJMP MAINORG 0023HLJMP COM_INTORG 1000H MAIN: MOV SP,#53HACALL RECEI HERE: SJMP HERE RECEI: MOV R0,#78H MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1MOV SCON,#50H MOV IE,#90H CLR F0CLR 7FH WAIT: JNB 7FH,WAITCOM_INT: PUSH DPLPUSH DPHPUSH AccCLR RIJB F0,R_DATAMOV A,SBUFMOV @R0,ADEC R0CJNE R0,#74H,RETN SETB F0RETN: POP AccPOP DPHPOP DPLRETIR_DATA: MOV DPH,78HMOV DPL,77HMOV A,SBUFMOVX @DPTR,AINC 77HMOV A,77HJNZ END2INC 78HEND2: MOV A,76HCJNE A,78H,RETNMOV A,75HCJNE A,77H,RETNCLR ESCLR EASETB 7FHSJMP RETNEND五、实验过程中遇到的主要问题OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口HasRcv equ 20h.0 ; 接收标志位LEDBuf equ 40h ; 显示缓冲RCVBuf equ 50H ; 接收缓冲ORG 0000HLJMP START; 串行口中断程序ORG 0023HJNB TI,S0_RCLR TINOPSJMP S0_RETS0_R: ; 接收数据CLR RIMOV RCVBUF,SBUF ; 保存数据SETB HasRcv ; 提示收到数据NOPS0_RET:RETILEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ; 共6个八段管mov r2, #00100000b ; 从左边开始显示Loop:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, LoopretTestKey:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 输出线置为0mov dptr, #INmovx a, @dptr ; 读入键状态cpl aanl a, #0fh ; 高四位不用retKeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hGetKey:mov dptr, #OUTBITmov P2, dphmov r0, #Low(IN)mov r1, #00100000bmov r2, #6KLoop:mov a, r1 ; 找出键所在列cpl amovx @dptr, acpl arr amov r1, a ; 下一列movx a, @r0cpl aanl a, #0fhjnz Goon1 ; 该列有键入djnz r2, KLoopmov r2, #0ffh ; 没有键按下, 返回0ffhsjmp ExitGoon1:mov r1, a ; 键值= 列X 4 + 行mov a, r2dec arl arl amov r2, a ; r2 = (r2-1)*4mov a, r1 ; r1中为读入的行值mov r1, #4LoopC:rrc a ; 移位找出所在行jc Exitinc r2 ; r2 = r2+ 行值djnz r1, LoopCExit:mov a, r2 ; 取出键码mov dptr, #KeyTablemovc a, @a+dptrmov r2, aWaitRelease:mov dptr, #OUTBIT ; 等键释放clr amovx @dptr, amov r6, #10call Delaycall TestKeyjnz WaitReleasemov a, r2retSTART:MOV SP, #60HMOV IE, #0 ; DISABLE ALL INTERRUPTMOV TMOD,#020H ; 定时器1工作于方式2 (8位重装)MOV TH1, #0F3H ; 波特率?2400BPS @ 12MHzMOV TL1, #0F3HANL PCON,#07FH ; SMOD 位清零orl PCON,#80hMOV SCON,#050H ; 串行口工作方式设置MOV LEDBuf, #0ffh ; 显示8.8.8.8.mov LEDBuf+1, #0ffhmov LEDBuf+2, #0ffhmov LEDBuf+3, #0ffhmov LEDBuf+4, #0mov LEDBuf+5, #0SETB TR1SETB ESSETB EA;mov sbuf,a;jnb ti,$MLoop:jb HasRcv, RcvData ; 收到数据?call DisplayLED ; 显示call TestKey ; 有键入?jz MLoop ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 通讯口输出键码MOV SBUF,ALJMP MLoopRcvData:clr HasRcv ; 是mov a, RcvBuf ; 显示数据mov b,aanl a,#0fh ; 显示低位mov dptr, #LEDMapmovc a, @a+dptrmov LEDBuf+5, amov a,bswap a ; 显示高位anl a,#0fhmov dptr, #LEDMapmovc a, @a+dptrmov LEDBuf+4, aljmp MLoopEND六、实验后的心得体会。
串口通讯实验报告
串口通讯实验报告串口通讯实验报告一、引言串口通讯是计算机与外部设备进行数据交互的一种重要方式。
在本次实验中,我们通过使用串口通讯实现了计算机与单片机之间的数据传输,探索了串口通讯的原理和应用。
二、实验目的本次实验的目的是通过串口通讯实现计算机与单片机之间的数据传输,并观察数据的传输过程和结果。
通过这个实验,我们可以更好地理解串口通讯的工作原理,并掌握串口通讯的基本操作方法。
三、实验原理串口通讯是通过串行传输方式实现数据传输的。
在计算机和外部设备之间,数据通过串行的方式进行传输,即逐位地进行传送。
串口通讯的原理主要包括波特率、数据位、停止位和校验位等参数的设置。
四、实验步骤1. 准备工作:连接计算机和单片机,确保串口线连接正确。
2. 设置串口参数:打开计算机的串口设置工具,设置波特率、数据位、停止位和校验位等参数。
3. 单片机编程:编写单片机程序,设置串口通讯的相关参数,并实现数据的接收和发送功能。
4. 计算机编程:编写计算机程序,通过串口通讯接收单片机发送的数据,并进行相应的处理和显示。
5. 实验验证:运行单片机程序和计算机程序,观察数据的传输过程和结果,验证串口通讯的正确性。
五、实验结果与分析经过实验,我们成功地实现了计算机与单片机之间的数据传输。
通过串口通讯,我们可以将计算机上的数据发送到单片机上,并从单片机上接收到数据,实现了双向的数据交互。
我们还观察到,在不同的串口参数设置下,数据传输的速度和稳定性会有所差异。
六、实验应用串口通讯在现实生活中有着广泛的应用。
例如,我们可以通过串口通讯将计算机连接到打印机或扫描仪上,实现打印和扫描功能。
此外,串口通讯还可以应用于工业自动化控制、仪器仪表通讯等领域。
七、实验总结通过本次实验,我们深入了解了串口通讯的原理和应用,并成功地实现了计算机与单片机之间的数据传输。
通过实验,我们掌握了串口通讯的基本操作方法,并对串口通讯的参数设置和数据传输过程有了更深入的理解。
串口通信实验报告
串口通信实验报告摘要本实验旨在通过串口通信实现两个设备之间的数据传输。
通过使用串口通信协议,我们能够在不同设备之间进行双向数据传输,实现设备之间的数据交互。
本文将介绍串口通信的基本原理、实验设备和步骤、实验结果以及讨论与总结。
一、引言串口通信是一种常用的通信方式,它被广泛应用于计算机、嵌入式系统、智能设备等领域。
串口通信通过连接计算机或其他设备的串口接口,实现设备之间的数据交换。
串口通信具有传输速度快、稳定可靠、易于实现等优点,因此在实际应用中得到了广泛的应用。
二、实验设备和步骤1. 实验设备本实验使用以下设备进行串口通信实验:- 一台计算机- 一块开发板或者单片机- 两根串口线- 软件串口调试助手2. 实验步骤(1)连接串口线首先,将一根串口线的一个端口连接到计算机的串口接口,另一个端口连接到开发板或者单片机的串口接口。
然后,将另一根串口线的一个端口连接到计算机的另一个串口接口,另一个端口连接到开发板或者单片机的另一个串口接口。
(2)设置串口参数打开软件串口调试助手,在设置界面中选择正确的串口号和波特率,并设置其他参数,如数据位、停止位、奇偶校验等。
(3)发送和接收数据在软件串口调试助手的发送界面中输入要发送的数据,并点击发送按钮。
然后,在接收界面中即可看到接收到的数据。
三、实验结果本实验通过串口通信成功地实现了数据的发送和接收。
在软件串口调试助手的发送界面中,我们输入了一段文本,并成功发送到开发板或者单片机。
在接收界面中,我们成功接收到了从开发板或者单片机发送过来的数据,并正确显示在接收界面上。
四、讨论与总结通过本次实验,我们深入了解了串口通信的基本原理和实验步骤。
串口通信具有不同的参数设置,需要根据实际情况进行调整。
同时,在实际应用中,应注意串口接口的连接问题,确保连接正确、稳定。
另外,在数据传输过程中,也需要注意数据的格式和校验问题,以保证数据的准确性。
在今后的学习和实践中,我们可以进一步探索串口通信的应用领域。
串行口通信实验单片机实验报告
实验六串行口通信实验一、实验内容实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。
本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。
二、实验目的掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。
三、实验原理51 单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。
进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5〜-15V为1, +5〜+ 15V为0),而单片机的串口是TTL电平(大于+2.4V为1,小于-0.7V 为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。
为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows软件进行观察,这里我们可以使用免费的串口调试程序SSCOM3或Windows的超级终端。
单片机串行接口有两个控制寄存器:SCON和PCON。
串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。
在这种方式下,数据为8 位,只能从RXD 端输入输出,TXD 端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。
由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。
待8 位数据输完后,硬件将SCON 寄存器的T1 位置1,必须由软件清零。
单片机与PC 机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。
在DOS 操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250 进行口地址操作即可。
WINDOWS 的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。
如果用户要进行串行通信,可以调用WINDOWS 的API应用程序接口函数,但其使用较为复杂,可以使用KEILC 的通信控件解决这一问题。
单片机串口通讯实验报告
单片机串口通讯实验报告本实验是基于单片机和串口通讯的实验,旨在通过掌握单片机与计算机之间的串口通讯原理、方法和技巧,提高学生在单片机应用方面的操作技能和实践能力。
本实验将分为以下三个部分进行讲解:一、实验原理串口是指通过一条通信线路,将数据以一定的格式传输到一个设备或计算机上。
单片机是一种非常常见的嵌入式系统,具有很好的应用前景。
通过学习单片机串口通信原理,可以更好地理解嵌入式系统的应用场景。
串口发送数据的基本原理是将二进制的数据码转换成特定规则的数据帧,发送到串口的通信线路上。
串口接收数据的基本原理是从串口线路上读取二进制码,对码进行格式化解码,再存储到相应的缓存区中。
计算机和单片机通讯的原理基本一致,但是具体的实现方法和细节要根据所用的串口模块和单片机芯片来确定。
二、实验步骤该实验将从计算机到单片机的数据传输进行实验。
其中,计算机上将使用串口终端软件RealTERM,单片机使用TTL串口。
1.连接TTL串口首先,将串口线连接到单片机的TTL串口上(RX、TX、GND)。
2.串口设置打开RealTERM软件,设置串口参数(波特率、数据位、奇偶校验、停止位等)。
在Windows系统中,可以通过设备管理器查看串口设备,从而确定串口号(通常为COM1、COM2等)。
3.单片机程序设计单片机程序中需要设置串口参数、发送数据和接收数据等功能。
在发送数据时,需要将发送缓存区中的数据转换成相应的数据帧格式,再通过串口发送到计算机上。
在接收数据时,需要从串口接收缓存区中读取数据,并且解析成特定的格式,再将数据存储到所需的区域。
4.进行实验打开串口终端软件后,点击“打开串口”按钮,可以看到从单片机发送的数据。
可以通过键盘输入数据,以进行数据的发送和接收。
具体操作步骤可以根据实际需要来确定,可以设置不同的数据帧格式和接收响应逻辑。
三、实验结果通过上述实验,可以掌握单片机串口通信的基本原理和实现方法。
可以通过实验得到一些操作技巧,例如:1.根据计算机和单片机所使用的串口模块和相关参数,选择合适的波特率、数据位、奇偶校验和停止位等控制参数。
串口通信的实验报告
串口通信的实验报告串口通信的实验报告一、引言串口通信是一种常见的数据传输方式,广泛应用于各种电子设备和计算机系统中。
本实验旨在通过实际操作,探究串口通信的原理和应用。
二、实验目的1.了解串口通信的基本原理;2.学习串口通信的配置和编程方法;3.实现串口通信的数据传输。
三、实验设备和材料1.计算机;2.串口通信模块;3.串口线;4.示波器。
四、实验步骤1.连接串口通信模块和计算机,确保电源供应正常;2.打开计算机的串口通信软件,并进行相应的配置;3.编写串口通信程序,实现数据的发送和接收;4.通过示波器观察串口通信的波形。
五、实验结果经过实验,我们成功实现了串口通信的数据传输。
在发送端,我们通过编程将一段字符串发送到串口通信模块,然后通过串口线将数据传输到接收端。
在接收端,我们通过串口通信模块接收到数据,并将其显示在计算机上。
通过示波器观察,我们可以清晰地看到数据在串口通信线上的传输波形。
六、实验分析串口通信是一种相对简单而稳定的数据传输方式。
与其他通信方式相比,串口通信具有传输速率较低、传输距离较短等特点。
然而,由于其成本低廉、易于实现和广泛应用等优势,串口通信在很多领域仍然得到广泛应用。
在本次实验中,我们通过配置串口通信软件和编写相应的程序,成功地实现了数据的传输。
通过示波器的观察,我们可以看到串口通信的波形,验证了数据的传输过程。
通过实验,我们对串口通信的原理和应用有了更深入的了解。
七、实验总结通过本次实验,我们不仅学习到了串口通信的基本原理和配置方法,还亲自实践了串口通信的数据传输过程。
实验结果表明,串口通信是一种可靠且实用的数据传输方式,广泛应用于各种电子设备和计算机系统中。
在今后的学习和工作中,我们可以进一步探究串口通信的高级应用,如串口通信的协议、错误检测和纠正等。
同时,我们也可以尝试使用不同的串口通信模块和软件,进一步提高串口通信的性能和稳定性。
总之,串口通信作为一种重要的数据传输方式,对于我们的学习和工作具有重要意义。
实验报告-实验一IAR串口通信
实验报告-实验一IAR串口通信以下是为大家整理的实验报告-实验一IAR串口通信的相关范文,本文关键词为实验,报告,IAR,串口,通信,实验,平台,使用,串口,通信,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。
实验一平台使用及串口通信本次实验报告在下课后3天内上交!一、实验目的(1)了解物联网实验(2)箱熟悉IAR开发平台(3)能够读懂原理图中有关传感器的接口电路(4)能够建工程项目并编写程序(5)掌握串口通信二、实验设备仿真器1台,gec_cc2530板1块,usb连接线1根。
三、实验内容使用cc2530通过uART接收控制命令,完成LeD的控制。
四、实验代码完善红色注释部分代码:#include#include#defineuintunsignedint#defineucharunsignedchar#defineRLeDp1_0#definegLeDp1_1#defineYLeDp1_4voidinituART0(void);ucharRecdata[3]=%ucharRxTxflag=1;uchartemp;uintdatanumber=0;uintstringlen;/*******************************@brief串口(uART0)初始化******************************/voidinituART0(void){cLKconcmD//设置系统时钟源为32mhZ晶振while(cLKconsTA//等待晶振稳定cLKconcmD//设置系统主时钟频率为32mhZpeRcFg=0x00;//位置1p0口p0seL=0x3c;//p0用作串口p2DIR//p0优先作为uART0u0csR|=0x80;//串口设置为uART方式u0gcR|=9;u0bAuD|=59;//波特率设为19200uTx0IF=1;//uART0Tx中断标志初始置位1u0csR|=0x40;//允许接收Ien0|=0x84;//开总中断,接收中断}/*****************************@brief初始化LeDIo口****************************/voidInit_LeD_Io(void){p1DIR=0x13;//p1.0p1.1p1.4为输出RLeD=1;//熄灯YLeD=1;gLeD=1;} /**********************@brief主函数*********************/voidmain(void){uchari;Init_LeD_Io();inituART0();while(1)2{if(RxTxflag==1)//接收状态{if(temp!=0){if((temp!='#')elseRxTxflag=3;//进入改变小灯的程序if(datanumber==3)RxTxflag=3;temp=0;}//endif}//endifif(RxTxflag==3){switch(Recdata[0]){case'R':RLeD=Recdata[1]=='0';//在此,低电平有效break;case'g':gLeD=Recdata[1]=='0';break;case'Y':YLeD=Recdata[1]=='0';break;case'A':RLeD=gLeD=YLeD=Recdata[1]=='0';break;}RxTxflag=1;for(i=0;i datanumber=0;//指针归0}}//while}/********************************************************** *******@brief串口接收一个字符:*一旦有数据从串口传至cc2530,则进入中断,*将接收到的数据赋值给变量temp.*********************************************************** *****/3#pragmavector=uRx0_VecToR__interruptvoiduART0_IsR(void){uRx0IF=0;//清中断标志temp=u0DbuF;//接收到的数据放进变量temp}五、实验心得很多东西都忘了,现在再做感到很陌生,勉强做好。
串口通讯实验报告
实验一串口通讯实验一.实验的主要内容:了解并掌握UART相关寄存器的功能,熟悉系统硬件的UART的相关的接口,修改处理器的串口通讯程序,监视串行口并将接受到的字符回送。
二.实验的问题以及解决方法:1在程序编译完成后,烧入到ARM的过程中,出现了驱动问题。
答:在option选项中,选择debugger选项,并且将其中的dirver改为J-Link即可。
2在开始时,设置的波特率为115200,ARM上电后,计算机超级终端出现了上电初始化信息,并且提示我们是选择linux还是选择vivi。
但后来我们修改程序后,将波特率改为57600时,重新上电,超级终端不再显示上电初始化信息了。
答:出现这个问题的原因是每当断电再上电后,处理器恢复了默认设置,默认设置中,波特率为115200,这与我们在超级终端上设置的57600不匹配,于是不会出现上电初始化信息,甚至有时还会出乱码。
所以,我们修改波特率的时候,不应该断电,即开始上电的时候,使用的波特率为115200,等上电结束,选择vivi后,再修改波特率为57600,然后在不断电的情况下重新实验三.实验的思考:3.1 232串行通讯的数据格式是什么?串行通信包括空闲位,数据位,可选的奇偶校验位,停止位。
3.2 串行通讯最少需要几根线,分别如何连接?两根线,但是最好加上GND连接方式:3.3 ARM的串行口有几个,相应的寄存器是什么?ARM 自带三个UART 端口,每个UART 通道都有16 字节的FIFO(先入先出寄存器)用于接受和发送。
MODEM控制寄存器UMCONnUART线控制寄存器包括ULCON0,ULCON1和ULCON2,主要用来选择每帧数据位数、停止位数,奇偶校验模式及是否使用红外模式UART控制寄存器包括UCON0, UCON1 and UCON2,主要用来选择时钟,接收和发送中断类型(即电平还是脉冲触发类型),接收超时使能,接收错误状态中断使能,回环模式,发送接收模式等。
串行通信实验报告
串行通信实验报告班级学号日期一、实验目的:1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串口通讯的程序编写方法。
二、实验要求1.单机自发自收实验:实现自发自收。
编写相应程序,通过发光二极管观察收发状态。
2.利用单片机串行口,实现两个实验台之间的串行通讯。
其中一个实验台作为发送方,另一侧为接收方。
三、实验说明通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。
也可以将本机的TXD接到RXD上。
连线方法:在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。
波特率定为600,SMOD=0。
在第二个实验中,将两台实验箱的RXD和TXD交叉相连。
编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从部数据存储器20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。
通过运行程序观察存储单元数值的变化。
四、程序甲方发送程序如下:ORG 0000HLJMP MAINORG 0023HLJMP COM_INTORG 1000H MAIN: MOV SP,#53HMOV 78H,#20HMOV 77H,00HMOV 76H,20HMOV 75H,40HACALL TRANS HERE: SJMP HERE TRANS: MOV TMOD,#20HMOV TH1,#0F3HMOV TL1,#0F3HMOV PCON,#80HSETB TR1MOV SCON,#40HMOV IE,#00HCLR F0MOV SBUF,78HWAIT1: JNB TI,WAIT1CLR TIMOV SBUF,77H WAIT2: JNB TI,WAIT2CLR TIMOV SBUF,76H WAIT3: JNB TI,WAIT3CLR TIMOV SBUF,75H WAIT4: JNB TI,WAIT4CLR TIMOV IE,#90HMOV DPH,78HMOV DPL,77HMOVX A,DPTRMOV SBUF,A WAIT: JNB F0,WAITRETCOM_INT: CLR TIINC DPTRMOV A,DPHCJNE A,76H,END1MOV A,DPLCJNE A,75H,END1SETB F0CLR ESCLR EARETEND1: MOVX A,DPTRMOV SBUF,ARETIEND乙方发送程序如下:ORG 0000HLJMP MAINORG 0023HLJMP COM_INTORG 1000H MAIN: MOV SP,#53HACALL RECEI HERE: SJMP HERE RECEI: MOV R0,#78HMOV TMOD,#20HMOV TH1,#0F3HMOV TL1,#0F3HMOV PCON,#80HSETB TR1MOV SCON,#50HMOV IE,#90HCLR F0CLR 7FHWAIT: JNB 7FH,WAITRETCOM_INT: PUSH DPLPUSH DPHPUSH AccCLR RIJB F0,R_DATAMOV A,SBUFMOV R0,ADEC R0CJNE R0,#74H,RETNSETB F0RETN: POP AccPOP DPHPOP DPLRETIR_DATA: MOV DPH,78HMOV DPL,77HMOV A,SBUFMOVX DPTR,AINC 77HMOV A,77HJNZ END2INC 78HEND2: MOV A,76HCJNE A,78H,RETNMOV A,75HCJNE A,77H,RETNCLR ESCLR EASETB 7FHSJMP RETNEND五、实验过程中遇到的主要问题OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口HasRcv equ 20h.0 ; 接收标志位LEDBuf equ 40h ; 显示缓冲RCVBuf equ 50H ; 接收缓冲ORG 0000HLJMP START; 串行口中断程序ORG 0023HJNB TI,S0_RCLR TINOPSJMP S0_RETS0_R: ; 接收数据CLR RIMOV RCVBUF,SBUF ; 保存数据SETB HasRcv ; 提示收到数据NOPS0_RET:RETILEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ; 共6个八段管mov r2, #00100000b ; 从左边开始显示Loop:mov dptr, #OUTBITmov a, #0movx dptr, a ; 关所有八段管mov a, r0mov dptr, #OUTSEGmovx dptr,amov dptr, #OUTBITmov a, r2movx dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, LoopretTestKey:mov dptr, #OUTBITmov a, #0movx dptr, a ; 输出线置为0mov dptr, #INmovx a, dptr ; 读入键状态cpl aanl a, #0fh ; 高四位不用retKeyTable: ; 键码定义db 16h, 15h, 14h, 0ffhdb 13h, 12h, 11h, 10hdb 0dh, 0ch, 0bh, 0ahdb 0eh, 03h, 06h, 09hdb 0fh, 02h, 05h, 08hdb 00h, 01h, 04h, 07hGetKey:mov dptr, #OUTBITmov P2, dphmov r0, #Low(IN)mov r1, #00100000bmov r2, #6KLoop:mov a, r1 ; 找出键所在列cpl amovx dptr, acpl arr amov r1, a ; 下一列movx a, r0cpl aanl a, #0fhjnz Goon1 ; 该列有键入djnz r2, KLoopmov r2, #0ffh ; 没有键按下, 返回0ffhsjmp ExitGoon1:mov r1, a ; 键值= 列X 4 + 行mov a, r2dec arl arl amov r2, a ; r2 = (r2-1)*4mov a, r1 ; r1中为读入的行值mov r1, #4LoopC:rrc a ; 移位找出所在行jc Exitinc r2 ; r2 = r2+ 行值djnz r1, LoopCExit:mov a, r2 ; 取出键码mov dptr, #KeyTablemovc a, a+dptrmov r2, aWaitRelease:mov dptr, #OUTBIT ; 等键释放clr amovx dptr, amov r6, #10call Delaycall TestKeyjnz WaitReleasemov a, r2retSTART:MOV SP, #60HMOV IE, #0 ; DISABLE ALL INTERRUPTMOV TMOD,#020H ; 定时器1工作于方式2 (8位重装)MOV TH1, #0F3H ; 波特率?2400BPS 12MHzMOV TL1, #0F3HANL PCON,#07FH ; SMOD 位清零orl PCON,#80hMOV SCON,#050H ; 串行口工作方式设置MOV LEDBuf, #0ffh ; 显示8.8.8.8.mov LEDBuf+1, #0ffhmov LEDBuf+2, #0ffhmov LEDBuf+3, #0ffhmov LEDBuf+4, #0SETB TR1SETB ESSETB EA;mov sbuf,a;jnb ti,$MLoop:jb HasRcv, RcvData ; 收到数据?call DisplayLED ; 显示call TestKey ; 有键入?jz MLoop ; 无键入, 继续显示call GetKey ; 读入键码anl a, #0fh ; 通讯口输出键码MOV SBUF,ALJMP MLoopRcvData:clr HasRcv ; 是mov a, RcvBuf ; 显示数据mov b,aanl a,#0fh ; 显示低位movc a, a+dptrmov LEDBuf+5, amov a,bswap a ; 显示高位anl a,#0fhmov dptr, #LEDMapmovc a, a+dptrmov LEDBuf+4, aljmp MLoopEND六、实验后的心得体会。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void initUART0(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
} //end if
}//end if
if (RXTXflag == 3)
{
switch (Recdata[0])
{
case 'R':
RLED = Recdata[1] == '0'; //在此,低电平有效
break;
case 'G':
GLED = Recdata[1] == '0';
break;
case 'Y':
四、实验
完善红色注释部分代码:
#include <iocc2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
#define RLED P1_0
#define GLED P1_1
#define YLED P1_4
U0CSR |= 0X40;//允许接收
IEN0 |= 0x84;//开总中断,接收中断
}
/****************************
* @brief初始化LED IO口
****************************/
void Init_LED_IO(void)
{
P1DIR = 0x13;//P1.0 P1.1 P1.4为输出
YLED = Recdata[1] == '0';
break;
case 'A':
RLED = GLED = YLED = Recdata[1] == '0';
break;
}
RXTXflag = 1;
for (i = 0; i < 3; i++) Recdata[i] = ' '; //清除
datanumber = 0; //指针归0
实验一
本次实验报告在下课后3天内上交!
一、实验目的
(1)了解物联网实验
(2)箱熟悉IAR开发平台
(3)能够读懂原理图中有关传感器的接口电路
(4)能够建工程项目并编写程序
(5)掌握串口通信
二、实验设备
仿真器1台,GEC_CC2530板1块,USB连接线1根。
三、实验内容
使用CC2530通过UART接收控制命令,完成LED的控制。
void initUART0(void);
uchar Recdata[3]="000";
uchar RXTXflag = 1;
uchar temp;
uint datanumber = 0;
uint stringlen;
/******************************
* @brief串口(UART0)初始化
{
if (temp != 0)
{
if ((temp != '#') && (datanumber < 3))
Recdata[datanumber++] = temp;
else RXTXflag = 3; //进入改变小灯的程序
if ห้องสมุดไป่ตู้datanumber == 3) RXTXflag = 3;
temp = 0;
RLED = 1; //熄灯
YLED = 1;
GLED = 1;
}
/*********************
* @brief主函数
*********************/
void main(void)
{
uchar i;
Init_LED_IO();
initUART0();
while (1)
{
if (RXTXflag == 1)//接收状态
PERCFG = 0x00;//位置1 P0口
P0SEL = 0x3c;//P0用作串口
P2DIR &= ~0XC0;//P0优先作为UART0
U0CSR |= 0x80;//串口设置为UART方式
U0GCR |= 9;
U0BAUD |= 59; //波特率设为19200
UTX0IF = 1; //UART0 TX中断标志初始置位1
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0;//清中断标志
temp = U0DBUF; //接收到的数据放进变量temp
}
五、
很多东西都忘了,现在再做感到很陌生,勉强做好。
}
}//while
}
/****************************************************************
* @brief串口接收一个字符:
*一旦有数据从串口传至CC2530,则进入中断,
*将接收到的数据赋值给变量temp.
****************************************************************/