§3.5单片机的定时器中断P73:①对TMOD赋值,以确定T0和T1的工作方式。P74:定时器0工作方式1程序第7行:TMOD=0X01P73:④使TR或TR1置位,启动定时器/计数器定时或计数。P74程序第12行:TR0=1&&1J1KC1R≥1&&&&1J1KC1R≥1&&&&1J1KC1R≥1&&&&1J1KC1R≥1&&&&&&&111Q0Q1Q2Q3QCCLDD0D1CPD2D3CrPTFF0FF1FF2FF374161Q0Q1Q2Q3D0D1D2D3PTCPQCCLdCr74161的逻辑符号高8位的数都是256(28)的倍数(即商),低8位是余数P73:②计算初值,并将初值写入TH0、TL0。P74程序第8、9行:TH0=(65536-45872)/256TL0=(65536-45872)%256始化程序应完成如下工作:(P73)①对TMOD赋值,以确定T0和T1的工作方式。②计算初值,并将其写入TH0、TL0或TH1、TL1。④使TR0或TR1置位,启动定时/计数器定时或计数。①TMOD=0x01;//设置定时器0为工作方式1②TH0=(65536-10000)/256;TL0=(65536-10000)%256;③EA=1;//开总中断ET0=1;//开定时器0中断④TR0=1;//启动定时器0例3.5.1(P74)始化程序应完成如下工作:(P73)①对TMOD赋值,以确定T0和T1的工作方式。②计算初值,并将其写入TH0、TL0或TH1、TL1。③中断方式时,则对IE赋值,开放中断。④使TR0或TR1置位,启动定时/计数器定时或计数。①TMOD=0x01;//设置定时器0为工作方式1②TH0=(65536-10000)/256;TL0=(65536-10000)%256;③EA=1;//开总中断ET0=1;//开定时器0中断④TR0=1;//启动定时器0例3.5.1(P74)[例3.5.1]利用定时器0工作方式1,实现第一个发光管以1S亮灭闪烁。#defineuintunsignedint#defineucharunsignedcharsbitled1=P1^0;ucharnum;voidmain(){TMOD=0x01;//设置定时器0为工作方式1TH0=(65536-45872)/256;//装初值TL0=(65536-45872)%256;//定时50msEA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0while(1);}voidT0_time0()interrupt1//P67{TH0=(65536-45872)/256;TL0=(65536-45872)%256;//重装初值num++;if(num==20)//1s时间到{num=0;led1=~led1;//让P1^0脚取反,//一上电,I/o脚为高电平}}将红色字体移至中断程序之外,移至while(1)之后。P75补充例子:在例3.2.2(P61)中插入一个外部中断,让第一个流水灯亮。(书配录像:2:000:00)#includereg52.h#defineuintunsignedint#defineucharunsignedcharsbitdula=P2^6;sbitwela=P2^7;sbitd1=P1^0;ucharnum;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelay(uintz);voidmain(){EA=1;//开总中断EX0=1;//开外部中断0wela=1;P0=0xc0;wela=0;while(1){for(num=0;num16;num++){d1=1;//中断结束后,让流水灯灭.dula=1;P0=table[num];dula=0;delay(500);}}}voiddelay(uintxms){uinti,j;for(i=xms;i0;i--)for(j=110;j0;j--);}voidexter0()interrupt0{d1=0;//开启中断后,使d1=0,即让第一盏灯亮}P73十位数个位数1号中断,定时器0(P67表),让发光二极管以20MS间隔闪烁3号中断,定时器1(P67表),数码管前两位59S循环计时.第10章定时器/计数器应用提高(P202)10.1方式0(P202)方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚00机器周期TH0TL08位5位溢出TCONTMODD0D7D7D0申请中断1计数初值的公式为:2(8192-N)%3-N)%3213(2TLX2(8192-N)/3-N)/3213THX=(23.5方式1(P72)方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位8位溢出TCONTMODD0D7D7D0申请中断256(65536-N)%-N)%256(2TLX256(65536-N)/-N)/256THX=(21616计数初值的公式为:10.2方式2(P204)方式2为自动重装初值的8位计数方式。工作方式2特别适合于用作较精确的脉冲信号发生器。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位溢出TCONTMODD0D7D7D0申请中断计数初值的公式为:256-NTLXTHX=256-N10.3方式3(P206)方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数。工作方式3将T0分成为两个独立的8位计数器TL0和TH0。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚11机器周期TH0TL08位溢出TCONTMODD0D7D0申请中断机器周期8位申请中断溢出10.5计数器应用(P213)第14章利用定时器设计一个时钟点(P312)Voidmain()//主函数P318{init();//首先初始化各数据P315,开中断P316while(1)//进入主程序大循环{keyscan();//不停地检测按键是否被按下,P316}}voidtimer0()interrupt1//定时器0中断服务程序,P319作业1(下周星期五交前3题,连同上几次的作业)1、抄写碟中的程序:lesson4\例程\lesson4_1.c,并给每句话加注释,说明这个程序的功能。2、抄写碟中的程序:lesson4\例程\lesson4_3.c,并给每句话加注释,说明这个程序的功能。(提示:看碟的录像)3、编写程序:设计一个闹钟。用定时器0的方式1实现每1小时后蜂鸣器响1分钟,1小时后蜂鸣器又响1分钟;用定时器1的方式1实现数码管的最后5位依时显示00:00,00:01,00:02…………11:59,循环4、实验编程:虚拟一个闹钟。(此题放于实验课完成)用定时器0的方式1实现每1分钟后蜂鸣器响4ms,1分钟后蜂鸣器又响4ms;用定时器1的方式1实现数码管的最后5位依时显示00:00,00:01,00:02…………01:59,循环作业25、阅读P204[例10.2.1]6、阅读P206[例10.3.1]7、阅读P312第14章的程序中的定时器部分