单片机原理及应用C语言实验,《单片机原理及应用》实验指导书.doc

PAGE

《单片机原理及应用》

102G

实验指导书

2016.02

目 录

TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc444252909" 实验1C语言编程 PAGEREF _Toc444252909 \h 3

HYPERLINK \l "_Toc444252910" 实验2Keil开发环境与编程 PAGEREF _Toc444252910 \h 5

HYPERLINK \l "_Toc444252911" 实验3数据排序 PAGEREF _Toc444252911 \h 18

HYPERLINK \l "_Toc444252912" 实验4数据搬运 PAGEREF _Toc444252912 \h 19

HYPERLINK \l "_Toc444252913" 实验5汇编程序实验 PAGEREF _Toc444252913 \h 20

HYPERLINK \l "_Toc444252914" 实验6流水灯实验 PAGEREF _Toc444252914 \h 21

HYPERLINK \l "_Toc444252915" 实验7C8051F020单片机基本配置方法 PAGEREF _Toc444252915 \h 23

HYPERLINK \l "_Toc444252916" 实验8外部中断实验 PAGEREF _Toc444252916 \h 25

HYPERLINK \l "_Toc444252917" 实验9按键接口与数码管输出 PAGEREF _Toc444252917 \h 26

HYPERLINK \l "_Toc444252918" 实验10定时器 PAGEREF _Toc444252918 \h 27

HYPERLINK \l "_Toc444252919" 实验11数字频率计设计 PAGEREF _Toc444252919 \h 28

HYPERLINK \l "_Toc444252920" 实验12串口通信实验 PAGEREF _Toc444252920 \h 30

HYPERLINK \l "_Toc444252921" 实验13数据采集系统设计 PAGEREF _Toc444252921 \h 31

HYPERLINK \l "_Toc444252922" 实验14函数信号发生器设计 PAGEREF _Toc444252922 \h 32

PAGE 32

- -

C语言编程

一、实验目的

复习C语言编程。

二、实验内容

熟悉C语言编程。软件调试一下题目:

(1) 两数相加

(2) 两数比大小

(3) 1+2+3+……+10

(4) 其他简单数学计算

………

三、实验步骤

(简单操作可参见实验2中项目创建步骤)

Keil软件,使用“Project”菜单中的“New μVision Project”选项来创建项目,放置到你指定的文件夹。

选择单片机型号AT89C51

编写源程序,并保存(扩展名用C),例程见图1-1。

将文件添加到工程中。

调试。

编写源程序注意:

AT89C51为通用8051系列单片机

头文件reg51.h用于51单片机特殊功能寄存器标识,

stdio.h用于一些标准输入输出函数的调用如printf()。

因单片机没有PC机那样的显示器标准输出,printf()函数的输出通过单片机串口输出实现,所以要完成两件事:

(1) printf()函数之前要执行“TI=1;”用于打开串口发送,只有执行“TI=0;”

(2) 软件仿真调试时,信息在“串口输出”窗口中输出。可在debug模式下使用菜单View-->Serial Windows-->UART #1打开“串口输出”

使用单片机端口P0、P1、P2等输出,可在debug模式下使用菜单Peripherals—>I/O-Ports—>指定哪个端口

调试界面如图1-2

头文件从端口输出标准输出打开串口

头文件

从端口输出

标准输出

打开串口

图1-1 C语言例程

串口输出分别为“复位”、“运行”

串口输出

分别为“复位”、“运行”、“暂停”

点击后进入调试模式

输出端口

图1-2 C语言程序调试界面

Keil开发环境与编程

一、实验目的

熟悉基于KEIL下的实验环境。

掌握程序调试的单步、断点、连续运行方法。

熟悉在KEIL环境下观察内部RAM , 特殊功能寄器的方法。

二、实验内容

编写并调试一个双字节无符号十进制数加法程序。其功能为将被加数写入30H、31H单元,

加数写入40H、41H单元,运行程序结果写入50H、51H、52H单元中,加法程序功能为:

(30H)(31H)+(40H)(4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,由于涉及到版权问题,我无法提供该文档的代码。但是,以下是一个简单的51单片机测速程序的示例代码,仅供参考: ``` #include <reg52.h> #include <intrins.h> sbit motor_pin = P1^0; // 电机控制引脚,此处为P1.0 sbit sensor_pin = P3^2; // 光电编码器输出引脚,此处为P3.2 unsigned char count = 0; // 计数器,记录电机转动次数 unsigned char speed = 0; // 电机转速,单位:r/min void delay(unsigned int t) // 延时函数 { unsigned int i, j; for (i = t; i > 0; i--) for (j = 110; j > 0; j--); } void main() { TMOD = 0x05; // 设置定时器0为模式1,定时器1为模式0 TH0 = 0x00; // 定时器0的初始计数值为0 TL0 = 0x00; TH1 = 0x00; // 定时器1的初始计数值为0 TL1 = 0x00; ET0 = 1; // 允许定时器0中断 TR0 = 1; // 启动定时器0 EA = 1; // 允许总中断开关 while (1) { motor_pin = 1; // 电机开始转动 delay(1000); // 延时1秒钟,让电机转动一定的时间 motor_pin = 0; // 电机停止转动 speed = count * 60; // 计算电机转速 count = 0; // 计数器清零 // 将电机转速通过串口输出 // ... } } void timer0_isr() interrupt 1 // 定时器0中断服务函数 { static bit sensor_state = 0; // 光电编码器状态,0表示未检测到光电信号,1表示检测到光电信号 TH0 = 0x4C; // 定时器0的重载值,使定时器计数1ms TL0 = 0x00; if (sensor_pin == 0 && sensor_state == 1) // 电机转动一圈 { count++; // 计数器加1 sensor_state = 0; // 光电编码器状态置为0 } else if (sensor_pin == 1 && sensor_state == 0) // 电机转动未满一圈 sensor_state = 1; // 光电编码器状态置为1 } ``` 上述代码实现的功能为通过光电编码器测量电机转速。在程序中,通过定时器0产生1ms的定时中断,检测光电编码器输出引脚的状态,当检测到从高电平到低电平的跳变时,表示电机转动一圈,计数器加1;反之,表示电机转动未满一圈。通过计算计数器的值,即可得到电机的转速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值