单片机实验实验一.docx
- 文档编号:9324316
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:18
- 大小:923.83KB
单片机实验实验一.docx
《单片机实验实验一.docx》由会员分享,可在线阅读,更多相关《单片机实验实验一.docx(18页珍藏版)》请在冰豆网上搜索。
单片机实验实验一
单片机原理实验报告
学生姓名
所在班级
实验组成员
实验成绩
吴双双
电子2班
吴炜吴梅梅
实验一使用C语言实现A口作为输入口、B口作为输出口
【实验目的】
掌握利用C语言来实现A口作为输入口、B口作为输出口的方法。
【实验设备】
1.装有Windows系统和µ’nSP™IDE集成开发环境的PC机一台,µ’nSP™十六位单片机实验箱一个。
2.本实验用到的实验箱硬件模块为:
SPCE061A核心及周边电路模块(包含32个I/O口),发光二极管电路模块,高低电平发生按键电路模块。
【实验要求】
1.编程要求:
编写C语言程序。
2.实现功能:
IOA口低八位接键盘,IOB口低八位接8个发光二极管,按下按键,控制点亮对应的发光二极管。
3.实验现象:
不同的发光二极管点亮表示有不同的键按下。
当第一个按键按下时,第一个发光二极管点亮,第i(1≤i≤8)个按键按下时,第(1≤i≤8)个发光二极管点亮。
【实验原理】
程序流程图:
【实验结果】
1、源程序清单:
#include"SPCE061A.h"
unsignedintKeyScan(void);
voidDelay(void);
intmain(void)
{
UnsignedintuiKey;
*P_IOA_Dir=0x0000;
*P_IOA_Attrib=0x0000;
*P_IOA_Data=0x0000;
*P_IOB_Dir=0xffff;
*P_IOB_Attrib=0xffff;
*P_IOB_Data=0x0000;
while
(1)
{
uiKey=KeyScan();
if(uiKey!
=0)
{
*P_IOB_Data=uiKey;
}
*P_Watchdog_Clear=0x0001;
}
}
unsignedintKeyScan(void)
{
unsignedintuiData;
unsignedintuiTemp;
uiData=*P_IOA_Data;
uiData=uiData&0x00ff;
if(uiData1=0)
{
Delay();
uiTemp=*P_IOA_Data;
uiTemp=uiTemp&0x00ff;
if(uiData1=uiTemp)
uiData=0;
}
returnuiData;
}
voidDelay(void)
{
unsignedintuiCount;
for(uiCount=0;iCount<=3000;uiCount++)
{
*P_Watchdog_Clear=0x0001;
}
}
2、程序运行结果:
现象文字描述:
当按下按键时,对应的二极管发光。
当第一个按键按下时,第一个发光二极管点亮。
【实验总结】
1、虽然老师在理论课时已经讲过实验的相关内容,但在实践时还是感到手足无措。
但所幸老师耐心的为我们讲解演示了实验,让我们最终完成了实验。
2、实践是检验真理的唯一标准,学习只有多动手才能深刻的理解。
实验不仅锻炼了我们的动手能力,也培养了同学的协作能力。
实验二定时器TimerA/B
【实验目的】
1.通过实验熟悉定时器TimerA/B的工作原理。
2.掌握预置数单元P_TimerA/B_Data和定时控制单元P_TimerA/B_Ctrl的设置方
3.掌握定时器TimerA/B的编程方法。
【实验设备】
1.装有Windows系统和µ’nSP™IDE集成开发环境的PC机一台,µ’nSP™十六位单片机实验箱一个。
2.本实验用到的实验箱硬件模块为:
SPCE061A核心及周边电路模块(包含32个I/O口),发光二极管电路模块。
【实验要求】
1.编程要求:
编写一个汇编语言程序。
2.实现功能:
设置不同的计数初值、不同的占空比和不同的时钟源,IOB8同时和一个发光二极管连接,用户可以通过观察二极管点亮的持续时间和熄灭持续的时间。
3.实验现象:
计数初值不同、占空比不同、时钟源不同,发光二极管的亮灭状态变化就不同。
【实验原理】
程序流程图:
【实验结果】
1、源程序清单:
#include"SPCE061A.h"
intmain(void)
{
*P_IOB_Dir=0xf0100;
*P_IOB_Attrib=0x0100;
*P_IOB_Data=0x0000;
*P_TimerA_Data=0xF800;
*P_TimerA_Ctrl=0x02B4;
While
(1)
{
*P_Watchdog_Clear=0x0001;
}
2、程序运行结果:
现象文字描述:
计数初值不同、占空比不同、时钟源不同,发光二极管的亮灭状态变化就不同。
【实验总结】
第二次实验有了第一次实验的基础,实验操作流畅了许多,实验的程序也比较简单,迅速的就完成了实验。
实验三IRQ0/IRQ1/IRQ2中断
【实验目的】
1.熟悉IRQ0、IRQ1、IRQ2的中断向量和中断源;
2.掌握中断控制单元P_INT_Ctrl、P_INT_Clear的设置方法;
3.掌握IRQ0、IRQ1、IRQ2中断的编程方法。
【实验设备】
装有Windows系统和µ’nSP™IDE集成开发环境的PC机一台,µ’nSP™十六位单片机实验箱一个。
2.本实验用到的实验箱硬件模块为:
SPCE061A核心及周边电路模块(包含32个I/O口),发光二极管电路模块。
【实验要求】
1.编程要求:
编写一个汇编语言程序。
2.实现功能:
打开并设置TimerA和TimerB定时器,并且开TimerA的IRQ1中断和TimerB的IRQ2中断,当有TimerA的IRQ1中断或者TimerB的IRQ2中断请求时,响应相应的中断服务程序,在中断服务中翻转I/O端口输出电平,以控制接在I/O端口的发光二极管的亮灭。
3.实验现象:
TimerA定时长度为2s,当进入TimerA的IRQ1中断后,翻转IOA口低四位输出电平以控制接在IOA低四位端口的发光二极管;TimerB定时长度为1s,当进入TimerB的IRQ2中断后,翻转IOB口低四位输出电平以控制接在IOB低四位端口的发光二极管。
程序运行时,可以观察到接在IOA低四位端口的发光二极管亮灭的周期为4s,而接在IOB低四位端口的为2s。
【实验原理】
程序流程图:
1.主程序流程图在主程序中,初始化A口、B口为同相低电平输入口,设置定时器的计数初值和时钟源频率以确定定时器溢出频率(本实验中TimerA和TimerB的时钟源频率都选为4096Hz,设置TimerA的定时时间为2s,设置TimerB的定时时间为1s),开IRQ0、IRQ1、IRQ2中断。
2.中断服务子程序流程图IRQ0、IRQ1、IRQ2中断服务子程序的流程图如图1-42。
IRQ1_TMA中断中,先进行寄存器压栈保护,IOA口低四位输出电平翻转,以翻转D4~D7四个发光二极管亮灭状态,清IRQ1_TMA中断标志,寄存器出栈,中断返回;IRQ1_TMB中断中,同样先进行寄存器压栈保护,IOB口低四位输出电平翻转,以翻转D8~D11四个发光二极管亮灭状态,清IRQ1_TMB中断标志,寄存器出栈,中断返回;IRQ0_fosc/1024中断中,先进行寄存器压栈保护,清IRQ0_fosc/1024中断标志,寄存器出栈,中断返回。
【实验结果】
1、源程序清单:
#include"SPCE061A.h"
intmain()
{
*P_IOA_Dir=0x000f;
*P_IOA_Attrib=0x000f;
*P_IOA_Data=0x000f;
*P_TimerA_Data=0xE000;
*P_TimerA_Ctrl=0x0034;
*P_IOB_Dir=0x000f;
*P_IOB_Attrib=0x000f;
*P_IOB_Data=0x000f;
*P_TimerB_Data=0xF000;
*P_TimerB_Ctrl=0x0104;
*P_INT_Ctrl=C_IRQ0_PWM|C_IRQ1_TMA|C_IRQ2_TMB;
asm("INTIRQ");
while
(1)
{
*P_Watchdog_Clear=0x0001;
}
}
中断程序
//isr.c
#include"SPCE061A.h"
voidBREAK(void)__attribute__((ISR));
voidFIQ(void)__attribute__((ISR));
voidIRQ0(void)__attribute__((ISR));
voidIRQ1(void)__attribute__((ISR));
voidIRQ2(void)__attribute__((ISR));
voidIRQ3(void)__attribute__((ISR));
voidIRQ4(void)__attribute__((ISR));
voidIRQ5(void)__attribute__((ISR));
voidIRQ6(void)__attribute__((ISR));
voidIRQ7(void)__attribute__((ISR));
voidBREAK(void)
{
//addyourcodehere
}
voidFIQ(void)
{
//addyourcodehere
}
voidIRQ0(void)
{
if(*P_INT_Ctrl&C_IRQ0_PWM);
{*P_INT_Clear=C_IRQ0_PWM;
}
}
voidIRQ1(void)
{
unsignedinti=0;
if(*P_INT_Ctrl&C_IRQ1_TMA)
{
i=*P_IOA_Data;
i^=0x000f;
*P_IOA_Data=i;
*P_INT_Clear=C_IRQ1_TMA;
}
}
voidIRQ2(void)
{
unsignedintj=0;
if(*P_INT_Ctrl&C_IRQ2_TMB)
{
j=*P_IOB_Data;
j^=0x000f;
*P_IOB_Data=j;
*P_INT_Clear=C_IRQ2_TMB;
}
}
voidIRQ3(void)
{
//addyourcodehere
}
voidIRQ4(void)
{
//addyourcodehere
}
voidIRQ5(void)
{
//addyourcodehere
}
voidIRQ6(void)
{
//addyourcodehere
}
voidIRQ7(void)
{
//addyourcodehere
}
2、程序运行结果:
现象文字描述:
程序运行时,可以观察到接在IOA低四位端口的发光二极管亮灭的周期为4s,而接在IOB低四位端口的为2s。
【实验总结】
这次实验相对前两次较难,既要源程序还要编写中断程序,在测试程序的过程中,由于计算错误的问题导致实验结果一直不对,沉下心来一个个从新检查计算,终于在不懈努力下最终完成了实验。
实验四IRQ5中断
【实验目的】
1.熟悉IRQ5的中断向量和中断源。
2.熟悉时基中断的应用。
3.掌握中断控制单元P_INT_Ctrl、P_INT_Clear的设置方法
4.掌握IRQ5中断的编程方法。
【实验设备】
装有Windows系统和µ’nSP™IDE集成开发环境的PC机一台,µ’nSP™十六位单片机实验箱一个。
2.本实验用到的实验箱硬件模块为:
SPCE061A核心及周边电路模块(包含32个I/O口),发光二极管电路模块。
【实验要求】
1.编程要求:
编写一个汇编语言程序。
2.实现功能:
IOA低四位IOA0~IOA3接D4~D7四个发光二极管,IOB低四位IOB0~IOB3接D8~D11四个发光二极管。
每响应一次IRQ5_2Hz中断,IOA0~IOA3四个端口输出电平翻转,以控制D4~D7四个发光二极管的亮灭状态。
每响应一次IRQ5_4Hz中断,IOB0~IOB3四个端口输出电平翻转控制D8~D11四个发光二极管的亮灭状态进行翻转。
3.实验现象:
D4~D7四个发光二极管的亮灭变化周期为1s,D8~D11四个发光二极管的亮灭变化周期为0.5s。
【实验原理】
程序流程图:
1.主程序流程图在主程序里,初始化IOA、IOB为同相低电平输出口,开IRQ5_4Hz和IRQ5_2Hz中断,进入主程序循环,执行清看门狗操作。
主程序流程图如图
2.中断服务程序流程图在中断服务程序里,每响应一次IRQ5_2Hz中断,IOA0~IOA3四个端口输出电平翻转控制D4~D7四个发光二极管的状态向反方向变化。
每响应一次IRQ5_4Hz中断,IOB0~IOB3四个端口输出电平翻转控制D8~D11四个发光二极管的状态向反方向变化。
中断服务程序流程图如图
【实验结果】
1、源程序清单:
intmain()
{
*P_IOA_Data=0x0000;
*P_IOA_Dir=0x00ff;
*P_IOA_Attrib=0x00ff;
*P_IOB_Data=0x0000;
*P_IOB_Dir=0x00ff;
*P_IOB_Attrib=0x00ff;
*P_INT_Ctrl=C_IRQ5_2Hz|C_IRQ5_4Hz;
asm("INTIRQ");
while
(1)
*P_Watchdog_Clear=0x0001;//addyourcodehere
return0;
}
中断程序:
//isr.c
#include"SPCE061A.h"
voidBREAK(void)__attribute__((ISR));
voidFIQ(void)__attribute__((ISR));
voidIRQ0(void)__attribute__((ISR));
voidIRQ1(void)__attribute__((ISR));
voidIRQ2(void)__attribute__((ISR));
voidIRQ3(void)__attribute__((ISR));
voidIRQ4(void)__attribute__((ISR));
voidIRQ5(void)__attribute__((ISR));
voidIRQ6(void)__attribute__((ISR));
voidIRQ7(void)__attribute__((ISR));
voidBREAK(void)
{
//addyourcodehere
}
voidFIQ(void)
{
//addyourcodehere
}
voidIRQ0(void)
{
//addyourcodehere
}
voidIRQ1(void)
{
//addyourcodehere
}
voidIRQ2(void)
{
//addyourcodehere
}
voidIRQ3(void)
{
//addyourcodehere
}
voidIRQ4(void)
{
//addyourcodehere
}
voidIRQ5(void)
{inti;
if(*P_INT_Ctrl&C_IRQ5_4Hz)
{
i=*P_IOB_Data;
i^=0x000f;
*P_IOB_Data=i;
*P_INT_Clear=C_IRQ5_4Hz;
}
else
{
i=*P_IOA_Data;
i^=0x000f;
*P_IOA_Data=i;
*P_INT_Clear=C_IRQ5_2Hz;
}
//addyourcodehere
}
voidIRQ6(void)
{
//addyourcodehere
}
voidIRQ7(void)
{
//addyourcodehere
}
2、程序运行结果:
现象文字描述:
D4~D7四个发光二极管的亮灭变化周期为1s,D8~D11四个发光二极管的亮灭变化周期为0.5s。
【实验总结】
此次实验程序是在上一次实验程序上做的修改比较迅速,但实验结果一直出不来,检查过后发现是试验箱的接触不良引起的,在更换试验箱后顺利的得出了结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验