串并转换实验

更新时间:2023-09-27 21:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、实验内容:

(1)在实验箱上完成: 利用8031串行口和串行输入并行输出移位寄存器74LS164,扩展一个8位输出通道,用于驱动一个共阳极数码显示器,在数码显示器上循环显示8031串行口输出的0~9这10个数字。

(2)用Proteus软件参照实验电路连线并仿真运行,得出与实验箱上相同的软件仿真结果。

所用元器件:单片机AT89C51、串入并出移位寄存器74LS164、数码管7SEG-COM-CAT-GREEN(BLUE)

二、实验电路及功能说明

串行口工作在方式0时,可通过外接移位存储器实现串并行转换。在这种方式下,数据为8位,只能从RXD端输入输出,TXD端总是输出移位同步时钟信号,其波特率固定为晶振频率1/12。由软件置位串行控制寄存器(SCON)的REN后才能启动串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。待8位数据输完后,硬件将SCON寄存器的TI位置1,TI必须由软件清零。 共阳极数码管的0~9的显示码如下:0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09

三、实验程序流程图:

主程序:

子程序:

四、实验结果分析

五、心得体会

通过实验让我掌握8031串行口方式0工作方式及编程方法。同时了解和掌握了利用串行口扩展并行I/O通道的方法。

程序清单

#include

unsigned char code table[]={0x03,0x9F,0x25,0x0D, 0x99,0x49,0x41,0x1F,0x01,0x09}; int i=0,num=0;

void main()

{ ; 6;

TMOD=0X01;

TH0=(65536-5000)/256TL0=(65536-5000)%EA=1; ET0=1; TR0=1;

SCON=0x00;

while(1);

}

void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%6; num++; if(num==10) {

num=0; i++;

SBUF=~(table[i]); if(i==10) { i=0;

}

} }

单片机综合实验报告

题 目: 单片机与pc机串行通信实验 班 级: 0312409

姓 名: 田 庆 学 号: 031240920

指导老师: 谭 忠 祥 时 间: 2014.12.17

一、实验内容:

(1)在实验箱上实现:

利用8031单片机串行口,实现与PC机通信。将“PC机发送程序”上的字符(0~F)显示到实验仪的数码管上。

(2)用Proteus软件参照实验电路连线并仿真运行,得出与实验箱上相同的软件仿真结果。

所用元器件:单片机AT89C51、8位锁存器74LS273或74LS373、3-8译码器74LS138、排阻或电阻RESPACK-8(RES)、或非门74LS02、共阳极六合一数码管7SEG-MPX6-CA以上是“时钟显示实验”电路。

另外增加:TTL和RS232电平转换芯片MAX232、RS232串口COMPIM、串口通信仿真器VIRTUAL TERMINAL

二、实验电路及功能说明

实验时需将8032串行接收信号线P3.0(RXD)连到实验仪右上角RX0插孔;8031的P3.1(TXD)连到实验仪右上角TX0插孔上;使用通信电缆连接PC机与实验仪。

三、实验程序流程图:

主程序:

六、实验结果分析

七、心得体会

通过实验让我掌握8031串行口方式0工作方式及编程方法。同时了解和掌握了利用串行口扩展并行I/O通道的方法。

程序清单

#include #include

#define uchar unsigned char #define uint unsigned int

#define ZX XBYTE[0xffdc] //字型口,段 #define ZW XBYTE[0xffdd] //字位口,位 uint n=0; uchar code aa[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

void init(void) //初始化串口 { SCON=0x40; //方式1,REN=0 PCON=0x80; TMOD=0x20; //T1方式2(8位可重装) TH1=243; TL1=243; TR1=1;

}

void delay_ms(uint x) { uint i; uint j; for(i=0;i

void display(void) { ZX=aa[n]; //个位 ZW=0x04; delay_ms(5); ZW=8; ZX=aa[n/10]; //十位 ZW=0x08;

delay_ms(5); ZW=9;

/* ZX=aa[n/100]; ZW=0x10; delay_ms(5); ZW=0; ZX=aa[n/1000]; ZW=0x20; delay_ms(5); ZW=0; */ }

void main(void) { init(); while(1) { REN=1; while(RI==0) display(); //未接受到数据时 RI=0; // 当RI为1时,跳出display n=SBUF; //SBUF来自接受到的数据 REN=0; } }

本文来源:https://www.bwwdw.com/article/of1d.html

Top