单片机原理与应用课程实践实验报告.docx
《单片机原理与应用课程实践实验报告.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用课程实践实验报告.docx(147页珍藏版)》请在冰豆网上搜索。
![单片机原理与应用课程实践实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/7/dddf4aea-85ba-4917-ae4f-cef477df2b5a/dddf4aea-85ba-4917-ae4f-cef477df2b5a1.gif)
单片机原理与应用课程实践实验报告
单片机原理及应用课程实践实验报告
实验名称:
实践一 C8051F410入门及定时器实验
班级:
姓名:
学号:
实验地点:
日期:
一、实验目的:
1、了解C8051F410单片机系统资源和结构
2、掌握C8051F410单片机定时器的原理和使用
二、实验环境:
1、C8051F410单片机系统实验板及外围设备
2、PC机、仿真器
3、信号发生器、示波器、数字万用表
三、实验内容和要求:
1.用查询或中断方式对定时器0~3进行定时应用,使用C8051F410单片机内置定时器实现八盏LED灯定时1s闪烁功能。
2.利用定时器0,1实现对P1.0引脚输入的时钟信号进行计数;
四、实验步骤:
1、构建实验思路
2、编写软件程序
3、下载硬件调试
五、实验结果与分析(含程序、数据记录及分析和实验总结等):
/************************/
//实践一C8051F410入门及定时器实验
/************************/
实验内容一:
灯控
定时器1查询
//#include
#include"C8051F410.h"
sbitLED=P1;//定义P1为LED1
voidPCA_Init()//关闭开门狗
{
PCA0MD&=~0x40;
PCA0MD=0x00;
}
voidTimer_Init()
{
TCON=0x40;//位6置1:
定时器1运行标志位打开
TMOD=0x22;//位5,位1置1:
定时器1工作于方式2,8位自动重装载
CKCON=0x02;//位1置1:
系统时钟进行48分频
}
voidPort_IO_Init()
{
//P0.0-Unassigned,Open-Drain,Digital
//P0.1-Unassigned,Open-Drain,Digital
//P0.2-Unassigned,Open-Drain,Digital
//P0.3-Unassigned,Open-Drain,Digital
//P0.4-Unassigned,Open-Drain,Digital
//P0.5-Unassigned,Open-Drain,Digital
//P0.6-Unassigned,Open-Drain,Digital
//P0.7-Unassigned,Open-Drain,Digital
//P1.0-Unassigned,Open-Drain,Digital
//P1.1-Unassigned,Open-Drain,Digital
//P1.2-Unassigned,Open-Drain,Digital
//P1.3-Unassigned,Open-Drain,Digital
//P1.4-Unassigned,Open-Drain,Digital
//P1.5-Unassigned,Open-Drain,Digital
//P1.6-Unassigned,Open-Drain,Digital
//P1.7-Unassigned,Open-Drain,Digital
//P2.0-Unassigned,Open-Drain,Digital
//P2.1-Unassigned,Open-Drain,Digital
//P2.2-Unassigned,Open-Drain,Digital
//P2.3-Unassigned,Open-Drain,Digital
//P2.4-Unassigned,Open-Drain,Digital
//P2.5-Unassigned,Open-Drain,Digital
//P2.6-Unassigned,Open-Drain,Digital
//P2.7-Unassigned,Open-Drain,Digital
XBR1=0x40;//位6置1:
交叉开关使能。
}
voidOscillator_Init()
{
OSCICN=0x82;//位7,位1置1:
内部振荡使能,采用32分频
CLKSEL=0x00;//采用内部振荡
}
//Initializationfunctionfordevice,
//CallInit_Device()fromyourmainprogram
voidInit_Device(void)
{
PCA_Init();//关闭看门狗
Timer_Init();//定时器的配置
Port_IO_Init();//管脚的配置
Oscillator_Init();//振荡时钟的配置
}
main()
{
unsignedcharn;//定义一个参数
Init_Device();//系统配置初始化
TL1=0xB0;//定时器1设定初值
TH1=0xB0;//定时器1自动重装载初值
TR1=1;//定时器运行标志位启动
TF1=0;//定时器1溢出位清0
P1=0x00;//p1口输出初值定为0
while
(1)
{
for(n=0;n<200;n++)//循环200次,定时1s
{
while(!
TF1);//当溢出位为1,清0
TF1=0;
}
P1=~P1;//1s时间到,p1口输出1,灯亮
}
}
实验一内容二:
计数
定时器0
/////////////////////////////////////
//GeneratedInitializationFile//
/////////////////////////////////////
#include"C8051F410.h"
//Peripheralspecificinitializationfunctions,
//CalledfromtheInit_Device()function
voidPCA_Init()
{
PCA0MD&=~0x40;//关闭看门狗
PCA0MD=0x00;
}
voidTimer_Init()
{
TCON=0x50;//位6、位4置1:
启动定时器1、0
TMOD=0x51;//位6、位4、位0置1:
定时器1设置为16位计数,定时器
0为16位定时功能;
CKCON=0x02;//位1置1:
系统48分频
TH0=0xF3;//定时器0高8位初值
TL0=0x8A;//定时器0低8位初值
TH1=0x00;//计数器1高8位清0
TL1=0x00;//计数器1高8位清0
}
voidPort_IO_Init()
{
//P0.0-Skipped,Open-Drain,Digital
//P0.1-Skipped,Open-Drain,Digital
//P0.2-Skipped,Open-Drain,Digital
//P0.3-Skipped,Open-Drain,Digital
//P0.4-Skipped,Open-Drain,Digital
//P0.5-Skipped,Open-Drain,Digital
//P0.6-Skipped,Open-Drain,Digital
//P0.7-Skipped,Open-Drain,Digital
//P1.0-T1(Timer1),Open-Drain,Analog
//P1.1-Unassigned,Open-Drain,Digital
//P1.2-Unassigned,Open-Drain,Digital
//P1.3-Unassigned,Open-Drain,Digital
//P1.4-Unassigned,Open-Drain,Digital
//P1.5-Unassigned,Open-Drain,Digital
//P1.6-Unassigned,Open-Drain,Digital
//P1.7-Unassigned,Open-Drain,Digital
//P2.0-Unassigned,Open-Drain,Digital
//P2.1-Unassigned,Open-Drain,Digital
//P2.2-Unassigned,Open-Drain,Digital
//P2.3-Unassigned,Open-Drain,Digital
//P2.4-Unassigned,Open-Drain,Digital
//P2.5-Unassigned,Open-Drain,Digital
//P2.6-Unassigned,Open-Drain,Digital
//P2.7-Unassigned,Open-Drain,Digital
P1MDIN=0xFF;//p1口不设置为模拟输入
P0SKIP=0xFF;//p0口不被交叉开关跳过
XBR1=0x60;//位6.位5置1:
交叉开关使能,T1连接到端口
}
voidOscillator_Init()
{
OSCICN=0x84;//位7、位2置1:
内部振荡8分频
}
//Initializationfunctionfordevice,
//CallInit_Device()fromyourmainprogram
voidInit_Device(void)
{
PCA_Init();//看门狗关闭
Timer_Init();//定时器配置
Port_IO_Init();//管脚配置
Oscillator_Init();//系统时钟设置
}
voidmain()
{
unsignedintx;//参数设置
unsignedchari;//参数设定
Init_Device();//系统配置初始化
TF0=0;//定时器0溢出位清0
P2=0x00;//p2口输出为0
while
(1)
{
for(i=0;i<20;i++)//循环20次,定时1s
{
while(!
TF0)//定时器0溢出位为1
TF0=0;//定时器0溢出位清。
TH0=0xF3;//定时器0设初值,20ms定时
TL0=0x8A;
}
P2=~P2;//p2口输出为1
x=TH1*256+TL1;//计数的值换算
TH1=0x00//计数器1清0
TL1=0x00;
}
}
实验一其他的c
定时器1中断
#include"C8051F410.h"
//Peripheralspecificinitializationfunctions,
//CalledfromtheInit_Device()function
voidPCA_Init()
{
PCA0MD&=~0x40;
PCA0MD=0x00;
}
voidTimer_Init()
{
TCON=0x40;
TMOD=0x12;
CKCON=0x02;
}
voidPort_IO_Init()
{
//P0.0-Unassigned,Open-Drain,Digital
//P0.1-Unassigned,Open-Drain,Digital
//P0.2-Unassigned,Open-Drain,Digital
//P0.3-Unassigned,Open-Drain,Digital
//P0.4-Unassigned,Open-Drain,Digital
//P0.5-Unassigned,Open-Drain,Digital
//P0.6-Unassigned,Open-Drain,Digital
//P0.7-Unassigned,Open-Drain,Digital
//P1.0-Unassigned,Open-Drain,Digital
//P1.1-Unassigned,Open-Drain,Digital
//P1.2-Unassigned,Open-Drain,Digital
//P1.3-Unassigned,Open-Drain,Digital
//P1.4-Unassigned,Open-Drain,Digital
//P1.5-Unassigned,Open-Drain,Digital
//P1.6-Unassigned,Open-Drain,Digital
//P1.7-Unassigned,Open-Drain,Digital
//P2.0-Unassigned,Open-Drain,Digital
//P2.1-Unassigned,Open-Drain,Digital
//P2.2-Unassigned,Open-Drain,Digital
//P2.3-Unassigned,Open-Drain,Digital
//P2.4-Unassigned,Open-Drain,Digital
//P2.5-Unassigned,Open-Drain,Digital
//P2.6-Unassigned,Open-Drain,Digital
//P2.7-Unassigned,Open-Drain,Digital
XBR1=0x40;
}
voidOscillator_Init()
{
OSCICN=0x82;
}
//Initializationfunctionfordevice,
//CallInit_Device()fromyourmainprogram
voidInit_Device(void)
{
PCA_Init();
Timer_Init();
Port_IO_Init();
Oscillator_Init();
}
voidmain()
{
Init_Device();
TH1=0xC1;
TL1=0xB0;
TR1=1;
EA=1;
ET1=1;
while
(1)
{
}
}
voidtimerInit()interrupt3
{
TH1=0xC1;
TL1=0xB0;
TF1=0;
P1=~P1;
}
/////////////////////////////////////
//GeneratedInitializationFile//
/////////////////////////////////////
#include"C8051F410.h"
//Peripheralspecificinitializationfunctions,
//CalledfromtheInit_Device()function
voidPCA_Init()
{
PCA0MD&=~0x40;
PCA0MD=0x00;
}
voidTimer_Init()
{
TCON=0x40;
TMOD=0x10;
CKCON=0x02;
}
voidPort_IO_Init()
{
//P0.0-Unassigned,Open-Drain,Digital
//P0.1-Unassigned,Open-Drain,Digital
//P0.2-Unassigned,Open-Drain,Digital
//P0.3-Unassigned,Open-Drain,Digital
//P0.4-Unassigned,Open-Drain,Digital
//P0.5-Unassigned,Open-Drain,Digital
//P0.6-Unassigned,Open-Drain,Digital
//P0.7-Unassigned,Open-Drain,Digital
//P1.0-Unassigned,Open-Drain,Digital
//P1.1-Unassigned,Open-Drain,Digital
//P1.2-Unassigned,Open-Drain,Digital
//P1.3-Unassigned,Open-Drain,Digital
//P1.4-Unassigned,Open-Drain,Digital
//P1.5-Unassigned,Open-Drain,Digital
//P1.6-Unassigned,Open-Drain,Digital
//P1.7-Unassigned,Open-Drain,Digital
//P2.0-Unassigned,Open-Drain,Digital
//P2.1-Unassigned,Open-Drain,Digital
//P2.2-Unassigned,Open-Drain,Digital
//P2.3-Unassigned,Open-Drain,Digital
//P2.4-Unassigned,Open-Drain,Digital
//P2.5-Unassigned,Open-Drain,Digital
//P2.6-Unassigned,Open-Drain,Digital
//P2.7-Unassigned,Open-Drain,Digital
XBR1=0x40;
}
voidOscillator_Init()
{
OSCICN=0x82;
}
voidInterrupts_Init()
{
IE=0x20;
}
定时器2中断
/////////////////////////////////////
//GeneratedInitializationFile//
/////////////////////////////////////
#include"C8051F410.h"
//Peripheralspecificinitializationfunctions,
//CalledfromtheInit_Device()function
voidPCA_Init()
{
PCA0MD&=~0x40;
PCA0MD=0x00;
}
voidTimer_Init()
{
TMOD=0x01;
}
voidPort_IO_Init()
{
//P0.0-Unassigned,Open-Drain,Digital
//P0.1-Unassigned,Open-Drain,Digital
//P0.2-Unassigned,Open-Drain,Digital
//P0.3-Unassigned,Open-Drain,Digital
//P0.4-Unassigned,Open-Drain,Digital
//P0.5-Unassigned,Open-Drain,Digital
//P0.6-Unassigned,Open-Drain,Digital
//P0.7-Unassigned,Open-Drain,Digital
//P1.0-Unassigned,Open-Drain,Digital
//P1.1-Unassigned,Open-Drain,Digital
//P1.2-Unassigned,Open-Drain,Digital
//P1.3-Unassigned,Open-Drain,Digital
//P1.4-Unassigned,Open-Drain,Digital
//P1.5-Unassigned,Open-Drain,Digital
//P1.6-Unassigned,Open-Drain,Digital
//P1.7-Unassigned,Open-Drain,Digital
//P2.0-Unassigned,Open-Drain,Digital
//P2.1-Unassigned,Open-Drain,Digital
//P2.2-Unassigned,Open-Drain,Digital
//P2.3-Unassigned,Open-Drain,Digital
//P2.4-Unassigned,Open-Drain,Digital
//P2.5-Unassigned,Open-Drain,Digital
//P2.6-Unassigned,Open-Drain,Digital
//P2.7-Unassigned,Open-Drain,Digital
XBR1=0x40;
}
voidOscillator_Init()
{
OSCICN=0x82;
}
//Initializationfunctionfordevice,
//CallInit_Device()fromyourmainprogram
voidInit_Device(void)
{
PCA_Init();
Timer_Init();
Port_IO_Init();
Oscillator_Init();
}
voidmain()
{
Init_Device(