单片机实验报告

合集下载

单片机计数器实验报告

单片机计数器实验报告

计数器实验报告㈠实验目的1.学习单片机内部定时/计数器的使用和编程方法;2.进一步掌握中断处理程序的编程方法。

㈡实验器材1.G6W仿真器一台2.MCS—51实验板一台3.PC机一台4.电源一台5.信号发生器一台㈢实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms 来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1秒后再次测试。

㈣实验说明1.本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入定时器T0。

单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。

2.计数脉冲由信号发生器输入(从T0端接入)。

3.计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421码表示,个位用L8~L5的8421码表示4.将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动次数并显示㈤实验框图(见下页)程序源代码ORG 00000H LJMP MAINORG 001BH ;T0的中断入口地址AJMP MAIN1MAIN:MOV SP,#60HMOV TMOD,#15H ;设置T1做定时器,T0做计数器,都于方式1工作MOV 20H,#14H ;装入中断次数MOV TL1,#0B0H ;装入计数值低8位MOV TH1,#3CH ;装入计数值高8位MOV TL0,#00H计数器主程序框图中断返回恢复现场NY 是否到1秒?显示置T1定时常数INT _T1入口保护现场清T0计数值中断服务程序框图开 始置T0,T1模式及初始值设置初始常数开中断等 待MOV TH0,#00HSETB TR1 ;启动定时器T1SETB TR0 ;启动计数器T0SETB ET1 ;允许T1中断SETB EA ;允许CPU中断SJMP $ ;等待中断MAIN1:PUSH PSWPUSH ACCCLR TR0CLR TR1 ;保护现场MOV TL1,#0B0H ;装入计数值低8位MOV TH1,#3CH ;装入计数值高8位,50ms;允许T1中断DJNZ 20H,RETUNT ;未到1s,继续计时MOV 20H ,#14H;1s到重新开始SHOW: ;显示计数器T0的值MOV R0,TH0 ;读计数器当前值MOV R1,TL0MOV A,R1MOV B,#0AHDIV AB;将计数值转为十进制MOV C,ACC.3 ;显示部分,将A中保存的十位赋给L0~L3 MOV P1.0,CMOV C,ACC.2MOV P1.1,CMOV C,ACC.1MOV P1.2,CMOV C,ACC.0MOV P1.3,CMOV A,B ;将B中保存的各位转移到A中MOV C,ACC.3 ;将个位的数字显示在L4~L7上MOV P1.4,CMOV C,ACC.2MOV P1.5,CMOV C,ACC.1MOV P1.6,CMOV C,ACC.0MOV P1.7,CRETUNT:MOV TL0,#00H ;将计数器T0清零MOV TH0,#00HSETB TR0SETB TR1POP ACCPOP PSWRETI ;中断返回在频率为1000HZ时,L0~L7显示为50;频率为300HZ时,L0~L7显示为15,结果正确,程序可以正确运行。

实验报告(单片机实验报告)

实验报告(单片机实验报告)

1 双字节无符号数加法例1: 双字节无符号数加法(R0 R1)+(R2 R3) → (R4 R5),R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节。

已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h)假设其和不超过16位。

请编程。

org 0000hLjmp startorg 0050hstart:mov R0,#93hmov R1, #79hmov R2,#25hmov R3, #0a4hmov A,R1ADD A,R3mov R5,Amov A,R0ADDC A,R2mov R4,Ass: jmp ssend2双字节无符号数减法例2: 双字节无符号数相减(R0 R1)-(R2 R3) → (R4 R5)。

R0、 R2、R4存放16位数的高字节, R1、 R3、 R5存放低字节,已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h);请编程。

同学自己可以设置被减数与减数数值org 0000hLjmp startorg 0050hstart:mov R0,#93hmov R1,#79hmov R2,#25hmov R3,#0a4hmov A,R1CLR CSUBB A,R3mov R5,Amov A,R0SUBB A,R2mov R4,Ass: jmp ssend3双字节数乘以单字节数例3: 利用单字节乘法指令,进行双字节数乘以单字节数运算。

若被乘数为16位无符号数, 地址为M1(30H) 和M1+1(31H)(低位先、高位后), 乘数为8位无符号数, 地址为M2(32H), 积由高位到低位存入R2、 R3和R4三个寄存器中。

30H,31H,32H内容 12H,34H,56H ;org 0000hLjmp startorg 0050hstart:mov 30h,#12hmov 31h,#34hmov 32h,#56hmov a,(30h)mov b,(32h)mul abmov R3,bmov R4,amov a,(31h)mov b,(32h)mul abadd A,R3mov R3,Amov A,bADDC A,#00hmov R2,Ass: jmp ssend4. 把8位二进制数转换为3位BCD例4: 利用除法指令把累加器A中的8位二进制数转换为3位BCD 数, 并以压缩形式存放在地址M1、 M2单元中。

单片机静态数码管实验报告

单片机静态数码管实验报告

单片机静态数码管实验报告一、引言静态数码管是一种常用的显示器件,广泛应用于各种仪器仪表、计时器、计数器等场合。

本实验旨在通过单片机控制静态数码管,实现数字的显示功能。

二、实验原理静态数码管由若干个发光二极管组成,每个发光二极管代表一个数字。

通过控制每个发光二极管的亮灭,可以显示不同的数字。

单片机通过控制数码管的共阳极或共阴极,以及发光二极管的亮灭,实现数字的显示。

三、实验器材1. 单片机开发板2. 静态数码管3. 连接线四、实验步骤1. 连接电路:将静态数码管的共阳极或共阴极与单片机开发板相应的IO口连接。

2. 编写程序:使用C语言编写程序,通过控制IO口的高低电平控制数码管的亮灭,实现数字的显示。

3. 烧录程序:将编写好的程序烧录到单片机开发板中。

4. 调试程序:通过调试程序,观察数码管是否能正常显示数字。

5. 结果分析:根据实验结果,分析程序的正确性及数码管显示的准确性。

6. 实验总结:总结实验过程中的问题及解决方法,并对实验结果进行分析和评价。

五、实验结果经过实验,我们成功地通过单片机控制静态数码管,实现了数字的显示。

数码管能够根据程序的控制,显示出不同的数字,显示效果良好,准确度高。

六、实验分析通过本实验,我们掌握了单片机控制静态数码管的方法和技巧。

在实验过程中,我们发现控制数码管显示数字的关键在于正确地控制IO口的高低电平。

同时,我们还发现静态数码管显示数字的亮度和清晰度与电源电压和电流的稳定性有关,需要合理选择电源参数。

七、实验应用静态数码管广泛应用于各种仪器仪表、计时器、计数器等场合。

通过单片机控制静态数码管,可以实现各种数字的显示功能,满足不同场合的需求。

八、实验总结通过本实验,我们深入了解了单片机控制静态数码管的原理和方法。

通过编写程序和调试程序,我们成功地实现了数字的显示功能。

实验过程中,我们遇到了一些问题,但通过不断的调试和尝试,最终解决了问题。

通过本次实验,我们不仅加深了对单片机原理的理解,还提升了实际操作和问题解决的能力。

单片机实验报告 附含说明书

单片机实验报告  附含说明书

第一章 DICE-5208K开发型单片机综合实验仪概述一、系统简介DICE-5208K型单片机实验系统由DICE-5208K开发型单片机综合实验箱、DICE-3000型仿真器、扩展卡和DICE-51仿真开发系统软件等组成。

是《MCS-51单片机原理与接口》、《单片机控制技术》、《C8051Fxxx高速SOC单片机原理及应用》、《EDA》、《VHDL硬件描述语言》、《CPLD/FPGA应用基础》等课程教学的配套实验设备。

新增加了几乎所有最实用、新颖的接口电路(如1 WIRE /I2C/SPI总线等)和通讯类接口实验(如USB2.0通讯/TCP/IP网络通讯/CAN总线/红外线收发等)。

可进行MCS-51、C8051F嵌入式单片机、CPLD/FPGA等课程的开放式实验教学。

二、主要特点1.该实验系统配置DICE-3000型高性能MCS-51硬件仿真器,64K数据空间,64K程序空间全部开放,不占用CPU资源,采用双CPU模式,仿真CPU和用户CPU独立运行,上位仿真软件支持汇编、C语言、PL/M语言。

可运行于WIN98/2000/NT/XP操作系统平台。

2.实验系统带有ISP在线下载电路,学生在完成实验后可脱离仿真机和PC机独立运行学生自行设计的单片机系统。

(可在线编程AT89S51/52/53系列单片机)。

3.该实验系统可扩展C8051F020嵌入式实验开发模块, 并配有DICE-EC5型USB高速通讯仿真器,通过4脚的JTAG接口可以进行非侵入式、全速的在线系统调试、仿真;集成开发环境支持Silicon Labs IDE和KEIL C软件。

4.该实验系统可扩展CPLD/FPGA模块,并配有相应的并口下载电路,轻松变成一台EDA实验开发平台。

5.该实验系统可扩展“数控式电子演示装置”,该装置是本公司的专利产品,结合上位演示软件和USB接口,可为该实验系统扩展多达十五个生动、形象、复杂的实验,其中大部分是闭环实验,实验践性非常强。

单片机实训报告总结

单片机实训报告总结

单片机实训报告总结篇一:51单片机实训报告“51单片机”精简开发板的组装及调试实训报告为期一周的单片机实习已经结束了。

通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解“51”单片机精简开发板的焊接方法。

同时培养我们理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。

此次实训主要有以下几个方面:一、实训目的1.了解“51”精简开发板的工作原理及其结构。

2.了解复杂电子产品生产制造的全过程。

3.熟练掌握电子元器件的焊接方法及技巧,训练动手能力,培养工程实践概念。

4.能运用51单片机进行简单的单片机应用系统的硬件设计。

5.掌握单片机应用系统的硬件、软件调试方法二、实验原理流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

它的电气性能指标:输入电压:~6V,典型值为5V。

可用干电池组供电,也可用直流稳压电源供电。

如图所示:本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。

三、硬件组成1、晶振电路部分单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。

他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。

2、复位端、复位电路给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常。

单片机占空比为50%的矩形波实验报告

单片机占空比为50%的矩形波实验报告

单片机占空比为50%的矩形波实验报告单片机实验报告一、实验目的 1. 了解 32 位单片机(STM32 系列)原理及其应用,熟悉单片机的资源,掌握单片机的最小系统设计及扩展技术,掌握单片机的编程语言。

2. 通过本实验了解 LCD 液晶工作原理,能通过编程操作液晶的显示。

3. 通过本实验介绍以太网的通信原理,能够在计算机与实验系统间通过以太网展开数据传输。

二、实验设备 STM32 实验系统一套,PC 机一台。

三、实验原理 1. I/O 口及定时器实验:STM32 的 GPIO 口掌控 4 个发光二极管,介绍其硬件相连接方式,学会采用 STM32 的一个定时器,掌控对定时器计时方式的编程。

编写程序循环照亮 4 个发光二极管,掌控照亮时间为 1 秒钟闪光。

2. LCD 实验:掌握 STM32 单片机与液晶之间的硬件连接方式,单片机如何驱动液晶进行显示。

3. 串行口通信实验:掌控 STM32 单片机与计算机之间的硬件相连接方式,介绍二者之间的传输协议,展开数据传输。

四、内容与步骤 1. 学会使用 IAR 的编译链接调试环境,熟悉 IAR 中有关 STM32 使用到的库,并能顺利建立包含各种库文件的工程。

2. I/O 口实验:在创建工程的基础上能够照亮发光二极管。

3. 定时器实验:循环定时(用定时器做)点亮 4 个灯,即每 1 秒闪烁点亮一个灯,循环往复(或叫跑马灯实验)。

4. LCD 实验:通过自行撰写库文件和介绍液晶显示字库,能够在液晶上表明“北京航空航天大学机械工程及自动化学院”字样。

5. 串行口通信实验:编写串行口通信实验程序,能在计算机与 STM32 系统间进行ASCII 码的传输。

五、关键源代码1. I/O 口及定时器实验 //通过定时器 4 中断函数实现跑马灯 voidTIM4_IRQHandler() //定时器 4 中断函数 { if (TIM_GetITStatus(TIM4,TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM4, TIM_IT_Update);switch (aaa) { case 0:{ GPIO_ResetBits(GPIOD, GPIO_Pin_11); GPIO_SetBits(GPIOD, GPIO_Pin_8);break;} case 1:{ GPIO_ResetBits(GPIOD, GPIO_Pin_8);GPIO_SetBits(GPIOD, GPIO_Pin_9);break;} case 2:{ GPIO_ResetBits(GPIOD,GPIO_Pin_9); GPIO_SetBits(GPIOD, GPIO_Pin_10); break;} case3:{ GPIO_ResetBits(GPIOD, GPIO_Pin_10); GPIO_SetBits(GPIOD, GPIO_Pin_11);break;} } aaa++; if(aaa==4) aaa=0; } } int main() { RCC_Configuration();//配置系统时钟 NVIC_Configuration(); //配置中断 GPIO_Initialize(); //初始化 I/O 口 TIME_Initialize(); //初始化定时器 4 while(1); } 2. LCD 实验//在字体库文件中创建汉字点阵数组 hanzi[14][32],而后逐个显示字体库中的汉字const unsigned charhanzi[14][32]={ {0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x44,0x04,0x4E,0x7C,0x58,0x04,0x60,0x04,0x40,0x04,0x40,0x04,0x40,0x0C,0x40,0x34,0x42,0xE4,0x42,0x44,0x42,0x04,0x3E,0x00,0x00}, //北{0x02,0x00,0x01,0x08,0x7F,0xFC,0x00,0x00,0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x01,0x00,0x09,0x30,0x19,0x18,0x31,0x0C,0x41,0x08,0x05,0x00,0x02,0x00}, //京…,} //汉字图形数组,这里只得出了“北”和“京”,全部的存有“汤志达贾英杰北京航空航天大学” void LCD_ShowHZ(u8 x, u16 y, u8 num, u8 size, u16 PenColor,u16 BackColor) //表明单个 16*16 汉字 { #define MAX_CHAR_POSX 232 #defineMAX_CHAR_POSY 304 u8 temp; u8 pos,t; if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY) //少于表明范围,选择退出 return; if(XY) // 竖屏表明{ LCD_WindowMax(x,y,x+size,y+size); //设置窗口 LCD_WriteReg(0x11, 0x);LCD_SetCursor(x, y); } else /横屏表明 { LCD_WindowMax(x,y-size,x+size,y); //设置窗口 LCD_WriteReg(0x11, 0x); LCD_SetCursor(x,y-1); //设置光标边线 } LCD_WriteRAM_Prepare(); //已经开始载入GRAM for(pos=0;posRCC_Configuration(); //时钟布局 LCD_Init(); //初始化 LCD模块 LCD_Clear(WHITE); for(u8 i=0;i<3;i++) LCD_ShowHZ(50+i*16, 100, i, 16, RED, WHITE); for(;i<6;i++) //表明“贾英杰” LCD_ShowHZ(130+i*16, 100, i, 16,RED, WHITE); for(;i<14;i++) //表明“北京航空航天大学” LCD_ShowHZ(50+i*16,200, i, 16, RED, WHITE); while(1); } 3. 串行口通信实验 //通过串口通信不断向上位机传送“buaa” void Uart1_PutChar(u8 ch) //传送单个字符{ USART_SendData(USART1, ch); while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET); } int main() { RCC_Configuration();USART1_Configuration() ; //须要恰当设置波特率 while(1) { char a[10]="buaa"; for(int i=0;a[i]!="\0";i++) Uart1_PutChar(a[i]); } } 任课教师评语:任课教师盖章:考核日期:年月日单片机实验单片机实验七单片机实验2单片机实验十三1实验内容报告单RCC_Configuration(); //时钟配置 LCD_Init(); //初始化 LCD 模块LCD_Clear(WHITE); for(u8 i=0;i<3;i++) LCD_ShowHZ(50+i*16, 100, i, 16, RED, WHITE); for(;i<6;i++) //显示“贾英杰” LCD_ShowHZ(130+i*16, 100, i, 16, RED, WHITE); for(;i<14;i++) //显示“北京航空航天大学” LCD_ShowHZ(50+i*16, 200,i, 16, RED, WHITE); while(1); } 3. 串行口通信实验 //通过串口通信不断向上位机发送“buaa” void Uart1_PutChar(u8 ch) //发送单个字符{ USART_SendData(USART1, ch); while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET); } int main() { RCC_Configuration();USART1_Configuration() ; //需正确设置波特率 while(1) { char a[10]="buaa"; for(int i=0;a[i]!="\0";i++) Uart1_PutChar(a[i]); } } 任课教师评语:任课教师盖章:考核日期:年月日。

单片机外部中断实验报告

单片机外部中断实验报告

单片机外部中断实验报告实验目的:1、理解单片机外部中断的原理和用途;2、掌握单片机外部中断的配置和使用方法。

实验器材:1、STC15W408AS单片机开发板;2、简单的电路连接器;3、按钮开关。

实验原理:单片机外部中断是通过外部硬件信号触发单片机的中断请求,在单片机运行过程中,当外部信号满足特定条件时,会触发中断,并暂停当前的运行程序,转而执行中断服务程序。

通过外部中断,可以实现对外部事件的实时处理。

实验步骤:1、将按钮开关与单片机开发板连接,将按钮开关的一端与单片机的INT0引脚连接,另一端与GND连接。

2、在开发板上连接好电源并供电。

3、打开Keil软件,新建一个工程,并选择合适的单片机型号。

4、配置单片机的外部中断功能,设置INT0引脚为中断输入。

5、编写中断服务程序,当INT0引脚检测到边沿信号时,执行中断服务程序,并在其中加入相应的处理代码。

6、编写主程序,配置相关的引脚和寄存器,使单片机进入中断模式,接受外部中断信号,并执行中断服务程序。

7、下载程序到单片机开发板上,运行程序。

8、按下按钮开关,触发外部中断,并查看实验结果。

实验结果:当按下按钮开关时,实时触发外部中断,单片机停止当前程序的运行,进入中断模式,并执行中断服务程序中的相应代码。

实验总结:通过这次实验,我对单片机的外部中断有了更深入的理解,并学会了如何使用外部中断实现对外部事件的及时处理。

外部中断广泛应用于各种实时系统和设备中,具有很大的实用价值。

在以后的学习和实践中,我会进一步掌握和应用单片机的外部中断功能。

单片机流水灯实验报告

单片机流水灯实验报告

单片机流水灯实验报告引言单片机是一种集成电路,可以通过编程来控制不同的功能。

其中,流水灯是一个最简单的单片机实验项目,也是学习单片机的第一步。

本篇实验报告将详细介绍如何通过使用 AVR 单片机来实现一个流水灯的控制器。

实验原理流水灯的原理很简单,就是通过一个方向控制信号,以及一定的时间延时控制来逐步点亮和熄灭多个 LED 灯。

在本次实验中,我们将使用 AVR ATmega328P 单片机,它可以通过编程来实现流水灯的控制功能。

实验步骤1. 硬件准备将 ATmega328P 单片机插入到开发板中,并使用杜邦线将单片机的引脚连接到各个 LED 灯。

我们需要将一个引脚连接到方向控制信号,用于控制灯的点亮方向。

同时,我们还需要连接一个电位器,用于调节流水灯的速度。

2. 程序设计使用 Arduino 开发环境来编写 AVR 单片机的程序。

首先需要包含头文件 avr/io.h 和 util/delay.h,并定义输入输出引脚。

然后,我们需要定义一个名为“led” 的一个数组,来存储各个 LED 灯的输出状态。

同时,还需要定义一个变量“dir”,来表示流水灯的方向。

在程序主循环中,我们使用 for 循环来遍历各个 LED 灯。

同时,根据“dir”变量的不同,我们可以实现流水灯的正向和反向控制。

另外,我们还需要使用“_delay_ms()”函数来延时一定的时间,实现流水灯的闪烁效果。

3. 程序烧录使用 AVR ISP 编程器将编写好的程序烧录到单片机中。

在烧录过程中需要设置正确的程序和芯片类型,并选择正确的口线连接方式。

实验结果经过实际测试,我们成功地实现了一个流水灯控制器。

在调节电位器之后,灯的闪烁速度可以得到不同的调整。

同时,也可以通过改变方向控制信号来改变流水灯的运动方向。

结论通过本次实验可以学习到如何使用 AVR 单片机来实现一个简单的流水灯控制器。

通过编写程序、烧录编译等过程,可以加深对单片机的基础知识和理解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PIC单片机原理与应用实验报告学校:学院:班级:姓名:学号:指导教师:实验一I/O端口实验一、实验目的(1)掌握MPLAP IDE集成开发环境的基本操作。

(2)掌握单片机的I/O端口的设计方法。

(3)掌握在线调试器的使用方法。

(4)学会查阅相关数据手册。

二、实验仪器设备(1)PC机一台;(2)MPLAP IDE开发软件一套;(3)PICkit3在线调试器一套;(4)APP009实验板一块;三、实验要求(1)设计发光LED灯闪烁程序,下载调试,验证功能。

(2)设计流水灯程序,或其他花样彩灯程序,下载调试,验证功能。

(3)设计按按键加1计数程序,下载调试,验证功能。

四、实验步骤(1)连接在线调试器PICkit3、APP009实验板和计算机;(2)打开MPLAP IDE集成开发环境软件,点击Debugger>Select Tools>PICkit 3 选择调试工具;(3)点击Debugger>Settings,在Settings窗口中点击Power栏,选择由PICkit3向实验板供电;(4)完成实现发光LED灯闪烁实验;程序代码:#include <p30f4011.h>void delay(void);int main(){while(1){TRISEbits.TRISE0 = 0; //RE0设置为输出(1输入,0输出);TE0 =1; //RE0=1输出高电平+5V,亮灯delay(); //延时TE0 =0; //RE0=0输出低电平0V,灭灯delay(); //延时}}void delay(void){long int i;for (i=0;i<65000;i++);}实验现象:将程序下载到实验板上,运行程序,LED闪烁,通过改变延时函数改变延时时间,进而可以改变LED闪烁的频率。

(5)完成实现流水灯或花样彩灯实验;程序代码:#include <p30f4011.h>void delay(void);int main(void){int i;int ledcode[6]={0x01,0x02, 0x04, 0x08, 0x10, 0x20};TRISE =0x00; //RE0-RE5配置为输出while(1){for (i=0;i<6;i++){LATE=ledcode[i]; //按状态循环点灯delay(); //延时}}}void delay(void){long int i;for (i=0;i<65000;i++);}实验现象:将程序下载到实验板上,运行程序,LED按照设定的规律循环点亮和熄灭,通过改变数组ledcode的元素,可以方面地实现流水灯或花样彩灯的效果。

(6)完成实现按按键加1计数实验。

程序代码:#include <p30f4011.h>void delay(void);int main(void){int adddata=0; //ledcode[6] 存放输出数据TRISE =0x0100; //将RE0-RE5配置为输出0,RE8配置为输入 1TRISBbits.TRISB6=1;while(1){if (PORTEbits.RE8 ==0) //查询按键S8是否按下{delay(); //延时消抖if (PORTEbits.RE8 == 0) //再次查询按键S8是否按下adddata++; //计数LATE=adddata; //输出delay();}if (PORTBbits.RB6 ==0) //查询按键S8是否按下{delay(); //延时消抖if (PORTBbits.RB6 == 0) //再次查询按键S8是否按下adddata--; //计数LATE=adddata; //输出delay();}}}void delay(void){int i;for (i=0;i<20000;i++);}实验现象:将程序下载到实验板上,运行程序,按一下S8,就计一个数,该数以二进制形式通过LED显示出来。

五、回答问题(1)简述3个实验任务的程序设计方法;答:通过配置相关寄存器,设置I/O口是作为输入口还是输出口。

利用循环加延时实现花样彩灯,利用I/O口输入检测实现按键控制。

(2)分析观察到的实验结果;答:前两个实验是I/O口输出实验,通过LED输出,实现彩灯效果。

而第三个实验是I/O 口输入检测实验,实现按键控制。

(3)分析PIC单片机IO端口输入与输出操作的不同之处。

答:IO端口输出要将IO端口配置为输出模式,然后将数据写入对应的寄存器,实现数据输出;IO端口输入要将IO端口配置为输入模式,在进行按键检测时还要考虑延时消抖。

实验二外部中断实验一、实验目的(1)掌握中断的工作原理及设计方法。

(2)掌握多中断优先级处理原则。

(3)掌握多中断嵌套的工作原理(4)学会查阅相关数据手册。

二、实验仪器设备(1)PC机一台;(2)MPLAP IDE开发软件一套;(3)PICkit3在线调试器一套;(4)APP009实验板一套;三、实验要求(1)设计单中断程序并下载调试,掌握中断响应原理及过程。

(2)设计多中断程序并下载调试,掌握多中断时优先级处理原则。

(3)修改多中断程序里的嵌套设置,掌握多中断嵌套工作原理。

四、实验步骤(1)连接在线调试器PICkit3、实验板和计算机;(2)打开MPLAP IDE集成开发环境软件,点击Debugger>Select Tools>PICkit 3 选择调试工具;(3)点击Debugger>Settings,在Settings窗口中点击Power栏,选择由PICkit3向实验板供电;(4)完成单中断程序实验;程序代码:#include <p30f4011.h>void delay(void);void Initializeint0(){ IFS0bits.INT0IF = 0; //清除INT0的中断标志IPC0bits.INT0IP = 7; //中断优先级为7IEC0bits.INT0IE = 1; //使能中断INTCON2bits.INT0EP=1;}void __attribute__((__interrupt__)) _INT0Interrupt(void){ IFS0bits.INT0IF = 0; //清INT0中断标志LATE =0x3f; //6个LED灯全亮delay(); //延时}int main(){Initializeint0(); //调用INT0初始化程序int ledcode[6]={0x01,0x02, 0x04, 0x08, 0x10, 0x20};int i;TRISE =0x0100; //RE8配置为输入,RE0-RE5配置为输出while(1){for (i=0;i<6;i++){LATE=ledcode[i]; //按状态循环点灯delay();}}}void delay(void){long int i;for (i=0;i<65000;i++);}实验现象:将程序下载到实验板上,运行程序,无中断时程序执行流水灯,按下按键(中断)时6个发光LED全亮,中断结束返回后继续执行流水灯程序。

(5)完成多中断程序实验;程序代码:#include <p30f4011.h>void delay(void);void Initializeint0(){ IFS0bits.INT0IF = 0; //清除INT0的中断标志IPC0bits.INT0IP = 7; //中断优先级为7IEC0bits.INT0IE = 1; //使能中断}void Initializeint2(){ IFS1bits.INT2IF = 0; //清除INT1的中断标志IPC5bits.INT2IP = 5; //中断优先级为5IEC1bits.INT2IE = 1; //使能中断}void __attribute__((__interrupt__)) _INT0Interrupt(void){ IFS0bits.INT0IF = 0; //清INT0中断标志PORTEbits.RE0 =1; //D1亮delay(); //延时PORTEbits.RE0 =0; //D1灭灯}void __attribute__((__interrupt__)) _INT2Interrupt(void){ IFS1bits.INT2IF = 0; //清INT0中断标志PORTEbits.RE2 =1; //D3亮delay(); //延时PORTEbits.RE2 =0; //D3灭灯}int main(){Initializeint0(); //调用INT0初始化程序Initializeint2(); //调用INT0初始化程序TRISE =0x0100; //RE8配置为INT0输入,RE0-RE5配置为输出TRISDbits.TRISD1=1; //RD1配置为INT2输入,INTCON1bits.NSTDIS=0;while(1){}}void delay(void){int j;long int i;for (j=0;j<5;j++){for (i=0;i<65000;i++);}}实验现象:将程序下载到实验板上,运行程序,按键S8链接5管脚(RE8端口)做为外部中断INT0使用;JP30连接Vdd与管脚18(RD1端口),做为外部中断INT2使用。

INT0中断产生后点亮D1,INT2中断产生后点亮D3。

通过改变程序可以改变对应的中断优先级。

五、回答问题(1)简述中断程序设计方法;答:编写中断初始化程序,设置并使能对应的中断;编写中断服务程序;编写主程序,调用初始化程序,实现功能;(2)分析单中断实验结果,总结中断处理过程;答:来中断时,进入中断服务程序,执行完毕后,返回中断处继续执行原来的程序。

(3)分析多中断实验结果,总结优先级处理原则;答:来中断时,进入中断服务程序,若此时又来中断,则要判断优先级。

规则是优先级高的中断可以打断优先级低的中断,形成中断嵌套;但是优先级低的中断不能打断优先级高的中断。

(4)分析多中断实验结果,总结中断嵌套工作原理。

答:优先级高的中断可以打断优先级低的中断,形成中断嵌套;但是优先级低的中断不能打断优先级高的中断。

实验三定时器实验一、实验目的(1)掌握单片机定时器的工作原理。

(2)掌握单片机定时器的设计方法。

(3)学会查阅相关数据手册。

二、实验仪器设备(1)PC机一台;(2)MPLAP IDE开发软件一套;(3)PICkit3在线调试器一套;(4)APP009实验板一套;三、实验要求(1)任选定时器模块,设计间隔1s/5s/10s的流水灯程序并实现功能。

相关文档
最新文档