2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Timers et calculi sunt ferramenta moduli ad tempus intervalla metientes vel eventuum computandos. Adhiberi possunt in multis applicationibus, ut moras definitas temporis gignant, frequentia metiantur, eventus externos computando, etc. Timor 51 microcontroller ad facultates internas microcontrollis est pertinet, et nexus et operatio eius circuitus intra microcontroll. Hic articulus singulariter principium operantem, conformationem methodum et applicationem temporum et calculorum in 51 microcontroller.
Hoc caput operiet scientiam relatas interrumpere.Ratio explicandum interrumpere
Nota: Facultates timerores ad exemplar microcontroller referuntur. Diversa exempla microcontrollerum varias vicissitudines et modos operandi habere possunt, sed generaliter loquendo, operationes rationes T0 et T1 omnibus 51 microcontrolers sunt communes.
Timor est sicut horologii terroris parvi intra microcontrollem. Cum valor numerationis unitatis augetur ad "tempus terrorem commonitionis", unitas numeratio petitionem interpellandi systematis interpellandi dabit, "annulum commonitorium generandum", et rationem faciet ut salire ad munus muneris interregem executionis. .
Principium operans timoris/sponsoris nititur in pulsus horologii. In modo timer, horologii interni fonte ad numerandum utuntur; Singulis timor/calculus actis mandare habet qui valorem monetae numeratae reponit.
Munera leo et numerandi moderari frena peculiaris functionis actis mandare TMOd. CT Csqrt{T}CT Ad electionem faciendam, notitia registri TMOD in sequenti tabula recensetur. Videri potest calculis 2 timentes habere quatuor modos operandi, selectos per M1 et M0 TMOD. Modi 0, 1 et 2 duorum calculorum idem sunt, sed modus 3 differt.
Ponendo M1 et M0 in registro TMOD registro, timer/contro 0 et 1 quattuor modos operandi habent.
Modus operandi tabula talis est:
Modus 1 prorsus idem ac modus 0 est, praeterquam quod omnes 16 frusta TH0 et TL0 adhibentur. Hoc modo, 8-bl redundatio TL0 ad TH0 defert, et redundantia TH0 redundantiam vexillum TF0 in TCON ponit.
Cum PORTA=0(TMOD.3), si TR0=1, timer numerat. Cum PORTA ==1, externum initus IN, timer 0 temperare permittitur, ita ut mensurae latitudinis pulsus perfici possit. TRO frenum in registro TCON regere est. Ut munus specificae descriptionis cuiusque partis registri TCON, vide introductionem registri TCON in sectione priore.
Nota: Timor seriei STC89C51RC/RD+ microcontroller duas rates numerans habet: unus est modus 12T, addit 1 singulas 12 horologiorum, idem ac traditum 8051 microcontroller; T0 rate, quod est 2 temporibus traditionalis 8051 microcontroller, in programmatibus STC-ISP ponitur cum programmata usoris comburens.
Hoc modo, timer/sponsorium automatice 8-bit occurro reload. (TH0 praeponi potest, et contentum TH0 mutatum remanebit in reinstallation)
Nam Timer 0, hoc modo, Timer 1 cessat numerare, effectusque est idem ac constituere TR1 ad 0 .
Pro timer 0, hoc modo functionis TL0 et TH0 timoris 0 ut duo calculis independentibus 8-bit. Figura infra logicam diagramma timentis 0 modo 3 ostendit. TL0 frenum timer 0 imperium occupat; CT Csqrt{T}CT PORTA, TRO, IN, TFO. THO limitatur functioni timoris (tempus occurrii) et occupat TR1 et TF1 timoris 1 . Hoc tempore TH0 imperat timer 1 interpellare.
Modus 3 provisus est addere addito 8-bit timori/calculo, dans microcontroller ter/calculis. Modus 3 tantum competit timori/contro 0. Cum timer T1 in modo 3 est, TR1-0 aequiparatur et numerando subsistit, et T0 duobus timentibus adhiberi potest.
Nota: Instrumentum programmandi STC-ISP venit cum valore initiali temporis iniri.
Denotat lumen LED1 inter intervalla 1 secundae per timer 0 interrumpere cuiusque temporis.
#include <REGX52.H>
sbit LED1 = P2^0;
void External0_ISR(void) interrupt 1
{
static unsigned int count = 0;
TL0 = 0x18; //需要手动复原
TH0 = 0xFC; //需要手动复原
// 中断处理代码
if(count == 1000)
{
count = 0;
LED1 = !LED1;
}
count++;
}
void Timer0_Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
ET0 = 1;//打开T0中断
EA = 1;//打开总中断
TR0 = 1; //定时器0开始计时
}
void main()
{
Timer0_Init();
while(1)
{
}
}
In hac demonstratione, traiectio sinistrae ac cror_ recti transpositio functionum in INTRINS.H bibliotheca adhibita sunt. Connexio corporis picturae: K1 cum P0_0 clavo iungitur, et octo lumina DUCTUS in P2 clavum inseruntur.
#include <REGX52.H>
#include <INTRINS.H>
sbit KEY1 = P0^0;
sbit KEY2 = P0^1;
unsigned char LEDMode;
void DelayXms(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void Timer0_Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
ET0 = 1;//打开T0中断
EA = 1;//打开总中断
TR0 = 1; //定时器0开始计时
}
void External0_ISR(void) interrupt 1
{
static unsigned int count = 0;
TL0 = 0x18; //需要手动复原
TH0 = 0xFC; //需要手动复原
// 中断处理代码
if(count == 1000)
{
count = 0;
if(LEDMode == 0)
P2 = _crol_(P2,1);
if(LEDMode == 1)
P2 = _cror_(P2,1);
}
count++;
}
unsigned char Getkey()
{
unsigned char keyNumber = 0;
if(KEY1 == 0)
{
DelayXms(5);
while(KEY1 == 0);
DelayXms(5);
keyNumber = 1;
}
if(KEY2 == 0)
{
DelayXms(5);
while(KEY2 == 0);
DelayXms(5);
keyNumber = 2;
}
return keyNumber;
}
void main()
{
unsigned char keyNum = 0;
P2 = 0xfe;
Timer0_Init();
while(1)
{
keyNum = Getkey();
if(keyNum)
{
if(keyNum == 1)
{
LEDMode++;
if(LEDMode>=2)
{
LEDMode = 0;
}
}
}
}
}
Haec demonstratio code utitur modulo LCD1602 ut propono. Modulus LCD1602 non singillatim explicabitur, et mandatum capitulum speciale postea praebebitur. Si bibliotheca LCD1602 opus est, secreto mihi nuntiare potes. Connexio corporis picturae: Modo plug in LCD1602 moduli ad tabulam.
#include <REGX52.H>
#include "LCD1602.h"
unsigned char Sec=55,Min=59,Hour;//秒分时
void DelayXms(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void Timer0_Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初始值
TH0 = 0xFC; //设置定时初始值
TF0 = 0; //清除TF0标志
ET0 = 1;//打开T0中断
EA = 1;//打开总中断
TR0 = 1; //定时器0开始计时
}
void External0_ISR(void) interrupt 1
{
static unsigned int count = 0;
TL0 = 0x18; //需要手动复原
TH0 = 0xFC; //需要手动复原
// 中断处理代码
if(count == 1000)
{
count = 0;
Sec++;
if(Sec == 60)
{
Sec = 0;
Min++;
if(Min == 60)
{
Min = 0;
Hour++;
if(Hour == 24)
{
Hour = 0;
}
}
}
}
count++;
}
void main()
{
Timer0_Init();
LCD_Init();
LCD_ShowString(1,1,"Time:");
LCD_ShowString(2,1,"00:00:00");
while(1)
{
LCD_ShowNum(2,1,Hour,2);
LCD_ShowNum(2,4,Min,2);
LCD_ShowNum(2,7,Sec,2);
}
}