ISIS元件库中没有加速度传感器ADXL345,所以需要在实际的电路板上来学习和应用这个三轴加速度传感器的编程。ADXL345加速度传感器已经在和本书配套的电路学习板上焊接好,与单片机的连接采用的是TWI总线。在程序执行过程中,如果对ADXL345只是执行了单字节的读取操作,那么FIFO缓存中当前采样值的其余字节数据就会丢失。ADXL345进一步练习:应用ADXL345设计一个倾角测量系统。应用ADXL345设计振动、晃动检测。......
2023-11-26
定时/计数器TC0仿真的硬件电路和上例中完全一样,我们要做的就是再添加一个关于定时/计数器TC0的任务。TC0的应用比较简单,定时和计数本质上都是计数。如果能确切知道计数信号源的周期或频率,就是定时。此例中,我们就用TC0来制作一个秒表。由于TC0是8位定时/计数器,系统时钟频率又较高,即便分频之后,定时计时器计满一次的时间也很难达到1 s。我们可以设置TC0单次定时20 ms,重复50次,即为1 s。TC0单次定时时间与系统时钟频率、预分频比及TCNT0初值密切相关,需要仔细考虑和计算,但向导程序可以很轻松地为我们解决这些问题。
此例中,不需要再新建项目。在原项目中再调出向导程序,按上例中设置好时钟频率(内部8 MHz)后,单击“Timers/Counters”,接着在右边“Requiements”下,“Period”后输入准备让TC0单次定时的时间,如20 ms,然后单击“Apply”。向导程序将为我们计算出合适的预分频比及定时器初值,并打开TC0中断,同时还给出了单次定时的误差。单击“Program”→“Generate”菜单命令,在右边窗口中生成预览程序,从中拷贝出关于TC0相关的函数和设置语句,然后关闭向导程序。修改后的程序如下,TC0计数器溢出中断服务程序中可得到定时秒数,在新增的tc0()函数中显示这个秒数。在当前系统时钟和分频比设置下,TC0每次从0x64开始对分频后的时钟脉冲计数,计到255后溢出,期间用时20 ms。计数器溢出后本应自动从0开始计数,但在TC0中断服务程序中计数初值被更改为0x64,而且应该一进入中断服务程序立即被更改。通常,这20 ms的定时会有微秒量级的误差,为了准确定时1 s,可以在1 s的最后一个20 ms定时过程中再重新确定一个计数初值,将前面积累的误差补偿回来。相对于delay函数,用定时/计数器定时更准确,并且不占用CPU。
由于增加了一个任务,mode取值范围为0、1、2。
TC0进一步练习:(www.chuimin.cn)
(1)用TC0精确定时控制5个发光二极管亮灭间隔时间分别为100 ms、200 ms、300 ms、400 ms和500 ms,看看它们的亮度有何不同。
(2)用TC0定时和发光二极管制作一组红绿灯,用按键能控制绿灯常亮。
有关AVR单片机与传感器基础的文章
ISIS元件库中没有加速度传感器ADXL345,所以需要在实际的电路板上来学习和应用这个三轴加速度传感器的编程。ADXL345加速度传感器已经在和本书配套的电路学习板上焊接好,与单片机的连接采用的是TWI总线。在程序执行过程中,如果对ADXL345只是执行了单字节的读取操作,那么FIFO缓存中当前采样值的其余字节数据就会丢失。ADXL345进一步练习:应用ADXL345设计一个倾角测量系统。应用ADXL345设计振动、晃动检测。......
2023-11-26
定时/计数器T1与定时/计数器T0的描述完全一致,下面以T0为例讨论4种工作方式。这就是定时工作方式。此时定时器寄存器TL0配置为可以自动重装载的8位计数器,TH0作为预置寄存器。图3-17 定时/计数器工作方式3电路结构图TH0规定只用作定时器,由T1控制位TR1和TF1控制,计数溢出置位TF1、TR1控制TH0定时的启动和停止。......
2023-11-04
定时/计数器从电路上来讲是一个脉冲计数器,当计数脉冲来自单片机内部机器周期时,我们习惯上称其为定时器,而当计数脉冲来自单片机外部的输入信号时,则称其为计数器。图7-7 定时/计数器0的结构两个8位寄存器都是用来保存计数值的,其使用方法非常灵活。① 0:仅当TCON寄存器的TR0=1时启动定时/计数器0。定时/计数器0对来自单片机片内的机器周期进行计数,每个机器周期计数器的值都会加1。......
2023-11-17
定时器只在STARTUP和RUN模式下运行。表4-25 SFB3的输入输出参数图4-15 SFB3的时序图操作系统会在冷启动期间重置SFB3“TP”的实例。表4-26为SFB0的输入输出参数,其中CU输入出现上升沿将使计数器递增1。如果计数值达到上限32767,将不再递增。CU输入出现任何后续上升沿都将不再起作用。不管CU输入的当前值是什么,R输入信号级别为1时将把计数器重置为0。......
2023-06-18
1997年,Atmel公司出于市场需求,推出了全新配置的精简指令集RISC单片机高速8位单片机,简称AVR。AVR单片机废除机器周期,采用RISC,以字为指令长度单位,取指周期短,可预取指令,实现流水作业,可高速执行指令,有高可靠性为后盾。AVR单片机在软/硬件开销、速度、性能和成本多方面取得优化平衡,是高性价比的单片机。......
2023-06-26
由于单片机编程与硬件联系紧密,所以每一种单片机以及同种单片机不同的C语言编译器的语法可能稍有不同。它是HP Info Tech专门为AVR系列单片机设计的C语言编译器。下面是一个最简单的单片机C语言程序,通过这个例子,可以学习和了解单片机编程的特点及与PC机C语言编程的区别。不管是计算机还是单片机,程序代码都是由CPU来执行的。计算机上有操作系统,某一程序运行时只是暂时取得了CPU的控制权,程序结束后要把控制权返还给操作系统。......
2023-11-26
如需要停止,只要把定时器/计数器1设置成工作方式3就可以了。图7-4定时器/计数器0在工作方式3时定时器/计数器1的使用图习题71.填空题当计数器产生计数溢出时,把定时器控制寄存器的TF0位置1。......
2023-11-17
定时器/计数器2称为专用定时器/计数器,它的输入连接引脚为IO4,而输出引脚连接IO1。定时器/计数器的时钟信号以及使能信号可来自外部I/O引脚,也可由系统时钟分频得到。两个定时器/计数器的时钟速率互相独立。如果一个定时器/计数器被定义来实现一个输出对象或一个正交输入对象,它就不能在同一个应用中被定义为其他的定时器/计数器对象。定时器/计数器I/O对象和并行双向I/O对象的详细介绍请参考相关资料。......
2023-11-22
相关推荐