微机原理时钟实验报告

微机原理时钟实验报告
微机原理时钟实验报告

实验报告

课程名称: 微机原理及其应用 指导老师: 徐习东 成绩: 实验名称: 时钟控制实验 实验类型: 同组学生姓名:

目录

1 实验内容与要求 ..................................................................(2) 2 实验原理 (2)

2.1 数码管显示原理 (2)

2.2 键盘接口 (3)

3 程序设计与分析 (5)

3.1主程序设计流程图............................................................... (5) 3.2 时间自增变化程序设计流程图................................................ (6) 3.3 调时程序设计流程图............................................................ (6) 3.4 程序段设计与分析 (7)

4 实验思考 ... (17)

专业: 电气工程及其自动化 姓名: 学号:

日期: 2014.11.27 地点:

一、实验内容与要求

1、利用TMS3202812实验目标板上的八段数码管设计显示具有“时、分、秒”功能的数字钟。

2、用按键控制时、分、秒时间的增减。

3、通过实验,掌握TMS2812通用输入/输出管脚直接控制外围设备的方法。

4、了解键盘、发光二极管的控制编程方法。

二、实验原理

1、数码管显示原理

扫描式键盘数码管接口如图:

图1 扫描式键盘数码管接口

DSP的SPI控制串转并芯片如图

图2 SPI串转并

8个串转并芯片级联在一起,级联多口控制,由锁存信号控制暂态余辉;写入一个字符会引起一串变化。

为控制8个LED,建立8个元素的显示数组;如果要改显示内容,先改显示数组,然后再调用循环传送程序。

2、键盘接口

键盘一端接地,一端上拉高电平;键盘的闭合,断开会产生电平变化;键盘经三态隔离芯片接入DSP;三态芯片的导通由KEYA、KEYB两线控制;键盘信号进入GPIOB(8~15);

图3 键盘接口

其中两个键盘控制芯片U24和U26分别对应键盘K1-K8和K9-K16,片选控制取决于键盘输入片选信号KEYA与KEYB,通过74LVC138译码器控制,具体定义如下:

功能/名称

74LVC138译码器控制信号GPIOE2 GPIOE1 GPIOE0

键盘输入片选信号KEYA 0 0 0 键盘输入片选信号KEYB 0 0 1 扩展的输入片选LEDA 0 1 0 扩展的输入片选LEDB 0 1 1 LCD CSA片选 1 0 0

LCD CSB片选 1 0 1

表1 片选控制

外部扩展片选电路如下:

图4 外部扩展片选电路

三、程序设计与分析

1、主程序设计流程图

系统初始化关闭中断初始化SPI 初始化I/O 数码管清零初始化中断向量表

初始化CPU 定时器

扫描按键键值转字符

显示时钟变

2、时间自增变化程序设计流程图

开始

显示初始化

启动定时器CpuTimer0.Interrup

tCount++

判断是否

CpuTimer0.Interrupt

Count==10

秒加1

秒加到60

分加1

分加到60

Y,秒清零

时加1

时加到24

Y,分清零

时清零

N

Y

N

N

Y

N

3、调时程序设计流程图

开始

显示初始化

启动定时器CpuTimer0.Interrup

tCount++

按下K14(D)

秒选定

按下K15(E)

分选定按下K16(F)

按下K11(A)

秒减1

按下K12(B)

秒加1

秒加到60

分加1

分加到60

Y,秒清零

时加1

时加到24

Y,分清零

时清零

按下K11(A)

分减1按下K12(B)时选定

按下K11(A)

时减1按下K12(B)

Y

N

Y

N

Y

N

Y

N

Y

N

Y

N

4、程序段设计与分析

程序段○

1 #define K1 0xFEFF #define K

2 0xFDFF

……

#define K16 0x7FFF

该程序段运用简单宏定义的方式将一个较长的16位二进制常量用一个较短的标识符Kn 来代替(0xFFFE 用K1代替、0xFFFD 用K2代替等),Kn 对应于键盘的K1-K16,具有实际意义。这样在之后程序的编写中便于书写和表达,具体程序见下面的分析。

程序段○2

Uint16 KeyReg1;

Uint32 i = 0;

Uint16 Ctrl;

int16 Sec=0;

int16 Min=0;

int16 Hor=0;

Uint16 Light[8];

int LEDCode[30]={0xC000,0xF900,0xA400,0xB000,0x9900,0x9200,0x8200, 0xF800,0x8000,0x9000,0x8800,0x8300,0xC600,0xA100,0x8600,0x8E00,

0x8c00,0xbf00,0xa700,0xff00,0x4000,0x7900,0x2400,0x3000,

0x1900,0x1200,0x0200,0x7800,0x0000,0x1000};

在F2812开发中,为了方便,将常用的数据类型重新定义如下:

int int16

long int32

unsigned int Uint16

unsigned long Uint32

float float32

long double float64

表2 DSP数据类型定义

定义unsigned int型变量KeyReg1用于读键值;定义unsigned long型变量i 作为后面循环程序中的循环变量;定义unsigned int型变量Ctrl,用于记录按下的是哪个键,参与控制调时子程序;定义int型变量Sec、Min、Hor分别作为时钟秒、分、时的在调整时的数值,参与调时和时钟显示;定义unsigned int型数组Light[8],用于关联六位时钟和数码关显示屏上的两个…一?,同时作为时钟秒、分、时新数值的十位与个位数据寄存器,参与调时,具体操作是在LEDCode[30]中寻找到相应的字形码并通过下面叙述的display函数将结果信息传入到SPI数据发送缓冲器SPITXBUF中,在数码管显示屏上进行显示。这些变量的具体作用及其意义相见下面针对各个程序段的叙述。

程序段○3

void spi_intial()

{

SpiaRegs.SPICCR.all = 0x0047;

SpiaRegs.SPICTL.all = 0x0006;

SpiaRegs.SPIBRR = 0x007F;

SpiaRegs.SPICCR.all = SpiaRegs.SPICCR.all | 0x0080;

EALLOW;

GpioMuxRegs.GPFMUX.all = 0x000F; EDIS; }

void spi_intial()函数用于初始化串行外设接口SPI 。 设置SPI 配置控制寄存器SPICCR 的位3-0为0111,使在一个移位序列中每个字符的字符长度为8位,即串行输入时对应每一个八段数码管的信息;

设置SPI 配置控制寄存器SPICCR 的位6为1,使数据在始终下降沿输出、上升沿输入,当SPI 无数据发送时,SPICLK 为高电平;

设置SPI 操作控制寄存器SPICTL 的位0为0,禁止SPI 的接收/发送中断; 设置SPI 操作控制寄存器SPICTL 的位1为1,使能发送且主控制器的SPISTE 引脚置为低电平;

设置SPI 操作控制寄存器SPICTL 的位2为1,使SPI 被配置为主模式; 设置SPI 操作控制寄存器SPICTL 的位3为0,使SPI 时钟相位为正常时钟方式,且时钟边沿有效;

设置SPI 波特率设置寄存器SPIBRR 的位6-0均为1,设定波特率,使

637.50.2910/1128

LSPCLK MHz

SPICLK b s SPIBRR ===?+

设置SPI 配置控制寄存器SPICCR 的位7为1(与…1?进行或逻辑操作),使SPI 退出复位状态,准备接收或发送新的字符。

设置模式寄存器GPFMUX 低四位为1,配置为对应SPI 的专用外设功能。

void gpio_init() {

EALLOW; GpioMuxRegs.GPAMUX.bit.TDIRA_GPIOA11=0; GpioMuxRegs.GPADIR.bit.GPIOA11=1;

GpioMuxRegs.GPEMUX.all = GpioMuxRegs.GPEMUX.all & 0xfff8; GpioMuxRegs.GPEDIR.all = GpioMuxRegs.GPEDIR.all | 0x0007; GpioMuxRegs.GPBMUX.all = GpioMuxRegs.GPBMUX.all&0x00ff; EDIS;

GpioDataRegs.GPADAT.bit.GPIOA11 = 0; }

void gpio_init()

函数用于初始化GPIO 口。

设置模式寄存器GPAMUX 的相关位为0,是GPIOA11引脚配置为通用数字I/O 模式;

设置方向寄存器GPADIR 的相关位为1,使GPIOA11引脚配置为输出; 设置模式寄存器GPEMUX 的低3位均为0,使GPIOE 低3位引脚配置为通用数字I/O 模式;

设置方向寄存器GPEDIR的低3位均为1,使GPIOE低3位引脚配置为输出;

设置模式寄存器GPBMUX的高8位均为0,使GPIOB的高8位引脚配置为通用数字I/O模式;

设置数据寄存器GPADAT的相关位为0,使GPIOA11引脚为低电平关闭锁存,使74HC595的SPISIMO引脚能够接收SPITXBUF中的信息。

系统初始化、外设时钟初始化、看门狗初始化、PIE初始化等调用DSP281x_SysCtrl.c、DSP281x_PieCtrl.c等文件。

程序段○4

int Keyscan(void)

{

EALLOW;

GpioMuxRegs.GPBDIR.all = GpioMuxRegs.GPBDIR.all & 0x00ff;

EDIS;

GpioDataRegs.GPEDAT.all = 0xfff9;

for (i=0; i<100; i++){}

if ((GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff)

{

for (i=0; i<30000; i++){}

if ((GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff)

{

KeyReg1 = GpioDataRegs.GPBDAT.all ;

while ((GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff)

{

GpioDataRegs.GPDDAT.bit.GPIOD1 =

!GpioDataRegs.GPDDAT.bit.GPIOD1;

for (i=0; i<1000; i++){}

}

return (1);

}

}

return (0);

}

int Keyscan (void)函数用于扫描按键K9-K16。

设置方向寄存器GPBDIR的高8位为0,使GPIOB8~GPIOB15被配置为输入;

设置数据寄存器GPEDAT的低3位为001,选通KEY高8位;

if语段:

if ((GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff)

{

for (i=0; i<30000; i++){}

if ((GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff)

{

KeyReg1 = GpioDataRegs.GPBDAT.all ;

while ((GpioDataRegs.GPBDAT.all|0x00ff)!=0xffff)

{

GpioDataRegs.GPDDAT.bit.GPIOD1 =

!GpioDataRegs.GPDDAT.bit.GPIOD1;

for (i=0; i<1000; i++){}

}

return (1);

}

用于判断K9-K16是否有按键按下,没有按键按下时,GPBDAT高8位均为高电平1,若有按键按下则GPBDAT高8位出现低电平0,与0x00ff进行或逻辑运算后不等于0xffff(GpioDataRegs.GPBDAT.all | 0x00ff) != 0xffff),初步判断有按键按下后,进行去抖动再确认,具体操作为延时一小段时间,再次检测是否有按键按下,如果再次判断有按键按下,则确认有按键按下,记录键值(KeyReg1 = GpioDataRegs.GPBDAT.all),否则视为按键抖动,不进行进一步的操作。

按键去抖动操作流程图如下:

有键按下?

延时

有键按下?

记录键值

KeyScan

Y N Y

N

return(1)

程序段○

5 void KeyFunction (unsigned int KeyReg1) {

switch(KeyReg1) { case K14: Ctrl=K14; break; case K15: Ctrl=K15; break; case K16: Ctrl=K16; break; case K11:

if(Ctrl==K14)

{

Sec--; if(Sec==-1) {Sec=59;} Light[7]=LEDCode[Sec%10]; Light[6]=LEDCode[Sec/10];

} if(Ctrl==K15)

{

Min--;

if(Min==-1)

{Min=59; }

Light[4]=LEDCode[Min%10];

Light[3]=LEDCode[Min/10];

}

if(Ctrl==K16)

{

Hor--;

if(Hor==-1)

{Hor=23; }

Light[1]=LEDCode[Hor%10];

Light[0]=LEDCode[Hor/10];

}

break;

case K12:

if(Ctrl==K14)

{

Sec++;

if(Sec==60)

{Sec=0;}

Light[7]=LEDCode[Sec%10];

Light[6]=LEDCode[Sec/10];

}

if(Ctrl==K15)

{

Min++;

if(Min==60)

{Min=0; }

Light[4]=LEDCode[Min%10];

Light[3]=LEDCode[Min/10];

}

if(Ctrl==K16)

{

Hor++;

if(Hor==24)

{Hor=0; }

Light[1]=LEDCode[Hor%10];

Light[0]=LEDCode[Hor/10];

}

break;

default:

break;

}

}

void KeyFunction(unsigned int KeyReg1)函数用于控制调整时间。

由按键扫描子程序int Keyscan(void)得到按下的按键值,(KeyReg1 = GpioDataRegs.GPBDAT.all),用switch语句给定每个特定按键所对应实现的调时功能(如按下K14,则选定秒,键值寄存变量Ctrl=K14,接下来若按下K11,则秒加1,若按下K12,则秒减1),调整时间后,由Light[n]与八段数码管关联,在LEDCode[30]中找到对应的字形码,显示在数码管上。

程序段○6

void display ()

{

GpioDataRegs.GPADAT.bit.GPIOA11 = 0;

for(i=0;i<8;i++)

{

SpiaRegs.SPITXBUF = Light[i];

while(SpiaRegs.SPISTS.bit.INT_FLAG != 1){}

SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;

}

GpioDataRegs.GPADAT.bit.GPIOA11 = 1;

for(i=0;i<10;i++){}

}

void display ()用于时钟的八段数码管显示。

设置数据寄存器GPADAT的GPIOA11位为0,给LACK信号一个低电平,为后面的锁存做准备;

SpiaRegs.SPITXBUF = Light[i]用于给数码管送入数据,一旦把数据Light[i]送给SPITXBUF,SPITXBUF就把数据发送出去;

设置数据寄存器GPADAT的GPIOA11位为1,给LACK信号一个高电平,为锁存74HC595。

程序段○7

interrupt void cpu_timer0_isr(void)

{

CpuTimer0.InterruptCount++;

if(CpuTimer0.InterruptCount==10)

{

Sec++;

CpuTimer0.InterruptCount=0;

if(Sec==60)

{

Min++;

Sec=0;

if(Min==60)

{

Hor++;

Min=0;

if(Hor==24)

{

Hor=0;

}

Light[1]=LEDCode[Hor%10];

Light[0]=LEDCode[Hor/10];

}

Light[4]=LEDCode[Min%10];

Light[3]=LEDCode[Min/10];

}

Light[7]=LEDCode[Sec%10];

Light[6]=LEDCode[Sec/10];

display();

}

PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;

}

interrupt void cpu_timer0_isr(void)为中断函数,参与时钟无操作时的自加和数码管显示。

定时器开始计时后中断计数寄存器累加CpuTimer0.InterruptCount++;

当中断计数寄存器CpuTimer0.InterruptCount= 10,即0.1s*10=1s,产生一个中断,此时秒加1,若秒溢出(Sec==60)则分加1(Min++),若分溢出(Min==60)则时加1(Hor++),若时溢出(Hor==24)则时分秒清零。时间改变的同时在数码管上显示。

程序段○8

void main(void)

{

InitSysCtrl();

DINT;

spi_intial();

gpio_init();

DINT;

IER = 0x0000;

IFR = 0x0000;

for(i=0;i<8;i++)

{

SpiaRegs.SPITXBUF =LEDCode[0];

while(SpiaRegs.SPISTS.bit.INT_FLAG != 1){}

SpiaRegs.SPIRXBUF = SpiaRegs.SPIRXBUF;

}

GpioDataRegs.GPADAT.bit.GPIOA11=1;

for(i=0; i<10; i++){}

for(i=0;i<8;i++)

{

Light[i]=LEDCode[0];

}

Light[2]=LEDCode[17];

Light[5]=LEDCode[17];

InitPieVectTable();

EALLOW;

PieVectTable.TINT0=&cpu_timer0_isr;

EDIS;

InitCpuTimers();

ConfigCpuTimer(&CpuTimer0,150,100000);

StartCpuTimer0();

IER |=M_INT1;

PieCtrlRegs.PIEIER1.bit.INTx7=1;

EINT;

while(1){

if (Keyscan2() == 1)

{

KeyFunction2(KeyReg1);

display();

}

}

}

void main(void)为程序主函数。

初始化函数InitSysCtrl()、InitPieVectTable()、InitCpuTimers()、StartCpuTimer0()、ConfigCpuTimer()调用相关C文件,其中ConfigCpuTimer(&CpuTimer0,150,100000)为设置周期寄存器,150MHz ,周期为1*100000us=1s,

IER = 0x0000; IFR = 0x0000;分别表示关闭外围中断和清除中断标志;

开始给数码管送入数据SpiaRegs.SPITXBUF =LEDCode[0],即使时钟时分秒均从0开始显示;

设置数据寄存器GPADAT的GPIOA11位为1,即给LACK信号一个高电平,为锁存74HC595;

启动定时器StartCpuTimer0(),当计数器减到0时产生一个定时器中断信号,(一个中断脉冲)。

CPU定时器0中断流程图如下:

开始

初始化DSP时钟

初始化GPIO

初始化中断向量

初始化定时器

等待中断产生

四、实验思考

这次实验是按键控制时钟实验,硬件上涉及了键盘和数码管,程序设计用到了CPU定时器、PIE中断、串行外设接口SPI等知识,通过这次实验的练习,我了解了SPI串行外设接口在数据传输方面的知识和软件设置方法,进一步理解了CPU定时器和PIE的工作流程以及成功实现中断的必要步骤等,受益匪浅。

那么要成功实现中断,需要做哪些事呢?要知道CPU接到中断请求,并发

现可以去响应时,就得暂停正在执行的程序,转而去响应中断程序,但是此时,它必须得做一些准备工作,以便于执行完中断程序后回过头来还能找到原来的地方原来的状态,CPU会将相应的IFR位进行清除,EALLOW也被清除,INTM 被置位,即不能响应其他终中断,等于CPU向其他中断发出了通知,现在正在忙,没有时间处理别的请求,得等到处理完手上的中断之后才能再来处理。然后CPU会存储返回地址并自动保存相关信息,例如将正在处理的数据放入堆栈等。做好这些准备工作之后,CPU会从PIE向量表中取出对应的中断向量ISR,从而转去执行中断服务子程序。

另外由于对SPITXBUF和SPIRXBUF区分不清,在编写程序时,多处把SPITXBUF写成SPIRXBUF,导致运行不正确。现将SPI工作在标准SPI模式下(FIFO未使能)时,数据交换过程总结如下。

串行发送缓冲寄存器SPITXBUF用于发送数据。首先,通过程序向发送缓冲寄存器SPITXBUF中写入数据,如果此时SPIDAT寄存器为空,则SPITXBUF 将需要发送的完整数据传输给SPIDAT,数据在SPITXBUF寄存器和SPIDAT寄存器中左对齐存放,即从高位开始存储。SPIDAT每经过一个时钟脉冲,完成一位数据的发送或接收。假设在时钟上升沿时,SPIDAT将数据最高位发送出去,然后将剩余数据左移一位,接下来在时钟脉冲下降沿时,SPIDAT锁存一位数据,并保存至其最低位,在发送完指定位数的数据后,SPIDAT寄存器将其内部的数据发送给接收缓冲寄存器SPIRXBUF,等待CPU读取。数据在SPIRXBUF中存放是右对齐的,即从低位开始存储。在标准SPI模式下,接收操作支持双缓冲,也就是在新的接收操作启动时,CPU可以暂时不读取SPIRXBUF中接收到的数据,但是在新的接收操作完成之前,必须读取SPIRXBUF,否则将会覆盖原来接收到的数据。发送操作同样也支持双缓冲功能。

这次程序相比于以前简单地点亮几个发光管的程序来说,无论从程序的大小还是程序设计思想上,都更进了一步。尽管一些重要的程序段比如按键扫描程序、键盘功能设计程序、数码管显示程序还包括一些必要的定义等等都在老师的指导下帮助我们更好地理解,并且给了我们一些相关子程序的范例,但是再深刻理解以及进一步熟悉DSP2812芯片内部结构和开发板结构的基础上,自己编写相关模块功能,完成这个程序使其正确实现目标功能还是需要花费一些时间去思考的。

数字钟设计报告——数字电路实验报告

数字钟设计实验报告 专业:通信工程 姓名:王婧 班级:111041B 学号:111041226

数字钟的设计 目录 一、前言 (3) 二、设计目的 (3) 三、设计任务 (3) 四、设计方案 (3) 五、数字钟电路设计原理 (4) (一)设计步骤 (4) (二)数字钟的构成 (4) (三)数字钟的工作原理 (5) 六、总结 (9) 1

一、前言 此次实验是第一次做EDA实验,在学习使用软硬件的过程中,自然遇到很多不懂的问题,在老师的指导和同学们的相互帮助下,我终于解决了实验过程遇到的很多难题,成功的完成了实验,实验结果和预期的结果也是一致的,在这次实验中,我学会了如何使用Quartus II软件,如何分层设计点路,如何对实验程序进行编译和仿真和对程序进行硬件测试。明白了一定要学会看开发板资料以清楚如何给程序的输入输出信号配置管脚。这次实验为我今后对 EDA的进一步学习奠定了更好的理论基础和应用基础。 通过本次实验对数电知识有了更深入的了解,将其运用到了实际中来,明白了学习电子技术基础的意义,也达到了其培养的目的。也明白了一个道理:成功就是在不断摸索中前进实现的,遇到问题我们不能灰心、烦躁,甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步,才会一步步向自己的目标靠近,才会取得自己所要追求的成功。 2

二、设计目的 1.掌握数字钟的设计方法。 2熟悉集成电路的使用方法。 3通过实训学会数字系统的设计方法; 4通过实训学习元器件的选择及集成电路手册查询方法; 5通过实训掌握电子电路调试及故障排除方法; 6熟悉数字实验箱的使用方法。 三、设计任务 设计一个可以显示星期、时、分、秒的数字钟。 要求: 1、24小时为一个计数周期; 2、具有整点报时功能; 3、定时闹铃(未完成) 四、设计方案 一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器和定时器组成。干电路系统由秒信号发生 3

数字电子时钟实验报告材料

华大计科学院 数字逻辑课程设计说明书 题目:多功能数字钟 专业:计算机科学与技术 班级:网络工程1班 姓名:刘群 学号: 1125111023 完成日期:2013-9

一、设计题目与要求 设计题目:多功能数字钟 设计要求: 1.准确计时,以数字形式显示时、分、秒的时间。 2.小时的计时可以为“12翻1”或“23翻0”的形式。 3.可以进行时、分、秒时间的校正。 二、设计原理及其框图 1.数字钟的构成 数字钟实际上是一个对标准频率 1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路。图 1 所示为数字钟的一般构成框图。 图1 数字电子时钟方案框图

⑴多谐振荡器电路 多谐振荡器电路给数字钟提供一个频率1Hz 的信号,可保证数字钟的走时准确及稳定。 ⑵时间计数器电路 时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器及时个位和时十位计数器电路构成。其中秒个位和秒十位计数器、分个位和分十位计数器为60 进制计数器。而根据设计要求,时个位和时十位计数器为24 进制计数器。 ⑶译码驱动电路 译码驱动电路将计数器输出的8421BCD 码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。 ⑷数码管 数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管。本设计提供的为LED数码管。 2.数字钟的工作原理 ⑴多谐振荡器电路 555 定时器与电阻R1、R2,电容C1、C2 构成一个多谐振荡器,利用电容的充放电来调节输出V0,产生矩形脉冲波作为时钟信号,因为是数字钟,所以应选择的电阻电容值使频率为1HZ。 ⑵时间计数单元 六片74LS90 芯片构成计数电路,按时间进制从右到左构成从低位向高位的进位电路,并通过译码显示。在六位LED 七段显示起上显示

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

数字电子钟实验报告

咸阳师范学院物理与电子工程学院 课程设计报告 题目: 班级: 姓名: 学号: 指导教师: 成绩: 完成日期:年月

目录 第一章概述 3 第二章数字电子钟的电路原理 4 第三章电路调试与制作11 第四章总结与体会12 第五章附录13

第一章概述 数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,运运超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。 虽然市场上已有现成的数字集成电路芯片出售,价格便宜,使用方便,这里所制作的数字电子可以随意设置时,分的输出,是数字电子中具有体积小、耗电省、计时准确、性能稳定、维护方便等优点。 课程设计目的 (1)加强对电子制作的认识,充分掌握和理解设计个部分的工作原理、设计过程、选择芯片器件、电路的焊接与调试等多项知识。 (2)把理论知识与实践相结合,充分发挥个人与团队协作能力,并在实践中锻炼。 (3)提高利用已学知识分析和解决问题的能力。 (4)提高实践动手能力。

第二章数字电子钟的电路原理 数字电子钟的设计与制作主要包括:数码显示电路、计数器与校时电路、时基电路和闹铃报时电路四个部分。 1.数码显示电路 译码和数码显示电路是将数字钟的计时状态直观清晰地反映出来。显示器件选用FTTL-655SB双阴极显示屏组。在计数电路输出信号的驱动下,显示出清晰的数字符号。 2.计数器电路 LM8560是一种大规模时钟集成电路它与双阴极显示屏组可以制成数字钟钟控电路。 3.校时电路 数字钟电路由于秒信号的精确性和稳定性不可能做到完全准确无误,时基电路的误差会累积;又因外部环境对电路的影响,设计产品会产生走时误差的现象。所以,电路中就应该有校准时间功能的电路。通过手动调节按键,达到校准的目的。 4.定时报警电路 当调好定时间后并按下开关K1(白色键),显示屏右下方有红点指示,到定时时间有驱动信号经R3使VT1工作,即可定时报警输出。 芯片资料 LM8560是一种大规模时钟集成电路它与双阴极显示屏组可以制成数字钟钟控电路。作为时钟,它准确醒目;作为控制开关,它动作无误;在1小时59分钟或59分钟内,能任意暂停,使用十分方便。 仔细观察从0-9的每个数字并比较图1所示的笔段。内部电路参看图2, LM8560各脚功能,参看图3。

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

数字电子钟课程设计实验报告

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计任务书2016/2017 学年第一学期 学生姓名:张涛学号: 李子鹏学号: 课程设计题目:数字电子钟的设计 起迄日期:2017年1月4日~2017年7月10日 课程设计地点:科学楼 指导教师:姚爱琴 2017年月日 课程设计任务书

中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计开题报告2016/2017 学年第一学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号:

指导教师:姚爱琴 2017 年 1 月 6 日 中北大学 信息与通信工程学院 通信工程专业 《电子线路及系统》课程设计说明书2016/2017 学年第二学期 题目:数字电子钟的设计 学生姓名:张涛学号: 李子鹏学号: 指导教师:姚爱琴 2017 年月日

目录 1 引言 (6) 2 数字电子钟设计方案 (6) 2.1 数字计时器的设计思想 (6) 2.2数字电路设计及元器件参数选择 (6) 2.2.2 时、分、秒计数器 (7) 2.2.3 计数显示电路 (8) 2.2.5 整点报时电路 (10) 2.2.6 总体电路 (10) 2.3 安装与调试 (11) 2.3.1 数字电子钟PCB图 (11) 3 设计单元原理说明 (11) 3.1 555定时器原理 (12) 3.2 计数器原理 (12) 3.3 译码和数码显示电路原理 (12) 3.4 校时电路原理 (12) 4 心得与体会 (12) 1 引言 数字钟是一种用数字电子技术实现时,分,秒计时的装置,具有较高的准确性和直观性等各方面的优势,而得到广泛的应用。此次设计数字电子钟是为了了解数字钟的原理,在设计数字电子钟的过程中,用数字电子技术的理论和制作实践相结合,进一步加深数字电子技术课程知识的理解和应用,同时学会使用Multisim电子设计软件。 2数字电子钟设计方案 2.1 数字计时器的设计思想 要想构成数字钟,首先应选择一个脉冲源——能自动地产生稳定的标准时间脉冲信号。而脉冲源产生的脉冲信号地频率较高,因此,需要进行分频,使得高频脉冲信号变成适合于计时的低频脉冲信号,即“秒脉冲信号”(频率为1Hz)。经过分频器输出的秒脉冲信号到计数器中进行计数。由于计时的规律是:60秒=1分,60分=1小时,24小时=1天,就需要分别设计60进制,24进制计数器,并发出驱动信号。各计数器输出信号经译码器、驱动器到数字显示器,是“时”、“分”、“秒”得以数字显示出来。 值得注意的是:任何记时装置都有误差,因此应考虑校准时间电路。校时电路一般

数字电子时钟实验报告

一、设计题目与要求 设计题目:多功能数字钟 设计要求: 1.准确计时,以数字形式显示机器人行走的时、分、秒的时间。 二、设计原理 1数字钟的组成部分 ⑴555定时器组成的方波发生电路 多谐振荡器电路给数字钟提供一个频率1Hz 的信号,可保证数字钟的走时准确及稳定。 ⑵时间计数器电路 时间计数电路分成三个模块,时,分,秒:时用24进制计数器实现;分,秒用60进制计数器实现。 ⑶译码显示电路 译码驱动电路将计数器输出的8421BCD 码转换为数码管需要的逻辑状态,并在显示电路显示相应系数。 2.数字钟的工作原理 ⑴多谐振荡器电路 555 定时器与电阻R1、R2,电容C1、C2 构成一个多谐振荡器,利用电容的充放电来调节输出V0,产生矩形脉冲波作为时钟信号,因为是数字钟,所以应选择的电阻电容值使频率为1HZ。 ⑵时间计数单元

六片74LS90 芯片构成计数电路,按时间进制从右到左构成从低位向高位的进位电路,并通过译码显示。在六位LED 七段显示起上显示对应的数值。 三、元器件 1.实验中所需的器材. Vcc 5V 电源?. 共阴七段数码管6 个?. 74LS90D 集成块6 块?. 74HC00D 6个以及其他元件 LM555CM 1个 电阻 6个 10uF 电容 2个 2.芯片内部结构及引脚图

图2 LM555CM集成块 图374LS90D集成块 五、各功能块电路图 1秒脉冲发生器主要由555 定时器和一些电阻电容构成,原理是利用555 定时器的特性,通过电容的充放电使VC 在高、低电平之间转换。其中555 定时器的高、低电平的门阀电压分别是2/3VCC 和1/3VCC 当电容器充电使VC 的电压大于2/3VCC 则VC 就为高电平,然 而由于反馈作用又会使电容放电。当VC 小于1/3VCC 时,VC 就为低电平。同样由于反馈作用又会使电容充电。通过555 定时器的这一性质我们就可以通过计算使他充放电的周期刚好为1S这样我们就会得到1HZ 的信号。其中555 定时器的一些功能对照后面目录。其中555 定时器组成的脉冲发生器电路见:方波发生器的部分。

微机原理与单片机实验报告

北京联合大学信息学院实验报告 课程名称:微型计算机原理学号: 姓名: 2012 年 6 月 9 日

目录 实验1 EMU8086模拟器的使用 (3) 实验2 数据传送指令的使用 (5) 实验3 多位十六进制加法运算实验 (9) 实验5 循环程序实验 (11) 实验6 由1 到100 求和实验 (13) 实验7 求表中正数_负数_0 的个数实验 (14) 实验8 数据排列实验(冒泡排序) (16) 实验9 系统功能调用(大小写转换) (18) 实验10 阶乘(递归运算) (20) 实验11 ProteusIO工程文件的建立 (21) 实验12 IO口读写实验(245、373) (22) 实验13 8255 接口实验 (24) 实验14 声光报警 (25) 实验总结 (28)

实验1 EMU8086模拟器的使用 一实验要求 利用EMU8086模拟器环境,完成创建源程序文件,运行调试,实验结果的查看二实验目的: 熟悉EMU8086实验环境 三EMU8086环境: 1 模拟器编辑窗口 2 模拟器调试窗口

四实验内容 实验内容1:新建文件。 运行emu8086 1. 新建文件:单击“新建”按钮,选择COM模板,在模拟器编辑窗口中输入如下程序代码: MOV AX, 1020H MOV BX, 2030H MOV AX, BX ADD AX, BX MOV [BX], AX MOV [2032H], AX HLT 2. 编译:单击“编译”按钮,对程序段进行编译; 3. 保存:编译通过,单击“完成”按钮,将其以文件名“EXP1”保存在本地磁盘上。 4. 仿真:单击“仿真”按钮,打开模拟器调试窗口和源文件窗口。 5.在模拟器调试窗口中的寄存器组区,查看数据寄存器AX,BX,CX,DX;段寄存器CS,ES,SS,DS;指令指针寄存器IP;指针寄存器SP,BP;变址寄存器SI,DI;标志寄存器的值。 6.单击“单步前”按钮,单步执行程序,并观察每次单步执行后,相关寄存器值的变化。 7.单击“重载”按钮,将程序重载,并调整指令运行步进时延为400毫秒,单击“全速”按钮,运行程序, 8.程序运行之后,在程序调试窗口中,选择[view]/[memory],查看模拟器环境中,内存单元0700:0100开始的连续10个单元的内容 9.将“存储器”中的地址改为0700:2030,查看开始的四个字节的内容,并思考其内容与程序

四川大学微机原理实验报告..

微机原理实验报告 学院: 专业班级: 姓名 学号

实验一汇编语言编程基础 1.3汇编语言程序上机操作和调试训练 一.功能说明 运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。 运用LINK.EXE文件进行连接,形成*.EXE文件。 仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。 运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。 再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。 二.程序流程图 设置被除数、商的地址指针 设置单位除法次数计数器 取被除数一位作十进制调整 作字节除法、存商 N 被除数各位已除完? Y 显示运算结果 结束 三.程序代码 修改后的程序代码如下: DATA SEGMENT A D B 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX CLD LEA SI,A LEA DI,C MOV CX,N MOV AH,0 LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,C LP2: MOV DL,[DI] ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21H CODE ENDS END START 四.实验感想和收获 通过这次试验,我对微机原理上级试验环境有了初步的认识,可以较为熟练地对汇编语言进行编译,汇编及连接,同时也学会了用DEBUG调试程序,收获很大。 在这次试验中我也遇到了一些困难。在刚开始我发现自己无法打开MASM.EXE,计算机提示是由于版本不兼容。我这才想起来我的操作系统是64位的,和该软件版本不兼容。不过我并没有放弃,经过我的摸索之后,我发现用DOSBOX这个程序可以解决我的电脑运行不了该程序的问题。在解决了第一个难题后,我开始着手改正试验1.3中的语法错误和逻辑错误,但是无论我怎么修改却始终都无法通过编译,并且基本上每句话都有编译错误。根据我多年编程的经验来看,这应该是中文输入法在搞鬼,之后我耐心地把程序重新输了一遍,果然通过了编译,并且之后的连接也进行的很顺利。在用DEBUG调试时发现得出的结果也很正确。 尽管这次的实验内容非常简单,仅仅是教会我们一些基本的操作,但我却明显感觉到了汇编语言和C语言等高级语言所不同的地方。越是底层,基础的东西就越不人性化,用C语言一行代码就能实验的功能在汇编语言中可能要花上数十行。看来汇编语言的学习不是几周就能速成的,必须要有长年累月的积淀才能掌握。

微机原理实验报告E02

【E02】OLED液晶显示实验实验报告 院系:电子科学与技术学院 专业:微电子科学与工程 实验者姓名:万子昂 学号: 35320172200223 实验时间: 2020 年 5 月 11 日 实验报告完成时间:2020 年 5 月 11 日 指导老师意见:

一、实验目的: 1、进一步熟悉MSP432微控制器GPIO引脚的使用 2、学会OLED显示屏与微控制器的接口方法和使用方法 二、实验内容要求: 1、创建工程项目,添加项目文件,配置项目环境等; 2、在OLED屏上显示姓名和学号(字模软件转换汉字) 3、在同一行上显示一段包括中文、英文、数字的内容 三、实验注意事项 1、短路问题:导线、示波器探头、金属笔帽等(断电操作) 2、接插件暴力拔插:顺着接插方向 四、代码: OLED_ShowCHinese(0,0,0); OLED_ShowCHinese(16*1-1,0,1); OLED_ShowCHinese(16*2-1,0,2); OLED_ShowString(0,4,"35320172200223"); {0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00}, {0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00},/*"开",0*/ {0x00,0x00,0x18,0x16,0x10,0xD0,0xB8,0x97,0x90,0x90,0x90,0x92,0x94,0x10,0x00,0x00}, {0x00,0x20,0x10,0x8C,0x83,0x80,0x41,0x46,0x28,0x10,0x28,0x44,0x43,0x80,0x80,0x00},/*"发",1*/ {0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFC,0x24,0xE4,0x24,0x22,0x23,0xE2,0x00,0x00}, {0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x80,0x41,0x26,0x18,0x26,0x41,0x80,0x00},/*"板",2*/ OLED_ShowString(0,0,"MSP432"); OLED_ShowCHinese(50,0,0); OLED_ShowCHinese(50+16*1-1,0,1); OLED_ShowCHinese(50+16*2-1,0,2); 五、实验结果:

数字时钟设计实验报告

电子课程设计题目:数字时钟

数字时钟设计实验报告 设计要求: 设计一个24小时制的数字时钟。 要求:计时、显示精度到秒;有校时功能。采用中小规模集成电路设计。 发挥:增加闹钟功能。 设计方案: 由秒时钟信号发生器、计时电路和校时电路构成电路。 秒时钟信号发生器可由振荡器和分频器构成。 计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。 校时电路采用开关控制时、分、秒计数器的时钟信号为校时脉冲以完成校时。 电路框图: 图一 数字时钟电路框图 电路原理图: (一)秒脉冲信号发生器 秒脉冲信号发生器是数字电子钟的核心部分,它的精度和稳定度决定了数字钟的质量。由振荡器与分频器组合产生秒脉冲信号。 振荡器: 通常用555定时器与RC 构成的多谐振荡器,经过调整输出1000Hz 脉冲。 分频器: 分频器功能主要有两个,一是产生标准秒脉冲信号,一是提供功能 扩展电路所需要的信号,选用三片74LS290进行级联,因为每片为1/10分频器,三片级联好获得1Hz 标准秒脉冲。其电路图如下: 译码器 译码器 译码器 时计数器 (24进制) 分计数器 (60进制) 秒计数器 (60进制) 校 时 电 路 秒信号发生器

图二秒脉冲信号发生器 (二)秒、分、时计时器电路设计 秒、分计数器为60进制计数器,小时计数器为24进制计数器。 60进制——秒计数器 秒的个位部分为逢十进一,十位部分为逢六进一,从而共同完成60进制计数器。当计数到59时清零并重新开始计数。秒的个位部分的设计:利用十进制计数器CD40110设计10进制计数器显示秒的个位。个位计数器由0增加到9时产生进位,连在十位部计数器脉冲输入端CP,从而实现10进制计数和进位功能。利用74LS161和74LS11设计6进制计数器显示秒的十位,当十位计数器由0增加到5时利用74LS11与门产生一个高电平接到个位、十位的CD40110的清零端,同时产生一个脉冲给分的个位。其电路图如下: 图三60进制--秒计数电路 60进制——分计数电路 分的个位部分为逢十进一,十位部分为逢六进一,从而共同完成60进制计数器。当计数到59时清零并重新开始计数。秒的个位部分的设计:来自秒计数电路的进位脉冲使分的个位加1,利用十进制计数器CD40110设计10进制计数器显示秒的个位。个位计数器由0增加到9时产生进位,连在十位部计数器脉冲输入端CP,从而实现10进制计数和进位

微机原理实验报告

微 机 原 理 实 验 报 告 班级: 指导老师:学号: 姓名:

实验一两个多位十进制数相加的实验 一、实验目的 学习数据传送和算术运算指令的用法 熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。 二、实验内容 将两个多位十进制数相加,要求被加数和加数均以ASCII码形式各自顺序存放在以DATA1、DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。 三、程序框图 图3-1

四、参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT 21H ADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUB BYTE PTR [SI],30H SUB BYTE PTR [DI],30H DEC SI DEC DI DEC BX JNZ AD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,[SI] MOV BL,[DI] ADC AL,BL

微机原理实验报告

大学 科技学院 实 验 报 告 课程名称:微机原理实验

实验一数据转换实验 一、实验目的 (1)初步掌握在PC机上建立、汇编、链接和运行8086/88汇编语言程序的过程。 (2)通过对两个验证性试验的阅读、调试、掌握不同进制数及编码相互转换的程序设计方法。 (3)完成程序设计题,加深对数码转换的理解,了解简单程序设计方法。 二、实验内容 1.十六进制数转换为ASCII码 设二字节十六进制数存放于其实地址为3500H的内存单元中,把他们转换成ASCII码后,再分别存入起始地址为350A的四个内存单元中。从书上ASCII码表中可知十六进制数加30H即可得到0H~9H的ASCII码,而要得到AH~FH 的ASCII码,则需再加7H。 请根据所给流程图理清思路,总结出对应的若干要点。将流程图与参考程序相互。根据分析的结果将运行时内存的变化列写出来。 学习并使用MASM或WAVE仿真软件分析程序运行过程中相关寄存器及相应内存的变化情况来验证自己的猜想,以巩固命令的学习,提高编程能力。

图1-1-1

DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 MOV CX,0004H;根据转换个数设定循环次数 ;(两字节十六进制数如6B2C对应有四个用十六进制表示的ASCII码表示,即四个字节) MOV DI,3500H;指向该两字节十六进制数起始地址,此时在调试窗口修改内存字节 MOV DX,[DI];将地址3500H中的内容(6B2C)给DX A1: MOV AX,DX;第一次时DX=6B2C, ;因为想顺序取C、2、6、B,所以需要一个中间变量AND AX,000FH;取低四位,第一次取到C, CMP AL,0AH;判断AL属于0~9,还是A~F JB A2;如果是0~9,则跳转到A2 ADD AL,07H;若属于A~F,再加上07H后也是再加上30H即得到转换。 A2: ADD AL,30H;0~9的ASCII码对应的十六进制比其 ;本身(注意:亦是十六进制)大30H MOV [DI+0AH],AL;将转码后的C,即43H给350A INC DI;将DI指向下一字节,用于存储转码后的值,第一次自增后要存‘2’ PUSH CX;功能是接下来要用到CX作为一个中间变量, ;而刚才已经使用并且接下来还会用到CX的值, ;也可以不用CX,用其他不用的寄存器或者直接立即数形式的。 MOV CL,04H;若直接用立即数,可能不稳定,(原因不详)用一个中间变量。

电子时钟实验报告_电子时钟

电子时钟实验报告 一、实验目的 学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。二、设计任务及要求 利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟,要求:1.在4位数码管上显示当前时间,显示格式为“时时分分”; 2.由LED闪动做秒显示; 3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出音乐,按停止键使可使闹玲声停止。 三、工作原理及设计思路 利用单片机定时器完成计时功能,定时器0计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。 闹铃声由交流蜂鸣器产生,电路如右图,当P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。 四、电路设计及描述 (1)硬件连接部分: 在ZKS-03单片机综合实验仪上有四位共阳LED数码管,其标号分别为LED1~LED4。为了节省MCU的I/O口,采用串行接口方式,它仅占用系统2个I/O 口,即P1.0口和P1.1口,一个用作数据线SDA,另一个用作时钟信号线CLK,

它们都通过跳线选择器JP1相连。 由于采用共阳LED数码管,它的阴极分别通过限流电阻R20~R27连接到控制KD_0~KD_Q7。这样控制8个发光二极管,就需要8个I/O口。但由于单片机的I/O口资源是有限的,因此常采用实验电路所示的串并转换电路来扩充系统资源。串并转换电路其实质是一个串入并处的移位寄存器,串行数据再同步移位脉冲CLK的作用下经串行数据线SDA把数据移位到KD_0~KD_Q7端,这样仅需2根线就可以分别控制8个发光二极管的亮灭。而P0口只能作地址/数据总线,P2口只能作地址总线高8位,P3.0、P3.1作为串行输入、输出接口,实验仪上单片机可用作I/O的口仅有:P1.0--P1.7,8位;P3.2、P3.3、P3.4、P3.5,4位。其中:P1.0用作数据线SDA,P1.1用作时钟信号CLK,所以P1.0和P1.1应该接对应跳线的A位,即跳线的中间和下面相连。P1.3、P1.4、P1.5和P1.6是四个数码管的位扫描线,其中P1.6对应数码管W1,显示小时高位;P1.5对应数码管W2,显示小时低位;P1.4对应数码管W3,显示分钟高位;P1.3对应数码管W4,显示分钟低位。P1.7连接蜂鸣器电路,输出不同频率的方波,使其发出不同的声音。P1.2用来控制秒的闪烁显示。故,P1.2也应该接对应跳线的A位。 其显示电路如下图所示: P3.2、P3.3、P3.4、P3.5分别连接单刀双掷开关S1、S2、S3、S4,从而输入高低电平。将S2S1定义为功能模式选择开关;S3定义为分钟数调整开关;S4定义为小时数调整开关。 当S2S1=00时,显示当前时间,不进行任何操作。 当S2S1=01时,显示当前时间,同时可进行时钟调整,若S3=1,分钟数持续加1,若S4=1,小时数持续加1。

微机原理 实验报告

微机原理与接口技术 实验指导书 班级 学号099074 姓名 安徽工业大学计算机学院

实验一存贮器读写实验 一、实验内容 对指定地址区间的RAM(4000H~4FFH)先进行写数据55AAH,然后将其内容读出再写到5000H~5FFH中。 二、实验步骤 l、将实验系统与PC机连接; 2、在PC机上启功DJ-8086k软件,实验系统进入联机状态; 3、在DJ-8086k软件环境下编辑、调试程序,将程序调试、编译通过; 4、运行程序。 5、稍后按RST键退出,用存贮器读方法检查4000H~43FFH中的内容和5000~53FFH中的内容应都是55AA。 三、实验程序清单 CODE SEGMENT ; ASSUME CS:CODE PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 ORG 1850h START: JMP START0 BUF DB ,,,,, data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1 h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH START0: MOV AX,0H MOV DS,AX MOV BX,4000H MOV AX,55AAH MOV CX,0200H RAMW1: MOV DS:[BX],AX ADD BX,0002H LOOP RAMW1 MOV AX,4000H MOV SI,AX MOV AX,5000H MOV DI,AX

数字时钟的实验报告

北方民族大学 电气信息工程学院 实训报告 课程名称电子作品制作与开发项目实践选修课系列Ⅰ题目数字时钟 院(部、中心)电气信息工程学院 学生姓名何勇 专业测控技术与仪器学号 指导教师签名毛建东周春艳 报告提交时间2010年12月25日 同组人员伏露赵金鹏杨强杨窕 北方民族大学教务处制

评语: 成绩: ⑴答辩:(%) ⑵报告:(%) ⑶平时:(%) 总成绩: 指导教师: 年月日

目录 一:数字时钟的要求与任务........................................................................... 错误!未定义书签。二:数字时钟的原理....................................................................................... 错误!未定义书签。 1数字时钟结构........................................................................................ 错误!未定义书签。 AT89S51介绍.................................................................................... 错误!未定义书签。 2 、数字钟的电路结构组成................................................................... 错误!未定义书签。 3、单元电路设计..................................................................................... 错误!未定义书签。 1)译码驱动及显示单元................................................................. 错误!未定义书签。 2)校时控制电路............................................................................. 错误!未定义书签。 3)5V稳压直流电源电路 ............................................................... 错误!未定义书签。 4)晶振电路和复位电路................................................................. 错误!未定义书签。 三、数字时钟的原理图................................................................................... 错误!未定义书签。 四、数字时钟Protel整体原理图及PCB板................................................... 错误!未定义书签。 五、数字时钟的程序....................................................................................... 错误!未定义书签。 1、流程图................................................................................................. 错误!未定义书签。 2、程序..................................................................................................... 错误!未定义书签。 六、元件清单................................................................................................... 错误!未定义书签。 七、制作的心得............................................................................................... 错误!未定义书签。 八、实物图....................................................................................................... 错误!未定义书签。

微机原理实验报告冒泡排序

一、实验目的 (1)学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。 (2)理解并掌握各种指令的功能,编写完整的汇编源程序。 (3)进一步熟悉DEBUG的调试命令,运用DEBUG进行调试汇编语言程序。 二、实验内容及要求 (1)实验内容:从键盘输入五个有符号数,用冒泡排序法将其按从小到大的顺序排序。 (2)实验要求: ①编制程序,对这组数进行排序并输出原数据及排序后的数据; ②利用DEBUG调试工具,用D0命令,查瞧排序前后内存数据的变化; ③去掉最大值与最小值,求出其余值的平均值,输出最大值、最小值与平均值; ④用压栈PUSH与出栈POP指令,将平均值按位逐个输出; ⑤将平均值转化为二进制串,并将这组二进制串输出; ⑥所有数据输出前要用字符串的输出指令进行输出提示,所有数据结果能清晰显示。 三、程序流程图Array (1)主程序:MAIN

(2)

就是 NAME BUBBLE_SORT DATA SEGMENT ARRAY DW 5 DUP(?) ;输入数据的存储单元 COUNT DW 5 TWO DW 2 FLAG1 DW 0 ;判断符号标志 FLAG2 DB 0 ;判断首位就是否为零的标志FAULT DW -1 ;判断出错标志 CR DB 0DH,0AH,'$' STR1 DB 'Please input five numbers seperated with space and finished with Enter:','$' STR2 DB 'The original numbers:','$' STR3 DB 'The sorted numbers:','$' STR4 DB 'The Min:','$' STR5 DB 'The Max:','$' STR6 DB 'The Average:','$' STR7 DB 'The binary system of the average :','$' STR8 DB 'Input error!Please input again!''$' DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,ES:DATA START: PUSH DS AND AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,09H ;9号DOS功能调用,提示输入数据 INT 21H CALL CRLF ;回车换行 REIN: CALL INPUT ;调用INPUT子程序,输入原始数据CMP AX,FAULT ;判断就是否出错, JE REIN ;出错则重新输入

相关文档
最新文档