定时器中断的应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中断程序设计
用户对中断的控制和管理: IE、IP、TCON、SCON 中断程序的编制中应注意: (1)开中断:总控开关EA、中断源的中断允许位; (2)对外部中断INT0、INT1应选择触发方式; (3)多个中断源,应设定中断优先级,预设IP。
中断程序设计
C语言程序设计 1. 中断服务函数的定义
方式0 方式1 方式2
13 16 8
213=8192 216=65536 28=256
213T机 216T机 28T机
X=213-T/T机 X=216-T/T机 X=28-T/T机
X=213-计数值 X=216-计数值 X=28-计数值
定时/计数器的编程和应用
例:分别确定在方式0、1、2要计100个脉冲 的计数初值,并编程装入。 解:在方式0、1、2的计数初值分别为: 方式0:C=2000H-64H=1F9CH 方式1:C=10000H-64H=FF9CH 方式2:C=100H-64H=9CH
举 例1
用T1方式0实现1秒延时如下: unsigned char i=200; void main() { TMOD=0x00; // 置T1为工作方式0 TH1=0x63; // 设置定时器初值 TL1=0x18; IE=0x88; //开中断 TR1=1; // 启动T1 while(1) ; // 等待中断,即定时5ms时间到,TF1=1 } void T1_int() interrupt 3 { i--; if(i==0) i=200; }
中断程序设计
2. 编程举例 #include<reg51.h> void Int0() interrupt 0 { P1=0x0f; P1<<4; } void main() { EA=1;EX0=1;IT0=1; while(1); }
举 例1
用T1、工作方式0实现1秒延时函数,晶振频率为12MHz。 方式0采用13位计数器,其最大定时时间为:8192×1s = 8.192ms,因此,定时时间不可能象任务7中一样选择50ms, 可选择定时时间为5ms,再循环200次。 定时时间为5ms,则计数值为5ms/1s =5000,T1的初值为: X = M 计数值= 8192 5000 = 3192 = C78H = 0110001111000B 13位计数器中TL1的高3位未用,填写0,TH1占高8位,所 以,X的实际填写值应为: X = 0110001100011000B = 6318H
举 例1
用T1方式0实现任务7中1秒延时函数如下: void delay1s() { unsigned char i; TMOD=0x00; // 置T1为工作方式0 for(i=0;i<0xc8;i++){ // 设置200次循环次数 TH1=0x63; // 设置定时器初值 TL1=0x18; TR1=1; // 启动T1 while(!TF1); // 查询计数是否溢出,即定时5ms时间到, TF1=1 TF1=0; // 5ms定时时间到, 将定时器溢出标志位TF1清零 } }
函数名()[模式] Interrupt n [Using m] (1)Interrupt n:将函数声明为中断服务程序,n为中断源 编号;n=0~4 五个中断源:IE0、TF0、IE1、TF1、RI/TI (2)Using m: 定义函数使用的工作寄存器组;
中断程序设计
中断服务程序不允许用于外部函数,它对目标代码影 响如下: (1)调用函数时,SFR中的ACC、B、DPTR和 PSW当需要时入栈; (2)如果不使用寄存器组切换,中断函数所需的所 有工作寄存器Rn都入栈; (3)函数退出前,所有工作寄存器出栈; (4)函数由“RETI”指令终止。
定时/计数器Fra Baidu bibliotek编程和应用
1. 定时/计数器的初始化编程步骤 (1)计算计数器初值 (2)确定工作方式——TMOD (3)设置计数初值 (4)启动定时(计数)器 采用中断方式,注意开中断。
定时/计数器的编程和应用
2. 计数初值C的计算和装入
工作方式 计数位数 最大计数值 最大定时时间
定时初值计算公 计数初值计算公式 式