接口实验报告之串行接口
- 格式:doc
- 大小:233.55 KB
- 文档页数:8
课程实验报告实验名称:串行接口专业班级:学号:姓名:同组人员:指导教师:报告日期:实验二1. 实验目的 (3)2. 实验内容 (3)3. 实验原理 (3)4. 程序代码 (6)5. 实验体会 (13)实验二1.实验目的1.熟悉串行接口芯片8251的工作原理2.掌握串行通讯接收/发送程序的设计方法2.实验内容通过对8251芯片的编程,使得实验台上的串行通讯接口(RS232)以查询方式实现信息在双机上的。
具体过程如下:1. 从A电脑键盘上输入一个字符,将其通过A试验箱的8251数据口发送出去,然后通过B试验箱的8251接收该字符,最后在B电脑的屏幕上显示出来。
2.从A试验箱上输入步进电机控制信息(开关信息),通过A试验箱的8251数据口发送到B试验箱的8251数据口,在B试验箱上接收到该信息之后,再用这个信息控制B试验箱上的步进电机的启动停止、转速和旋转方向。
3.实验原理1.8251控制字说明在准备发送数据和接收数据之前必须由CPU把一组控制字装入8251。
控制字分两种:方式指令和工作指令,先装入方式指令,后装入工作指令。
另外,在发送和接收数据时,要检查8251状态字,当状态字报告“发送准备好”/“接收准备好”时,才能进行数据的发送或接收。
2.8251方式指令(端口地址2B9H)3.8251工作指令(端口地址2B9H)4.8251状态字(端口地址2B9H)5.8253控制字(283H)6.8253计数初值(283H)计数初值=时钟频率/(波特率×波特率因子)本实验:脉冲源=1MHz波特率=1200波特率因=16计数初值= 1000000/1200*16=527.程序流程框图4.程序代码Fxc.asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz nextmov dl,0ffh ;有键盘输入,读入字符mov ah,06hint 21hcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend startSend .asm;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280h ;8253计数0端口地址io8253b equ 283h ;8253控制端口地址io8251a equ 2b8h ;8251数据端口地址io8251b equ 2b9h ;8251控制端口地址buf3 byte 0mes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16h ;控制字为00010110Bout dx,almov dx,io8253amov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;xor al,al;mov cx,03 ;向8251控制端口送3个0;delay: call out1;loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz nextmov ah,0bhint 21htest al,0ffh ;检测是否有键盘输入jz next; mov dl,0ffh ;有键盘输入,读入字符;mov ah,06h; int 21hmov dx,28ahin al,dxcmp al,27 ;若为ESC,结束jz exitmov dx,io8251a;inc alout dx,al ;发送; mov cx,40h;s51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好jz waiti ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,al;push cx;mov cx,40h;gg: loop gg ;延时; pop cxretout1 endpcode endsend start步进电机:1.K0=0,逆时针转;K0=1,顺时针转2.K1=0,慢转;K1=1,快转data segmentbuf1 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;LED显示buf2 byte 0 ;步进电机数据buf3 byte 0 ;保存开关数据buf4 byte 0 ;保存顺转数据buf5 byte 9 ;保存反转数据buf6 byte 0 ;开关机data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov buf2,00110011b ;步进电机数据mov dx,28bh ;8255控制口初始化mov al,81h ;1000,0001out dx,al;-----------------------------逆转控制----------------R0: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jnz kai ;转反转test al,01 ;测试K0=1?jnz L0 ;转反转mov al,buf4 ;走马灯开始一步顺转cmp al,9jnz S1call change9_0S1: inc al ;数据加1mov buf4,almov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;数据完成加1mov al,buf2 ;电机开始一步逆转ror al,1 ;数据左移mov buf2,almov dx,288h ;A口输出out dx,al ;电机完成一步逆转mov al,buf3 ;回复C口数据test al,02jnz R1 ;转快转call delay_s ;否则慢转jmp R0R1: call delay_q ;快转jmp R0;------------------------------顺转控制-----------------L0: mov al,buf5 ;走马灯开始一步顺转cmp al,0jnz S2T2: test al,03 ;测试K2=1?jnz T2call change0_9S2: dec al ;数据减1mov buf5,al ;mov bx,offset buf1xlatmov dx,289h ;B口输出out dx,al ;走马灯结束一步顺转mov al,buf2 ;电机开始一步顺转rol al,1 ;数据右移mov buf2,almov dx,288h ;A口输出out dx,al ;电机结束一步顺转mov al,buf3 ;回复C口数据test al,02jnz L1 ;转快转call delay_s ;否则慢转jmp R0T3: test al,03 ;测试K2=1?jnz T3L1: call delay_q ;快转jmp R0kai: mov dx,28ah ;读C口in al,dxmov buf3,al ;保存C口数据test al,04 ;jz L0 ;转反转jmp kaiexit: mov ah,4chint 21hdelay_s proc near ;长延时mov bx,20hlp1: mov cx,0ffffhlp2: loop lp2dec bxjnz lp1retdelay_s endpdelay_q proc near ;短延时mov bx,1lp11: mov cx,0ffffhlp22: loop lp22dec bxjnz lp11retdelay_q endpchange9_0 proc nearmov buf4,-1mov al,buf4retchange9_0 endpchange0_9 proc nearmov buf5,10mov al,buf5retchange0_9 endpcode endsend start5.实验体会这次实验需要用到两种芯片8253和8251,两种芯片的作用分别是8253提供串行通讯所需的特定频率的脉冲信号,8251提供输入输出控制,所以在实验的过程中需要熟悉这两种芯片的方式字等使用规范,在仔细阅读了书本以及书本的编程实例后,基本摘掉了程序的设计方法实验过程中,出现了程序编译通过了但是不能运行的情况,后来经过检查发现是程序没有设置好的原因,要设置为编译后运行状态,否知只编译不运行,经过这次实验,知道了8253和8251两种芯片的基本用法,对课本上的知识有了更深入的理解,收获不少。
实验六串行口通信实验一、实验内容实验板上有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软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows的超级终端。
单片机串行接口有两个控制寄存器:SCON和PCON。
串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。
在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。
由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。
待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。
单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。
在DOS操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250进行口地址操作即可。
WINDOWS的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。
如果用户要进行串行通信,可以调用WINDOWS的API 应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。
串行口实验报告
《串行口实验报告》
实验目的:通过串行口实验,探索数据传输的可靠性和稳定性。
实验材料:计算机、串行口数据线、串行口设备。
实验步骤:
1. 连接串行口数据线:首先,将串行口数据线插入计算机的串行口接口,并将另一端连接到串行口设备上。
2. 设置串行口参数:在计算机上打开串行口设置界面,设置波特率、数据位、校验位和停止位等参数,确保与串行口设备相匹配。
3. 发送数据:通过计算机上的串行口通讯软件,向串行口设备发送数据,观察数据传输的稳定性和可靠性。
4. 接收数据:同样通过串行口通讯软件,接收串行口设备发送的数据,检验数据接收的准确性和完整性。
实验结果:
经过一系列的实验操作,我们发现串行口数据传输的稳定性和可靠性较高。
在设置合适的参数后,数据传输过程中几乎没有出现丢失或错误的情况。
同时,数据的传输速度也较为稳定,符合预期的要求。
实验结论:
通过本次串行口实验,我们验证了串行口数据传输的可靠性和稳定性。
在实际应用中,可以通过合理设置串行口参数,确保数据的准确传输。
串行口技术在工业控制、通讯设备等领域有着广泛的应用前景,为数据传输提供了一种可靠的解决方案。
实验五单片机串行通信实验一.实验目的1.了解串行通信的原理,学习串行通信程序的设计和操作;2.学习使用上位机软件“串行调试助手”。
二.实验内容1,单片机与PC机串行通信单片机串行接口通过MAX232芯片将单片机发出的TTL电平信号转化为RS232电平信号,与PC及232接口连接。
编程实现通信。
PC机使用串口调试助手发送数据到单片机,单片机接收到数据后回发数据给PC机,单片机接收到的数据控制P0口上的LED显示二进制数。
比如00H时,LED全灭,FFH时全亮。
注意:晶振需11.0592MHZ2,单片机双机通信实验(类似于教材例6.3)将邻近的两台单片机实验板的串行接口交叉连接(A机的RXD-B机的TXD,A机的TXD-B 机的RXD),分别在两台单片机编程设置恰当的通信方式,编写程序实现通信。
A机读取电路板上P1和P3的独立按键K1-K8的状态,组合为一完整地字节数据,然后发送到B机,并在B机的P0口上的LED显示出二进制编码三.实验步骤1.运行Keil C51软件,新建一个工程,编写程序。
2.将生成的HEX文件烧写到单片机中。
观察PC机串口助手和单片机上LED的编码状态。
四. 实验参考程序实验1ORG 0000HLJMP MAINORG 0023HLJMP KPORG 0100HMAIN: MOV TMOD,#20HMOV TL1,#0FDHMOV TH1,#0FDH ;9600bpsMOV SCON,#50H ;MOV PCON,#00HSETB EASETB ESSETB TR1Sjmp $Kp: clr riMov A,sbufClr aMov sbuf,aJnb ti,$Clr tiCpl aMov p0,aRetiEND实验2A单片机(发送端)ORG 0000HLJMP MAINORG 0030HMAIN: MOV TMOD,#20HMOV TL1,#0FDHMOV TH1,#0FDH ;9600bpsMOV SCON,#40H ;发送端,不允许接收MOV PCON,#00HSetb tr1Next_send:Mov a,p1Anl a,#0f0h ;屏蔽低4位Rlc aRlc aRlc aRlc a ;左移4位成为高四位Mov r0,a ;保存高四位Mov a,p3Anl a,#00111100b ;只保留p3.2到p3.5位Rlc aRlc a ;右移2位成为低四位Orl a,r0 ;形成K1K2k3k4k5k6k7k8开关二进制编码Mov sbuf,a ;发送给B机Wait: Jbc ti,loop1Sjmp waitLoop1: sjmp next_send ;返回不断读取数据、发送endB单片机(接收端)ORG 0000HLJMP MAINORG 0030HMAIN: MOV TMOD,#20HMOV TL1,#0FDHMOV TH1,#0FDH ;9600bpsMOV SCON,#50H ;接收送端,允许接收MOV PCON,#00HSetb tr1Next_receiv:Jbc ri,loop1Sjmp Next_receivloop1: Mov a,sbuf ;接收到完整数据mov p0,a ;送LED显示Sjmp Next_receiv ;返回,不断接收、显示数据end。
实验四串行接口输入输出实验一、实验目的1、学习TEC-2000教学计算机I/O接口扩展的方法;2、学习串行通信的基本知识,掌握串行通信接口的设置和使用方法。
二、实验说明1、TEC-2000教学机配置了两个串行接口COM1和COM2,其中COM1口是系统默认的串行接口,上电复位后,监控程序对其进行初始化,并通过COM1与PC机终端相连,监控程序负责对COM1进行管理。
COM2口预留给实验者扩展使用,监控程序不对COM2进行任何处理,实验者需要对COM2进行初始化、使用和管理。
2、实验前查阅有关资料,了解可编程串行通信接口芯片8251的工作原理,了解8251复位、初始化、数据传输过程控制等方面的知识。
注意,①每次对8251复位后(即按了“RESET”键),都需要对其进行初始化,然后再进行正常的数据传输;②每次复位后,只能对8251进行1次初始化,多次初始化将导致串口工作不正常。
3、在使用COM2口时,需要将两片8251芯片之间的跳线短接(缺省状态),以便为COM2正常工作提供所需的控制信号和数据;此外,还需要为其分配端口地址。
教学机已将COM2口的C/(/D)与地址总线的最低位A0相连,但片选信号/CS未连,只引出1个插孔,实验时,应将该插孔与标有“I/O /CS”的7个插孔中的1个相连。
三、实验内容1、为扩展I/O口选择一个地址,即将8251的/CS与标有I/O /CS的一排插孔中的一个相连。
2、将COM2口与终端或另一台运行有PCEC16的PC机的串口相连。
3、用监控程序的A命令,编写一段小程序,先初始化COM2口,再向COM2口发送一些字符,也可从COM2口接收一些字符,或实现两个串口的通信。
四、实验要求应了解监控程序的A命令只支持基本指令,扩展指令应用E命令将指令代码写入到相应的存储单元中。
五、实验步骤1、为扩展I/O接口选择一个地址,将8251的/CS与标有I/O /CS的插孔中地址为A0~AF的插孔相连;2、将教学机COM1口与微机PC1相连,在PC1上运行PCEC16.EXE,进入联机状态后保持PCEC的运行状态;3、断开教学机COM1与PC1的串口线,将其连接到另一台微机PC2的串口上,在PC2上运行PCEC16.EXE联机;4、用另一条串口线将PC1与教学机的COM2接口相连。
DSP实验设计报告名称:RS232串行接口实验**: ****: ***班级: 08电子信息工程(2) 学号: **********日期: 2011-11-28一、实验目的1.进一步掌握同步缓冲口M出BSP的结构及工作原理;2.学习DSP实现RS232串口通信的程序设计;3.学习MAX3111与DSP的接口设计。
二、实验设备计算机;DSP硬件仿真器;SZ-DSPF教学开发平台;串行线一根三、实验硬件设置做实验之前, 需要接通该实验所需的硬件电路, 本实验为: 现将实验箱上的电源开关“MS2”、“MS3”和“MS4”按下, 将串口线一端连接到计算机的串口, 另一头连接到SZ-5416D开发教学平台的主控模块中的“RS232”端口, 在将机箱右侧的船型开关往“I”方向打开电源;SZ-541D主控模块上的J7, J9、J4.J16短接;在“设置模块”中将“A”和“C”设置为“1”。
然后开始做实验, 注意在做DSP实验时开始按了SZ-5416D主控模块上的K1硬件复位后, 程序运行中不要再按复位键, 以免实验由于DSP复位而失败。
四、实验原理1.MAX3111功能特点MAX3111通用同步收发器是MAXIM公司专门为小型微处理系统进行最优化设计的UART, 它包括一个振荡器和一个可编程波特率发生器;具有一个可屏蔽的中断源;另具有一个8字节的接受FIFO(先入先出)缓冲器。
它应用SPI/MICROWIRE接口技术直接与主控制器进行通信, 线路简单、体积小, 通信率可达230kbit/s。
另外其内部除具有UART之外, 还包括两个RS-232电平转换器, 这样无需再接入普通的MAX232进行电平转换, 即可应用一个芯片实现微控制器(具有SPI/MICROWIRE接口)与PC机或其它设备之间的异步数据传输。
2.MAX3111的操作MAX3111通过SPI接口与主设备进行16位数据的全双工同步通信, 即主设备传送16位数据给MAX3111的同时, 也可接收到MAX3111发送的16位数据。
实验七串行口通讯实验报告一、引言串行口通讯是一种常见的数据传输方式,通过串行口可以在计算机和其他设备之间实现数据的传输和通信。
本实验通过使用Arduino开发板,以及利用串行口通讯实现从计算机向Arduino开发板发送指令,控制LED 灯的亮灭。
二、实验目的1.了解串行口通讯的基本原理和工作方式;2.掌握Arduino上位机通讯程序的编写及与硬件的串行口通讯方法;3.通过串行口通讯实现计算机对Arduino开发板的远程控制。
三、实验设备和器材1. Arduino Uno板;2.计算机;B数据线;4.杜邦线;5.LED灯。
四、实验原理当计算机与Arduino开发板连接时,可以通过串行口通讯实现双方之间的数据传输。
串行口通讯使用两根信号线:一根发送线(TX),用于发送数据;一根接收线(RX),用于接收数据。
通讯的双方都必须发送和接收数据,因此需要双向数据传输,即双向通讯。
五、实验步骤1. 连接Arduino开发板和计算机,使用USB数据线将两者连接;2. 打开Arduino IDE开发环境,编写以下代码并上传到Arduino开发板:```c++int ledPin = 13;void setuSerial.begin(9600);pinMode(ledPin, OUTPUT);void looif (Serial.available( > 0) { // 如果串行口接收到数据digitalWrite(ledPin, HIGH);digitalWrite(ledPin, LOW);}}```3. 打开串行监视器(Serial Monitor),设置波特率为9600,并选择“无”作为换行符;4.在串行监视器中输入“1”,回车,LED灯将点亮;5.在串行监视器中输入“0”,回车,LED灯将熄灭;6.关闭串行监视器。
六、实验结果和分析在本实验中,通过串行口通讯实现了从计算机向Arduino开发板发送指令,控制LED灯的亮灭。
串行口实验报告串行口实验报告一、实验目的本次实验旨在通过串行口通信实验,掌握串行口通信的基本原理和使用方法,加深对计算机硬件接口的理解。
二、实验原理串行口通信是一种常用的计算机通信方式,通过串行口可以实现计算机与外部设备的数据传输。
串行口通信的基本原理是将数据位按照一定的顺序逐个传输,每个数据位都有一个起始位和一个停止位,以及可能的奇偶校验位。
串行口通信的数据传输速率可以通过波特率来衡量。
三、实验器材1.计算机2.串行口线缆3.串行口设备(如串口打印机、串口调试器等)四、实验步骤1.将串行口线缆的一端插入计算机的串行口,另一端插入串行口设备。
2.打开计算机,进入操作系统。
3.在操作系统中打开串行口通信软件。
4.在串行口通信软件中设置波特率、数据位、停止位、奇偶校验位等参数。
5.发送数据:在串行口通信软件中输入需要发送的数据,点击发送按钮进行数据传输。
6.接收数据:在串行口通信软件中接收并显示从串行口设备传输过来的数据。
五、实验结果与分析在本次实验中,我们使用了串行口通信软件与串行口设备进行数据传输。
通过设置合适的参数,我们成功地发送和接收了数据。
在实验过程中,我们发现串行口通信的波特率设置对数据传输速率有着重要影响。
较高的波特率可以实现更快的数据传输,但也容易造成数据传输错误。
因此,在实际应用中,需要根据具体情况选择合适的波特率。
此外,我们还观察到了串行口通信的数据位、停止位和奇偶校验位等参数的作用。
数据位决定了每个数据字节的位数,停止位用于标识数据传输的结束,奇偶校验位则用于检测和纠正传输过程中可能出现的错误。
六、实验总结与思考通过本次实验,我们深入了解了串行口通信的基本原理和使用方法。
串行口作为计算机与外部设备之间的重要接口,广泛应用于各个领域。
掌握串行口通信的知识,对于我们理解计算机硬件接口的工作原理,以及进行数据传输和通信都具有重要意义。
在今后的学习和实践中,我们可以进一步探索串行口通信的应用领域,如串口调试、串口通信协议等方面的知识。
浙江工业大学计算机学院实验报告实验名称 8251串行接口姓名学号班级教师日期一、实验内容与要求1.1 实验内容了解串行通信接口的工作原理和工作过程,掌握编写初始化程序和通信程序的方法。
设计实验电路,编写实验程序,使实现从键盘输入“a”到“z”范围的字母,将其ASCII码加四后串行发送出去,再从串行口接收回来在屏幕上显示(若输入“w”、“x”、“y”、“z”,则分别显示“a”、“b”、“c”、“d”),实现自发自收。
1.2 实验要求(1)具有一定的汇编编程的基础,实验前能根据实验要求画出实验流程图,同时写出其所对应代码;(2)要了解8251A中断控制器的内部结构和外部引脚,理解芯片的工作原理和工作过程。
熟悉8251A芯片的命令字,能对其进行编程;(3)了解8253A定时/计数器,知道如何通过其计数器产生发送和接收时钟;(4)熟悉实验平台TPC-USB了解各个接口的名称与功能,进行实验时能快速并正确地连接好实验电路;(5)连接PC与TPC-USB平台,用微机实验软件运行程序。
在屏幕上显示提示信息“Pleaseinput a letter!”,从键盘输入“a”到“z”范围的字母,将其ASCII码加四后串行发送出去,再从串行口接收回来在屏幕上显示。
若输入“w”“x”、“y”、“z”,则分别显示“a”、“b”、“c”、“d”;若输入Esc,则退出程序。
二、实验原理与硬件连线2.1 实验原理(1)8251A的内部结构:图1 8251的内部结构图发送器:▲发送缓冲器+ 发送移位寄存器+ 发送控制电路。
发送控制电路用来控制和管理发送过程。
在其控制下,发送缓冲器将来自CPU的并行数据串行化,通过TxD发送出去。
▲异步方式:控制电路在数据帧中加上起始、校验和停止位。
▲同步方式:控制电路在数据帧中插入同步字符和校验位。
同步方式发送过程中,两字符间不允许有间隔。
若CPU未及时提供新字符,则控制电路自动补上同步字符。
接收器:▲接收缓冲器+ 接收移位寄存器+ 接收控制电路。
串行口通讯实验报告范文齐鲁理工学院实验报告课程名称:微型计算机控制技术时间:2022.10.29地点:D203班级:2022级机制3班姓名:杨帆学号:171031010304实验项目名称:串行通讯接口实验实验指导教师:赵保华实验成绩评定:一、实验目的ü通过实验掌握USART的功能。
掌握STM32的USART的设置与运用。
二、实验设备ü硬件:信盈达STM32实验平台,STlink仿真器套件,PC机,串口连接线;软件:KEILforARM(MDK)集成开发环境,串口调试助手,Window7/8/10/某P。
三、实验内容利用PC机的串口与信盈达Cote某-M3实验平台的USART1进行输入输出通信。
1)把自己的个人信息(姓名、学号),通过USART1发送到PC,PC通过串口助手显示出来。
2)通过PC机键盘往实验平台的USART1发送字符,实验平台上的USART1将收到的字符再传回给PC,在PC串口助手上显示其串口接收到的字符。
四、实验原理如某YD-STM32F103开发板UART1使用的是CH340G这个USB转换串口芯片,只需要使用USB线连接上电脑,并且电脑上安装了CH340芯片的硬件驱动程序,电脑就会生成一个COM口,通过使用串口调试软件打开这个COM口,就能实现开发板和PC机之间的通信了。
五、软件程序设计1、程序完成以下工作:初始化串口;重定义fputc函数,实现可以通过printf函数给电脑发送数据。
注意:重定义fputc之间需要打开微库。
检测串口接收器,如果有数据则从USART_DR寄存器中读取数据;监测串口发送器,如果上一次数据已发送完成,将读取到的字符发送给PC,然后回到(3)。
main.c参考程序:#include“tm32f10某.h“#include“tdio.h“#include“uart.h“intmain(void){UART1_In it();//串口初始化Show_Logo();//通过串口发送数据给PCwhile(1){USART1_Echo();//串口实现回显}}uart.c参考程序:#ifndef_UART_H_#define_UART_H_voidUART1_Init(void);//串口1初始化voidUSART1_Echo(void);//串口1回显函数voidShow_Logo(void);//在终端上显示LOGO#endif六、实验操作步骤准备实验环境使用STlink仿真器连接信盈达STM32实验平台的主板JTAG接口;使用实验平台附带的USB数据线,连接实验平台主板和PC。
课程实验报告课程名称:串行接口实验
专业班级:
学号:
姓名:
实验次数:二
周次:第九周
报告日期: 2013—4—25
计算机科学与技术学院
目录
一.实验目的
二.实验内容
三.实验原理
3.1实验中所需连线
3.2相关芯片说明
3.3流程框图
四.程序代码
五.实验体会
一.实验目的
(1)实现串行接口的双机通讯(查询方式传送字符和控制信息);
(2)熟悉串行接口芯片8251的工作原理;
(3)掌握串行通讯接收/发送程序的设计方法。
二.实验内容
通过对8251芯片的编程,使得实验台上的串行通讯接口(RS232)以查询方式实现信息在双机上的。
具体过程如下:
1. 从A电脑键盘上输入一个字符,将其通过A试验箱的8251数据口发送出去,然后通过B试验箱的8251接收该字符,最后在B电脑的屏幕上显示出来。
2.从A试验箱上输入步进电机控制信息(开关信息),通过A试验箱的8251数据口发送到B试验箱的8251数据口,在B试验箱上接收到该信息之后,再用这个信息控制B试验箱上的步进电机的启动停止、转速和旋转方向。
三.实验原理
3.1在实验台上完成双机串行通讯实验所需的连线:
8253连线:
1.280^287H连接到8253~CS
2.GATE0接+5V
3.CLK0接1MHZ时
4.8253的OUT0接到8251的TXCLK和RXCLK
8251连线:
1.2B8H^2BFH连接到8251~CS
2.A电脑的RXD8251连接到B电脑的TXD8251
3.B电脑的RXD8251连接到A电脑的TXD8251
4.A和B电脑的GND相连接
3.2相关芯片说明
(1) 8251和8253端口说明:
8251提供一个控制端口和一个数据端口进行数据的输入/输出和控制,控制端口地址是2B9H,数据端口地址是2B8H。
8253有一个控制端口和三个计数器端口,为8251提供串行通信所需的,特定频率的发送/接收脉冲信号。
控制端口地址是283H,三个计数器端口分别是280H,281H,282H。
(2) 8251控制字说明:
在准备发送数据和接收数据之前必须由CPU把一组控制字装入8251。
控制字分两种:方式指令和工作指令,先装入方式指令,后装入工作指令。
另外,在发送和接收数据时,要检查8251状态字,当状态字报告“发送准备好”/“接收准备好”时,才能进行数据的发送或接收。
a. 方式指令(端口地址2B9H):
b. 工作指令(端口地址2B9H):
c. 状态字(端口地址2B9H):
( 在接收和发送数据之前要先判断RxRDY/ TxRDY是否=1)
(3) 8253控制字说明:
a. 控制字(283H):
b. 计数初值(283H):
计数初值=时钟频率/(波特率×波特率因子)
本实验:脉冲源=1MHz ; 波特率=1200 ; 波特率因=16; 计数初值= 1000000/1200*16=52
3.3流程框图
四.程序代码
;8251串行通讯(自发自收)
data segment
io8253a equ 280h
io8253b equ 283h
io8251a equ 2b8h
io8251b equ 2b9h
mes1 db 'you can play a key on the keybord!',0dh,0ah,24h mes2 dd mes1
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,io8253b ;设置8253计数器0工作方式
mov al,16h
out dx,al
mov dx,io8253a
mov al,52 ;给8253计数器0送初值
out dx,al
mov dx,io8251b ;初始化8251
xor al,al
mov cx,03 ;向8251控制端口送3个0
delay: call out1
loop delay
mov al,40h ;向8251控制端口送40H,使其复位
call out1
mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16 call out1
mov al,27h ;向8251送控制字允许其发送和接收
call out1
lds dx,mes2 ;显示提示信息
mov ah,09
int 21h
waiti: mov dx,io8251b
in al,dx
test al,01 ;发送是否准备好
jz next
mov ah,0bh
int 21h
test al,al
jz next
mov ah,06h
mov dl,0ffh
int 21h
cmp al,27 ;若为ESC,结束
jz exit
mov dx,io8251a
out dx,al ;发送
mov cx,40h
s51: loop s51 ;延时
next: mov dx,io8251b
in al,dx
test al,02 ;检查接收是否准备好
jz waiti ;没有,等待
mov dx,io8251a
in al,dx ;准备好,接收
mov dl,al
mov ah,02 ;将接收到的字符显示在屏幕上
int 21h
jmp waiti
exit: mov ah,4ch ;退出
int 21h
out1 proc near ;向外发送一字节的子程序
out dx,al
push cx
mov cx,40h
gg: loop gg ;延时
pop cx
ret
out1 endp
code ends
end start
五.实验体会
这次实验我们只完成了第一步。
首先,我们看老师给的例子就看了很久,遇到很多不明白的地方,比如不明白为什么要加一个时延,为什么是40H。
然后,我们改好代码以后,运行出现了问题。
要么就是输送一个信号要很久才被另一台机器接收显示,要么就干脆出现乱码或者不显示。
我们认为是因为时延的时间太长,就把时间改为10H,但是情况没有改善。
在我们删掉时延那句程序语言后,程序直接无法编译通过。
之后,又遇到新问题,电脑开始屏闪,死机。
重启电脑也没办法改善。
再次修改了代码。
同时我发现我们的8251的电源线+5V位置接得不对,但同伴认为这没什么问题。
问题持久无法解决时,我换了一下电源接线的位置。
情况变得顺利起来。
做完第一步实验后,时间已经很晚,同伴们也表示很疲惫,就没有接着做下去。
经过这次的实验,我认为很多我们觉得没有问题的小细节,往往可能是解决问题的关键,所以各个部分都不能忽视。