新闻  |   论坛  |   博客  |   在线研讨会
ATmega128单片机内部资源一解到底
jinsheng7533 | 2018-12-11 21:10:17    阅读:356   发布文章

 ATmega128单片机内部资源一解到底

1.Flash 用来存储程序用的 .

2 EEprom  用来存储常量的 此上二者掉电后都不丢失 .

3 SRAM  用来存储程序中产生的变量

4 JTAG  用来下载和仿真

5 ISP下载 现在很少用

6 TC 定时计数器,可以用来产生 PWM.

7 多路10ADC

8 UART  异步串口

9 SPI  国步串口,现在有很多芯片都有此串口

10 具有看门狗功能 WATCHDOG

11 具有模拟比较器

12 TWI 接口,也就是I2C接口.

13 有多个能用 IO .

此系统单片机采用精简的 RISC指令系统,执行代码速度快 ,大部分指令都可以在一个时钟

周期内完成,而我们知道,51单片机要执行一条指令要经过 12个时钟周期,所以在外部晶振频

率一样的情况下 ,AVR单片机会比 51系列的单片机速度快 12,而其价格却和同类 51单片

机相同.

电平学习

1 TTL电平 高电平 5V,低电平 0V

2 CMOS电平 高电平 ,2.5V,低电平 0V

3 RS232电平 高电平 -12V,低电平 +12V

运算符号的学习

1.&& ,C,用于条件的并存

2,||  ,C,用于条件的搜索

3 !  非用于条件取反

4 & | ~ 这三个是两个数据按位进行与 .或非

5 ^ 这个是按位异或,即两个数相同,0 ,不同为1.

6 <<  >>此二个是左移和右移符号 .

EG:1<<(x),即是将0x01左移x,低位补0.右移也是同理.

注:BIT(x)=1<<(x);这个命令很常用.其中这个函数的说明在 AVRdef.h这个头文件中.

IO学习

AVR单片机的IO口具有很强的驱动能力,可以达到20mA以上,可以直接驱

LED,数码管,和小型的继电器.

每个IO口都有三个8位寄存器来控制其状态和行为 .

DDRxn  用来控制输入还是输出.  1为输出,0为输入.

PORTxn 用来控制是否带有上拉电阻 . 1为有上拉电阻,0为没有上拉电阻.

PINxn  此寄存器不能进行写的功能 ,只能读,为当前IO口的高低电平.

控制输出为高低电平很简单

1 将要操作的IO口设置成输出状态,A端口为类.若只让A端口的第2

(0开始计数)IO输出为高电平,进行以下操作:

DDRA=DDRA|BIT(2);

2 将要输出为高电平的 IO口设置成为有上拉电阻.

PORTA=PORTA|BIT(2);

经过些两步的程序,A端口的第二个IO口输出为高电平,而其它的不变.

完成C程序

#include <iom128v.h> //这里说明了所有的寄存口地址与名字的对应

#include<AVRdef.h>  //这里有一些函数的定义,BIT(x);

Void main()

{

DDRA=DDRA|BIT(2);

PORTA=PORTA|BIT(2);

}

注意,如果想让A商品一次输出如0X55,则如下进行:

DDRA=0XFF;//全部设置成为输出

PORTA=0x55;//这样之后,PORTA就会输出0X55;

也就是这样一个道理,当一个IO被设置成为输出状态时,如果有上拉电

,就会输出高电平,没有上拉电阻,就会输出低电平.

数据传输协议

1 SPI协议 同步串行

SCK  串行时钟

MISO  主机输入,从机输出

MOSI  主机输出,从机输入

SS  SPI从机选择引角

2 JTAG

TDI  测试数据输入

TDO  测试数据输出

TMS  测试模式选择

TCK  测试时钟

3 两线串行 TWI  I2C

SDA  两线串行数据输入输出线

SCL  两线串行时钟

4 UART

TXD  数据发送

RXD  数据接收

定时/计数器TC学习

ATmage128单片机有4个定时计数器,其中有两个具有预分频和

比较功能的8TC,还有两个具有预分频,比较,和捕捉功能的16位定

时器,其中TC0还可以外接 32768HZ以下的时钟,以实现RTC实时计

.

TC0相关的寄存器 8

1 TCCR0 TC0控制寄存器

2TCNT0  TC0计数寄存器

3OCR0  输出比较寄存器

4TIMSK  TC中断屏蔽寄存器 (所有TC共用)

5 TIFR  TC中断标志寄存器 (TIMSK对应,也是所有TC

共用)

TC2 相关的寄存器 8

1 TCCR2  TC2控制寄存器

2 TCNT2  TC2计数寄存器

3 OCR2  输出比较寄存器

4 TIMSK  TC中断屏蔽害存器

5 TIFR  TC中断标志寄存器

TC1相关寄存器,  16

1 TCCR1A

2 TCCR1B

3 TCCR1C  此三个8 位的寄存器共同组成 TC1的控制寄存器

4 TCNT1H

5TCNT1L 此两个8 位寄存器共同组成 TC1的计数寄存器

6 OCR1AH

7 OCR1AL  输出比较器A 16位的啊

8 OCR1BH

9 OCR1BL  输出比较器B  16

10 OCR1CH

11 OCR1CL  输出比较器C 16

12 ICR1H

13 ICR1L  输入捕捉寄存器 16

14 TIMSK  TC中断屏蔽寄存器 8

15 ETIMSK  TC扩展中断屏蔽寄存器 8

16 TIFR  TC中断标志寄存器

17 ETIFR  TC扩展中断标志寄存

TC3TC1有相同的定时器

以上的寄存器分为 5 TCCR  TCNT  OCR TIMSK  TIFR

其中,TCCR 是用来控制寄存器的工作状态

TCNT  是用来计数用的

OCR  是用来和TCNT相比较,用来产生波型和中断的

TIMSK 是用来屏蔽和开启 TC中断的

TIFR  是用来记录TC中断状态的

下面主要介绍 TC1TCCR,因为它的功能比较全,其它三个 TC

TCCR与此类似.

1 TC控制寄存器 TCCRNx  用来定义TC的工作模式

7  6  5  4  3  2  1  0

2 TC计数寄存器 TCNTnx  用来计数

注意,AVR8位单片机,其计数寄存器都是 8位的,要是有16位的,则分成

TCNTnh,TCNTnl.

3 TC中断屏蔽寄存器 TIMSK,注意,这个寄存器,是多个TC共用的,用来用软件

屏蔽和开启TC中断.

4 输出比较寄存器OCR0 8

输出比较寄存器是一个 8位的数值,不间断的与TCNT0进行比较,当数据匹配

,可以产生输出比较中断

5  TIFR  TC中断标志寄存器

7  6  5  4  3  2  1  0

FOC0  WGM00 COM01 COM00 WGM01 CS02  CS01  CS00

OCF2  TOV2  ICF1  OCF1A OCF1B TOIE1  OCIE0 TOIE0

普通模式

1.通过TCNTnx的低三位来选择TC工作的时钟,

CS02  CS01  CS00  说明

0  0  0  无时钟,TC不工作

0  0  1  CLK  没有分频

0  1  0  CLK/8

0  1  1  CLK/32

1  0  0  CLK/64

1  0  1  CLK/128

1  1  0  CLK/256

1  1  1  CLK/1024

2.TCNTnx赋值,这里要注意一个问题,若定时计数器是 16位的,

TCNTnx会有两个8位的寄存器组成,TCNTnh,TCNTnl,赋值时要注意

一个问题,要先高8,再赋低8 ,这个顺序不能乱.

3.能过TIMSK打开TC中断相应位

7  6  5  4  3  2  1  0

其中,TOIEn是溢出中断

OCIEnx是输出比较中断

4 中断函数的注册

#program interrupt_hander 函数名:中断向量号//为函数的注册

OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0

函数为 void 函数名()

{

}

经过以上可得出,TC,有四个步骤,

1 通过TCCRn来选择TC的工作模式

2 TCNTn赋值

3 TIMSK中打开相应中断

4 注册的描述中断函数

要想中断服务函数可以正常使用别忘记一个前提 ,打开总中断

外部中断学习

ATmega1288 个外部中断 INT0INT7

相关的控制器

1 EICRA  外部中断控制寄存器 A

7  6  5  4  3  2  1  0

每一组如 ISC31,ISC30来控制相应外部中断的敏感电平

ISCn1  ISCn0  说明

0  0  NITn为低电平时产生中断请求

1  0  NITn的下降沿产生异步中断请求

0  1  保留

1  1  INTn的上升沿产生异步中断请求

ISC31  ISC30  ISC21  ISC20  ISC11  ISC10  ISC01  ISC00

2 EICRB  外部中断控制寄存器其作用和用法和 EICRA相同

3 EIMSK  外部中断屏蔽寄存器

7  6  5  4  3  2  1  0

4 EIFR  外部中断标志寄存器

当要用到外部中断的时候 ,有以下几个步骤,

1 先打开总中断

2 外部中断的引角要配置成输入模式 ,但中断的外部引角配置为

, 只要电平发生了合适的变化

,中断也会触发,所以利用这个特点 ,可以用软

件来产生外部中断.

3 能过EICRAEICRB来定义敏感电平.

4 EICRAEICRB来打开外部中断位

5中断函数的注册和描述

# program interrupt_handle 函数名 :中断向量号

Void 函数名()

{

}

USART  通用同/异步串行口

特点 全双工操作(独立的串行接收和发送寄存器)

异步或同步操作

主机或从机提供时钟的同步操作(一般不用同步操作)

高精度的波特率发生器

支持5,6,,,9个数据位和1个或2个的停止位

硬件支持的奇偶校验操作

INT7  INT6  INT5  INT4  INT3  INT2  INT1  INT0

3个独立的中断:发送结束中断,发送数据寄存器空中断,

以及接收结束中断

USART寄存器说明

USARTn 数据寄存器,也可以叫 UDRn

USART发送数据缓冲寄存器和 USART接收数据缓冲寄

存器共享一个 IO地址,称为UDR,将数据写入UDR时,

其实是写入发送数据寄存器,读 UDR时,返回的是接收

数据缓冲寄存器.

USART控制和状态寄存器 A USCRnA

7  6  5  4  3  2  1  0

Bit 7  RXCn  :USART接收结束

接收缓冲器中有未读出的数据时 RXCn置位,否则清0.

接收器禁止时,接收缓冲器被刷新,导致RXCn清0,RXCn

可以用来产生接收结束中断.

Bit 6  TXCn  :USART 发送结束

发送缓冲器中的数据被送出,且当发送缓冲器为空时,

TXCn置位.执行发送结束中断时 TXCn标志自动清0.

也可以通过写1进行清除操作. TXCn标志可用来产生发

送中断.

Bit 5 UDREn  :USART数据寄存器空

UDREn标志发送缓冲器 UDRn是否准备好接收新的数

RXCn  TXCn  UDREn FEn  DORn  UPEn  U2Xn  MPCMn

据.为1时,说明已准备好进行数据接收 .UDREn标志可

用来产生数据寄存器空中断,复位时 UDREn置位,表明

发送器已经就绪.

Bit 2 UPEn:奇偶校验错误

奇偶校验使能后,并发生奇偶校验错误,则置位.

USARTn控制和状态寄存器 B UCSRnB

7  6  5  4  3  2  1  0

BIT7  RXCIEn  接收结束中断使能

TXCIEn全局中断标志位SREG置位,UCSBnA寄存器

RXCn这1时,可能产生 USARTn接收结束中断.

Bit 6  TXCIEn  发送结束中断使能.

BIT UDRIEn USART数据寄存器空中断使能.

BIT RXENn 接收使能.

置位后,将USARTn接收器,RXDn引脚的通用端口功能

USARTn功能所取代.禁止接收器将刷新接收缓冲器,

并使Fen,DORnUPEn标志无效.

BIT TXENn 发送使能

置位后将启动发送器 USARTn

USART 控制和状态寄存器 C UCSRnC

7  6  5  4  3  2  1  0

RXCIEn TXCIEn UDRIEn RXENn TXENn UCSZn2 RXB8n TXB8n

Bit 6 UMSELn  :USART模式选择

UMSELn  模式

异步操作

同步操作

Bit 5 :4  UPMn1:0 :奇偶校验模式

这两位设置奇偶校验的模式并使能奇偶校验. 如果使能了奇

偶.那么在发送数据时,发适器都会自动产生并发送奇偶

校验位.对每一个接收到的,接收器,都会产生一奇偶值,

并与UPMn0所设置的值进行比较,如果不匹配,以就将

UCSRnA中的UPEn置位.

UPMn1  UPMn0  奇偶模式

禁止

保留

偶校验

奇校验

Bit 3 USBSn :停止位选择.

能过这一位可以选择设置停止位的倍数. 但是接收器是忽略这

-- UMSELn UPMn1 UPMn0 USBSn UCSZn1 UCSZn0 UCPOLn

一位的设置的.

USBSn  停止位倍数/bit

0  1

1  2

Bit2:1---UXCZn1:0

UCSZn1:0与寄存器UCSRnBRCSZn2结合在一起可以设置数

据帧包含的数据位数.

UCSZn2  UCSZn1  UCSZn0  字符长度/bit

――――

――――

――――

BIT0 ---UCPOLn :时钟极性

这一位仅用于同步工作模式.使用异步模式时,将这一位清0.

UCPOLn  发送数据的改变 接收数据的采样

0  XCKn上升沿 XCKn下降沿

1  XCKn下降沿 XCKn上升沿

USART 波特率寄存器(UBRRnL  UBRRnH

用于存储不同外部晶振下的波特率设置




*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客