N76E003的定时器/计数器 0和1
定时器/计数器 0和1
N76E003系列定时器/计数器 0和1是2个16位定时器/计数器。每个都是由两个8位的寄存器组成的16位计数寄存器。
对于定时器/计数器0,高8位寄存器是TH0、 低8位寄存器是TL0。
同样定时器/计数器1也有两个8位寄存器, TH1 和TL1。
TCON 和 TMOD 可以配置定时器/计数器0和1的工作模式。
通过TMOD中的 位来选择定时器或计数器功能。
每个定时器/计数器都有选择位,TMOD的第2位选择定时器/计数器0功能,TMOD的第6位选择定时器/计数器1功能。
将它们设置为定时器后,定时器将对系统时钟周期计数。
定时器0通过设置T0M(CKCON.3)位,定时器1通过设置T1M(CKCON.4)位,来选择定时器时钟是系统时钟(FSYS)的12分频或直接是系统时钟。
在计数器模式下,每当检测到外部输入脚T0上的下降沿,计数寄存器的内容就会加一。如果在一个时钟周期采样到高电平,在下一个时钟周期采样到低电平,那么T0或T1引脚就会确认为一个由高到低的跳变。
当有定时器溢出发生,定时器0和1能配置引脚T0/T1自动翻转输出。
这个功能通过设P2S寄存器的T0OE和T1OE来设置,分别对应于定时器0和定时器1。当打开这个功能,输出端口在第一个定时溢出之前输出逻辑1。为确保此模式功能, 位应该被清除并且选择系统时钟作为定时器的时钟源。
注意:TH0(TH1)和TL0(TL1)是独立分开访问。需要特别注意,在模式0或模式1下时,当读/写TH0(TH1)和TL0(TL1)之前,必须清除TR0(TR1)来停止计时。否则将产生不可预料的结果。
模式0(13位定时器)
在模式 0, 定时器/计数器是13位的计数器。13位的计数器由TH0 (TH1) 和TL0 (TL1)的低五位组成。TL0 (TL1)的高三位被忽略。当TR0 (TR1)置位且GATE是0或 是1时,定时器/计数器使能。GATE设置为1可以通过定时器来计算外部输入引脚上输入脉冲的宽度。当13位的定时器计数值从1FFFH变为0000H后,定时器溢出标志TF0 (TF1) 置位,如果中断打开,此时会产生一个定时器中断。
#define TH0_INIT 0xFC
#define TL0_INIT 0x0F
#define TH1_INIT 0xE0
#define TL1_INIT 0x00
TMOD = 0XFF;
Set_All_GPIO_Quasi_Mode;
TIMER0_MODE0_ENABLE; //Timer 0 and Timer 1 mode configuration
TIMER1_MODE0_ENABLE; clr_T0M;
clr_T1M; TH0 = TH0_INIT;
TL0 = TL0_INIT;
TH1 = TH1_INIT;
TL1 = TL1_INIT; set_ET0; //enable Timer0 interrupt
set_ET1; //enable Timer1 interrupt
set_EA; //enable interrupts set_TR0; //Timer0 run
// set_TR1; //Timer1 run
TMOD = 0XFF;
Set_All_GPIO_Quasi_Mode; 设置引脚模式 #define P14_OpenDrain_Mode P1M1|=SET_BIT4;P1M2|=SET_BIT4
TIMER0_MODE0_ENABLE; //Timer 0 and Timer 1 mode configuration #define TIMER0_MODE0_ENABLE TMOD&=0xF0
//-------------------- Timer1 function define --------------------
#define TIMER0_MODE0_ENABLE TMOD&=0xF0
#define TIMER0_MODE1_ENABLE TMOD&=0xF0;TMOD|=0x01
#define TIMER0_MODE2_ENABLE TMOD&=0xF0;TMOD|=0x02
#define TIMER0_MODE3_ENABLE TMOD&=0xF0;TMOD|=0xF3
clr_T0M;
clr_T1M;
#define clr_PWMCKS CKCON &= ~SET_BIT6
#define clr_T1M CKCON &= ~SET_BIT4
#define clr_T0M CKCON &= ~SET_BIT3
#define clr_CLOEN CKCON &= ~SET_BIT1
TH0 = TH0_INIT;
TL0 = TL0_INIT;
TH1 = TH1_INIT;
TL1 = TL1_INIT;
#define TH0_INIT 0xFC //
#define TL0_INIT 0x0F
#define TH1_INIT 0xE0 //
#define TL1_INIT 0x00
set_TR0; //Timer0 run
由于定时器方式0位13为计数器,即最多能装载2的13次方个(8192),当TH0与TL0初始值为零时最多经过8192个机器周期该计数器就会溢出一次,,向CPU申请中断。
时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。 在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同。我们学习的8051单片机的时钟范围是1.2MHz-12MHz。 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。 机器周期 在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。 指令周期 指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。
1T、6T、12T这个原本叫 机械周期,现在更多人称为 指令周期;以前标准51单片机,是12T模式的。后来大量单片机厂家的介入,开始对单片机进行提速,于是就出现了 6T、1T模式的单片机。
时钟周期:是指振荡源的周期,如 外部晶振 10MHz(假设有),那么它的时钟周期就是 1/10MHz=0.1us;(N76E003)
机械周期:单片机执行一单位指令所需要的 时钟周期 个数,如 1T,就表示,需要 1个时钟周期;12T(AT89C51) 即为 12个时钟周期。这些都只是一单位指令的时间(如自增、自减等),多单位指令时间进行倍乘(如赋值语句需要2个机械周期,即乘以2倍)
指令周期:早期更多的是用来描述 某条指令执行 需要多少个机械周期,(如自增、自减为 1个机械周期,赋值 2个机械周期,判断 4个机械周期)。随着C语言的大量普及,现在,更多的人用它来代替 机械周期 这个名词,而 指令本身的 周期被人们所忽略,不再深讨了。
13位的计数器由TH0 (TH1) 和TL0 (TL1)的低五位组成。也就是说先将TH0向左移五位,在或上TL0,即(0xFC<<5)|0X0F=((11111100)<<5)|00001111=1111110000000|00001111=0001 1111 1000 1111=1F8F(8079)
当13位的定时器计数值从1FFFH变为0000H后(这地方需要仔细理解,我花费了好长时间),定时器溢出标志TF0 (TF1) 置位(定时器溢出标志溢出),如果中断打开,此时会产生一个定时器中断。N76E003例程里选用了16M,选用16MHZ,然后16/12(clr_t0m,可以不选)=1.3MHZ,也就是1/1300000s,
即(8192-8079)*1/1300000=0.000086923s(即86us)
这里需要说明的是示波器高电平计一次数低电平计一次数所以,周期需要除以二就是定时器的正确计时时间
其实也可以按照这种方法来写
TH0=(8192-X)/32; TL0=(8192-x)%32 这种好处就是更方便计数。
set_ET1; //enable Timer1 interrupt
#define set_ET1 ET1 = 1
set_EA; //enable interrupts
set_TR0; //Timer0 run
中断服务函数:
void Timer0_ISR (void) interrupt //interrupt address is 0x000B
{
TH0 = TH0_INIT;
TL0 = TL0_INIT;
P12 = ~P12; // GPIO toggle when interrupt
}
模式1(16位定时器)
模式1与模式0 非常相似,只是模式1下定时器/计数器为16位的,就是说是用THx和TLx的全部16位用来计数。当
计数值由FFFFH向0000H翻转后,定时器相应的溢出标志TF0(TF1)置1,如果中断使能则将产生中断。
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h" //***************** The Following is in define in Fucntion_define.h ***************************
//****** Always include Function_define.h call the define you want, detail see main(void) *******
//***********************************************************************************************
#if 0
//#define TIMER0_MODE0_ENABLE TMOD&=0x0F
//#define TIMER0_MODE1_ENABLE TMOD&=0x0F;TMOD|=0x10
//#define TIMER0_MODE2_ENABLE TMOD&=0x0F;TMOD|=0x20
//#define TIMER0_MODE3_ENABLE TMOD&=0x0F;TMOD|=0x3F //#define TIMER1_MODE0_ENABLE TMOD&=0xF0
//#define TIMER1_MODE1_ENABLE TMOD&=0xF0;TMOD|=0x01
//#define TIMER1_MODE2_ENABLE TMOD&=0xF0;TMOD|=0x02
//#define TIMER1_MODE3_ENABLE TMOD&=0xF0;TMOD|=0xF3
#endif #define TH0_INIT 50000
#define TL0_INIT 50000
#define TH1_INIT 25000
#define TL1_INIT 25000 UINT8 u8TH0_Tmp,u8TL0_Tmp,u8TH1_Tmp,u8TL1_Tmp;
/************************************************************************************************************
* TIMER 0 interrupt subroutine
************************************************************************************************************/
void Timer0_ISR (void) interrupt //interrupt address is 0x000B
{
TH0 = u8TH0_Tmp;
TL0 = u8TL0_Tmp; P12 = ~P12; // GPIO1 toggle when interrupt
} /************************************************************************************************************
* TIMER 1 interrupt subroutine
************************************************************************************************************/
void Timer1_ISR (void) interrupt //interrupt address is 0x001B
{
TH1 = u8TH1_Tmp;
TL1 = u8TL1_Tmp; P03 = ~P03; //P0.3 toggle when interrupt
}
/************************************************************************************************************
* Main function
************************************************************************************************************/
void main (void)
{ Set_All_GPIO_Quasi_Mode;
TIMER0_MODE1_ENABLE;
TIMER1_MODE1_ENABLE; clr_T1M;
//set_T1M; u8TH0_Tmp = (-TH0_INIT)/;
u8TL0_Tmp = (-TL0_INIT)%;
u8TH1_Tmp = (-TH1_INIT)/;
u8TL1_Tmp = (-TL1_INIT)%; TH0 = u8TH0_Tmp;
TL0 = u8TL0_Tmp;
TH1 = u8TH1_Tmp;
TL1 = u8TL1_Tmp; set_ET0; //enable Timer0 interrupt
set_ET1; //enable Timer1 interrupt
set_EA; //enable interrupts
set_TR0; //Timer0 run
set_TR1; //Timer1 run
while();
} u8TH0_Tmp = (65536-TH0_INIT)/256; u8TL0_Tmp = (65536-TL0_INIT)%256;
u8TH1_Tmp = (65536-TH1_INIT)/256;
u8TL1_Tmp = (65536-TL1_INIT)%256; TH0 = u8TH0_Tmp;
TL0 = u8TL0_Tmp;
TH1 = u8TH1_Tmp;
TL1 = u8TL1_Tmp;
只是模式1下定时器/计数器为16位的,就是说是用THx和TLx的全部16位用来计数。当
计数值由FFFFH向0000H翻转后,定时器相应的溢出标志TF0(TF1)置1,如果中断使能则将产生中断。
模式2(8位自动重装载定时器)
模式2下定时器/计数器为自动重装模式。此模式下TL0(TL1)是一个8位的计数器,TH0(TH1)保存重装计数
值。当TL0(TL1)溢出后,TCON中的TF0(TF1)标志置位且TH0 (TH1)中内容重装至TL0(TL1),然后继续计数过
程。重装过程中TH0(TH1)内的值保持不变.该特征最好地适用于UART波特率发生器,不需要连续软件介入。
void InitialUART0_Timer1(UINT32 u32Baudrate) //T1M = 1, SMOD = 1
{
P06_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
P07_Quasi_Mode; //Setting UART pin as Quasi mode for transmit SCON = 0x50; //UART0 Mode1,REN=1,TI=1
TMOD |= 0x20; //Timer1 Mode2 set_SMOD; //UART0 Double Rate Enable
set_T1M;
clr_BRCK; //Serial port 0 baud rate clock source = Timer1 #ifdef FOSC_160000
TH1 = - (/u32Baudrate+); /*16 MHz */
#endif
#ifdef FOSC_166000
TH1 = - (/u32Baudrate); /*16.6 MHz */
#endif
set_TR1;
set_TI; //For printf function must setting TI = 1
}
SCON = 0x50; //UART0 Mode1,REN=1,TI=1
TMOD |= 0x20; //Timer1 Mode2
#define set_SMOD PCON |= SET_BIT7
#define set_T1M CKCON |= SET_BIT4
clr_BRCK;
#define clr_BRCK T3CON &= ~SET_BIT5
#ifdef FOSC_160000
TH1 = 256 - (1000000/u32Baudrate+1); /*16 MHz */
#endif
#ifdef FOSC_166000
TH1 = 256 - (1037500/u32Baudrate); /*16.6 MHz */
#endif
已知串口0通信方式1下,波特率为115200bps,系统晶振频率为16MHz,求TL1,TH1中装入的初值(定时器1方式2)
解:设初值X,则定时器每计256-X个数溢出一次,每计一个数的时间为一个机器周期,因为是1T 8051架构,所以一个机器周期等于1个时钟周期,由于设置了SMOD 所以计一个数的时间为(1/16MHZ) us(即1/16000000s),则定时器溢出一次的时间为[256-X]/16MHZ。
通常都是固定的,一般都是根据所使用的波特率来求定时器初值。方式1的波特率= 即 (2^smod /32)*T1的溢出率,即 ((2^smod /32)*16000000)/(256-x)
通常都是固定的,一般都是根据所使用的波特率来求定时器初值。
TH1 = 256 - (1000000/u32Baudrate+1);
256-TH1-1=1000000/u32Baudrate u32Baudrate=1000000/(256-TH1-1)
set_T1M;
clr_BRCK; //Serial port 0 baud rate clock source = Timer1
set_TR1;
set_TI; //For printf function must setting TI = 1
模式3(两组独立8位定时器)
定时器0和定时器1的模式3有着不同的工作方式。对定时器/计数器1来说模式3会将其停用;
对定时器/计数器0来说,模式3下TL0和TH0是2个独立的8位计数寄存器。模式3下TL0使用定时器0的控制位:如 GATE, TR0,TL0也可以用来对T0 脚上的1到0 跳变计数,由 计数。TH0 只能对时钟周期计数,并使用定时器/计数器1的控制位(TR1和TF1)。
当需要额外的8位定时器时可以使用模式3 。
当定时器0配置为模式3时,定时器1可以通过配置其进入或离开模式3的方式来打开或关闭自己。
定时器1依然可以工作在模式0、1、2下,但它的灵活性受到限制。虽然基本功能得以维持,但已不能对TF1和TR1进行控制(由上文可知在该模式下该位由定时器0控制)。此时定时器1依然可以使用GATE脚、T1M。它同样可以用作串行口的波特率发生器或其他不需要中断的应用。也就是说当定时器工作在模式3时,定时器1模式依然可以选择但是灵活性受限,不能对TF1和TR1进行控制。
/*---------------------------------------------------------------------------------------------------------*/
/* */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved. */
/* */
/*---------------------------------------------------------------------------------------------------------*/ //***********************************************************************************************************
// Nuvoton Technoledge Corp.
// Website: http://www.nuvoton.com
// E-Mail : MicroC-8bit@nuvoton.com
// Date : Apr/21/2016
//*********************************************************************************************************** //***********************************************************************************************************
// File Function: N76E003 Timer0/1 Mode3 demo code
//***********************************************************************************************************
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h" //***************** The Following is in define in Fucntion_define.h ***************************
//****** Always include Function_define.h call the define you want, detail see main(void) *******
//***********************************************************************************************
#if 0
//#define TIMER0_MODE0_ENABLE TMOD&=0x0F
//#define TIMER0_MODE1_ENABLE TMOD&=0x0F;TMOD|=0x10
//#define TIMER0_MODE2_ENABLE TMOD&=0x0F;TMOD|=0x20
//#define TIMER0_MODE3_ENABLE TMOD&=0x0F;TMOD|=0x3F //#define TIMER1_MODE0_ENABLE TMOD&=0xF0
//#define TIMER1_MODE1_ENABLE TMOD&=0xF0;TMOD|=0x01
//#define TIMER1_MODE2_ENABLE TMOD&=0xF0;TMOD|=0x02
//#define TIMER1_MODE3_ENABLE TMOD&=0xF0;TMOD|=0xF3
#endif #define TH0_INIT (256-100)
#define TL0_INIT (256-50)
#define TH1_INIT 0x00
#define TL1_INIT 0x00 /************************************************************************************************************
* TIMER 0 interrupt subroutine
************************************************************************************************************/
void Timer0_ISR (void) interrupt // interrupt address is 0x000B
{
TL0 = TL0_INIT; // reload by software
P12 = ~P12; // GPIO1 toggle when interrupt
} /************************************************************************************************************
* TIMER 1 interrupt subroutine
************************************************************************************************************/
void Timer1_ISR (void) interrupt //interrupt address is 0x001B
{
TH0 = TH0_INIT;
Send_Data_To_UART0(0x54); //print charater "T" means timer interrupt
P12 = ~ P12; //Mark UART output to find the real timer interrupt timming.
} /************************************************************************************************************
* Main function
************************************************************************************************************/
void main (void)
{
Set_All_GPIO_Quasi_Mode;
InitialUART0_Timer3(); TIMER0_MODE3_ENABLE;
TIMER1_MODE3_ENABLE; TH0 = TH0_INIT; //initial counter values
TL0 = TL0_INIT;
TH1 = TH1_INIT;
TL1 = TL1_INIT; set_ET0; //enable Timer0 counter interrupt
set_ET1; //enable Timer1 counter interrupt
set_EA; //enable interrupts
set_TR0; //Timer0 run
set_TR1; //Timer1 run while();
}
#define TIMER1_MODE3_ENABLE TMOD&=0xF0;TMOD|=0xF3
#define TH0_INIT (256-100)
#define TL0_INIT (256-50)
#define TH1_INIT 0x00
#define TL1_INIT 0x00 /************************************************************************************************************
* TIMER 0 interrupt subroutine
************************************************************************************************************/
void Timer0_ISR (void) interrupt // interrupt address is 0x000B
{
TL0 = TL0_INIT; // reload by software
P12 = ~P12; // GPIO1 toggle when interrupt
} /************************************************************************************************************
* TIMER 1 interrupt subroutine
************************************************************************************************************/
void Timer1_ISR (void) interrupt //interrupt address is 0x001B
{
TH0 = TH0_INIT;
P11 = ~P11; //P1.1 toggle when interrupt
} /************************************************************************************************************
* Main function
************************************************************************************************************/
void main (void)
{ Set_All_GPIO_Quasi_Mode;
TIMER0_MODE3_ENABLE;
TIMER1_MODE3_ENABLE; TH0 = TH0_INIT; //initial counter values
TL0 = TL0_INIT;
TH1 = TH1_INIT;
TL1 = TL1_INIT; set_ET0; //enable Timer0 counter interrupt
set_ET1; //enable Timer1 counter interrupt
set_EA; //enable interrupts
set_TR0; //Timer0 run
set_TR1; //Timer1 run while()
{
P1 = TH1; //for Timer 1 has no interrupt while Timer 0 in mode 3, show on ports
P2 = TL1;
}
}
对定时器/计数器0来说,模式3下TL0和TH0是2个独立的8位计数寄存器。
模式3下TL0使用定时器0的控制位:如 ,GATE, TR0,,TL0也可以用来对T0 脚上的1到0 跳变计数,由TMOD.2()来决定。TH0 只能对时钟周期计数,并使用定时器/计数器1的控制位(TR1和TF1)
模式三情况如下表所示:
TH0 | TL0 | TH1 | TL1 |
8位计数 | 8位计数 | 停用,其他模式可选择但受限 | 停用,其他模式可选择但受限 |
定时器1的控制位(TR1,TF1) | 定时器0的控制位 | 其他模式可以控制GATE、、T1M | 其他模式可以控制GATE、、T1M |
当定时器0配置为模式3时,定时器1可以通过配置其进入或离开模式3的方式来打开或关闭自己。定时器1依然可以工作在模
式0、1、2下,但它的灵活性受到限制。虽然基本功能得以维持,但已不能对TF1和TR1进行控制
它同样可以用作串行口的波特率发生器或其他不需要中断的应用。
N76E003的定时器/计数器 0和1的更多相关文章
- 毕业回馈-89c51之定时器/计数器(Timer/Count)
今天分享的是89c51系列单片机的内部资源定时器/计数器,在所有的嵌入式系统中都包含这两个内部功能. 首先先了解几个定时器/计数器相关的概念: •时钟周期:时钟周期 T 是时序中最小的时间单位,具体计 ...
- MCS-51单片机的定时器/计数器概念
一.MCS-51单片机的定时器/计数器概念 单片机中,脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1,而花费的时间恰好是1微秒;只要相邻两个计数脉冲之间的时间间隔相等,则计 ...
- TQ2440之定时器中断0——volatile关键字的重要作用
近日,在学习<ARM处理器裸机开发实战--机制而非策略>一书,在TQ2440开发板上,按照书中实例以及光盘配套程序源代码进行Timer0中断试验,编译成功后烧写到开发板上,没有任何反应,反 ...
- N76E003之定时器3
定时器3是一个16位自动重装载,向上计数定时器.用户可以通过配置T3PS[2:0] (T3CON[2:0])选择预分频,并写入重载值到R3H 和R3L寄存器来决定它的溢出速率.用户可以设置TR3 (T ...
- C51 定时器/计数器 个人笔记
C51的周期 结构图 两个功能寄存器 51单片机定时/计数器的工作由两个特殊功能寄存器控制.TMOD用于设置其工作方式:TCON用于控制其启动和中断申请. 工作方式寄存器TMOD 其中方式一和方式二常 ...
- 【C51】单片机定时器介绍
标准51架构的单片机有2个定时器 :T0 和 T1,他们2个的用法几乎一样.下面主要讲T0定时器的用法. 初步认知 定时器 和 计数器 都是单片机中同一个模块.他们的实质都是: 加法存储计数器.对 ...
- 十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)
1.引脚定义 P3口各引脚第二功能定义 标号 引脚 第二功能 说明 P3.0 10 RXD 串行输入口 P3.1 11 TXD 串行输出口 P3.2 12 INT0(上划线) 外部中断0 P3.3 1 ...
- 单片微机原理P2:80C51外部中断与定时器系统
0. 外部中断 书上的废话当然是很多的了,对于中断我想大家应该早就有一个很直观的认识,就是"设置断点,执行外部外码,然后返回断点"这样的三个过程.中断给系统提供了一个良好的响应模式 ...
- 51单片机中断interrupt……using……
51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using ...
随机推荐
- 在kali linux之下安装wps之后 报错字体缺失
启动WPS for Linux后,出现提示"系统缺失字体" . 出现提示的原因是因为WPS for Linux没有自带windows的字体,只要在Linux系统中加载字体即可. 第 ...
- c++ 文件增加#ifndef、#define 和 #endif 语句的意义
文件currency.h (或 currencyOverload.h) 包含了 currency类的声明和实现细节. 在文件头, 应该加上语句 #ifndef Currency_ #define Cu ...
- WEB打印(jsp版)
<%@ page contentType="text/html; charset=UTF-8" language="java"%> <%@in ...
- Java如何使用线程解决生产者消费者问题?
在Java编程中,如何使用线程解决生产者消费者问题? 以下示例演示如何使用线程解决生产者消费者问题. package com.yiibai; public class ProducerConsumer ...
- e802. 创建一个位置大小的JProgressBar组件
A progress bar with an unknown maximum typically displays an animation until the task is complete. N ...
- JAVA组成原理及使用方法编辑环境及实现过程
JAVA组成原理一.由四方面组成:1.Java编程语言2.Java类文件格式3.Java虚拟机4.Java应用程序接口 当编辑并运行一个Java程序时,需要同时涉及到这四种方面.二.使用文字编辑软件: ...
- mysql字段类型对应javabean属性
来吧 我们一起看下图,就能明白了.
- linux内置软件安装命令
yum -y install epel-release
- php sql纯语句
条件语句CASE CASE WHEN a.business_mark != END as source_type, 条件语句 CASE ELSE CASE WHEN a.business_mark ! ...
- 升级到yosemite后homebrew报错的解决
报错会如下: /usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Ve ...