8用串行口扩展并行输出口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CHANGZHOU INSTITUTE OF TECHNOLOGY 单片机实践报告

题目:用串行口扩展并行输出口

学院:延陵学院

班级:

姓名:

学号:

一、实验目的

1、掌握AT89C52串行口方式0的工作方式和编程

2、掌握利用串行口和移位寄存器扩展并行接口的方法

二、实验电路

元器件编号

元器件名称 说明 U1 AT89C52 AT89C52单片机 U2 74HC164.IEC 并行输出串行口移位寄存器

7SEG-BCD

7段BCD 数码管显示器

三、实验流程图

开始

初始化串口

I<8?

循环移位

100次? 置零

检查状态

i++

结束

N

Y

Y

N

四、调试步骤

用查询TI方式,在7段BCD数码管显示器循环显示0~99这100个数字。

五、实验代码

#include

#include

#include

#include

#include

#include

#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 0

void initUart(void); //初始化串行口

void time(unsigned int ucMs); //延时单位:ms

sbit 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(); //初始化串行口方式0

CTRL_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; //禁止串行中断

}

六、运行效果

相关文档
最新文档