实验二 PIC 输出比较实验
PCL实验报告
目录一、编程软件的使用 (2)1.1 创建工程 (2)1.2 工程文件保存 (3)1.3 设计CX-Programmer文件 (3)1.4 在PLC试验箱中连线 (4)1.5 程序下载 (5)1.6 修改及重新运行 (7)二、编程操作 (8)2.1 实习二第三题 (8)2.1.1 I/O分配 (8)2.1.2 梯形图 (8)2.1.3 指令程序 (8)2.1.4 试验箱连线 (9)2.2 实习二第五题 (9)2.2.1 I/O分配 (9)2.2.2 梯形图 (10)2.2.3 指令程序 (10)2.2.4 试验箱连线 (11)2.3 实习三第四题 (11)2.3.1 I/O分配 (11)2.3.2 梯形图 (12)2.3.3 指令程序 (13)2.3.4 试验箱连线 (13)三、学习体会 (13)一、编程软件的使用1.1 创建工程在计算机的桌面上找到 PLC 逻辑器件软件CX-Programmer的快捷方式图标,双击后打开CX-Programmer的工作界面,然后单击菜单栏中的【新建】按钮,弹出如图1.1.1所示的工作菜单,在【设备类型中】选择CPM1(CPM1A),然后单击右边的【设定(S)】,进入设备类型CPM1(CPM1A)设置,单击CPU类型,选择【CPU20】,如图1.1.2所示,然后单击【确定】按钮即CX-Programmer 工程文件创建完成,如图1.1.3所示。
图1.1.1 图1.1.2图1.1.31.2 工程文件保存将建立好的CX-Programmer工作工程文件进行保存,用鼠标单击保存图标,或单击菜单栏中的保存按钮,或使用快捷键Ctrl+S,弹出如图1.2所示的对话框,在【保存在(PLC)】中选择保存路径,在下端【文件名】中输入保存的文件名,然后单击保存按钮,完成保存。
若已经创建好了一个文件,可直接将之前创建好的工程文件打开。
图1.21.3 设计CX-Programmer文件将所选择的工具图输入到编辑界面上进行设计,如图1.3.1所示;在设计好之后就可以按下编译按钮进行编译,如果全编译通过则在工作界面的最下方会提示无错误,如果编译有错,则会提示编译不通过。
PIC24系列单片机原理与开发 第10章 输入捕捉、输出比较和PWM
输入捕捉缓冲器空标志位: 1 = 输入捕捉缓冲器非空,至少可再读一次缓冲器中的捕捉值 0 = 输入捕捉缓冲器为空
2
PIC24 系列单片机原理与开发 by Zeng
2012-6-13
bit 2-0
ICM<2:0>
输入捕捉模式选择: 111 = 当器件在休眠或空闲模式时,输入捕捉仅作中断功能 (唤醒CPU)
10.2.7 输入捕捉的中断
根据用户对位域 ICI<1:0>(ICxCON<6:5>)的设置,输入捕捉模块在若干次捕捉事件(“捕 捉事件”定义为将捕捉的定时器值写入捕捉缓冲器中)后使中断标志位 ICxIF 置“1”。若 其允许中断控制位(ICxIE)为“1”且优先级(ICxIP)大于当前 CPU 的优先级,则 CPU 响 应输入捕捉产生的中断。
15
这种模式是将的输入信号分频后再检测其 上升沿进行捕捉。分频系数只有两种:4 分频 和 16 分频。将控制寄存器中的 ICM<2:0>(ICxCON<2:0>)设置成 0b100 时为 4 分频,捕捉 模块对 ICx 引脚上的每 4 个上升沿作一次捕捉;位域 ICM<2:0>(ICxCON<2:0>)设置成 0b101 时为 16 分频,捕捉模块对 ICx 引脚上的每 16 个上升沿作一次捕捉。
输入捕捉模块有 4 级先进先出(FIFO)捕捉缓冲器,用于记录外部事件的发生时间(捕 捉的定时器值)。用户可以选择产生 CPU 中断的捕捉事件数。CPU 在休眠和空闲模式期 间可被输入捕捉信号唤醒。
输入捕捉可以选择定时器 TIMER2 或 TIMER3 作为时基,定时器的时钟可以设置为指 令时钟 Fcy(系统时钟 fosc/2)或是 TxCK 引脚上的外部时钟源。定时器的设置详见“第 5 章 定时器/计数器及编程”。
pic实验报告二
PIC单片机技术上机实验报告二实验项目:INT中断姓名:专业:班级:学号:指导教师:__一、实验名称INT中断的实现二、实验设备软件:1.Proteus72.Ultra Edit3.MPLAB IDE硬件:PIC16F887三、实验目的通过INT中断的编程与运用,深化对INT中断的理解。
四、实验要求通过原理图中对按钮的控制,利用INT中断的方法实现对LED灯的亮暗控制。
五、实验内容步骤1.通过Proteus7 实现对定时器原理图的规划和布局。
2.通过Ultra Edit 实现对定时器原理图的程序编写。
3.将程序导入MPLAB IDE中,经过相应操作后与外接设备相连,实现定时器功能。
六、实验程序软件流程程序源代码#include "pic.h"__CONFIG (0x20F1);__CONFIG (0x3FFF);void interrupt INT(void);#define unit unsigned int#define LED RD1 //定义LED1接于RD0口void DELAY(unit);void main(void){TRISD = 0;PORTD = 0b00000010;ANS12 = 0;IOCB0 = 1;OPTION_REG=0b10111111; //设置定时器0的控制字寄存器INTCON = 0b10010000; //设置中断寄存器while(1);}void interrupt INT(void){if(INTF == 1){DELAY(30);INTF = 0;LED=!LED;}}//======延时(n)ms,4M晶振void DELAY(unit n) //INT中断子程序{unit j;char k;for (j=0;j<n;j++)for (k=246;k>0;k--) NOP();}七、实验结果附:电路原理图文字说明上图通过对按钮的控制,实现LED灯的亮暗控制转换。
pic单片机实验报告
pic单片机实验报告篇一:PIC单片机实验报告实验一循环点亮LED灯一、实验内容:将RE0-RE5配置为输出,连接6个LED灯;编写程序,调试并运行,下载到实验板上,实现循环点亮。
二、实验目的:学习PIC单片机I/O端口功能及特点,了解I/O端口引脚及连线,控制寄存器。
在开发板上实现循环点亮LED灯。
三、实验要求1. 了解掌握PIC单片机的结构和功能。
2. 应熟练掌握MPLAB开发环境的使用方法。
3. 熟练掌握PIC单片机的程序编写方法。
4. 掌握MPLAB IDE硬件调试的技巧。
四、实验准备:1、I/O引脚及连线:I/O端口特点:1、所有I/O 输入端口都是施密特触发器输入,以便增强抗干扰性。
2、外设复用:所有的器件引脚(除VDD、VSS、MCLR 和OSC1/CLKI之外),均为外设与I/O端口所共用。
3、如果外设使能,并且外设正在使用相关引脚时,该引脚将不再作为通用I/O 引脚使用。
4、优先级:I/O 与多个外设复用时I/O 引脚的名称定义了与该引脚相关的各个功能的优先级,如:I/O 引脚与两个外设复用(“外设A”和“外设B”)外设A 对引脚的控制具有最高优先权,若外设A 和外设B 同时使能,外设A将控制I/O 引脚5、电平变化通知引脚:电平变化通知引脚(CN)内接输入电平变化通知模块,使得dsPIC30F器件能够向处理器发出中断请求,以响应所选输入引脚上的状态变化。
I/O端口控制寄存器:所有的端口引脚,都有三个与端口引脚的操作直接相关的寄存器。
① TRISx:数据方向寄存器。
决定各个引脚是输入引脚还是输出引脚。
–若某个I/O 引脚的TRIS 位为“1”,则该引脚是输入引脚。
–某个I/O 引脚的TRIS 位为“0”,则该引脚被配置为输出引脚。
–复位以后,所有端口引脚被定义为输入。
② PORTx:I/O端口寄存器。
访问的是I/O引脚上的数据。
读的是端口引脚值;写端口引脚,写的是端口数据锁存器(LATx )。
PIC实验报告
} void interrupt AD_SER() { if(T0IF) { T0IF=0; GO=1; while(GO); LED=!LED; } } 2.protues原理图
实验四:PWM 2.实验程序: #include "pic.h" __CONFIG(0x20f1); __CONFIG(0x3fff); void main() { TRISC1=0; //RC1定义为输出 CCP2CON=0b00001100; //占空比低两字节为0;PWM模式CCPR2L=0b01100100; //占空比高8位 PR2=249; T2CON=0b00000101; //timer2使能;预分频比1:4 while(1); } 3.protu实验报告实验一:定时器 2.实验程序: #include "pic.h" __CONFIG(0x20f1); __CONFIG(0x3fff); #define LED1 RD1 void interrupt T1_SER(void); void main() { TRISD=0; LED1=1; T1CON=0b00000001; TMR1H=15536>>8; TMR1L=15536; GIE=1;TMR1IE=1;PEIE=1; while(1); } void interrupt T1_SER() { if(TMR1IF) { TMR1IF=0; LED1=!LED1; TMR1H=15536>>8; TMR1L=15536; } } 3.protues原理图
实验二:按键中断2.实验程序: #include "pic.h" __CONFIG(0x20F1); __CONFIG(0x3FFF); #define uint unsigned int #define LED RD0 void DELAY(uint); void interrupt INT_SER(void); void main(void) { TRISD=0b11111110; TRISB=0b11111111; ANSEL=0; ANSELH=0; nRBPU=0; WPUB0=1; LED=1; GIE=1;INTE=1; while(1); } void interrupt INT_SER(void)
PIC单片机报告
PIC单片机实验报告一、定时器的使用(1)实验目的:通过学习和实验理解PIC单片机定时器的内部工作原理,学会定时器初始化配置编程,并能利用实验板对定时器有简单的应用。
(2)实验器材:16位PIC单片机学习板。
(3)实验过程:1、PIC单片机定时器概述:根据具体器件,dsPIC30F 器件系列提供了几个16 位定时器。
这些定时器被指定为Timer1 、Timer2 、Timer3 ……等。
可分为三种类型:A类型时基、B类型时基和C类型时基。
A类型时基:在大多数dsPIC30F 器件上,至少有一个A 类型定时器。
通常Timer1 是A 类型定时器。
A 类型定时器与其他类型的定时器相比,有下列独特的功能:可以使用器件的低功耗32 kHz 振荡器作为时钟源工作可以在使用外部时钟源的异步模式下工作A 类型定时器独特的功能使它可以用于实时时钟应用(Real-Time Clock, RTC )。
16 位定时器模式:在16 位定时器模式下,定时器在每个指令周期递增,直到与预先装入周期寄存器PR1 中的值匹配,然后复位至0,继续计数。
当CPU 进入空闲模式时,定时器将停止递增,除非TSIDL (T1CON<13> )位 = 0。
如果TSIDL = 1,定时器模块逻辑将继续递增,直到CPU 空闲模式终止。
16 位同步计数器模式:在16 位同步计数器模式下,定时器将在外部时钟信号的上升沿递增,外部时钟信号与内部相位时钟同步。
定时器计数,直到等于PR1 中预先装入的值,然后复位至0,继续计数。
当CPU 进入空闲模式时,同上。
16 位异步计数器模式:在16 位异步计数器模式下,定时器在外部时钟信号的上升沿递增。
定时器计数,直到等于PR1 中预先装入的值,然后复位至0,继续计数。
当定时器配置为异步工作模式时,CPU 进入空闲模式,如果TSIDL = 1,则定时器将停止递增。
B类型时基:在大多数dsPIC30F 器件上,如果存在Timer2 和Timer4 ,它们是B 类型定时器。
pic课设实验报告
==《PIC单片机》课程设计学生姓名:学号:专业班级:指导教师:二○○12年05 月04 日目录(二号字体)1 设计方案,目的,内容. (1)2.设计的硬件及说明 (1)3.设计的软件及说明 (5)4 实验结果 (6)5小结 (7)一课程设计的目的《PIC 单片机课程设计》是电气工程及其自动化专业及相近专业的一门重要的专业实践课,本课程在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握PIC 单片机的应用方法,熟练PIC 单片机的C 程序的编写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单片机应用基础。
二设计内容1 Proteus 线路图绘制根据所设计的线路图,绘制与之一致的,能用于仿真的Proteus 线路图。
要求所绘的线路图美观、紧凑,参数要与课设一致。
2、软件编制与调试根据所设计的线路图制相应的单片机C 程序,要求所制的程序符合C 语言格式并加上注解。
每编一段即进行译,有错及时修改,并先在Proteus 上仿真,基本正确后再用PICkit3 在线调试,最后应脱机运行。
三设计方案1我做的是数字钟及数字温度计:包括按键.LCD.蜂鸣器时钟芯片DS1307和温度传感器TC74。
2功能;此设计可以感测环境的温度,显示当前的时间,及闹钟。
温度与时间都显示在LCD显示屏上。
四硬件设计及说明1复位按键此图用于复位单片机,使其从新执行相应的程序。
12 振荡方式此图是LP.XT.HS的晶体振荡/陶瓷振荡器接线方式,这种方式接线更准。
3时钟芯片DS1307及附属接线时钟芯片DS1307用于产生时间,它提供了秒、分、时、日、年、和星期等数据,能算只瑞年2100年,时钟的晶振是典型的32.768Hz。
(1)其引脚作用如下:2(2)DS1307的读写如下;1写DS1307 的步骤如下:a) 发送启始位;b) 发送DS1307 的7位地址+0 (写),即0b11010000;c) 发送要写入DS1307 的地址,地址见图16,如要修改分,此值为1;d) 发送要写入DS1307 的数,如要把分修改为十进制数37,则此数为0x37;e) 发送停止位;2读DS1307 的步骤如下:a) 发送启始位;b) 发送DS1307 的7位地址+0 (写),即0b11010000;c) 发送要读的DS1307 的起始地址,如要从秒读起,为0;d) 发送停止位;e) 发送重新开始位;f) 发送DS1307 的7位地址+1 (读),即0b11010001;g) 发送读使能位,接收一个数据,单片机发送应答位;h) 发送读使能,接收下一个数据(地址会自动+1),单片机发送应答位,直到读数完成,接收最后一个数时单片机不发送应答位;i) 发送停止位;注意在DS1307仿真的时候七位地址为0b1001101 而实际为0b1001000 ;(3)功能是;提供时间通过pic16F877送入LCD中显示。
pic单片机实验报告
pic单片机实验报告
《pic单片机实验报告》
实验目的:通过对pic单片机的实验,掌握其基本原理和应用技能,提高对单
片机的理解和应用能力。
实验内容:
1. 初步了解pic单片机的基本结构和工作原理;
2. 学习pic单片机的编程语言和编程工具;
3. 进行简单的pic单片机实验,如LED灯控制、数码管显示等;
4. 分析实验结果,总结经验和教训。
实验步骤:
1. 阅读pic单片机的相关资料,了解其基本原理和应用领域;
2. 学习pic单片机的编程语言和编程工具,如C语言和MPLAB X IDE;
3. 进行LED灯控制实验,编写简单的程序控制LED的亮灭;
4. 进行数码管显示实验,编写程序实现数字的显示和滚动效果;
5. 分析实验结果,总结经验和教训,找出存在的问题并改进。
实验结果:
1. 成功掌握了pic单片机的基本原理和编程技能;
2. 实现了LED灯控制和数码管显示的实验,并取得了良好的效果;
3. 发现了一些问题,如程序逻辑错误和电路连接不良,及时改进并取得了成功。
实验总结:
通过本次实验,我对pic单片机有了更深入的了解,掌握了其基本原理和编程
技能,提高了对单片机的应用能力。
同时,也发现了一些问题并及时改进,取
得了良好的实验效果。
希望能在今后的学习和工作中,更好地应用pic单片机,为科研和工程项目做出更大的贡献。
PIC单片机模拟量输入与输出
第6章模拟量输入与输出6.1 A/D转换的应用例6.1 A/D转换初始化程序//A/D转换初始化子程序void adinitial( ){ADCON0 = 0x51;//选择A/D通道为RA2,打开A/D转换器//在工作状态,且使AD转换时钟为8t osc ADCON1 = 0X80;//转换结果右移,及ADRESH寄存器的高6位为"0"//且把RA2口设置为模拟量输入方式PIE1 = 0X00;PIE2 = 0X00;ADIE = 1;//A/D转换中断允许PEIE = 1;//外围中断允许TRISA2=1;//设置RA2为输入方式}6.1.2 程序清单下面给出一个调试通过的例程,可作为读者编制程序的参考。
该程序中用共用体的方式把A/D转换的10位结果组合在一起。
有关共用体的详细资料请参考本书相关章节。
# include <pic.h>union adres{int y1;unsigned char adre[2];}adresult;//定义一个共用体,用于存放A/D转换的结果unsigned char i;unsigned int j;//系统各I/O口初始化子程序void initial(){TRISD=0X00;//D口为输出i=0x00;}//A/D转化初始化子程序void adinitial(){ADCON0=0x51;//选择A/D通道为RA2,打开A/D转换器//在工作状态,且使A/D转换时钟为8t osc117ADCON1=0X80;//转换结果右移,及ADRESH寄存器的高6位为"0"//且把RA2口设置为模拟量输入方式PIE1=0X00;PIE2=0X00;ADIE=1;//A/D转换中断允许PEIE=1;//外围中断允许TRISA2=1;//设置RA2为输入方式}//延时子程序void delay(){for(j=5535;--j;) continue;}//报警子程序void alarm(){i=i^0xFF;//通过异或方式每次把i的各位值取反PORTD=i;//D口输出i的值}//中断服务程序void interrupt adint(void){ADIF=0;//清除中断标志adresult.adre[0]=ADRESL;adresult.adre[1]=ADRESH; //读取并存储A/D转换结果,A/D转换的结果通过共//用体的形式放入了变量y1中if(adresult.y1>0x200){alarm();//如果输入的模拟量大于2.5V(对应数字量//0X200h),则调用报警子程序delay();//调用延时子程序,使电压检测不要过于频繁}else PORTD=0XF0 ;//如果输入的模拟量小于2.5V,则与D口相连的//8个发光二极管的低4个发亮,表示系统正常ADGO=1;//启动下一次A/D转换}//主程序main(){adinitial();//A/D转换初始化118initial();//系统各I/O口初始化ei();//总中断允许ADGO=1;//启动A/D转换while(1){;} //等待中断,在中断中循环检测外部电压}6.2.2 I2C总线工作方式相关子程序1.C语言编写的I2C总线工作方式的初始化子程序//I2C初始化子程序void i2cint(){SSPCON = 0X08;//初始化SSPCON寄存器TRISC3 =1;//设置SCL为输入口TRISC4 =1;//设置SDA为输入口TRISA4 = 0;SSPSTAT=0X80;//初始化SSPSTAT寄存器SSPADD=0X02;//设定I2C时钟频率SSPCON2=0X00;//初始化SSPCON2寄存器di();//关闭总中断SSPIF=0;//清SSP中断标志RA4=0;//关掉74HC165的移位时钟使能,以免74HC165移位//数据输出与I2C总线的数据线发生冲突(此操作与该//实验板的特殊结构有关,不是通用的)SSPEN=1;//SSP模块使能}2.C语言编写的I2C总线工作方式传输数据子程序需要发送的数据在寄存器j中。
PIC单片机实验指导书
实验一MPLAB IDE系统使用向导一、启动MPLAB IDE启动MPLAB IDE有两种方式:(1)Start>Programs>Microchip>MPLAB IDE 7.41>MPLAB IDE。
(不同版本的MPLAB IDE软件可能路径名称会略有不同。
)(2)双击桌面上的MPLAB IDE 图标二、创建源文件选择File(文件)>new…(新建),出现一个文本编辑窗口,在该窗口中输入以下汇编语言源程序先创建文件夹F:\myprj,然后将上面输入的源程序保存该文件夹,注意文件的扩展名为asm,这里我们将它保存为exam1.asm:文件保存后,我们发现源程序编辑窗口中的程序被着上了各种颜色,这些颜色能帮助我们更好地阅读源程序,快速发现输入有误的指令:三、创建项目项目是将文件组织起来以便进行编译和汇编的方式。
选择Project(项目)>new…(新建),出现New Project(新项目)对话框:在New Project(新项目)对话框中,我们将这个示例项目命名为MyPrj,使用Browse 按钮,将项目放在名为D:\myprj的文件夹中。
单击OK按钮,在MPLAB IDE 界面上我们会看到已创建项目的的项目窗口,如下图:四、给项目节点添加文件源文件是必须添加的。
其他文件,如头文件、库文件、链接描述文件,视项目的具体情况可加可不加。
在本实例中,只添加一个源文件exam1.asm,在左边的项目窗口中找到Source Files节点,在其上点鼠标右键,在弹出的快捷菜单中选Add Files(如上图所示)。
双击要添加的文件exam1.asm,或单击要添加的文件exam1.asm,然后点“打开”按纽:文件添加成功后的项目窗口如下,Source Files节点下已经添加了文件 exam1.asm五、编译文件选择Project>Build All 或在项目窗口中的项目名称上点击右键,并从弹出菜单中选择“Build All”。
THGMU-1型 实验指导书(PIC部分)
目录目录..................................................................................................................................................I 实验一流水灯实验.. (1)实验二I/O口控制实验 (3)实验三 74LS373控制实验 (4)实验四继电器控制实验 (5)实验五蜂鸣器驱动实验 (6)实验六PWM信号的产生实验 (7)实验七PIC内部看门狗实验 (8)实验八定时器实验 (11)实验九计数器实验 (13)实验十音频驱动实验 (14)实验十一八位动态数码显示实验 (15)实验十二查询式键盘实验 (17)实验十三 7279阵列式键盘实验 (18)实验十四双色点阵显示实验 (21)实验十五内部EEPROM读写实验 (23)实验十六I2C总线实验 (24)实验十七内部AD转换实验 (26)实验十八外部串行AD转换实验 (28)实验十九外部串行DA转换实验 (29)实验二十字符型液晶显示实验 (31)实验二十一温度传感器实验 (34)实验二十二 128×64液晶显示实验 (37)实验二十三 RS-232串口通信实验 (39)实验二十四直流电动机控制实验 (40)实验二十五步进电动机控制实验 (41)附录一PIC配置位描述 (43)附录二 PICCPU与主板IO关系 (44)实验一流水灯实验一、实验目的1.学习PC口的使用方法2.学习延时子程序的编写和使用二、实验说明PC口是8位宽的双向口,TRISC寄存器是PORTC端口的数据方向控制寄存器,它定义了相应的引脚是输入还是输出,TRISC为1时相应的PORTC端口的引脚被定义为输入,TRISC为0时相应的PORTC端口的引脚被定义为输出。
注:1.在做完实验时记得养成一个好习惯:把相应单元的短路帽和电源开关还原到原来的位置!以下将不在重述。
北京理工大学-PIC单片机在电子系统设计中的应用-实验二-对IO口应用的编程设计
实验二对I/O口应用的编程设计一、实验目的:1. 学习对PIC单片机输入输出通道I/O的控制2. 学习用LED显示PIC单片机的输出二、实验原理:单片机除了能够输出事先规定好的信号形式之外,还可以实现按键控制式的信号输出,这时,我们可以将单片机看成是一个具有输入/输出通道的控制系统,用按键(键盘)输入信号,用LED显示输出信号,按下不同的按键就会产生不同的信号输出。
本次实验用两个按键SW2、SW3来控制PIC18F452中用户自定义的计数器计数输出,输出的数据用LED显示。
按键SW2控制计数器加1计数;按键SW3控制计数器减1计数。
计数结果送PORTD。
参考:1. 数据手册18fxx2_cn(39564b)2. 实验板介绍APP001+C_Manual+VER.2[1]3. MPLAB C18函数库三、程序设计内容:完善例程2实现上述功能。
四、实验步骤:1、编辑源文件并将源文件存于mcc18目录中;修改后程序为:#include <p18f452.h> //引用p18f452的库函数#define SW3 PORTAbits.RA4#define SW2 PORTBbits.RB0#pragma config WDT = OFF //关闭看门狗#pragma config OSC = HS //振荡器工作模式为高速晶体/谐振器*/#pragma config LVP = OFF //关闭低电压ICSP编程unsigned char debounce;unsigned char i;//***************************************//* Program Main ( ) *//***************************************void main(void){TRISD=0x00; //将PortD 设为输出PORTD=0x80; // PortD的初始值设为0x80既128ADCON1=0b00000110; // 关闭A/D 转换功能TRISAbits.TRISA4=1; // 将SW2 设为输入TRISEbits.TRISBO=1; // 将SW3 设为输入debounce=0;while(1){if (debounce==0){if (!SW2) // SW2取反后=1{// Exercise 1 : Please increased PORTD by 1debounce=30;}if (!SW3){// Exercise 2 : Please decreased PORTD by 1debounce=30;}}else{if (SW2 & SW3){debounce--;for (i=0;i<100;i++);}elsedebounce=30;}}}2、选择目标处理器;Device:PIC18F4523、建立项目;(项目名与源文件同名)4、选择项目设置A、选择语言工具套件:MPLAB c18c Toolsuite (mcc18.exe)MPLINK Object Linker (Mplink.exe)(已选择完成)B、选择MPLAB C18 安装目录中头文件和函数库子目录的路径。
超经典!PIC单片机原理及应用实验(含代码)
《单片机原理及应用》实验指导书适用年级:08 物电信编制人:彭晓珊编制时间:2010.3实验室:嵌入式工程师实训室1《单片机原理及应用》第一次实验实验名:开发环境认识实验主要内容:认识MPLAB 开发软件,熟悉QL200B 实验箱目的要求:熟练掌握MPLAB 开发软件的开发流程,熟悉QL200B 实验箱的组成。
主要仪器:QL200B 实验箱+PC+万用表《单片机原理及应用》第二次实验实验名:跑马灯实验主要内容:进一步认识MPLAB 开发软件,熟悉QL200B 实验箱硬件,熟悉软件延时的设计。
目的要求:实现一个简单的流水灯程序,即轮流点亮 C 口的8 个灯(先点亮RC0,再熄灭RCO 点亮RC1……)。
硬件要求:拨码开关S11 全部置ON,其余全部为OFF。
主要仪器:QL200B 实验箱+PC参考程序如下:#include<p16f877A.inc> ;调用头文件__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_ WDT_OFF&_HS_OSC;**********************用户寄存器定义********************count equ 20h ;移位次数寄存器2del_va1 equ 0ffh ;外层延时参数del_va2 equ 0afh ;内层延时参数org 00h ;程序人口地址;**********************主程序开始***********************mainnop ;ICD 所需要的一条空指令clrf PORTC ;先清楚C 口所有显示banksel TRISC ;选择I/O 口方向寄存器所在的体clrf TRISC ;设置C 口全为输出clrf STATUS ;返回体0movlw .8movwf count ;装载循环次数8(C 口共8 位)bsf STATUS,C ;置进位标志位为1,因循环移位是带进位循环的looprlf PORTC,1 ;C 口左移1 位call delay3call delayCALL delay ;调用三次延时程序(保证亮度,以及流水灯闪烁速度)bcf STATUS,C ;清0 进位标志位(永远只有一只LED 亮)DECFSZ count,1 ;判断是否一轮循环结束goto loop ;否,继续循环移位GOTO main ;是,程序重头开始;***********************延时程序*************************delaymovlw del_va1 ;延时程序外层参数movwf 30hmovlw del_va2 ;延时程序内层参数movwf 31hdecfsz 31h,1goto $-1decfsz 30h,1goto $-4return;********************程序结束****************************end4《单片机原理及应用》第三次实验实验名:LED 显示控制实验主要内容:进一步认识MPLAB 开发软件,熟悉QL200B 实验箱硬件,熟悉静态和动态显示LED 的设计。
pic实验报告正文
实验一:学习使用MPLAB IDE开发工具一、实验目的●实验一的主要目的是熟悉MPLAB开发环境。
用C语言编写简单源程序,在MPLAB开发环境中建立/加入工程,并对工程进行编译链接。
●在实验过程中学习调试技巧。
在MPLAB开发环境学习利用单步执行、执行、断点设置、查看存储单元等手段对程序进行调试。
二、实验要求●应熟练掌握MPLAB开发环境的使用方法。
●掌握C语言编写程序的规范要求。
●熟练掌握工程建立和编译方法。
●学会在调试环境中利用多种手段执行程序并进行调试。
三、实验内容练习一:两数相加的简单C 程序1)函数调用2)多个文件练习二:泡泡排序程序1)熟练掌握工程建立和编译调试方法2)修改程序,算法采用函数调用方式3)修改程序,用多个文件分别完成数据输入、算法四、实验程序练习一:两数相加的简单C 程序#include <p30f4011.h>unsigned int Add(unsigned int a, unsigned int b); /*函数定义*/ unsignedint x, y, z;Intmain(void){x = 2;y = 5;z = Add(x,y);return 0;}unsigned int Add(unsigned int a, unsigned int b) /*函数调用*/ {return(a+b);}文件1 /* ex1.c */#include <p30f4011.h>int main(void);unsignedint Add(unsigned int a, unsigned int b);unsignedint x, y, z;int main(void){x = 2;y = 5;z = Add(x,y);return 0;}文件2 /* add.c */#include <p30f4011.h>unsignedint Add(unsigned int a, unsigned int b){return(a+b);}练习二:泡泡排序程序#include "p30f4011.h"#define N 4int main(void){ inti,j,change;int R[4]={38,16,6,12};for(i=1;i<N;i++){ for(j=N-1;j>=i;j--){ if(R[j]<R[j-1]){ change=R[j];R[j]=R[j-1];R[j-1]=change;}}}return 0;}实验二、I/O端口实验一、实验目的实验的主要目的是进一步了解掌握PIC单片机I/O端口的结构和主要功能,对I/O各类端口用C语言编写几种常用操作程序。
pic单片机实验报告
pic单片机实验报告PIC单片机实验报告引言:PIC单片机是一种非常常见的嵌入式系统开发工具,被广泛应用于电子产品的设计与制造过程中。
本实验报告将介绍我对PIC单片机的实验研究,并分享实验过程中的收获和心得体会。
实验一:LED灯的控制在本实验中,我使用PIC单片机来控制一组LED灯的亮灭。
通过编程,我成功实现了按键控制LED灯的开关,以及通过定时器实现LED灯的闪烁效果。
这个实验让我初步了解了PIC单片机的编程方法和基本原理。
实验二:温度传感器的应用在这个实验中,我将PIC单片机与温度传感器连接,并通过编程实现了温度的实时监测和显示。
通过这个实验,我深入了解了模拟信号的采集和数字信号的处理过程,并学会了如何使用PIC单片机进行数据的读取和处理。
实验三:蜂鸣器的控制本实验中,我使用PIC单片机控制了一个蜂鸣器的发声。
通过编程,我实现了不同频率的声音输出,并且可以通过按键控制声音的开关。
这个实验让我了解了如何通过PIC单片机来控制外部设备,并且学会了如何利用定时器来产生不同频率的方波信号。
实验四:液晶显示屏的应用在这个实验中,我将PIC单片机与液晶显示屏连接,并通过编程实现了文字和图形的显示。
通过这个实验,我学会了如何使用PIC单片机来控制液晶显示屏,并且了解了液晶显示屏的基本原理和工作方式。
实验五:无线通信模块的应用在本实验中,我将PIC单片机与无线通信模块连接,并通过编程实现了两个PIC 单片机之间的无线数据传输。
通过这个实验,我了解了无线通信模块的基本原理和工作方式,并学会了如何使用PIC单片机进行无线通信的应用。
结论:通过对PIC单片机的实验研究,我深入了解了PIC单片机的工作原理和应用方法。
通过编程和实践,我成功实现了LED灯的控制、温度传感器的应用、蜂鸣器的控制、液晶显示屏的应用以及无线通信模块的应用。
这些实验不仅让我掌握了PIC单片机的基本编程技巧和应用方法,还培养了我对嵌入式系统开发的兴趣和能力。
PIC实验报告
一、 实验目的 1、 学会使用 pic 单片机专用软件 MAPLAB IDE,如新建工程、链接在线 调试器 ICD2、文本文件编辑器、汇编编译器、软件仿真调试器等。 2、 简单 C 程序的编写、编译、链接、调试、仿真、烧写等练习,熟悉 C 程序编写过程,为后续学习奠定坚实基础。
二、 实验器材 1、计算Байду номын сангаас一台
⑴ 固定入口式(中断服务程序的首地址固定,直接将此
规定地址送给 PC) ⑵ 矢量式。
4、 学习什么是中断服务 中断服务子程序是由用户根据自己的需要编制的,编制
时要注意如下问题:
3、 掌握 I/O 端口控制寄存器 所有的端口引脚,都有三个与端口引脚的操作直接相关的寄存器。 TRISx:数据方向寄存器。决定各个引脚是输入引脚还是输出引脚。 若某个 I/O 引脚的 TRIS 位为“1”,则该引脚是输入引脚。 某个 I/O 引脚的 TRIS 位为“0”,则该引脚被配置为输出引脚。
(2)选择 Debugger>MPLAB ICD2 Setup Wizard 安装 ICD2
(3)对 ICD2 设置:选择 Debugger>Setting
(4)对目标板配置:选择 Configure>Configure Bits
6、 上机实验代码
#include <p30f4011.h>/*这个头文件提供了该器件的所有特殊功能寄存器的定义*/
led = 0x01; PORTE =led; } return 0; }
实验三:中断
一、 实验目的
1、 学习什么是中断 2、 学习什么是中断请求 3、 学习什么是中断响应 4、 学习什么是中断服务 5、 了解中断处理原则 6、 了解中断优先级 7、 了解中断控制和状态寄存器 二、 实验器材
pic实验报告
电子装置与系统设计课程设计题目:温度检测系统设计学院专业:姓名:日期: 2011年7月2日目录一、摘要 ------------------------------------------------------------------ 3二、前言 ------------------------------------------------------------------ 4三、正文 ---------------------------------------------------------------------51、设计要求---------------------------------------------------------------52、实验流程图-------------------------------------------------------------53、TC1074数字温度传感器---------------------------------------------------64、1602液晶显示屏---------------------------------------------------------65、24LC024 I2C存储器-----------------------------------------------------76、程序清单---------------------------------------------------------------8四、实验心得----------------------------------------------------------------- 17一、摘要随着社会的进步和工业技术的发展,人们越来越重视温度因素,在很多场合,我们需要知道现场温度是多少,需要实时检测温度。
定时器输出比较实验原理
定时器输出比较实验原理
在定时器输出比较实验中,通常会使用两个或多个定时器来产
生脉冲信号,并将这些信号输入到比较器电路中进行比较。
比较器
电路是一种电子设备,用于比较两个输入信号的大小,并根据比较
结果产生相应的输出信号。
通过对比输出信号的差异,可以评估电
路或系统在不同条件下的性能表现。
实验原理主要包括以下几个方面:
1. 确定实验参数,首先需要确定实验所涉及的参数,包括定时
器的工作频率、比较器的阈值等。
2. 生成脉冲信号,利用定时器产生一组脉冲信号,可以通过调
节定时器的参数来控制脉冲信号的频率和占空比。
3. 输入比较器,将定时器产生的脉冲信号输入到比较器电路中,同时可以输入其他需要比较的信号。
4. 观察比较结果,通过观察比较器输出的信号,可以分析不同
输入信号之间的差异,从而评估电路或系统的性能。
定时器输出比较实验可以用于验证数字电路中定时器和比较器
的功能是否正常,也可以用于测量和分析不同信号之间的时间关系,例如脉冲信号的延迟、周期等。
这种实验方法在数字电子技术教学
和电子系统性能评估中具有重要的应用意义。
总的来说,定时器输出比较实验原理是利用定时器产生的脉冲
信号和比较器电路进行信号比较,从而评估电路或系统的性能表现。
通过实验可以深入理解数字电子技术中定时器和比较器的工作原理,以及不同信号之间的时间关系。
pic实验程序
void _delay_ms(char a) //毫秒级延时子函数 { unsigned char i,j; for(i=0;i<a;i++) for(j=0;j<40;j++);
}
void enable(void) //控制命令的子函数 {
rs=0;//1111 1101 a1 置 0 rw=0; //1111 1011 a2 置 0
while(delaytime)delaytime--; } //向 LCD 写入命令的子程序 void write_lcd_command(unsigned char write_command) {
lcd_delay(40); RSCLR;//Rs=0 RWCLR;//RW=0 temp=(write_command&0xf0)>>4; LCDPORT=(LCDPORT&0xf0)|temp;//写命令字 ((write_command>>4)&0x0f); ENSET;//EN=1; ENCLR;//EN=0
unsigned char i; ENCLR;//开使能 for(i=20;i>0;i--)lcd_delay(248);//延时 45ms for(i=4;i>0;i--)write_lcd_command(0x2f);//设为四线输出 lcd_delay(248); write_lcd_command(0x2f);//设为四线输出 lcd_delay(248);//延时 45ms write_lcd_command(0x2f);//设为四线输出 for(i=4;i>0;i--)lcd_delay(248);//延时 45ms
#define up
PCL实验报告——数码显示控制
哈尔滨德强商务学院实验报告课程名称:可编程控制器原理与应用系别:计算机与信息工程系专业:工业工程班级:09-2学号:2009510591(29)学生姓名:梅松2012年5月8日实验室名称:工业工程专业实验室(504)实验机器号:10 实验分组:10实验时间:2012.5.8 指导教师签字:成绩:实验项目三:数码显示控制一、实验目的和要求1.实验目的(1)掌握LED数码显示控制系统的接线、调试、操作的方法;(2)掌握定时器、计数器、比较器的组合对数码管显示系统的控制。
2.实验要求利用PLC的输入I0.0和输出Q0.0~Q0.3来完成对数码显示系统的控制。
二、实验原理1.实验原理(1)利用定时器和比较器组合发出一个周期为2.1S的脉冲作为数码显示的间隔;(2)利用计数器进行自动记数,范围为0~9;(3)通过字传送指令MOV_W和字节传送指令MOV_B来完成将计数器的当前值传送给数码管显示器,间隔为2.1S。
2.程序流程图三、主要仪器设备1.计算机(V4.0 STEP 7 MicroWIN SP3软件)1台;2.PC/PPI通讯电缆1根;3.3号导线9根。
四、实验内容、步骤及操作方法1.实验内容:用Q0.0~Q0.3做输出口,运用程序功能控制数码管的数字跳动;2.步骤及操作方法:(1)用1根3号红导线将1M与+24V连接,1跟红导线将数码管那端的+5V与电源端+5V连接,再使用1根黄色导线将I0.0与K0连接,用1根黑色3号导线将COM端与GND连接;(2)用四根绿色3号导线将Q0.0~0.3分别与数码管上的ABCD连接,再用一根黑色3号导线将1L端与GND连接在一起;(3)打开V4.0 STEP 7 MicroWIN SP3软件,按要求编辑程序,编辑完后进行通信,点击下载后执行程序。
4.控制接线图五、实验数据记录和处理图是十进制。
从0,1,2,3,4,5,6,7,8,9二图是十六进制。
从0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F程序注释:1、十进制程序:TITLE=0到9显示控制// A\B\C\D控制,A为低位网络1// 循环时间控制LD I0.0AW<= T37, 20TON T37, 10网络2// 递加LD I0.0A T37EULDW> C0, 9ON I0.0CTU C0, 9999网络3// 输出LD SM0.0MOVW C0, MW0AENOMOVB MB1, QB02、十六进制程序:TITLE=0到F显示控制(硬件模式二)网络1// 循环时间控制LD I0.0AW<= T37, 21TON T37, 20网络2// 递加LD I0.0A T37EULDW> C0, 16ON I0.0CTU C0, 9999网络3// 输出LD SM0.0LPSA I0.0MOVW C0, MW0AENOSEG MB1, QB0LPPAN I0.0MOVB 0, QB0六、实验结果与分析1.结果:使用I0.0作为启动开关,Q0.0-Q0.3作为数码管的输出,连续显示0-9。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二:输出比较实验
一. 实验目的
(1)掌握单片机输出比较模块的工作原理。
(2)掌握单片机输出比较的设计方法。
(3)学会查阅相关数据手册。
二. 实验仪器设备
(1)PC机一台;
(2)MPLAP IDE开发软件一套;
(3)PICkit3在线调试器一套;
(4)APP009实验板一套;
(5)示波器一台。
三. 实验任务
(1)采用单比较匹配模式在OC4(RD3,19)引脚产生一定频率的连续脉冲信号,下载运行,用示波器观察输出的脉冲信号。
(2)采用双比较匹配模式在OC3(RD2,22)引脚产生一定频率一定占空比的连续脉冲信号,下载运行,用示波器观察输出的脉冲信号。
(3)采用简单PWM模式输出PWM信号控制D13的亮度,运行观察结果。
四. 实验步骤
(1)连接在线调试器PICkit3、实验板和计算机;
(2)打开MPLAP IDE集成开发环境软件,点击Debugger>Select Tools>PICkit 3 选择调试工具;
(3)点击Debugger>Settings,在Settings窗口中点击Power栏,选择由PICkit3向实验板供电;
(4)完成单比较匹配模式产生一定频率的连续脉冲信号实验;
实验代码:
#include <p30f4011.h>
void ConfigOC4() //输出比较模块配置
{
OC4CON = 0x0000; //Timer2是比较4的时钟源
OC4R = 0x0200; //设置匹配值0x0200
T2CON = 0x0000; //预分频1:1,16位定时器,使用内部时钟
PR2 = 0x0240; //周期寄存器赋值0x0240,TMR2在0x0240处复位
TMR2 = 0x00; //TMR2初值0x00
IFS1bits.OC4IF = 0; //清除输出比较中断标志位
IEC1bits.OC4IE = 1; //使能输出比较中断
IPC5bits.OC4IP = 7; //设置中断优先级7
IEC0bits.T2IE = 0; //不使能Timer2定时器中断
}
void __attribute__((__interrupt__)) _OC4Interrupt()
{
IFS1bits.OC4IF = 0; //清除输出比较4中断标志位
}
int main()
{
ConfigOC4();
T2CONbits.TON = 1; //打开定时器2
OC4CONbits.OCM = 3; //选择单比较匹配模式,电平交替翻转输出
while(1);
}
实验现象:将对应管脚接上示波器探头,在示波器上可以观察到连续变化的脉冲信号。
(5)完成双比较匹配模式产生一定频率一定占空比的连续脉冲信号实验;
实验代码:
#include <p30f4011.h>
void ConfigOC3() //输出比较模块初始化
{
OC3CON = 0x0000; //Timer2是比较3的时钟源
OC3R = 0x0100; //设置匹配值0x0100,在TMR2与此值匹配时,
//OC3引脚驱动为高电平
OC3RS = 0x0460; //设置匹配值0x0460,在TMR2与此值匹配时,
//OC3引脚驱动为低电平
T2CON = 0x0000; //预分频1:1,16位定时器,使用内部时钟
TMR2 = 0x00; //TMR2初值0x00
PR2 = 0x0480; //周期寄存器赋值0x0480,TMR2在0x0480复位?
IFS1bits.OC3IF = 0; //清除输出比较中断标志位
IEC1bits.OC3IE = 1; //使能输出比较中断
IPC4bits.OC3IP = 7; //设置中断优先级7
IEC0bits.T2IE = 0; //不使能Timer2定时器中断
}
void __attribute__((__interrupt__)) _OC3Interrupt()
{
IFS1bits.OC3IF=0; //清除输出比较3中断标志位
}
int main()
{
ConfigOC3();
T2CONbits.TON = 1; //打开定时器2
OC3CONbits.OCM = 5; //双比较匹配,连续脉冲输出
while(1);
}
实验现象: 将对应管脚接上示波器探头,在示波器上可以观察到一定频率一定占空比的连续变化的脉冲信号。
(6)完成简单PWM模式输出PWM信号控制D13的亮度的实验。
实验代码:
#include "p30f4011.h"
int cnt=0;
/*系统初始化子程序,放在程序首部*/
void InitializeSys()
{
INTCON1 = 0x0000; //关中断
INTCON2 = 0x0000;
IEC0 = 0x0000; //IECx中断禁止
IEC1 = 0x0000;
IEC2 = 0x0000;
}
/*输出比较模块初始化子程序*/
void ConfigOC1()
{
OC1CON = 0x0000; //Timer2是比较4的时钟源
T2CON = 0x0000; //预分频1,16位定时器,使用内部时钟
TMR2 = 0x0045;
OC1RS = 0x0044; //赋值OC1R值为0x003a
PR2 = 0x0045; //设置PWM周期0x0044
IFS0bits.OC1IF = 0; //清除输出比较中断标志位
IEC0bits.OC1IE = 0; //不使能输出比较4中断
IFS0bits.T2IF = 0; //清除定时器2中断标志位
IPC1bits.T2IP = 7; //设置定时器2中断优先级7
IEC0bits.T2IE = 1; //使能Timer2定时器中断
}
/*中断子程序:定时器2中断*/
void __attribute__((__interrupt__)) _T2Interrupt()
{
IFS0bits.T2IF = 0; //清除定时器2中断标志位
}
Int main()
{
InitializeSys();
ConfigOC1();
T2CONbits.TON = 1; //打开定时器2
OC1CONbits.OCM = 6; //OC1处于不带故障保护输入引脚的PWM模式,
//错误引脚禁止
while(1)
{
if (PORTEbits.RE8 ==0) //查询按键S8是否按下
{
delay(); //延时消抖
if (PORTEbits.RE8 == 0) //再次查询按键S8是否按下
cnt=cnt+0x07;
if(cnt>=0x045)
cnt=0x07;
OC1RS=cnt;
}
}
}
void delay(void)
{
int i;
for (i=0;i<20000;i++);
}
实验现象:将对应管脚接上示波器探头,在示波器上可以观察到一定频率一定占空比的连续变化的脉冲信号,按下S8按键可以改变占空比,示波器上的脉冲信号也随之改变。
五. 实验报告内容与要求
(1)分析输出比较模块中的单比较和双比较基本原理,总结输出比较模块输出信号的设计方法。
答:输出比较模块把一个值装入OCxR 寄存器,并将该值与所选定时器的计数器寄存器TMR 的值作比较,当比较匹配事件发生时:OCx 引脚的初始状态为低电平时,比较匹配事件强制该引脚为高电平;两个指令时钟后,相应通道的中断标志位OCxIF 被置1;当OCx 引脚的初始状态为高电平时,比较匹配事件强制该引脚为低电平;两个指令时钟后,相应通道的中断标志位OCxIF 被置1;输出引脚Ocx 初始化驱动为低电平,比较匹配事件使OCx 引脚电平交替翻转输出高低电平。
(2)分析输出比较模块中的单比较和双比较输出连续信号的频率和占空比的不同之处。
答;双比较匹配模式能够根据需要更灵活地改变占空比。
(3)分析输出比较模块中的修改PWM信号的占空比的方法。
答:通过写入OCxRS寄存器可以设置PWM占空比。