当前位置:首页 >> 信息与通信 >>

C8051f410定时器与PCA设计实验


实验一
一、实验目的

定时器与 PCA 设计实验

1、掌握 c8051f410 单片机片内定时器的使用方法; 2、掌握 c8051f410 单片机片内 PCA0 边沿触发的捕捉工作方式; 3、掌握仿真器及 Keil 软件的使用,初步掌握程序的调试方法,包括跟踪、单步运行和 断点设置等。

二、实验仪器
1、自制的 C8051f410 实验开发板 2、直流稳压电源、示波器 3、仿真器(U-EC6) 4、PC 机 1块 各1台 1只 1台

三、实验内容
实验任务: 实验任务:利用 PCA0 上升边沿触发的捕捉方式测量方波的周期,实验电路如图所示, 将 CEX0 配置到 P0.0 端口,并将被测方波信号由 P0.0 输入到 C8051F410 中的 PCA0。

本实验任务可以拆分为以下 2 个步骤,分别完成: (1)首先产生能被 PCA0 上升边沿触发捕捉的方波信号。 利用片内定时 T2 产生方波信号,并通过 P0.1 脚输出,具体细节参见代码中注释。 (2) 使用导线连接 P0.0 与 P0.1 脚, 将产生的方波信号通过输入 CEX0 进行捕捉, PCA0 时基输入选择为定时器 T0 的溢出,通过计算,可以求到方波的周期。 说明:在代码中定义一全局整型变量 capture_period,用来保存 PCA0 在相邻的两次正 边沿捕捉期间, PCA0 中定时器计数的次数 (前后两次计数值之差) PCA0 的定时器每 10 us , 计数一次,方波的周期为 500us,故 capture_period = 500/10 = 5 0= 32H。 实验参考代码: 实验参考代码: 参考代码

#include <c8051f410.h> #define SYSCLK 24500000 //内部时钟频率 #define T0_CLOCKS 245 //定时器 0 的计数次数,定时值 10 us #define T2_RELOAD_CLOCKS 6125 //定时器 2 计数次数, 250 us sfr16 PCA0CP0 = 0xFB; sfr16 TMR2RL = 0xCA; sfr16 TMR2 = 0xCC; sbit TEST_OUT = P0^1; static unsigned int capture_period; void OSCILLATOR_Init (void) { OSCICN = 0x87; CLKSEL = 0x00; } void PORT_Init (void) { XBR0 = 0x00; XBR1 = 0x41; P0MDOUT |= 0x02; } void PCA0_Init (void) { TMOD &= 0xF0; TMOD |= 0x02; CKCON |= 0x04; TH0 = -T0_CLOCKS; TL0 = -T0_CLOCKS; //T0 - 8 位自动重装, 使用 SYSCLK 作为时钟源 //配置系统时钟 24500000Hz

//T2 寄存器

PCA0CN = 0x00; //配置 PCA,使用 T0 作为计数时基 PCA0MD = 0x04; PCA0CPM0 = 0x21; //上升沿捕捉 EIE1 |= 0x10; //中断使能 CR = 1; TR0 = 1; }

void TestTimerInit (void) { CKCON |= 0x10;

//T2 - 16 位自动重装, 使用 SYSCLK 作为时钟源

TMR2RL = -(int)T2_RELOAD_CLOCKS; TMR2 = -(int)T2_RELOAD_CLOCKS; TMR2CN = 0x04; } void PCA0_ISR (void) interrupt 11 { static unsigned int current_capture_value, previous_capture_value; if (CCF0) { CCF0 = 0; current_capture_value = PCA0CP0; capture_period = current_capture_value - previous_capture_value; previous_capture_value = current_capture_value; } else { PCA0CN &= ~0x86; } } void main (void) { PCA0MD = 0x00; PORT_Init (); OSCILLATOR_Init (); PCA0_Init (); TestTimerInit (); EA = 1; while (1) { if (TF2H) { TEST_OUT = ~TEST_OUT;

TF2H = 0; } } }

四、实验现象和结果
1、下载运行程序,利用示波器可以从单片机 P0.1 脚检测到 f=2kHz 的方波信号; 2、运行程序后,通过 Keil 软件的“观察”窗口,查看全局变量 capture_period=32H。

五、预习要求
1、读懂程序; 2、预先给出运算结果,以便和实验结果比较;

六、思考题
1、全局变量 capture_period=32H,是如何计算出来的? 2、修改代码从 P0.1 脚产生 100ms 的方波信号,并用示波器观察,此时 capture_period 的值为多少?



相关文章:
单片机实验指导书(2012)
给器件上的数字外设(UART、SMBus、PCA定时器等)...的设计方法; 二、实验仪器 1、自制的 C8051f410 ...
C8051F020的PCA配置小结
C8051F020的PCA配置小结_信息与通信_工程科技_专业资料。C8051F020 PCA 配置小结...在计数器/ 定时器溢出(CF) 中断被允许时,该位置 1 将导致 CPU 转向 CF ...
C8051F410实现两个LED灯闪烁【定时器1方式】
C8051F410实现两个LED灯闪烁【定时器1方式】 使用定时器1的方式实现LED灯闪烁使用...(PCA), Open-Drain, Digital // P0.5 - Unassigned, Open-Drain, Digital...
C8051F410实现两个LED灯闪烁【定时器2方式】
C8051F410实现两个LED灯闪烁【定时器2方式】_计算机...(PCA), Open-Drain, Digital // P0.5 - ...2013年注会设计统考真题及答案104份文档 2014...
C8051F410学习笔记
若要改变PCA0MD的内容, 必须先禁止看门狗定时器 2、 每个端口引脚的输出方式都...C8051f410实验板原理图 2页 免费 学习笔记之一 14页 免费 基于C8051F410的液晶...
C8051F410实现两个LED灯闪烁【定时器1+查询方式】
C8051F410实现两个LED灯闪烁【定时器1+查询方式】_计算机硬件及网络_IT/计算机...{ static int n=0; PCA0MD &= ~0x40; Init_Device(); OSCICN |= 0x...
基于C8051f410的资料-单片机
基于C8051f410的资料-单片机_工学_高等教育_教育专区...要求课程设计是学生理论联系实际的重要实践教学环节, ...器功能的可编程计数器/定时器阵列(PCA) ,硬件实时...
c8051f410 PCA十六位脉宽调节程序
c8051f410 PCA十六位脉宽调节程序_工学_高等教育_教育专区。#include <C8051F410...{ PCA0MD = 0x00;//关闭看门狗定时器; XBR0 = 0x00; XBR1 = 0x42; /...
实验一 简单程序设计实验
实验一 简单程序设计实验_计算机软件及应用_IT/...蜂鸣器的实现 #include "c8051F410.h" #define ...{ PCA0MD=0x00; OSCICN=0xc7;//设置内部振荡器...
基于C8051F410单片机的剩余电流动作保护装置设计
基于C8051F410 单片机的剩余电流动作保护装置设计 【摘要】本文首先介绍了 C8051F...定时器阵 列(PCA)硬件实时时钟(smaRTClock) ,工作电压可低至 1V,带 64 ...
更多相关标签: