当前位置:文档之家› 小学期单片机实验报告-李雨薇

小学期单片机实验报告-李雨薇

小学期单片机实验报告-李雨薇
小学期单片机实验报告-李雨薇

小学期单片机实验报告

选题:基于单片机A VR的音乐多功能

数字时钟

班级:2012211106

学号:2012210178

姓名:李雨薇

其他小组成员:廖志杰,沈晨

Email:yuwei9366@https://www.doczj.com/doc/aa5352048.html,

实验时间:2014年9月30日

目录一:设计梗概

1.1设计目的

1.2设计思路

1.3功能设计说明

二:硬件电路设计

2.1音乐闹钟总体框图

2.2单片机分块实验原理图

2.3实验总原理图

三:软件代码设计

3.1软件程序简介

3.2程序流程及功能

3.3程序源代码

四:实验结果展示

4.1实验出现问题

4.2实验结果展示

4.2.1 实验板

4.2.2 欢迎界面

4.2.3 时间显示

4.2.4时间设定

4.2.5 闹钟设定

4.3 实验总结

一:设计梗概

1.1设计目的

(1)熟悉单片机各个端口,各个芯片的管教以及逻辑动能

(2)掌握各种器材的逻辑功能及使用方法,例如实验中所用到的Amega16,液晶显示屏,4*4按键,蜂鸣器及喇叭

(3)通过单片机的定时器的定时和计数器的计数原理,设计简单的计时器系统,有正确的计时,暂停,清零的功能,并同时可以用液晶显示屏显示

(4)学会对一个复杂的设计模块化,通过对若干功能问题的解决,达到整个程序的实现1.2设计思路

通过视频的学习,设计方案是以A Tmega16单片机为核心,采用LCD1602液晶显示屏,4*4按键,蜂鸣器,包括时钟调整模块,闹钟模块,键盘时间预设值等模块,所构建的数字多功能闹钟,能够实现时钟的时分秒的显示及重置,闹钟时间设置,时间模式转换,同时用喇叭来进行定时提醒和铃音播放。即可以将闹钟分为液晶显示屏,按键,喇叭,单片机芯片四个模块。

1.3功能设计说明

(1)时间设置

采用C语言程序设计,使单片机控制液晶屏显示时,分,秒,当秒计数计满60时就向分进位,分计满60时就向时进位。时间显示有24小时模式和12小时模式,24小时制按小时“23翻0”规律计数,12小时制按“11翻0”规律计数。同时有上午AM和下午PM标志提醒。

(2)LCD液晶显示

实用液晶显示时间,年月日可以自行设置,格式为00—00—00,例如2014—10—01,时间也可以自行设置,格式为00:00:00,星期以数字显示。

(3)校时功能

可以分别对时,分,秒进行单独校时,使其校正到标准时间

(4)闹钟功能

当时间到达整点,蜂鸣器进行蜂鸣报时,设置闹钟后,达到闹钟设定时间播放音乐,闹铃音乐可以在任何时间按任意键强行停止。

(5)通过控制4*4键盘,实现时间调整,闹钟设置,音乐选择,24制时间转换等功能,并同时在液晶屏上显示。

二:硬件电路设计

2.1闹钟总体框图

2.2模块说明

2.2.1Atmega16单片机

ATmega16 有如下特点:高性能,低功耗的8位AVR微处理器,32个8位通用工作寄存器,工作于16MHz时性能高达16MIPS,只需两个时钟周期的硬件乘法器,通过片上的Boot程序实现系统内编程真正的同时读写操作,符合JTAG标准的边界扫描功能,拥有两个独立预分频器和比较器功能的8位计数器,一个具有预分频器,比较功能和捕捉功能的16位计数器,有32个可变成I/O口,上电复位以及可编程的掉电检测。

2.2.2 LCD1602

LCD液晶显示模块采用LCD1602型号,1602液晶屏是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字,2行16个字,2行20个字等等,常用的为2行16个字。

如表所示,整个液晶屏采用标准的16脚接口,其中VSS为电源地,VDD接5V正电源,V0为液晶显示屏对比度调整端,直接节电源正极时对比度最弱,姐弟时对比度最高。RS为寄存器选择端,高电平时选择数据寄存器,低电平是选择指令寄存器。RW为读写信号线,高电平是进行读操作,低电平是进行写操作。当RS,RW共同为低电平时可以写入指令或者显示地址,当RS为低电平,RW为高电平时可以读忙信号。当RS为高电平,RW为低电平时可以写入数据。E端为使能端,当E端由低电平跳变成高电平时,液晶屏执行命令。D0-D7为8位双向数据线。

2.2.3 4*4键盘

键盘上对应有16个按键,从0到F,按下相应的键会在液晶屏上显示相应的数字,其中K0到K15是采用4*4的方式连接的。单片机的整一个8位端口可以构成 4*4=16 个矩阵式按键,相比独立式按键接法多出了一倍,而且线数越多区别就越明显,假如再多加一条线就可以构成 20个按键的键盘,但是独立式按键接法只能多出1个按键。由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的,矩阵式结构的键盘显然比独立式键盘复杂一些,单片机对其进行识别也要复杂一些。

0 1 2 3 ---PA0

4 5 6 7 ---PA1

8 9 A B ---PA2

C D E F ---PA3

| | | |

PA4 PA5 PA6 PA7

键盘行列接口示意图

2.2.4 喇叭

PD5口控制控制喇叭工作。当时钟当前的时间和设定闹钟时间一致时,喇叭电路导通,发出音乐铃声。随意按下一个键,喇叭停止工作。

电路如下图:

2.3总原理图

三:软件设计

3.1软件程序内容

本设计的软件程序包括主程序、中断子程序、铃声子程序、时钟显示子程序、延时子程序等等。键盘扫描子程序,还另外设计了去抖动延时处理程序来防止干扰。

3.2程序功能及说明

3.2.1开机后,显示开机动画,之后自动调动显示从23:50:00开始显示。3.2.2按下按键A时,进行模式调整,可以切换24小时制和12小时制,并在液晶屏右下角显示AM,PM,以标志上下午。

3.2.3按下B键进行时间调整,可以调整时,分,秒,通过按键盘上的数字,同时显示在液晶屏上进行调整。设置时,时间暂时处于静止状态。

3.2.4按下C或D键可以进行闹钟设置,同设置时间一样,但是设置完之后,会调回原来时间,继续显示。

3.2.5按下E键进行闹铃开关选择,只有闹铃开启的情况下,才会播放音乐。同时闹铃响的时候,可以用任意键将其中断,也可以不停止,则闹铃播放完之后,会自动停止。

3.2.6 时钟显示程序流程图

3.3程序代码

3.3.1程序源代码

Main.h

void set_time();

void set_clock(uchar clock[]);

void add(uchar time[]);

void BCD_ASCII(uchar BCD,uchar ptasc[]);

void Disp_time(uchar time[]);

uchar music(uchar m);

void di();

void welcome();

void main(void);

1602.h

//************1602宏定义********//

#define LCDa_CTRL PORTD //1602控制端口定义

#define LCDa_CTRL_DDR DDRD //控制端口方向寄存器定义

#define LCDa_RS PD1 //定义三个控制引脚

#define LCDa_RW PD2

#define LCDa_E PD3

#define LCDa_L1 0x80 //第一行的地址:0x80+addr ,addr为列数

#define LCDa_L2 0xC0 //第二行的地址:0x80+0x40+addr

#define LCDa_CGRAM_ADDR 0x40 //CGRAM的开始地址

#define LCDa_CGMAX 64 //CGRAM存储的最大字节数

#define LCDa_SET_RS LCDa_CTRL|=BIT(LCDa_RS) //三个控制管脚的控制操作

#define LCDa_SET_RW LCDa_CTRL|=BIT(LCDa_RW)

#define LCDa_SET_E LCDa_CTRL|=BIT(LCDa_E)

#define LCDa_CLR_RS LCDa_CTRL&=~BIT(LCDa_RS)

#define LCDa_CLR_RW LCDa_CTRL&=~BIT(LCDa_RW)

#define LCDa_CLR_E LCDa_CTRL&=~BIT(LCDa_E)

#define LCDa_DO PORTB //输出数据总线端口定义

#define LCDa_DI PINB //输入数据总线端口定义

#define LCDa_DATA_DDR DDRB //数据总线方向寄存器定义

#define LCDa_FUNCTION 0x38 // 液晶模式为8位,2行,5*8字符

#define iDat 1 //数据标志

#define iCmd 0 //指令标志

#define LCDa_CLS 0x01 // 清屏

#define LCDa_HOME 0x02 // 地址返回原点,不改变DDRAM 内容

#define LCDa_ENTRY 0x06 // 设定输入模式,光标加,屏幕不移动

#define LCDa_C2L 0x10 // 光标左移

#define LCDa_C2R 0x14 // 光标右移

#define LCDa_D2L 0x18 // 屏幕左移

#define LCDa_D2R 0x1C // 屏幕又移

#define LCDa_ON 0x0C // 打开显示

#define LCDa_OFF 0x08 // 关闭显示

#define LCDa_CURON 0x0E // 显示光标

#define LCDa_CURFLA 0x0F // 打开光标闪烁

void Delayus(uint US);

void Delayms(int ms);

void write_com(uchar com);

void write_dat(uchar dat);

void LCD1602_portini(void);

uchar LCD1602_readbyte(uchar DatCmd);

void LCD1602_sendbyte(uchar DatCmd, uchar dByte); void LCD1602_sendstr(uchar *ptString);

void LCD1602_clear(void);

uchar LCD1602_readBF(void);

void LCD1602_gotoXY(uchar Row, uchar Col);

void LCD1602_initial(void);

Jp.h

uchar key_press();

uchar key_scan();

//键盘数组

const char jianpan[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41, 0x42,0x43,0x44,0x45,0x46};

Head.h

#include

#include

#define uchar unsigned char

#define uint unsigned int

Main.c

#include "head.h"

#include "main.h"

#include "jp.h"

#include "1602.h"

#define TRUE 1

#define FALSE 0

uchar time_24[7]={0x50,0x58,0x23,0x24,0x09,0x01,0x12};

//设置的秒,分,时,日,月,星期,年

uchar time_12[7]={0x50,0x58,0x23,0x24,0x09,0x01,0x12};

//设置的秒,分,时,日,月,星期,年

uchar clock[7]={0x50,0x58,0x23,0x24,0x09,0x01,0x12};

//设置闹钟的秒,分,时,日,月,星期,年

uchar clock1[7]={0x50,0x58,0x23,0x24,0x09,0x01,0x12};

//设置闹钟的秒,分,时,日,月,星期,年

uchar key,n=0;

const uchar table[]="WELCOME, MY BOSS";

const uchar table1[]=" W AITING FOR YOU ";

uint music_data[][2]=

{

{587,800},{698,800},{466,1600},{523,800},{587,800},{349,1600}, {466,800},{523,800},{587,800},{698,800},{523,3200},{587,800}, {698,800},{466,1600},{523,800},{587,800},{392,1600},{523,800}, {349,800},{523,800},{587,800},{466,1600},{784,1600},{698,1600}, {784,1600},{466,1600},{587,800},{392,800},{587,1200},{698,400}, {523,3200},{587,800},{698,800},{466,1600},{523,800},{587,800}, {392,1600},{523,800},{349,800},{523,800},{587,800},{466,3200}, {0,0}

};

uint music_data1[][2]=

{

{262,100},{294,100},{330,100},{262,100},{262,100}, {294,100},{330,100},{262,100},{330,100},{349,100}, {392,200},{330,100},{349,100},{392,200},{392,75}, {440,25},{392,75},{349,25},{262,100},{392,100},

{440,75},{392,25},{349,75},{330,25},{262,100},

{294,100},{196,100},{262,100},{294,200},{196,100}, {262,100},{294,200},{0,0}

};

//乐谱

///////////////////设置闹钟时间/////////////////////

void set_time()

{

uchar i,j,tmp1,tmp2;

uchar newtime[]={0x50,0x58,0x23,0x24,0x09,0x01,0x12};

write_com(0x38); //设置显示

Delayms(10);

write_com(0x01); //清屏

Delayms(10);

write_com(0x80+0x05);

write_com(0x0f); //显示光标Delayms(10);

write_com(0x06); //显示字符开关Delayms(10);

//时

j=0;

while(j<1)

{

if(key_press())

{

key=key_scan();

write_com(0x80+0x05);

write_dat(jianpan[key]);//读取键盘的值

if(key<=2)

tmp1=key*16;

else

tmp1=0;

j++;

}

}

Delayms(100);

while(j<1)

{

if(key_press())

{

key=key_scan();

write_com(0x80+0x06);

write_dat(jianpan[key]);

tmp2=key;

j++;

}

}

newtime[2]=tmp1+tmp2; write_com(0x80+0x07); write_dat(':');

//分

Delayms(100);

j=0;

while(j<1)

{

if(key_press())

key=key_scan();

write_com(0x80+0x08);

write_dat(jianpan[key]);

if(key<=6)

tmp1=key*16;

else

tmp1=0;

j++;

}

}

j=0;

Delayms(100);

while(j<1)

{

if(key_press())

{

key=key_scan();

write_com(0x80+0x09);

write_dat(jianpan[key]);

tmp2=key;

j++;

}

newtime[1]=tmp1+tmp2;

write_com(0x80+0x0a); write_dat(':');

//秒

Delayms(100);

j=0;

while(j<1)

{

if(key_press())

{

key=key_scan();

write_com(0x80+0x0b);

write_dat(jianpan[key]);

if(key<=6)

tmp1=key*16;

else

tmp1=0;

j++;

}

Delayms(100);

j=0;

while(j<1)

{

if(key_press())

{

key=key_scan();

write_com(0x80+0x0c);

write_dat(jianpan[key]);

tmp2=key;

j++;

}

}

newtime[0]=tmp1+tmp2;

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

{

time_24[i]=newtime[i];

}

Disp_time(time_24);

}

//////////////////////////////设置闹钟闹铃的时间///////////////// void set_clock(uchar clock[])

{

uchar i,j,tmp1,tmp2;

add(time_24);

write_com(0x38);

Delayms(100);

write_com(0x01); //清屏

Delayms(100);

write_com(0x80+0x05);

write_com(0x0f);

Delayms(100);

write_com(0x06);

Delayms(100);

j=0; //小时的设置

while(j<1)

{

单片机实验报告

PIC单片机原理与应用实验报告 学校: 学院: 班级: 姓名: 学号: 指导教师:

实验一I/O端口实验 一、实验目的 (1)掌握MPLAP IDE集成开发环境的基本操作。 (2)掌握单片机的I/O端口的设计方法。 (3)掌握在线调试器的使用方法。 (4)学会查阅相关数据手册。 二、实验仪器设备 (1)PC机一台; (2)MPLAP IDE开发软件一套; (3)PICkit3在线调试器一套; (4)APP009实验板一块; 三、实验要求 (1)设计发光LED灯闪烁程序,下载调试,验证功能。 (2)设计流水灯程序,或其他花样彩灯程序,下载调试,验证功能。 (3)设计按按键加1计数程序,下载调试,验证功能。 四、实验步骤 (1)连接在线调试器PICkit3、APP009实验板和计算机; (2)打开MPLAP IDE集成开发环境软件,点击Debugger>Select Tools>PICkit 3 选择调试工具; (3)点击Debugger>Settings,在Settings窗口中点击Power栏,选择由PICkit3向实验板供电; (4)完成实现发光LED灯闪烁实验; 程序代码: #include void delay(void); int main() { while(1) { TRISEbits.TRISE0 = 0; //RE0设置为输出(1输入,0输出); https://www.doczj.com/doc/aa5352048.html,TE0 =1; //RE0=1输出高电平+5V,亮灯 delay(); //延时 https://www.doczj.com/doc/aa5352048.html,TE0 =0; //RE0=0输出低电平0V,灭灯 delay(); //延时 } } void delay(void) { long int i; for (i=0;i<65000;i++); } 实验现象:将程序下载到实验板上,运行程序,LED闪烁,通过改变延时函数改变延时时间,进而可以改变LED闪烁的频率。

单片机实验报告

院系:计算机科学学院专业:智能科学与技术年级: 2012 学号:2012213865 姓名:冉靖 指导教师:王文涛 2014年 6月1日

一. 以下是端口的各个寄存器的使用方式: 1.方向寄存器:PxDIR:Bit=1,输出模式;Bit=0,输入模式。 2.输入寄存器:PxIN,Bit=1,输入高电平;Bit=0,输入低电平。 3.输出寄存器:PxOUT,Bit=1,输出高电平;Bit=0,输出低电平。 4.上下拉电阻使能寄存器:PxREN,Bit=1,使能;Bit=0,禁用。 5.功能选择寄存器:PxSEL,Bit=0,选择为I/O端口;Bit=1,选择为外设功能。6.驱动强度寄存器:PxDS,Bit=0,低驱动强度;Bit=1,高驱动强度。 7.中断使能寄存器:PxIE,Bit=1,允许中断;Bit=0,禁止中断。 8.中断触发沿寄存器:PxIES,Bit=1,下降沿置位,Bit=0:上升沿置位。 9.中断标志寄存器:PxIFG,Bit=0:没有中断请求;Bit=1:有中断请求。 二.实验相关电路图: 1 MSP430F6638 P4 口功能框图: 主板上右下角S1~S5按键与MSP430F6638 P4.0~P4.4口连接: 2按键模块原理图: 我们需要设置两个相关的寄存器:P4OUT和P4DIR。其中P4DIR为方向寄存器,P4OUT 为数据输出寄存器。 主板上右下角LED1~LED5指示灯与MSP430F6638 P4.5~P4.7、P5.7、P8.0连接:

3 LED指示灯模块原理图: P4IN和P4OUT分别是输入数据和输出数据寄存器,PDIR为方向寄存器,P4REN 为使能寄存器: #define P4IN (PBIN_H) /* Port 4 Input */ #define P4OUT (PBOUT_H) /* Port 4 Output */ #define P4DIR(PBDIR_H) /* Port 4 Direction */ #define P4REN (PBREN_H) /* Port 4 Resistor Enable */ 三实验分析 1 编程思路: 关闭看门狗定时器后,对P4.0 的输出方式、输出模式和使能方式初始化,然后进行查询判断,最后对P4.0 的电平高低分别作处理来控制LED 灯。 程序流程图: 2 关键代码分析: #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P4DIR |= BIT5; // 设置4.5口为输出模式 P4OUT |= BIT0; // 选中P4.0为输出方式 P4REN |= BIT0; // P4.0使能 while (1) // Test P1.4 { if (P4IN & BIT0) //如果P4.0为1则执行,这是查询方式按下去后是低,否则为高

单片机第一次实验报告

单片机第一次实验报告 姓名: 学号: 班级:

实验报告 课程名称:微机原理与接口技术指导老师:学生姓名:学号:专业:自动化日期:20140327 地点: 实验一实验名称 1. 实验目的和要求 1.掌握keil软件和STC-ISP 软件的使用方法 2.点亮第一个发光管. 3.点亮1,3,5,7发光管 4.尝试让第一个发光管闪烁. 2. 主要仪器设备 1.一台pc机 2.一个单片机开发板 点亮第一个发光管. #include void main () { P1 &=0xFE; while(1) } 点亮1,3,5,7发光管 void main () { P1 &=0xAA;

while(1) } 尝试让第一个发光管闪烁. #include #define uint unsigned int #define uchar unsigned char void delay_ms(uint timer) { uchar j = 0; while(timer--) { for(j = 124;j>0;j--) { ; } } } void main (void) { while(1) { P1 &=0xFE; delay_ms(100); P1 |=0x01; delay_ms(100); } }

实验心得:这第一次试验,没准备,所以这次实验一上机啥都不会,也不知道该做啥,在同学的帮助下安装了程序和驱动,代码也是问同学才明白的。第一个代码,通过很顺利,但是测试第二个代码的时候电脑无法连接板子,后来重新安装了驱动才就能连接了。虽然感觉还是好多不懂的,不过还是学到了一些东西,有一点成就感。

单片机实验报告

仲恺农业工程学院实验报告纸 自动化学院(院、系)工业自动化专业144班组单片机与嵌入式系统实验课学号201421714406姓名黄国盛实验日期2016年11月05日教师评定 实验一Keil C51集成开发环境的使用练习 一、实验目的 熟悉Keil C51集成开发环境的使用方法。 二、实验设备及器件 IBM PC机一台 三、实验内容 按照Keil C51软件的使用说明进行Keil C51集成开发环境的安装和使用练习,然后按照以下内容建立并编译产生HEX文件。 ORG0000H LJMP Main ORG00F0H Main: MOV R7,#0 Loop: MOV R6,#0 DJNZ R6,$ DJNZ R6,$ DJNZ R6,$ DJNZ R6,$ DJNZ R7,Loop;延时 CPL P1.0;P1.0取反 CPL P1.1;P1.1取反 CPL P1.2;P1.2取反 CPL P1.3;P1.3取反 CPL P1.4;P1.4取反

CPL P1.5;P1.5取反 CPL P1.6;P1.6取反 CPL P1.7;P1.7取反 SJMP Main END 四、实验要求 熟练掌握Keil C51集成开发环境的工程建立、编辑与编译功能。 五、实验预习要求 认真阅读Keil C51软件的使用说明。 六、实验思考题 试写一条把片内RAM50H~59H单元清零的程序。 实现程序如下: ORG0000h LJMP Main ORG0100H Main:MOV R0,#50H;立即数50H(内部RAM地址)传送到R0中 MOV R1,#10;立即数10(循环次数为10次)传送到R1中 MOV A,#0;立即数0传送到A,中将累加器A的值清0 LOOP:MOV@R0,A;将R0内容所指向的单元清0 INC R0;R0内容加1,修改地址指针 DJNZ R1,LOOP;减1不为0判断,若为真跳回循环,否,则运行下一语句 END;结束 七、实验总结 通过实验,熟悉80C51指令系统,熟悉Keil C51集成开发环境的使用方法,熟练掌握Keil C51集成开发环境的工程建立、编辑与编译功能。加深对内部存储器读写的认识。

单片机实验报告

单片机实验报告 班级:信科09-3 姓名:王艳辉 学号:08093581 指导老师:陈岱 完成时间:2012年1月8日

实验一 I/O接口P1、P3口实验 一,实验题目 1,用P1口做输出,接八只发光二极管,编写程序,使发光二极管循环点亮。 2,用P3口做输入口,接八个扭子开关,通过P1口在实验箱上LED 灯上输出,编写程序读取开关状态,将此状态,在发光二极管上显示出来。 二,实验目的 1.熟悉使用CPLD实验箱进行单片机实验的方法。 2.设计出符合实验要求的CPLD硬件电路。 3.学习单片机仿真开发软件Keil 51的使用方法。 4.学习MCS-51汇编语言编程方法。 5.学习Pl口的使用方法。 6.学习延时子程序的编写和使用。 三,实验准备 P1和P3口为准双向口,Pl、P3的每一位都能独立地定义为输出线或输入线,作为输入时,必须向锁存器相应位写入“l”,该位才能作为输入。803l中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写入过“0”,在需要时应写入一个“l”使它再成为一个输入。再来看一下延时程序的实现。现常用的有两种方法:一是用定时器中断来实现,一是用指令循环来实现。在系统时间允许的情况下可以采用后一种方法。根据实验系统的工作主频,计算出延时0.1s的

时间常量,编制延时程序: MOV R7, #200 (1) DEl:MOy R6,#X (2) DE2:DJNZ R6,DE2 (3) DJNZ R7,DEl (4) 上面MOV、DJNZ指令均需两个机器周期,所以每执行一条指令需1÷0.256us现求出X值: (X*1/0.256+1/0.256+l/0.256)*200+l/0.256=0.1*10^6。解出X=l26。代入上式可知实际延时约0.100O04s,近似符合要求。 四,实验步骤 (1)打开MAX+PLUSⅡ CPLD实验开发系统。 (2)点击File菜单Project子菜单之Name项,出现Project Name 对话框。为当前的实验选择恰当的路径并创建项目名称”E:\AT8031”。(3)点击File菜单之New项,出现对话框,为选择输入方式,选择Graphic Editor File。出现图形编辑窗口。 (4)双击空白编辑区,出现Enter Symbol 对话框。 (5)从Symbol Libraries项中选择mf子目录(双击),在prim子目录中选择输入脚input 和输出引脚output。 (6)在图形编辑窗口中的左侧点击连线按钮,并完成对电路的连线。(7)在引脚的PIN_NAME处左键双击使之变黑,键入引脚名称。

单片机实训心得体会

单片机实训心得体会 篇一: 通过今次单片机实训,使我对单片机的认识有了更深刻的理解。系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现了基本时钟显示功能、时间调节功能,能实现本设计题目的基本要求和发挥部分。 由于时间有限和本身知识水平的限制,本系统还存在一些不够完善的地方,要作为实际应用还有一些具体细节问题需要解决。例如:不能实现只用两个按键来控制时钟时间,还不能实现闹钟等扩展功能。 踉踉跄跄地忙碌了两周,我的时钟程序终于编译成功。当看着自己的程序,自己成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。我相信其中的酸甜苦辣最终都会化为甜美的甘泉。 但在这次实训中同时使我对汇编语言有了更深的认识。当我第一次接触汇编语言就感觉很难,特别是今次实训要用到汇编语言,尽管困难重重,可我们还是克服了。这次的实训使培养了我们严肃认真的做事作风,增强了我们之间的团队合作能力,使我们认识到了团队合作精神的重要性。 这次实训的经历也会使我终身受益,我感受到这次实训是要真真正正用心去做的一件事情,是真正的自己学习的过

程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究,就不会有所突破。希望这次的经历能让我在以后学习中激励我继续进步。 篇二:单片机实验心得 通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。 作为一名自动化专业的快大三学生,我觉得做单片机实习是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力,如何把我们所学的专业基础课理论知识运用到实践中去,我想做类似实习就为我们提供了良好的实践平台 学习单片机没有捷径,不能指望两三天就学会,要坚持不懈,重在积累单片机是一门应用性和实践性很强的学科,要多动手,多做实验。 (4)要学会参考别人的程序,减少自己琢磨的时间,迅速提高自己的编程能力。 (5)碰到问题可以借助网络来搜寻答案和对自己有帮助的问题,一定会有所收获。

杭电自动化单片机实验报告

单片机原理与应用及 C51程序设计 实验报告 实验名称:单片机技术实验 实验一继电器控制输出实验 一、实验目的 1.掌握STC12C5A16S2单片机的最基本电路的设计; 2.了解单片机I/O端口的使用方法; 3.了解继电器和蜂鸣器控制电路以及小电压控制大电压的方法。

二、实验要求 1.利用STC12C5A16S2单片机的P1.2、P1.3口作按钮S9和S10输入,P1.0 和P1.1口作开关量输出,并分别控制一个5V的继电器和蜂鸣器。 2.当S9闭合时,P1.0控制继电器闭合并控制灯泡闪亮;当S9断开时,继 电器触电断开,灯泡不亮; 3.当S10闭合时,P1.1控制蜂鸣器闭合并发出声音;当S10断开时,蜂鸣 器不响。 三、电路 四、原理说明 Q1、Q2为9012三极管即PNP型,低电平导通,当S9或S10按下时,相应的IO口拉低,当P1.0或P1.1赋0时即可控制继电器的吸合活着蜂鸣器的发声。 五、程序代码 #include sbit L1=P1^1; sbit L2=P1^2; sbit L3=P1^3; sbit L0=P1^0;//定义位变量 void delay() { int i,j; for(i=0;i<250;i++) for(j=0;j<250;j++);//利用系统时钟,定义延时函数 }

void main () { int n=20; while(1) //不断循环检测 { if(L2==0) //判断S9输入 { while(n--) { L0=0; delay(); L0=1; delay(); //灯泡以2*delay为周期闪亮 } n=20; } if(L3==0) //判断S10闭合 { while(n--) { L1=0; delay(); L1=1; delay(); //蜂鸣器以2*delay为周期发声 } n=20; } } } 实验二 LED轮换点亮实验 一、实验目的 1.掌握STC12C5A16S2单片机的I/O电路设计; 2.学习SN74HC573数据锁存输出方法。 二、实验要求 1.利用SN74HC573对STC12C5A16S2单片机的P0进行扩展,驱动LED 控制输出; 2.编写程序,使P0.0~P0.7上的发光二极管循环点亮;P2.7控制 SN74HC573芯片的使能; 三、电路

工作报告之大学单片机实验报告

大学单片机实验报告 【篇一:单片机实验报告】 单片机实验报告 姓名:班级:学号:任课教师:上课地点: 实验一流水灯实验 一、实验目的及要求 1、闪烁的led; 2、从左到右的流水灯; 3、8只led左右来回点亮; 4、led模拟交通灯。 要求1:led按设定的时间间隔闪烁 要求2:接在p0口的8个led从左到右循环依次点亮,产生走马灯效果要求3:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果; 二、实验原理电路图1、 电路图2、 三、源程序 要求1: #includereg51.h #define uchar unsigned char #define uint unsigned int sbit led=p1^0; //延时 void delayms(uint x) { uchar i; while(x--) {for(i=0;i120;i++); } } //主程序 void main() { while(1) {led=~led;delayms(150); } } 要求2: #include reg51.h #include intrins.h //包含程序中的_cror_(p0,y) #define uchar unsigned char #define uint unsigned int uchar led; void delay(unsigned int i) { uint j; uchar k; for(j=i;j0;j-- )for(k=125;k0;k--); } void main() { led=0x7f;//只亮第一个 delay(1000); while(1) { p0=led; delay(500); led=_cror_(led,1);//p0逐步右移一位。} } 要求3: #include reg51.h

单片机实验报告

南京晓庄学院电子工程学院 实验报告 课程名称:单片机系统设计与应用 姓名:森 专业:电子信息科学与技术 年级:14级 学号:05 2016年12 月1 日

实验项目列表 序号实验项目名称成绩指导教师 1 单片机仿真软件的使用 2 单片机I/O接口应用实验——流水灯 3 外部中断实验——工业顺序控制模拟 4 定时/计数器实验——矩形波 5 定时/计数器实验——计数器 6 综合实验 7 8 9 10 注: 1、实验箱端口为com6。 2、芯片选择切换到51 3、停止运行使用实验箱上的复位按钮

实验室号:___ 实验时间:成绩: 实验一仿真软件的使用 1.实验目的和要求 1)熟悉Keil C51软件界面,以及编辑、编译、运行程序的步骤; 2)掌握单片机仿真软件使用和调试的方法。 2.实验原理 Keil C51软件使用 在Keil C51集成开发环境下,建立一个工程并编辑源程序,熟悉Keil C51集成开发环境下各种菜单、命令的使用。 3.主要仪器设备(实验用的软硬件环境) 安装有Keil C51软件的PC机1台 4.操作方法与实验步骤 Keil C51软件使用 (1)建立用户文件夹 (2)建立工程 (3)建立文件并编码。输入以下源程序,并保存在项目所在的目录中 (4)把文件加入工程中 (5)编译工程。编译时观察在界面下方的“Build”页中的到编译错误信息和使用的系统资源情况等。 (6)调试。利用常用调试命令,如复位、运行、暂停、单步、单步跳过、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令进行调试,观察并分析调试结果。 (7)目标代码文件的生成。运行生成相应的.HEX文件。 5.实验内容及程序 1)从DATA区地址起始地址为40H的连续10个内存单元的内容传送到XDATA区起始地址为2000H的10个内存单元中。 注意:DATA区地址起始地址为40H的连续10个内存单元必须先赋初值。 P83-5源程序 #include #define uchar unsigned char xdata unsigned char buffer1[10]_at_ 0x2000; //在xdata区定义数组变量BUF1,首地址为2000H data unsigned char buffer2[10]_at_ 0x40; //在data区定义数组变量BUF2,首地址为40H void main(void)

单片机实验报告

汇编语言程序设计 1)编译后,系统提示:目标越界,改为AJMP后编译通过,将ORG 07FFH 改为0800H, 系统提示:目标越界,这说明AJMP可以在2KB 范围内无条件转移。 2.改为LJMP编译通过,这说明LJMP可以在64KB 范围内无条件转移。 3.将LJMP LP1改为SJMP LP0,机器码为80FC,其中FC为偏移量,它是一个补码,01H~7FH说明向PC(增大√、减小)方向跳,80H~FFH说明向PC(增大、减小√)方向跳,这说明SJMP可以在当前PC值-128B~+127B 范围内无条件转移。 1、X、Y以补码的形式存放在20H、21H中,编写程序实现如下函数: 实验程序: MOV A,20H JZ ZREO JB ACC.7,NEG MOV 21H,#01H SJMP PEND ZREO:MOV 21H,A SJMP PEND NEG:MOV 21H,#0FFH PEND:SJMP$ END 结果记录: 1.将数89H存放于20H中,运行程序,观察到21H单元中的内容为FF; 2.将数05H存放于20H中,运行程序,观察到21H单元中的内容为01; 3.将数00H存放于20H中,运行程序,观察到21H单元中的内容为00; 2、将20H~27H中的压缩BCD码拆为两个单字节BCD码,存放在以2000H为首地址的外部RAM 中。 实验程序: MOV R0,#20H MOV R7,#08H MOV DPTR,#2000H LOOP:ACALL CZ INC R0

INC DPTR DJNZ R7,LOOP SJMP $ CZ:MOV A,@R0 SWAP A ANL A,#0FH MOVX @DPTR,A INC DPTR MOV A,@R0 ANL A,#0FH MOVX @DPTR,A RET END 结果记录: 20H 21H 22H 23H 24H 25H 26H 27H 87H 54H 36H 23 19H 43H 77H 69H 2000H 2002H2004H2006H2008H200AH200CH200EH 07H 04H 06H 03H 09H 03H 07H 09H 2001H 2003H2005H2007H2009H200BH200DH200FH 08H 05H 03H 02H 01H 04H 07H 06H 1、数在计算机中是以补码形式存放的,因此,判断数据的正负,往往采用判断第7 位,是0 则为正数,是1 则为正数 2、实验内容2中JZ ZREO 的机器码为600DH ,其中0DH 为偏移量,当前PC值0004 加上这个偏移量等于0011H ,这正是即将执行的程序的首地址,即标号为ZREO 语句。程序计算器PC的功能是指向下一条指令,因此,跳转语句是依靠偏移量来改变程序计数器PC的值,从而改变程序的流向。 3、分支程序一定要注意分支的语句标号的正确性,每一分支之间必须用跳转(如SJMP)指令分隔,并跳转到相应标号。 4、子程序往往用间址寄存器传递数据,内部RAM用@Ri ,外部RAM用@DPTR ,绝对不能用直接地址。最后以RET 结尾。 5、循环程序往往用寄存器传递数据,用R7控制循环次数,用调用作为循环体,用指令INC 修改地址指针,用指令DJNZ 判断循环结束。 6、执行ACALL前(SP)= 07H ,执行ACALL时,(SP)= 09H ,(08H)= 09H ,(09H)= 00H ,(PC)= 000FH ,PC的值正是子程序的入口地址,而堆栈中这两个单元存放的是断点处PC的值;执行到RET后,(SP)= 07H , 原08H的值弹给(PC)7~0 ,原09H的值弹给(PC)15~8 ,因此,返回断点继续执行主程序。

单片机实验报告

单片机实验报告 实验一:存储器块清零或赋值 一、实验目的 1 熟悉存储器的读写方法,熟悉51汇编语言结构。 2 熟悉循环结构程序的编写。 3 熟悉编程环境和程序的调试。 二、实验内容 指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。例如将4000H开始的10个字节内容清零或全部赋值为33H。 注意: 1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。 2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容 3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR 4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。 5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。 三、实验仪器 微机、VW,WA VE6000编程环境软件,(单片机实验箱) Lab6000/Lab6000通用微控制器MCS51实验 四、实验步骤 1、新建工程文件。(注意:文件不要用中文名称保存时不要用中文路径)

2、编写程序。 3、运行和调试过程。 外部数据存储器(4000H为首地址的10个字节)中初始状态(随便赋值FFH): 单步执行程序,观察SFR中外部地址指针的变化; 全速执行程序,可以看到外部数据存储器已赋值33H:

五、实验结果 可以看到外部数据存储器已赋值33H: 六、问题讨论 本次实验能够清楚地了解存储器中数据的移动和赋值过程,通过单步执行,对于每一步的指令操作过程能够了解如何执行,查看每条语句涉及到的寄存器和存储器内容的变化结果。同时,学习掌握汇编程序的编写和调试过程。 实验二:存储块移动 一、实验目的 1 熟悉51汇编语言程序结构。 2 熟悉循环结构程序的编写,进一步熟悉指令系统。 3 熟悉编程环境和程序的调试。 二、实验内容 将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。 注意:在编程环境中,可以通过软件仿真,观察程单片机运行情况。 由于源地址和目的地址的内容都一样(FF),调试时看不到内容的变化,所以需要给源地址内容赋值。有多种赋值方式(比如在搬移循环体内,赋值一个搬移一个,请在空白处添

单片机实验报告书

并行I/O接口实验 一、实验目的 熟悉掌握单片机并行I/O接口输入和输出的应用方法。 二、实验设备及器件 个人计算机1台,装载了Keil C51集成开发环境软件。https://www.doczj.com/doc/aa5352048.html,单片机仿真器、编程器、实验仪三合一综合开发平台1台。 三、实验内容 (1)P1口做输出口,接八只发光二极管,编写程序,使发光二极管延时(0.5-1秒)循环点亮。实验原理图如图3.2-1所示。 图3.2-1单片机并行输出原理图 实验程序及仿真 ORG 0000H LJMP START ORG 0100H START:MOV R2,#8 MOV A,#0FEH LOOP:MOV P1,A LCALL DELAY RL A

DJNZ R2,LOOP LJMP START DELAY:MOV R5,#20 D1:MOV R6,#20 D2:MOV R7,#248 D3:DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 RET END 中断实验 一、实验目的 熟悉并掌握单片机中断系统的使用方法,包括初始化方法和中断服务程序的编写方法。 二、实验设备及器件

个人计算机1台,装载了Keil C51集成开发环境软件。 https://www.doczj.com/doc/aa5352048.html,单片机仿真器、编程器、实验仪三合一综合开发平台1台。 三、实验内容 (2)用P1口输出控制8个发光二极管LED1~LED8,实现未中断前8个LED闪烁,响应中断时循环点亮。 实验程序及仿真 ORG 0000H LJMP MAIN ORG 0003H LJMP INT00 ORG 0010H MAIN: A1:MOV A,#00H MOV P1,A MOV A,#0FFH MOV P1,A SETB EX0 JB P3.2,B1 SETB IT0 SJMP C1 B1:CLR IT0 C1:SETB EA NOP SJMP A1 INT00:PUSH Acc PUSH PSW MOV R2,#8 MOV A,#0FEH LOOP: MOV P1,A LCALL DELAY RL A DJNZ R2,LOOP

实验报告(单片机实验报告)

1 双字节无符号数加法 例1: 双字节无符号数加法(R0 R1)+(R2 R3) → (R4 R5), R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节。已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h) 假设其和不超过16位。请编程。 org 0000h Ljmp start org 0050h start: mov R0,#93h mov R1, #79h mov R2,#25h mov R3, #0a4h mov A,R1 ADD A,R3 mov R5,A mov A,R0 ADDC A,R2 mov R4,A ss: jmp ss end 2双字节无符号数减法

例2: 双字节无符号数相减(R0 R1)-(R2 R3) → (R4 R5)。R0、 R2、R4存放16位数的高字节, R1、 R3、 R5存放低字节,已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h);请编程。同学自己可以设置被减数与减数数值 org 0000h Ljmp start org 0050h start: mov R0,#93h mov R1,#79h mov R2,#25h mov R3,#0a4h mov A,R1 CLR C SUBB A,R3 mov R5,A mov A,R0 SUBB A,R2 mov R4,A ss: jmp ss end 3双字节数乘以单字节数

例3: 利用单字节乘法指令,进行双字节数乘以单字节数运算。若被乘数为16位无符号数, 地址为M1(30H) 和M1+1(31H)(低位先、高位后), 乘数为8位无符号数, 地址为M2(32H), 积由高位到低位存入R2、 R3和R4三个寄存器中。 30H,31H,32H内容 12H,34H,56H ; org 0000h Ljmp start org 0050h start: mov 30h,#12h mov 31h,#34h mov 32h,#56h mov a,(30h) mov b,(32h) mul ab mov R3,b mov R4,a mov a,(31h) mov b,(32h) mul ab add A,R3 mov R3,A

哈尔滨工业大学单片机实验报告

H a r b i n I n s t i t u t e o f T e c h n o l o g y 单片机原理与应用 实验报告 学生姓名: 学号: 班级: 通信工程 专业: 任课教师: 所在单位: 电子与信息工程学院 月5年2013. 软件实验 在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。 实验一清零程序 一、实验目的 掌握汇编语言设计和调试方法,熟悉键盘操作。 二、实验内容 把2000~20FFh的内容清零。 三、程序框图

四、实验过程 1、LED环境 ⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。 ⑵在“P.”状态下键入0640,然后按“STEP”或“EXEC”进入实验项目的调试与运行。. 2、PC环境 在与PC联机状态下,编译、连接、下载PH51\se01.asm,用连续或单步方式运行程序。 3、运行结果检查 ⑴在单步运行时,每走一步可观察其运行结果。 ⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2000~20FFH 中执行程序前后的内容变化。 五、实验结果及分析 实验前截图: 实验后截图:

: 实验源程序ORG 0640H SE01: MOV R0,#00H DPTR MOV DPTR,#2000H ;(2000H送(DPTR 送LOO1: MOVX @DPTR,A ;0INC DPTR ;DPTR+1 1 INC R0 ;字节数加个字节再清FF不到CJNE R0,#00H,LOO1 ; SJMP $ END 实验问题:2000H~20FFh中的内容是什么? 解答:实验运行之前,2000H~20FFh中的内容是随机分配的;在执行完清零程序之后, 2000H~20FFh中的内容都变为0. 实验二拆字程序 一、实验目的 掌握汇编语言设计和调试方法。 二、实验内容 把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。 三、程序流程

单片机实验报告

单片机实验报告 学院:姓名:学号:指导老师:

目录 第一章实验内容、目的及要求 (2) 一、内容 (2) 二、目的及要求 (3) 第二章实验 (3) 实验一数字量输入输出实验 (3) 实验二定时器/计数器实验 (4) 实验三A/D、D/A转换实验 (11) 实验四串行通信设计 (20) 第三章实验体会 (28)

第一章实验内容、目的及要求 一、内容 实验一数字量输入输出实验 阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“3.1 数字量输入输出实验”基本实验项目。 实验二定时器/计数器实验 阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“3.3 定时/计数器实验”基本实验项目。 提高部分:定时器控制LED灯 由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接八个发光二极管。编写程序模拟时序控制装置。开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个LED灯全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……一直循环下去。 实验三A/D、D/A转换实验 阅读、验证C语言程序功能。使用汇编语言编程,完成实验指导书之“4.3 A/D转换实验”项目(P64)和“4.4 D/A转换实验”项目。 提高部分:(要求:Proteus环境下完成) 小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A 转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。 实验四串行通讯实验 阅读、调试C语言程序功能。使用汇编语言编程,完成实验指导书之“3.7 串口通讯实验”项目。(要求:实验仪器上完成)提高部分:(要求:Proteus环境下完成) 利用单片机实验系统,实现与PC机通讯。功能要求:将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想 ------- 屠呦呦 实验三定时器中断实验 一、实验目的 1、掌握51单片机定时器基本知识; 2、掌握定时器的基本编程方法; 3、学会使用定时器中断。 二、实验内容 1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。 三、实验设备 PC 机一台、单片机实验箱 主要器件:AT89C52、7SEG-BCD、 四、实验步骤 1、使用Proteus设计仿真原理图; 2、使用Keil设计程序; 3、联合调试仿真。 五、实验流程图 六、实验程序与结果 #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1;

void timer1_init() { TMOD=0x10;//将定时器1设置为工作方式1 TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500 //(1/500)s/(1/3000000)s=6000 TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1; ET1=1; TR1=1; } void main() { timer1_init(); while(1); } void timer1() interrupt 3 { TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256; F=~F;//每次进入中断P1.1口取反 } #include #define uint unsigned int #define uchar unsigned char sbit F=P2^1; void timer0_init() {TMOD=0x01;//将定时器0设置为工作方式1 TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us //500us/6us=83.3333 TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83 EA=1; ET0=1; TR0=1; }void main() { timer0_init(); while(1); } void timer0() interrupt 1 { TH0=(65536-83)/256;//每次进入中断,重装初值 TL0=(65536-83)%256; F=~F;//每次进入中断P1.1口取反,表示定时时间到 } #include // 包含51单片机寄存器定义的头文件 #define seg_data P1 #define seg_data2 P3 #define uint unsigned int sbit D1=P2^0; //将D1位定义为P2.0引脚 uint counter=0; unsigned int unit=0,decade=0,avs=0;//time=0;

单片机实验报告

太原工业学院计算机工程系成绩: 单片机原理及应用 课程实验报告 课程:单片机原理及应用 姓名:冯文颖 专业:计算机科学与技术 学号:132054413 日期:2016年4月20日 太工计算机工程系 计算机原理实验室

实验一:拆字程序实验 实验环境PC机+Win 2007+伟福仿真软件实验日期2016.4.20一.实验内容 1.熟悉51仿真系统,设计并单步调试实现,将R5中一字节数拆分成两位独立的数据,分别存于R6,R7中,将R6,R7中的一位HEX数据转换为输出 2.ASCII编码分析BIN,HEX,BCD,ASCII等不同编码的数学意义及表现形式上的异同 二.理论分析或算法分析 (1)基本要求的描述 在这次实验中,要将R5中存的一字节数拆分成两个独立的数据,主要用到是逻辑运算符中的与功能,进而取得高字节和低字节的数,将R5的数和0f0h进行与取得高字节,和0f0h 与取得低字节的数,进而将它们分别存于R6、R7中。 (2)扩展要求的描述 在扩展要求中,要求将高低字节的数据转换成ASCII码值,首先先运用操作符subb将高低位字节与0Ah进行比较,根据CY的值来判断高低字节的数据是否在0到9之间,若在则在它们的基础上加上30h即可得到其对应的ASCII码值,否则,若在A到F之间,则需要在它们的基础上加37h即可得到它们对应的ASCII码值。 三.实现方法(含实现思路、程序流程图、实验电路图和源程序列表等) org 0019h clr c mov r5,#6ah mov a,r5 anl a, #0fh mov r6, a mov a, r5 anl a,#0f0h swap a mov r7,a sjmp $ end Masc1:mov a,r6 add a,#0F6h . mov,a,r6 jnc ad30h add a,#07h ad30h: add a,#30h mov r6,a 1

单片机实验报告

本科生实验报告 实验课程单片机原理及应用 学院名称核技术与自动化工程学院 专业名称电气工程及其自动化 学生姓名 学生学号 指导教师任家富 实验地点6C902 实验成绩 二〇一五年三月二〇一五年六月 单片机最小系统设计及应用 摘要 目前,单片机以其高可靠性,在工业控制系统、数据采集系统、智能化仪器仪表等领域得到极其广泛的应用。因此对于在校的大学生熟练的掌握和使用单片机是具有深远的意义。通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用,本次设计课程采用STC89C52单片机和ADC0804,LED显示,键盘,RS232等设计一个单片机开发板系统。进行了LED显示程序设计,键盘程序设计,RS232通信程序设计等。实现了单片机的各个程序的各个功能。对仿真软件keil的应用提升了一个新的高度。单片机体积小、成本低、使用方便,所以被广

泛地应用于仪器仪表、现场数据的采集和控制。通过本实验的学习,可以让学生掌握单片机原理、接口技术及自动控制技术,并能设计一些小型的、综合性的控制系统,以达到真正对单片机应用的理解。 关键词:单片机;智能;最小系统;ADC;RS232;显示;STC89C52 第1章概述 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。单片机采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 它最早是被用在工业控制领域,由于单片机在工业控制领域的广泛应用,单片机由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。 现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。 第2章实验内容 2.1单片机集成开发环境应用

相关主题
文本预览
相关文档 最新文档