当前位置:文档之家› 单片机原理与接口技术实验教程

单片机原理与接口技术实验教程

图 1-3 实物连线图
5、连接烧写器与目标板。 7、经指导老师检测无误后上电。 8、在 CodeWarrior 开发环境中打开实验资料/程序/CodeWarrior5.0 编写
/Project01GPIO,并将编译无误的程序烧写到目标板中。 9、点击全速运行按钮后拨动拨码开关,观察 LED 灯亮灭变化。 12、修改代码改变 LED 灯的点亮逻辑,诸如左边四个与右边四个交替
//记载自由运行定时器溢出次数
/*总线时钟设置:外部晶振 16MHz,单片机总线时钟也设置为 16MHz*/
void Busclock_Init(void)
{
CLKSEL = 0x00; //将 PLL 锁相环脱离系统从而进行配置
PLLCTL_PLLON = 1; //打开 PLL 锁相环
SYNR = 0x00;
REFDV = 0xC0;
POSTDIV = 0x00;
while(!(CRGFLG_LOCK==1)); //等待 PLL 锁相环稳定
CLKSEL_PLLSEL = 1;
//在系统中使用 PLL 锁相环
}
/*TIM 初始化*/来自void TIM_Init(void)
{
/*配置自由运行定时器的分频系数*/
#include "derivative.h"
/*全局变量*/
unsigned int TimeEx=0;
//前一次下降沿时定时器计数值
unsigned int TimeNow=0;
//当前下降沿定时器计数值
long int PeriodTIM=0;
//计算得到的周期值
long int FlowNum=0;
{
Busclock_Init();
//调用总线时钟设置函数
TIM_Init();
//调用 TIM 初始化函数
PWM_Init();
//调用 PWM 初始化函数
PWMDTY0 = 100;
// PWM0 周期
PWMPER0 = 250;
// PWM0 占空比
EnableInterrupts;
//全局中断使能
单片机原理及接口技术 (实验教程)
动力装置电控所 编
哈尔滨工程大学
前言
单片机是一款功能强大的实用工具,其本身的性质就决定了学习单片机 最为有效的途径—实践。而实践的缺乏同时也是造成大多数人学习单片机比 较困难的主要原因。本实验课程设置的目的旨在部分解决上述问题,为同学 们提供相关实验设备,通过实践的方式解决理论学习中存在的疑惑,以期达 到整个课程设置的目的:帮助同学们完成单片机入门知识的学习。
(二)实验器材
主机 试验箱组件 接插线
(三)实验说明
本实验完成 PWM 模块和输入捕捉模块的使用,在程序中使用 PWM 模 块产生矩形波,其中 PWMPER0 寄存器用于设置 PWM 的周期,PWMDTY0 寄存器用于设置 PWM 的占空比,PWM 模块的运行频率是总线时钟 16 分频, 即 1MHz,如果 PWMPER0=200,相当于 PWM 模块输出波形的周期为 PWM 模块运行周期的 200 倍,周期为 200μs。将 PWM 模块的输出与输入捕捉模 块相连,输入捕捉用于 PWM 周期检测,程序中设置的输入捕捉进行下降沿 捕捉,由于输入捕捉模块的运行频率(即自由定时器频率)为总线频率 (16MHz),那么捕获周期为 200μs 波形,捕获值应该为 200*16。所以程 序中输入捕捉捕捉到的值(PeriodTIM)应该为 PWMPER0 的 16 倍。修改 PWMPER0 的值(不能太小,建议大于 50,同时修改相应的 PWMDTY0, 保证 PWMDTY0 小于 PWMPER0),检查 PeriodTIM 是否是 PWMPER0 的 16 倍。
实验预习及实验步骤请参考第一章实验手册 实验课程分数分配请参考第二章考核方式 相关软件以及驱动安装请参考第三章实验箱使用说明
2012.05.02
第一章 实验手册
实验一 单片机通用输入输出端口应用实验
(一)实验目的
1、熟悉实验箱的组成与使用。 2、掌握程序的下载与调试的基本流程。 3、了解单片机通用端口工作的基本原理。
TIE_C0I = 1;
//通道 0 输入捕捉/输出比较中断允许
}
/*PWM 初始化*/
void PWM_Init(void)
{
PWMPOL = 0x01;
//通道 0 先输出高电平
PWMCLK_PCLK0 = 0;
//0 通道使用 A 时钟源
PWMPRCLK = 0x04;
//A 时钟频率为总线时钟 16 分频

PeriodTIM =PWMPER0*16
(2.4)
所以,PWM 和 ECT 各自模块的计数频率一旦设定。通过 ECT 输入捕
捉所计算的 PeriodTIM 值总是 PWMPER0 得 16 倍。即改变 PWMPER0 的值,
通过在线观测到的 PeriodTIM 一定是 PWMPER0 的 16 倍。
(二)实验器材
主机 试验箱组件 接插线
(三)实验说明
本实验旨在通过使用 GPIO(通用输入输出端口)检测拨码开关状态和点 亮 LED 小灯的形式使学生了解单片机工作的基本原理。
(四)实验原理
1、LED 原理 如下图所示,8 个 LED(D1—D8)一端接 VCC5,另一端接三极管(RQ1 —RQ8)的集电结。三极管发射结接地,基区经电阻(RD1—RD8)接插孔 D-JK。16 个插孔每两个一组,分别对应 8 个 LED,同组的两个插孔等价。 由三极管的工作原理可知。将插孔,即三极管的基区电压接低。使得三极管 集电节反相偏置,LED 正向导通后点亮。
图 2-4 实物连线图
5、经实验指导老师确认连线无误后方可上电。 5、在 CodeWarrior 开发环境中打开实验资料/程序/CodeWarrior5.0 编写/ Project02ECT_PWM,并将编译无误的程序烧写到目标板中。 6、运行目标板,在线观察 PeriodTIM 是否为 PWMPER0 的 16 倍, 7、修改 PWMPER0 的值(不能太小,建议大于 50,同时修改相应的 PWMDTY0,保证 PWMDTY0 小于 PWMPER0),并重新下载程序,再次观 察。
图 1-2 拨码开关原理图
(五)实验步骤
1、安装 CodeWarrior5.0(上课前务必安装好)。 2、由实验指导老师介绍实验原理,注意事项。 3、连接下载器与主机,参考本教程第三章第二节的步骤 3、4 安装下载 器的相关驱动。 5、将子版上 PB 端口的 8 个插针分别与 8 个调试小灯(D-JK)相连, 将拨码开关 K4 与子板上 PA 的第 0 端口相连。
PWME_PWME0 = 1;
byte k=0, temp=0;
int i=0, j=0;
//变量声明
//配置端口方向寄存器 DDRB = 0xFF; //PortB 全为输出 DDRA = 0xFE; //PortA 的第 0 端口为输入
EnableInterrupts; for(;;) {
if((PORTA & 0x01) > 0)//如果 PortA 的第 0 端口为高 {
PeriodTIM= TimeNow+65536* FlowNum –TimeEx (2.4)
(五)实验步骤
1、检测实验箱电源开关是否为关,请务必保证开关处于关的位置。 2、由实验指导老师介绍实验原理。 3、连接主机、烧写器与目标板。 4、将实验箱核心板上 PP 端口的 0 端口(PWM 的 0 通道)与核心板上 PT 的 0 端口(TIM 的 0 通道)相连。
点亮,或是 8 个灯交叉点亮。 10、关掉电源,从子板上拔掉下载器。 11、重新上电,拨动拨码开关,再次观察实验现象。
(六)程序流程图
开始
配置端口 方向寄存器
PA0端口是否为高
是 LED
明灭交替

LED 流水灯
结束 图 1-5 程序流程图
(七)源程序代码
void main(void) {
/* put your own code here */
(四)实验原理
1、PWM 输出方波原理
T TH
PWM输出
图 2-1 PWM 原理图
PWM 模块的计时频率为 f1=1MHz。如上图所示,通过寄存器 PWMPER0 设置方波的周期 T= PWMPER0*(1/ f1)。通过寄存器 PWMDTY0 设置方波 的高电平维
持的时间 TH = PWMDTY0*(1/ f1),以此来输出周期与占空比可调的方 波。
for(i=0; i<1000; i++) for(j=0; j<1000; j++);//软件延时
PORTB = ~PORTB; //将 PortB 端口数据寄存器值按位取反
} else//如果 PortA 的第 0 端口为低 {
for(k=0; k<8;k++) {
temp = 0x01 << k;//逻辑左移 k 位 PORTB = temp; //赋值 PortB 端口数据寄存器 for(i=0; i<1000; i++)
(六)程序流程图
开始
开始 溢出次数加1
读取当前 主定时器值
计算时间间隔
结束
清除溢出次数
结束
图 2-5 溢出中断(左)与输入捕捉中断(右)流程图
开始
初始化锁相环PLL 配置总线时钟
初始化ECT模块 初始化PWM模块
主循环
结束
图 2-4 主程序流程图
(七)源程序代码
/*头文件*/
#include <hidef.h>
相关主题