历史上的今天
返回首页

历史上的今天

今天是:2025年03月26日(星期三)

正在发生

2020年03月26日 | 单片机小白学习之路(十八)---定时器中断实现led的取反

2020-03-26 来源:eefocus

目标:定时器中断实现led的取反

本节所要实现的功能是:系统运行时,D1小灯循环点亮1秒,熄灭1秒。


1.定时器/计数器使用方法


①对TMOD赋值,以确定T0和T1的工作方式。

②计算初值,并将其写入TH0、TL0或TH1、TL1。

③中断方式时,打开定时器中断(ET0/ET1)及总中断EA。

④使TR0或TR1置位,启动定时/计数器定时或计数


定时器/计数器初值计算:

假如要定时1ms,定时器初值是多少?

计数脉冲个数N=1ms/1us=1000个

定时器初值X=2^16-1000=65536-1000=64536=0XFC18

13367077-51c7a6bbf5cf38e4.png?imageView2/2/w/550

中断号

#include

 

typedef unsigned int u16;

typedef unsigned char u8;

 

sbit led=P2^0;  //led端口

 

void Timer0Init()    //初始化T0

{

    TMOD |= 0x01;  //选择定时器0为模式1,这里用了个或运算,

    //这样tmod高四位(控制T1)就与T0(0x01)没关系了,即TMOD在赋0x01后高四位不变

    //这里不能直接给M0和M1赋值

    TH0 = 0xfc; 

    TL0 = 0x18; //给定时器赋初值,定时1ms

    ET0 = 1;   //打开定时器0中断允许

    EA = 1;    //打开总中断

    TR0 = 1;   //打开定时器

}

 

void main()

{

    Timer0Init();  //条件满足自动进入中断

    while(1);      //一直在中断里运行

}

 

void Timer0() interrupt 1

{

    static u16 i;////static静态变量,保存i;若不加static,一旦子函数 退出后,该变量将丢失,加了,就会保持住,下次回来的时候,这个值依然存在。

    TH0 = 0xfc;

    TL0 = 0x18;   //进入中断后,TF0会清0,所以要再赋一遍

    i++;

    if(i==1000){  //1000个1ms是1s

        i = 0;    //延时1s后清0,给下次做准备

        led = ~led;   //取反

    }

}


静态变量 另有 2个特点:

1、只能进行一次初始化,也就是说 “static int p”这句话,只在第一次进来的时候执行,以后都是通过赋值语句(比如上面i++)修改该值;

2、该变量只在 本子函数 内 修改有效,其他函数 无法 调用、修改 该 变量。


可以记录函数调用了几次


1.static全局变量只初使化一次,防止在其他文件单元中被引用;

2.static局部变量只被初始化一次,下一次依据上一次结果值;

3.static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝


C语言中讲讲static变量和static函数有什么作用

static关键字有两种意思,你看上下文来判断

1,表示变量是静态存储变量

表示变量存放在静态存储区.

2,表示该变量是内部连接 (这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static) ,也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).

当static加在函数前面的时候

表示该函数是内部连接,之在本文件中有效,别的文件中不能应用该函数.

不加static的函数默认为是全局的.

也就是说在其他的.cpp中只要申明一下这个函数,就可以使用它.


1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?


答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。


从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。


static函数与普通函数作用域不同。static函数仅在本文件中使用。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝


2、如何引用一个已经定义过的全局变量?

答:extern

可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间 会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。


3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答:可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

推荐阅读

史海拾趣

FILTRAN公司的发展小趣事

对于固态非易失性精密电位器构成的温度测量电路,网友可能关心的问题以及相应的回答如下:

  1. 固态非易失性精密电位器的工作原理是什么?
    • 回答:固态非易失性精密电位器(如X9C102/103/104/503)包含有99个电阻单元的电阻阵列。滑动单元的位置由CS、U/D和INC三个输入端控制,并且这个位置可以被存储在一个非易失性存储器中,因此在下一次上电时可以被重新调用。
  2. 这种电位器在温度测量电路中的具体应用是怎样的?
    • 回答:非易失性数控电位器如X9312可以构成温度测量电路,作为记数式模数转换电路。通过电位器的电阻值变化来反映温度的变化,实现温度的测量。
  3. 电位器的精度和分辨率如何?
    • 回答:非易失性数控电位器的分辨率等于最大的电阻值被99除。例如,X9C503(50kΩ)的每个抽头间的阻值为505Ω。精密电位器的精度可达0.1%。
  4. 非易失性存储器中的数据可以保存多久?
    • 回答:所有的Xicor非易失性存储器都设计成并经过测试能够用于持久地保存数据的应用场合。滑动端位置数据可保存100年。
  5. 这种电路对温度变化的响应速度如何?
    • 回答:由于参考文章中没有直接提及电位器对温度变化的响应速度,因此无法给出确切的数值。但一般来说,电位器的阻值变化与温度有一定的线性关系,可以较快地反映温度的变化。
  6. 在实际应用中需要注意哪些问题?
    • 回答:在实际应用中,需要注意电位器的额定功率、标称阻值、允许误差等级等参数。此外,电位器在低温环境下使用时需说明,以便采用特制的耐低温油脂。同时,电位器的轴或滑柄长度应尽量短,以提高稳定性和减少晃动。
  7. 电路的稳定性如何?
    • 回答:由于非易失性数控电位器具有非易失性存储功能,因此电路在上电时可以重新调用之前保存的电位器位置数据,从而保证了电路的稳定性。此外,电位器本身也具有较好的稳定性和可靠性。

以上是对固态非易失性精密电位器构成的温度测量电路网友可能关心的问题及相应回答的归纳和总结。

柯爱亚(ceaiya)公司的发展小趣事

在电子行业的发展历程中,柯爱亚以其对技术创新的执着追求而闻名。1999年,柯爱亚成功研发出超薄型功率电感CDH2D11/CD31,并率先实现了量产。这一创新不仅提升了产品的性能,而且满足了市场对于更轻薄、更高效电子元件的迫切需求。柯爱亚凭借这一技术突破,迅速在市场中脱颖而出,赢得了业界的广泛认可。

DETCO公司的发展小趣事

在电子产品行业日益关注环保和可持续发展的背景下,ElectronicsCorp采取了一系列积极措施。公司开始使用环保材料制造产品,并优化生产流程以减少能源消耗和废物排放。此外,ElectronicsCorp还推出了一系列回收计划,鼓励消费者将旧电子产品回收再利用。这些措施不仅提高了公司的环保形象,还增强了消费者对公司品牌的忠诚度。

安美通(APPCON)公司的发展小趣事

安美通非常重视企业文化建设和团队建设。公司倡导创新、务实、合作的企业文化,为员工提供了一个宽松、自由、充满激情的工作环境。同时,公司还积极开展各类培训活动,提升员工的专业素养和综合能力。这些措施使得安美通的团队更加团结、高效,为公司的持续发展提供了有力的保障。

这五个故事虽然只是安美通发展过程中的一部分,但它们充分展示了安美通在电子行业中不断努力、创新、拓展的精神和成果。未来,安美通将继续秉承这种精神,不断推动公司的发展和进步。

DIOO公司的发展小趣事

随着市场竞争的加剧和消费者需求的不断变化,DIOO公司意识到品牌重塑和多元化发展的重要性。在近几年中,DIOO公司加强了品牌宣传和推广力度,通过推出新的品牌形象和广告活动,提高了品牌知名度和美誉度。同时,DIOO公司还积极拓展产品线,推出了包括智能家居、智能穿戴设备、游戏硬件等在内的多元化产品系列,进一步满足了消费者的多样化需求。

AMI [American Megatrends Inc]公司的发展小趣事

DIOO公司的创始人李奥(Leo)是一位热衷于电子技术的工程师。在20世纪80年代初,他看到了电子行业的巨大潜力,并决定创立DIOO公司,专注于开发和生产高端电子产品。凭借对技术的热爱和对市场的敏锐洞察,李奥带领DIOO公司推出了第一款自主研发的电子产品——高性能音频放大器,该产品凭借其卓越的性能和独特的设计在市场上引起了轰动。

问答坊 | AI 解惑

ffmpeg arm

如果把ffmpeg 中有关armv6部分加入的话,mpeg2 decode 部分速度会提升百分之多少,请高人指点。…

查看全部问答>

PIC单片机通讯

这是我的PIC16F877A单片机的485通讯程序,目前只能接受串口调试助手的数据,但是返回的数据不合适,RB1是接发控制口。请大家看看那不合适。指点一下,谢谢! #include <pic.h>__CONFIG(0x3531);#define _asm{\"nop\"} NOP()#define uchar  ...…

查看全部问答>

JTAG客栈--做中国人自己的JTAG adapter,JTAG不再是神话!

JTAG客栈--做中国人自己的JTAG adapter,JTAG不再是神话!     JTAG 是 JOINT TEST ACTION GROUP的简称。IEEE 1149.1 标准就是由 JTAG这个组织最初提出的,最终由IEEE 批准并且标准化的。所以,这个 IEEE 1149.1 这个标准一般也俗称 JTA ...…

查看全部问答>

嵌入式开发课件(PDF)[上海交大]

嵌入式开发课件(PDF)[上海交大]…

查看全部问答>

ucgui 嵌入式 输入法 包含拼音、笔画、英文、数字与符号的完整输入法软件

打开自己编写的UCGUI的串口调试助手应用软件,任意点击下面的一个编辑框控件,就会弹出输入法界面: 一、拼音输入演示: 二、笔画输入法演示: 三、汉字符号输入演示: 四、英文输入演示: 五、英文符 ...…

查看全部问答>

MSP430的灌电流最小是多大?

比如电源3.3V,外部输入电流多大430就可以识别出输入是高电平。也就是问限流电阻最大能接多大?100K还是1000K。还有请问在哪个部分里看这个值,我找了一下datasheets,不知道在哪里找! 谢谢了! …

查看全部问答>

多个CAN节点无法通信

现在手里有三块板子,两块BeagleBone板,一块TMS320F2812的自制板,发现这三块板子两两连接时能够互通,但是三个板子连接后无法通信,目前可以确定的是连线没有错误。 测试时使用DSP板发送数据帧,两个BB板上接收,结果是BB板上无法收到数据帧。观 ...…

查看全部问答>

开关电源使用

不在实验室中如何使用已有的开关电源啊?输入端用什么来接火线和零线啊?能用现有的插头改装么?求大神指教,非常急,非常感谢!…

查看全部问答>

使用LaunchPad 28027玩三相逆变(SVPWM)

本帖最后由 ltbytyn 于 2015-7-28 17:28 编辑 感谢@foxpro2005。去年看了坛友foxpro2005  2篇关于SPWM的帖子,一直念念不忘,想尝试玩玩逆变。最近刚把手头的工作搞完交出去了,忙里偷闲试了一下SPWM。 TMS320F28027 LaunchPad又立功 ...…

查看全部问答>