|单片机实验过程

|单片机实验过程

单片机综合训练Ⅰ
实验指导书
目 录
一、 实验环境介绍 1
1、Keil集成开发环境介绍 1
二、 实验内容 9
实验一 练习使用集成调试软件 9
实验二 简单输入输出 10
实验三 定时器应用 11
实验四 流水灯程序设计 13
一、实验环境介绍
1、Keil集成开发环境介绍
Keil集成开发环境是众多单片机应用开发的优秀软件之一 , 它集编辑、编译、仿真于一体 , 支持汇编语言、PLM语言、C语言的程序设计 , 界面友好 , 易学易用 。
(1)建立工作文件夹
在规定的盘符建立一个以自己学号命名的文件夹 , 作为工作文件夹 , 将日后实验所有的文件都存放在该文件夹中 。
(2)进入集成开发环境
双击桌面图标 , 进入uVision4集成开发环境 。
(3)新建工程
选择菜单“porject—new uvision project” , 弹出“Creat New Project”对话框;
在“保存在”下拉列表中选择自己的工作文件夹 , 在“文件名”文本框中键入工程名(不需要键入扩展名 , 扩展名默认为 .uv2) , 单击“保存”按钮 , 关闭“新建工程”对话框 , 弹出“为目标‘target 1’选择设备”对话框 , 选择目标芯片型号;
选择Atmel公司的89C52芯片 , 单击“确定”按钮 , 关闭对话框 , 新建一个工程 。
(4)新建源程序
选择菜单“File—New”新建源程序文件Text1
单击保存按钮 , 以.C后缀名保存改文件 。
【|单片机实验过程】(5)将源程序添加到工程中
右键单击“工程窗口”中的“Source Group 1” , 在弹出的菜单中选择“增加文件到组”;(注:软件汉化有误)
弹出“增加文件到组”对话框;
选中欲添加的源程序 , 单击“Add”按钮 , 源程序添加到工程中 。 但是 , 该对话框并不关闭 , 等待用户继续添加其他程序 。 添加完毕后 , 单击“关闭”按钮 , 关闭对话框 。 “工程窗口”中 , “Source Group 1”下将出现该源程序文件名 。
若对同一个文件二次添加 , 则会弹出如下警告框 。
(6)编译和连接
单击“Rebuild all target files”按钮 , 对原程序进行编译和连接 , 构造结果将在“Build Output”窗口中显示 。 如果程序有语法错误 , 则会指出错误类型及所在行 , 修改后 , 重新构造 , 直至没有任何语法错误 。
(7)开始调试
单击“开始/停止调试”按钮 , 进入调试状态 。
在调试状态下 , “构造工具栏”变为“调试工具栏” 。 通过单步运行 , 查看寄存器、存储器的值 , 判断程序是否运行正确 。 若不正确 , 找出问题所在 , 单击“开始/停止调试”按钮 , 停止调试 , 进入编辑状态 , 修改程序 , 重新编译、调试 。
(8)查看寄存器
进入调试状态后 , “工程窗口”变为“寄存器窗口” , 可以查看CPU各寄存器的值 。
(9)查看存储器
单击“存储器窗口”按钮 , 打开存储器窗口;该窗口共有4个标签 , 可显示4个存储器的值 。 单击一个标签 , 在地址栏中输入要查看的存储器单元的类型及地址 。
片内数据存储器 I : [地址

片外数据存储器 X : [地址

程序存储器 C : [地址

若要人为修改某存储单元的值 , 可右键单击该单元 , 在弹出的菜单中选择“更新存储器” , 在弹出的文本框中输入该单元的新值 , 单击“确定”即可 。 注:十六进制数前加“0x” 。
(10)单步运行
在调试状态下 , 源程序的左边有一个黄色的箭头 , 指示当前程序执行的位置 , 即将要执行的一条指令 。 单击“单步”按钮 , 程序执行一条指令 , 黄色箭头下移一行 。 寄存器和存储器的值的变化显示在相应位置 。 执行过的指令左边用一绿色方块标记 。
(11)运行到光标行
若想快速、连续执行若干条指令 , 可将光标定位在这些指令的最后一行处 , 单击“运行到光标行”按钮 , 即可 。
(12)全速运行
对于有些程序 , 只有全速运行才能实现其功能 , 这时只需单击“运行”按钮;若要暂停运行 , 单击“暂停”按钮 。
(13)将源程序从工程中删除
一个程序调试成功后 , 若要调试另一个程序 , 可不必新建工程 , 只需新建一个源程序 , 添加到原有的工程中 , 同时 , 将前一个源程序从工程中删除 。
在“工程窗口”中 , 单击要删除的源程序名 , 按“Delete”键 , 在弹出的对话框中选择“确定”即可 。
对于初学者 , 一般一个工程中只包含一个源程序 , 应将多余的源程序删除 。
二、实验内容
实验一练习使用集成调试软件
1.实验目的
(1)练习使用Keil集成调试软件;
(2)进一步熟悉语言指令的功能 。
2.实验内容
按照实验指导书的说明 , 结合附录中的例子 , 练习使用Keil集成调试软件 , 为以后的实验打下基础 。
3.实验器材
计算机1台
4.实验步骤
(1)新建工程;
(2)输入源程序;
(3)将源程序添加到工程中;
(4)编译和连接;
(5)运行程序;
(6)观察记录运行过程和结果 。
5.实验报告要求
(1)列出源程序 , 并加以注释;
(2)结构复杂的程序 , 画出流程图;
(3)对实验过程和结果进行分析;
(4)写出心得体会 。
实验二简单输入输出
1.实验目的
(1)进一步理解I/O口的工作原理;
(2)掌握输入/输出程序的设计方法
2.实验内容
编写程序 , 点亮发光二极管
3.实验器材
(1)计算机1台 (2)仿真器1台 (3)开发板一套
4.硬件电路
5.试编写程序点亮开发板上的发光二极管
6.思考与发挥
(1)如何实现多个开关控制多个发光二极管??
(2)如何实现8个发光二极管闪烁?
实验三定时器应用
1.实验目的
(1)进一步了解定时器的结构和工作原理;
(2)掌握定时器的应用程序设计方法 。
2.实验内容
编写定时程序 , 实现发光二级管D1的定时1s亮灭
3.实验器材
(1)计算机1台 (2)仿真器1台 (3)开发板1套
4.硬件连线
5.实验程序
6.思考与发挥
(1)如何改变亮灭的频率?
(2)计数初值变大 , 亮灭频率将如何变化?
实验四流水灯程序设计
1.实验目的
初步掌握C51程序设计方法 。
2.实验内容
编写程序 , 使D0-D8 , 8个LED呈现流水灯效果进行左移右移滚动
3.实验器材
(1)计算机1台 (2)仿真器1台 (3)开发板1套
4.实验程序
/**************************************************************************************

  • LED流水灯实验\t\t\t\t\t\t\t\t\t\t\t\t  *

    • 1
实现现象:下载程序后LED呈现流水灯效果进行左移右移滚动
注意事项:无
***************************************************************************************/
#include “reg52.h” //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h> //因为要用到左右移函数 , 所以加入这个头文件
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define led P2 //将P2口定义为led 后面就可以使用led代替P2口
/*******************************************************************************
  • 函 数 名 : delay
  • 函数功能 : 延时函数 , i=1时 , 大约延时10us
    *******************************************************************************/
    void delay(u16 i)
    {
    while(i–);

/*******************************************************************************
  • 函 数 名 : main
  • 函数功能 : 主函数
  • 输 入 : 无
  • 输 出 : 无
    ******************************************************************************/
    void main()
    {
    u8 i;
    led=0xfe;
    delay(50000); //大约延时450ms
    while(1)
    {
    / for(i=0;i<8;i++)
    {
    P2=~(0x01<<i); //将1右移i位 , 然后将结果取反赋值到P2口
    delay(50000); //大约延时450ms

    */
    for(i=0;i<7;i++) //将led左移一位
    {
    led=crol(led1);
    delay(50000); //大约延时450ms

    for(i=0;i<7;i++) //将led右移一位
    {
    led=cror(led1);
    delay(50000); //大约延时450ms


    本例中main是主函数名 , 要执行的主函数的内容称为主函数体 , 主函数体用大括号{ 括起来 。 函数体中包含若干条将被执行的程序语句 , 每条语句都必须以分号为结束符 。
    5.思考与发挥
    (1)流水灯的间隔时间怎么确定?
    (2)流水灯的移动方向和顺序怎么确定?


    推荐阅读