《PIC16系列单片机C程序设计与proteus仿真》学习之2----TMR0定时器中断
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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。如有疑惑,可以互相讨论,共同进步!