串行总线扩展实验程序代码
- 格式:doc
- 大小:1.77 KB
- 文档页数:5
312 式。
液晶显示屏模块1602内置控制器44780,可显示2行,每行16个字符,要求单片机控制1602液晶显示模块分两行显示“Hello Welcome To Heilongjiang”,第一行显示“Hello Welcome”,第二行显示“To HeiLongJiang”。
2.实验目的(1)了解单片机控制字符型的工作原理和方法。
(2)掌握单片机如何来控制液晶显示屏模块1602。
(3)接口电路设计完毕后,编写程序控制字符型液晶显示屏模块1602的字符显示。
实验13 DAC0832的D/A转换实验 1.实验要求单片机输出的数字量D0~D7加到DAC0832的输入端,用虚拟直流电压表测量DAC0832的输出电流经运放LM358N的I/V转换后的电压值,并使用虚拟直流电压表查看输出电压的变化。
仿真运行,可看到虚拟直流电压表测量的电压在-2.5~0V范围内变化。
如果由于电压表图标太小,显示的电压值不清楚,可用鼠标滚轮放大整个电路原理图。
2.实验目的掌握单片机与DAC0832的接口设计和软件编程。
实验14 ADC0809的A/D转换实验 1.实验要求利用A/D转换器ADC0809 (Proteus元件库中没有ADC0809,可用库中与其兼容的ADC0808替代),由输入模拟电压通过调整电位器阻值的大小提供给ADC0809模拟量输入,编写程序控制ADC0809将模拟量转换成二进制数字量,并送P1口输出来控制发光二极管亮或灭来表示转换结果的二进制代码显示转换完毕的数字量。
2.实验目的(1)掌握ADC0809的工作原理及基本性能。
(2)掌握单片机与ADC0809的接口设计。
(3)掌握软件编程控制单片机进行数据采集。
实验15 I2C总线串行扩展——AT24C02存储器读写1. 实验要求利用AT24C02、Proteus的I2C调试器,实现单片机读写存储器AT24C02的实验。
KEY1充当外部中断0中断源,当按下KEY1时,单片机通过I2C总线发送数据AAH给AT24C02,等发送数据完毕后,将数据AAH送P2口通过LED显示出来。
简单IO口扩展实验报告1. 背景在实际应用中,我们经常需要扩展计算机的输入输出(IO)接口,以满足不同的需求。
而简单IO口扩展就是一种常见且重要的扩展方式。
通过简单IO口扩展,我们可以将计算机连接到更多的外部设备,如传感器、执行器等,从而实现更多功能和应用。
2. 分析2.1 简单IO口介绍简单IO口是指通用输入输出接口,它可以通过数字信号来进行数据的输入和输出。
每个简单IO口通常包括一个输入引脚和一个输出引脚。
通过控制这些引脚的电平状态,我们可以实现数据的输入和输出。
2.2 简单IO口扩展方法简单IO口可以通过不同的方法进行扩展,常见的方法包括:•并行接口:使用并行接口可以同时传输多个位的数据。
它通常使用多条数据线和一些控制线来实现高速数据传输。
•串行接口:使用串行接口可以逐位地传输数据。
它通常使用一条数据线和一些控制线来实现较低速率但更简洁的数据传输。
•USB接口:USB(Universal Serial Bus)是一种常见的数字串行总线接口,它可以连接多种设备,并提供高速数据传输和供电功能。
•SPI接口:SPI(Serial Peripheral Interface)是一种常用的串行外设接口,它可以连接多个外设,并以主从模式进行数据传输。
•I2C接口:I2C(Inter-Integrated Circuit)是一种常见的串行通信接口,它可以连接多个外设,并使用两条线路进行数据传输。
2.3 简单IO口扩展实验本次实验旨在通过简单IO口扩展方法,将计算机与外部设备进行连接,并实现数据的输入和输出。
具体步骤如下:1.确定要使用的简单IO口扩展方法,如并行接口、串行接口等。
2.根据选择的扩展方法,准备相应的硬件模块和连接线缆。
3.将硬件模块与计算机进行连接,确保电气连通性。
4.编写相应的驱动程序或使用现有的驱动程序,以实现与硬件模块的通信。
5.运行程序并测试扩展功能。
3. 结果经过实验测试,我们成功地实现了简单IO口扩展,并达到了预期的结果。
附页:实验线路图:编译程序:源程序代码:1 汇编语言程序清单ORG 0000HLJMP MAINORG 000BHLJMP INTT0MAIN:MOV SP,#60HMOV TMOD,#01HSETB ET0SETB EAMOV TH0,#3CHMOV TL0,#0B0HSETB TR0MOV 30H, #0 ; 每中断一次加1MOV 31H, #0 ; 每秒加1, 当其值为100时清0 MOV 32H, #0 ; 个位MOV 33H, #0 ; 十位LP:MOV R0,#32HMOV R7,#2ACALL BINBCDMOV DPTR,#TABDSPLY:MOV A,@R0MOVC A,@A+DPTRCPL AMOV SBUF,ADSP1:JNB TI,DSP1CLR TIINC R0DJNZ R7,DSPLYLP1:MOV A,30HCJNE A, #10, LP1MOV 30H,#00HINC 31HMOV A,31HCJNE A,#100,LPMOV 31H,#0SJMP LPINTT0:MOV TL0,#0B0HMOV TH0,#3CHINC 30HRETITAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 0FFH,00H,73H; 入口参数二进制数存放在31H中; 出口参数 BCD数十位(33H), 个位(32H)BINBCD:MOV A,31HMOV B,#10DIV ABMOV 33H,AMOV A,BMOV 32H,ARETEND ; 程序结束2 C 语言程序清单#include <AT89X51.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned int//共阴数码管段码:0~9,全亮,全灭,Puchartab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xFF,0x00,0x 73};uchar timer; //定时器每中断1次加1void main(void){uchar ten,one,count;SP=0x60;TMOD=0x01; //定时器T0方式1定时ET0=1; //开定时器T0中断EA=1; //开总中断TH0=0x3C; //每100ms中断一次TL0=0xB0;TR0=1; //启动定时器T0timer=0;count=0;do{do{ten=count/10; //求得十位one=count%10; //求得个位SBUF=~tab[one]; //发送个位while(~TI);TI=0;SBUF=~tab[ten]; //发送十位while(~TI);TI=0;while(timer<10); //延时1s,即10*100ms timer=0;count++; //每隔一秒,count值加1 }while(count<100); //从0计到99count=0;} while(1);}void intt0() interrupt 1{TH0=0x3C;TL0=0xB0;timer++;}。
实验十三利用串行口扩展并口实验一实验目的①掌握MSC-51单片机串行口方式0时的工作原理;了解通过串行口扩展输出口,进行静态显示的方法。
②掌握串行移位寄存器芯片74LS164的工作原理。
二实验器材1.实验仪一台;2. 编程器一台;3.小镊子一把;三实验原理MCS-51单片机除了具有四个8位的并行口外,还具有一个全双工的串行通信接口,该接口有4种工作方式,当工作于方式1、2和3时,作UART(通用异步接收和发送器),实现单片机系统之间点对点的单机通信、多机通信和单片机系统与PC机之间的通信;而工作于方式0时,为同步移位寄存器输入/输出方式,常用于扩展I/O口,这时串行数据通过RxD引脚输入或输出,引脚TxD输出同步移位信号,收/发数据都为8位,低位在前,波特率为振荡频率的1/12。
本实验中通过74LS164实现串入并出。
由于74LS164的输出高电平电流为 -1mA,而输出低电平电流为20mA,故这里必须使用共阳极的数码管,并且数码管的“a”笔画由引脚13输出,“h”笔画由引脚3输出,请同学们注意。
另外采用静态显示,编程简单,显示效果好,具体线路如图13所示(图中省去了复位电路、时钟电路等电路)四跳线设置如程序存放在AT89S51中,AT89S51的/EA(引脚31)必须接高电平,实验时需短路J13的1和2引脚,否则;必须短路J13的2和3引脚;实验时需要短接J4的3和5以及4和6;J7的2、3。
五实验内容与要求编制程序使数码管循环依次显示00到99,每秒加1。
六源程序ORG 0000HLJMP MAINORG 000BHLJMP INTT0MAIN:MOV SP,#60HMOV TMOD,#01HSETB ET0SETB EAMOV TH0,#3CHMOV TL0,#0B0HSETB TR0MOV 30H, #0 ; 每中断一次加1MOV 31H, #0 ; 每秒加1, 当其值为100时清0MOV 32H, #0 ; 个位MOV 33H, #0 ; 十位LP:MOV R0,#32HMOV R7,#2ACALL BINBCDMOV DPTR,#TABDSPLY:MOV A,@R0MOVC A,@A+DPTRCPL AMOV SBUF,ADSP1:JNB TI,DSP1CLR TIINC R0DJNZ R7,DSPL YLP1:MOV A,30HCJNE A, #10, LP1MOV 30H,#00HINC 31HMOV A,31HCJNE A,#100,LPMOV 31H,#0SJMP LPINTT0:MOV TL0,#0B0HMOV TH0,#3CHINC 30HRETITAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 0FFH,00H,73H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 入口参数二进制数存放在31H中; 出口参数BCD数十位(33H), 个位(32H);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BINBCD:MOV A,31HMOV B,#10DIV ABMOV 33H,AMOV A,BMOV 32H,ARETEND ; 程序结束七实验结论基本掌握MSC-51单片机串行口方式0时的工作原理;了解通过串行口扩展输出口,进行静态显示的方法。
实验五串行接口输入/输出实验一、实验目的1、学习TEC-XP+教学计算机I/O接口扩展的方法;2、学习串行通信的基本知识,掌握串行通信接口芯片的设置和使用方法。
二、实验说明1、TEC-XP+教学计算机的I/O结构TEC-XP+教学计算机配置有COM1和COM2两个串行接口,其中COM1是TEC-XP+默认的标准接口,与PC终端相连接,监控程序负责对COM1进行初始化和使用管理。
COM2预留给用户扩展使用,监控程序不能识别COM2,也不对COM2进行任何操作,用户需要对COM2进行初始化和使用管理。
COM1和COM2均由可编程串行通信接口芯片intel8251芯片构成。
2、Intel8251的组成及控制和使用方法可编程串行通信接口芯片Intel8251支持同步和异步两种通信方式。
在异步方式下,波特率为0~19.2Kbps,数据位可为5、6、7或8位,可设1个奇偶校验位,1个起始位,1个、1.5个或2个停止位。
Intel8251内部有7个功能模块负责实现与CPU的数据交换以及与I/O设备的数据通信功能,内部有6个寄存器,其中与异步通信方式的有关的寄存器有5个,即模式寄存器、控制寄存器、状态寄存器、数据发送寄存器和数据接收寄存器。
模式寄存器的功能是设定intel8251的工作模式,控制寄存器的功能是控制intel8251的数据发送和接收等工作过程,状态寄存器的功能是反映intel8251数据发送和接收等工作的状态,各寄存器的格式如图5-1、图5-2和图5-3所示。
当CPU把需发送的数据写入数据发送寄存器后,intel8251将自动把数据组成帧并逐位发送出去。
Intel8251能自动完成数据接收操作,并把接收到的数据存放在数据接收寄存器中,CPU从中读取即可。
图5-1模式寄存器格式图5-2 控制寄存器格式图5-3 状态寄存器格式CPU对模式寄存器、控制寄存器和数据发送寄存器只能写入,不能读出。
对状态寄存器和数据接收寄存器只能读出,不能写入。
单片机总线扩展实验报告1. 背景单片机是一种嵌入式微处理器,常用于控制系统和电子设备中。
然而,单片机的输入输出引脚有限,并且常常需要与其他外部设备进行通信。
为了解决这个问题,我们需要进行总线扩展实验。
总线扩展是通过额外的硬件元件来扩展单片机的输入输出能力。
在本实验中,我们使用了I2C总线作为扩展方式。
I2C总线是一种串行通信总线,可以连接多个设备,使它们能够共享信息。
2. 分析在本实验中,我们使用了STM32单片机和一些外部设备,包括温湿度传感器和液晶显示屏。
我们将通过I2C总线来连接这些设备。
首先,我们需要在单片机上启用I2C总线功能。
通过相关的寄存器设置,我们可以配置I2C总线的时钟频率等参数,以确保与外部设备的正常通信。
接下来,我们需要连接温湿度传感器和液晶显示屏到I2C总线上。
这需要通过正确的引脚连接来实现。
我们还需根据设备的数据手册来确定各个设备的I2C地址,以便在通信时正确识别设备。
对于温湿度传感器,我们可以通过I2C总线发送相应的命令,并读取传感器返回的温湿度数据。
这些数据可以通过数值转换和校准得到实际的温度和湿度值。
对于液晶显示屏,我们可以使用I2C总线发送相应的命令和数据来显示信息。
我们可以将温湿度数据以及其他文本信息显示在液晶屏上。
3. 结果在实验中,我们成功地使用I2C总线实现了单片机与温湿度传感器和液晶显示屏的通信。
以下是我们的实验结果:•温湿度传感器能够准确地测量环境的温度和湿度。
•单片机能够通过I2C总线正确地读取并处理传感器的数据。
•液晶显示屏能够正确地显示温湿度数据以及其他文本信息。
4. 建议在进行总线扩展实验时,我们遇到了一些挑战和问题。
以下是我们的一些建议:•在接线和引脚连接时,请仔细阅读设备的数据手册,并按照说明进行正确的连接。
•在使用I2C总线时,需要设置正确的时钟频率和其他参数。
请确保对单片机的寄存器设置正确。
•当与外部设备通信时,可能会遇到一些通信失败或数据错误的情况。
CHANGZHOU INSTITUTE OF TECHNOLOGY 单片机实践报告题目:用串行口扩展并行输出口学院:延陵学院班级:姓名:学号:一、实验目的1、掌握AT89C52串行口方式0的工作方式和编程2、掌握利用串行口和移位寄存器扩展并行接口的方法二、实验电路元器件编号元器件名称 说明 U1 AT89C52 AT89C52单片机 U2 74HC164.IEC 并行输出串行口移位寄存器7SEG-BCD7段BCD 数码管显示器三、实验流程图开始初始化串口I<8?循环移位100次? 置零检查状态i++结束NYYN四、调试步骤用查询TI方式,在7段BCD数码管显示器循环显示0~99这100个数字。
五、实验代码#include<REG52.H>#include<stdio.h>#include<intrins.h>#include<Absacc.h>#include<string.h>#include<ctype.h>#define byte unsigned char#define uchar unsigned char#define word unsigned int#define uint unsigned int#define ulong unsigned long#define BYTE unsigned char#define WORD unsigned int#define TRUE 1#define FALSE 0void initUart(void); //初始化串行口void time(unsigned int ucMs); //延时单位:mssbit CTRL_OUT = P3^4; //=0,清零;=1,并行输出/******HEXtoBCD*****/unsigned char HEXtoBCD (unsigned char hex){return ((hex/10)*16+(hex%10));}/********main c*********/void main(void){uchar i,wByte=0;initUart(); //初始化串行口方式0CTRL_OUT=1; //=1,允许并行输出for(;;){for(i=0;i<8;i++){SBUF=HEXtoBCD(wByte); //循环右移i位,串行输出wByte++;if(wByte==100) //0-99循环wByte=0;while(!TI){} //状态查询TI=0; //清发送中断标志time(88); //状态维持}}}void delay_5us(void) //延时5us,晶振改变时只改变这一个函数{_nop_();_nop_();//_nop_();// _nop_();}/*delay_50us*/void delay_50us(void) //延时50us{unsigned char i;for(i=0;i<4;i++){delay_5us();}}/******************延时100us********************/void delay_100us(void) //延时100us{delay_50us();delay_50us();}/*延时单位:ms*/void time(unsigned int ucMs){unsigned char j;while(ucMs>0){for(j=0;j<10;j++)delay_100us();ucMs--;}}/**********初始化串行口波特率********/void initUart(void) //初始化串行口方式0 {SCON=0x00; //串行口方式0工作ES=0; //禁止串行中断}六、运行效果。