实验二 PIC 输出比较实验

合集下载

PCL实验报告

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

PIC24系列单片机原理与开发 第10章 输入捕捉、输出比较和PWM
输入捕捉溢出标志位(只读): 1 =发生了输入捕捉溢出 0 =未发生输入捕捉溢出
输入捕捉缓冲器空标志位: 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实验报告二

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单片机实验报告篇一: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实验报告

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单片机报告

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”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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占空比。

相关文档
最新文档