《PIC16系列单片机C程序设计与proteus仿真》学习之2----TMR0定时器中断

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

/**用TMR0延时中断,产生脉冲**/

/**

设定时器TMR0延时10MS,8位pic单片机晶振4MHZ,则指令周期Tcy=1us,计算如下:1.设预分频比为K,则256*K*Tcy=10_000us,得K=39.06,要取大于此值的最小分频比,即K=64

2.计算延时常数X,(256-X)*64*Tcy=10_000us,得X=99.75,四舍五入取整,得X=100. */

#include

__CONFIG(0x3f71);

#define LED RB0

#define T0_10MS 100 //定义TMR0延时10MS的时间常数

char A;

void interrupt ISR(void);

void main(void)

{

RISB0=0; //设定RB0位输出,其余B口未设置,采用上电默认值,为输入

OPTION=0b10000101;//RBPU=1:B口上拉使能,INTEDG=0:下降沿触发,T0CS=0:对内部指令周期计数,T0SE=0:RA4/T0CKI的上升沿计数,PSA=0:预分频分配位给TMRO,PS2PS1PS0=101:TMR0比率为1:64

INTCON=0b10100000;//GIE=1:允许全局中断使能,PEIE=0:禁止外设中断使能,T0IE/TMR0IE=1:允许TMR0溢出中断使能,INTE=0:禁止INT引脚中断使能//RBIE=0:禁止RB口高4位电平变化使能,T0IF/TMR0IF=0:TMR0溢出中断标志位--未溢出

//INTF=0:未发生INT中断,RBIF=0:RB7:RB4引脚的逻辑状态未发生变化

TMR0=T0_10MS; //TMR0赋初值

LED=1;

A=1;

while(1); //原地等待

}

void interrupt ISR(void)

{

if(T0IF==1)

{

T0IF=0;

TMR0=T0_10MS;//TMR0赋初值,必须

if(A==1)

{

A=0;

LED=0;

}

else

{

A=1;

LED=1;

}

}

}

proteus如下:(已修改)

第一步:初步画好仿真图,设置好PIC参数(晶振,配置位)并运行,如下:

第二步:设置ANALOGUE ANALYSIS(我们主要看RB0的模拟电压情况),设置方法如下:

1.右击---Edit Graph---起始时间50m,终止时间150m---OK

2.右击---Add Traces---Name为RB0,Probe P1为RB0---OK

3.右击---Edit Graph---Set Y-scales---若此时显示为灰色不可输入状态,那就点确定,会弹出一个窗口“Resimulate?”,点击确定,方波图就出来了,不过默认是0~5V,你现在就可以重新修改Y-scales,如下图:

先打勾“Lock values”,在设置Min -1,Max 6----Ok----又会弹出“resimulate?”,确定即可。最后效果图为:

示波器图为:

若示波器不小心X掉了,可以在运行的状态下(不运行不会出现该选项)通过菜单Debug---3.Digital Oscilloscope来调出来

ps:详情请参见书P117。如有疑惑,可以互相讨论,共同进步!

相关文档
最新文档