标题:
80C52单片机定时器T2使用问题请教
[打印本页]
作者:
赵光祥
时间:
2018-5-17 22:10
标题:
80C52单片机定时器T2使用问题请教
用T2来控制LED延时1s亮灭,如下图,但烧写进单片机后发现控制不了,
觉得应该是初始化出现问题,但又不清楚是哪里有问题
各位大神,帮帮看一下,谢谢!
截图20180517215315.png
(84.16 KB, 下载次数: 62)
下载附件
2018-5-17 21:56 上传
作者:
zhanghyg
时间:
2018-5-18 08:55
你TH2和TL2初值0xff不对,LED=!LED,这句也错了,应该LED=~LED。
作者:
chaoself
时间:
2018-5-23 16:19
为何要用定时器2呢?用0与1都可以呀
作者:
zjjhtony
时间:
2018-5-23 19:30
初始化时需要加2条语句(仿真可行):
EA=1;//开总中断允许
ET2=1; //开定时器T2的中断允许
否则你的定时器T2溢出但不产生中断。
作者:
angmall
时间:
2018-5-23 19:38
#include "reg51.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
//-----------------------------------------------
/* define constants */
#define FOSC 11059200L
#define T1MS (65536-FOSC/12/1000) //1ms timer calculation method in 12T mode
/* define SFR */
sbit ET2 = IE^5;
sfr T2CON = 0xc8; //timer2 control register
sbit TF2 = T2CON^7;
sbit TR2 = T2CON^2;
sfr T2MOD = 0xc9; //timer2 mode register
sfr RCAP2L = 0xca;
sfr RCAP2H = 0xcb;
sfr TL2 = 0xcc;
sfr TH2 = 0xcd;
sbit LED = P2^0; //work LED, flash once per second
/* define variables */
WORD count; //1000 times counter
//-----------------------------------------------
/* Timer2 interrupt routine */
void tm2_isr() interrupt 5 using 1
{
TF2 = 0;
if (count-- == 0) //1ms * 1000 -> 1s
{
count = 1000; //reset counter
LED = ! LED; //work LED flash
}
}
//-----------------------------------------------
/* main program */
void main()
{
RCAP2L = TL2 = T1MS; //initial timer2 low byte
RCAP2H = TH2 = T1MS >> 8; //initial timer2 high byte
TR2 = 1; //timer2 start running
ET2 = 1; //enable timer2 interrupt
EA = 1; //open global interrupt switch
count = 0; //initial counter
while (1); //loop
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1