- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 6.3.3 定时/计数器2 应用 自动重装方式 【例6-6】设STC89C52单片机系统时钟频率fCLK为12MHZ,使用定时/计数器T2工作方式于自动重装方式,请编写程序使得在P1.6引脚上输出周期为2毫秒占空比为50%的方波信号。 知识点:与定时/计数器2相关的特殊功能寄存器T2MOD、T2CON、IE、IP、IPH各位物理意义,定时/计数器T2入口地址,定时/计数器T2工作方式确定。 * 设计步骤: (1)求定时初值N: 设置定时/计数器T2为16位自动重装载方式,工作模式为定时,我们选择向上计数,即DCEN=0,取EXEN2=0,定时器T2 为向上计数至0FFFFH 溢出,置位TF2 激活中断,TF2需软件清零。 (x)补=216-1ms/1μs=65536-1000=64536=FC18H (2)确定特殊功能寄存器T2CON、T2MOD、IE、IP、IPH值 T2CON=04H(自动重装载 =0、定时 =0,启动T2工作TR2=1), T2MOD=00H(向上计数DCEN=0,T2时钟输出不使能,即T2OE=0) IE=A0H(允许T2中断请求,即ET2=1,总中断允许,即EA=1) IP=20H(设置PT2=1,其它位为0) IPH=20H(设置PT2H=1,其余位为0),即PT2H PT2=11,设置定时/计数器2中断优先级为第4级 。 * (3)确定定时/计数器2中断服务子程序入口地址为002BH. (4)编写主程序和中断服务子程序 2. 程序清单 (1)汇编语言程序清单 T2CON EQU 0C8H ;定义T2CON寄存器字节地址为C8H T2MOD EQU 0C9H ;定义T2MOD寄存器地址为C9H TF2 EQU T2CON.7 ;定义定时/计数器2计数溢出标志位 ET2 EQU IE.5 ;定义定时/计数器2中断允许标志位 RCAP2L EQU 0CAH ;定义RCAP2L寄存器字节地址为CAH RCAP2H EQU 0CBH ;定义RCAP2H寄存器字节地址为CBH TL2 EQU 0CCH ;定义TL2寄存器字节地址为CCH TH2 EQU 0CDH ;定义TH2寄存器字节地址为CDH IPH EQU 0B7H ;定义IPH寄存器字节地址为B7H * ORG 0000H AJMP MAIN ORG 002BH ;定时/计数器2中断入口地址 LJMP PT2INT ORG 0100H MAIN: MOV SP,#60H ;设置堆栈区 MOV T2MOD,#00H;置T2向上计数且时钟输出不使能 MOV T2CON,#04H;置T2自动重装载定时且启动T2 MOV TH2,#0FCH ;装载定时器2的定时初值 MOV TL2,#18H * MOV RCAP2L,#18H ; MOV RCAP2H,#0FCH MOV IE,#0A0H ;允许T2中断,EA允许 MOV IP,#20H ;置T2为第4级中断优先级 MOV IPH,#20H SETB P1.6 ;预置P1.6=1 HERE:SJMP HERE;踏步等待中断 * PT2INT: CLR TF2 ;清计数溢出标志 CPL P1.6 ;P1.6输出求反 RETI END Keil uVision4 * (2)C语言程序清单 #includeREG52.H sbit P16=P1^6; /*定义位变量P16*/ sfr T2MOD = 0xC9; /*定义特殊功能寄存器T2MOD*/ Sfr IPH = 0xB7; /*定义特殊功能寄存器IPH*/ void main(){ /*主函数*/ SP=0X60; /*设置堆栈指针*/ T2MOD=0x00; /*设置定时器2向上计数且时钟输出不使能*/ T2CON=0x04; /*设置定时器2自动重装载、定时且启动T2计数 TL2=0x18;TH2=0xfc; /*装载定时器2的定时初值*/ RCAP2H=0xfc;RCAP2L=0x18; /*装载定时器2的定时初值*/ * IE=0xa0; /*允许T2中断请求,总中断允许*/ IP=0x20;IPH=0x20; /*设置T2为第4级中断优先级*/ while(1){ /*踏步等待中断*/ } } void timer1int(void) int
文档评论(0)