一台电脑搞定M8单片机(MCU)开发

M8是 ATMega8单片机的简称,我们通常称这种单片机微控制器。也许你听说过51单片机,总觉得单片机性能不好。但ATMega8 AVR微控制器,与爱特梅尔公司生产以AT89S52为更出色的性能,特别是在操作方面性能也改善很多。此外,其价格相对便宜,研究是一个很好的选择。

也许有人会有疑问,为什么在今天的手臂会选择单片机这么热?事实上,作为个体,单片机具有许多优点的手臂没有。首先,它是一种封装M8浸双列直插封装方法,目前各大厂商ARM处理器,没有双列直插封装。为个人、双在设备更容易使用,但也使学习成本更低。因为作为一个常见的SMT包装在手臂上,销SMT组件间距太小对于很多新手不知道如何开始,和使用贴片组件还需要使印刷电路板,并增加成本的这样的学习。其次因为M8的价格,M8的当前市场价格在同类产品中属于比较低,和常用的手臂的价格更贵。做实验,如一个就够了,但这出戏没有软件,硬件错误可以返回复位系统,有时有点粗心大意会让你把钱放到你的垃圾桶,所以M8可以减少错误的价格。然而,M8的频率小于手臂,因此也让M8不如手臂速度,然而,在手臂上这样的高频电路,电线之间的干扰比M8在这种明显的低频电路,所以几乎将推高进入壁垒。最后,虽然M8系统频率不高,但与传统51的实际运行性能通常是51岁的12倍和M8分布在中国更加丰富,信息更加丰富。所有各种各样的原因,我认为M8 DIY比手臂更合适。

在正常情况下,单片机最小系统几个部分。提供时钟脉冲的时钟振荡电路、复位电路和复位信号提供电源的电源电路。这三个部分,基本的单片机可以正常运行,但这种情况下,不能做任何实质性的。然而,这是任何复杂电路包含了公共部门。

为我们伟大的M8上面,这三种电路的构成可以说是相当容易的。但是我这里是最小的系统,也就是说,这是一个正常运行的M8最简单的电路。也许你会认为我有点太罗嗦。但是,我相信你会发现进一步之后,事实上这并不是一个很麻烦的。因为从技术上讲,M8和最小系统,在这里,我只是用51的想法。如果您曾经使用过AT89S52单片机、相信你会唤起水晶振动比较敏感,不能做一个贫穷的工作,因为有时候会出现振动和实验失败了。M8,然而,不太可能出现这种情况,即使你喜欢我与多孔板实验。因为,只有三个最最低M8系统外围组件。

实践M8系统LED显示Hello World

1.1.1 M8系统IO端口操作介绍

M8,输出输入电流是相等的,每个销最大不能超过40 ma,但不得超过总电流300毫安。为每个特定的IO口,当然,还有一些更精致的限制,但是这两个输入和输出电流,驱动发光二极管仍然可以。为什么我说单独的输入和输出吗?因为在51,AT89S52系列,例如,输入电流和输出电流不对称,所以选择51类似七段数码管,考虑阴和阳的问题。同时,M8相比与传统51大特性是使内置上拉电阻。

M8 IO端口控制寄存器有三个,分别是寄存器的方向“DDRx”寄存器、数据寄存器“PORTx”和密码“PINx”。“DDRx”和“PORTx”是读/写寄存器,“PINx”是一个只读寄存器。名字的字母“x”是一个特定端口。和控制寄存器“SFIOR”“手”来控制传奇上拉电阻。表1是他们不同组合的结果。“PINx”,无论是销作为输入或输出,实际水平的总价值销值。

DDRx  PORTx  PDU  I/O  上拉  说明
0  0  X  输入  无效  高阻
0  1  0  输入  有效  外部引脚拉低时输出电流
0  1  1  输入  无效  高阻
1  0  X  输出  无效  低电平推挽输出,吸收电流
1  1  X  输出  无效  高电平推挽输出,输出电流

M8中有三个定时计数器,这次我们使用最弱的定时计数器0。M8,定时器的时钟频率是基于他的系统时钟,我们可以直接使用系统时钟,还可用于系统时钟分频后的时钟信号。,当然,也可以使用M8 T0别针上的信号作为时钟信号,这一次,他成为一个计数器。M8定时计数器0时钟选项,由TCCR0,一些CS02 CS01和CS00设置不同,可以选择不同的时钟信号源。表2是时钟信号选择的相关定义。

CS02  CS01  CS00  说明
0  0  0  无时钟源 (停止定时计数器0)
0  0  1  CLKI/O (系统时钟)
0  1  0  CLKI/0 ÷8 (来自分频器)
0  1  1  CLKI/O ÷64 (来自分频器)
1  0  0  CLKI/O ÷256 (来自分频器)
1  0  1  CLKI/O ÷1024 (来自分频器)
1  1  0  外部引脚T0的下降沿
1  1  1  外部引脚T0的上升沿

TCNT0 寄存器。这是一个8位寄存器,在没有时间时钟信号到达时间,因为这个寄存器将加1,这个过程的结果是独立的总线系统操作的,所以这个过程不会被中断系统指令。当计数器达到最大值0 XFF,溢出事件会发生,和零TCNT0寄存器。溢出,在发生TCNT0 TIFR TOV0寄存器中的一个将“1”。与此同时,如果你设置TIMSK TOIE0有点一个寄存器中,也是一个系统发生故障,但我们还没有涉及,中断,所以没有详细描述。因为是TCNT0是累积的,所以建立一个寄存器中,有点更多的关注。

我们采用定时器0忙方式如延迟的影响。下面是我的计划实现。根据程序设定,每个领导约250毫秒的延迟。用电脑编辑下面程序并将其写入到M8单片机中。

#include <avr/io.h>

// 1024 * 0xF4 / 1000000 = 250ms
#define T0CNT 0xFF – 0xF4

int main() {
unsigned char i = 0;
//设置D口为输出口
DDRD = 0xFF;
PORTD = 0;
//设置分频为1024,延迟25ms
TCNT0 = T0CNT;
TCCR0 = _BV(CS02) | _BV(CS00);

do {
//等待计时器溢出
while(!(TIFR & _BV(TOV0)));
//将D口相应的引脚置1
PORTD = _BV(i);

i += 1;
if (i == 4) i = 0;
//重置定时器
TCNT0 = T0CNT;
//清除溢出标志
TIFR |= _BV(TOV0);
}while(1);
return 0;
}


标签:  | 


顶部