高端+旅游+网站建设,固镇建设局网站,做企业门户网站都,湖南建设厅网站二建注销本章重点学习将TIM0用作13位定时器。
1、定时器0工作在模式0框图 2、定时器0工作在模式0举例
1、Keil C51中有一些关键字#xff0c;需要牢记#xff1a;
interrupt 0#xff1a;指定当前函数为外部中断0#xff1b;
interrupt 1#xff1a;指定当前函数为定时器0中断…本章重点学习将TIM0用作13位定时器。
1、定时器0工作在模式0框图 2、定时器0工作在模式0举例
1、Keil C51中有一些关键字需要牢记
interrupt 0指定当前函数为外部中断0
interrupt 1指定当前函数为定时器0中断
interrupt 2指定当前函数为外部中断1
interrupt 3指定当前函数为定时器1中断
interrupt 4指定当前函数为串口中断 using 0表示当前函数使用第0组寄存器
using 1表示当前函数使用第1组寄存器
using 2 表示当前函数使用第2组寄存器
using 3 表示当前函数使用第3组寄存器
51单片机内有4个工作组寄存器每个工作组的寄存器是R0--R7。
R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1、RS0位决定的。
using 0表示设置 RS10RS0 0用第0组寄存器R0--R7的在数据存储区里的实际地址是00H-07H。R000H....R707H;
using 1表示设置 RS10RS0 1用第1组寄存器R0--R7的在数据存储区里的实际地址是00H-07H。R008H....R70FH;
using 2表示设置 RS11RS0 0用第2组寄存器R0--R7的在数据存储区里的实际地址是08H-0FH。R010H....R717H;
using 3表示设置 RS11RS0 1用第3组寄存器R0--R7的在数据存储区里的实际地址是00H-07H。R018H....R71FH; 2、13位T0定时器中断程序
#include REG51.h //包含头文件REG51.h,使能51内部寄存器; //定时器的方式控制寄存器TMOD: GATE1,C/T1,M1_1,M1_0,GATE0,C/T0,M0_1,M0_0
//GATE11,表示T1是受INT1脚(P3.3)控制运行;
//C/T10,表示T1的时钟源为fosc/12;C/T11,表示T1的时钟源为T1脚(P3.5);
//GATE01,表示T0是受INT0脚(P3.2)控制运行;
//C/T00,表示T0的时钟源为fosc/12;C/T01,表示T0的时钟源为T0脚(P3.4);
//下面说明T0的工作方式
//M0_1:M0_000,表示T0为13位定时器/计数器;
//M0_1:M0_001,表示T0为16位定时器/计数器;
//M0_1:M0_010,表示T0为8位自动重装载定时器/计数器;
//M0_1:M0_011,表示T0分为两个8位计数器;
//下面说明T1的工作方式
//M1_1:M1_000,表示T1为13位定时器/计数器;
//M1_1:M1_001,表示T1为16位定时器/计数器;
//M1_1:M1_010,表示T1为8位自动重装载定时器/计数器;
//M1_1:M1_011,表示T1没有此工作方式; //定时器的控制寄存器TCON: TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0
//TF11,表示T1溢出到0x0000,CPU响应中断后,由硬件自动清除;
//当GATE10时,TR11,表示启动T1开始工作,当GATE11时,Timer1由INT1脚(P3.3)和TR0控制;
//TF01,表示T0溢出到0x0000,CPU响应中断后,由硬件自动清除;
//当GATE00时,TR01,表示启动T0开始工作,当GATE01时,Timer0由INT0脚(P3.2)和TR0控制;
#define OSC_FREQ 12000000L //定义晶振频率为12MHz;
#define instruction_period 1 //定义指令周期为1us;
#define T0_Load_Value 8192-5000L*instruction_period //配置T0为5000us中断一次; sbit LED P1^0;
.uynsigned int Time0Count; //函数功能: Timer0的中断服务函数,每5000us中断一次;
void timer0_interrupt_program() interrupt 1 using 1
{ TL0T0_Load_Value0x1F; //手动装载最低5位值; TH0T0_Load_Value5; //手动装载剩下的8位值; Time0Count; if(Time0Count%10000) //500ms时间到
LED~LED;
} //函数功能: Timer0初始化;
void timer0_initializtion(void)
{ TMOD 0xF4;
//配置Timer0为方式0(13位定时器),同时设置GATE00,即不允许外部INT0脚控制Timer0; TL0T0_Load_Value0x1F; //手动装载最低5位值; TH0T0_Load_Value5; //手动装载剩下的8位值; TR01; //当GATE00时,TR01,表示启动T0开始工作; ET01; //允许Timer0中断; EA1; //开总中断允许位; Time0Count0;
}
void main(void)
{ timer0_initializtion(); //Timer0初始化; while(1); {
}
}