"); //-->
ATmega128单片机内部资源一解到底
1.Flash 用来存储程序用的 .
2 EEprom 用来存储常量的 此上二者掉电后都不丢失 .
3 SRAM 用来存储程序中产生的变量
4 JTAG 用来下载和仿真
5 ISP下载 现在很少用
6 TC 定时计数器,可以用来产生 PWM波.
7 多路10位ADC
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个定时计数器,其中有两个具有预分频和
比较功能的8位TC,还有两个具有预分频,比较,和捕捉功能的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扩展中断标志寄存
TC3和TC1有相同的定时器
以上的寄存器分为 5类 TCCR TCNT OCR TIMSK TIFR
其中,TCCR 是用来控制寄存器的工作状态
TCNT 是用来计数用的
OCR 是用来和TCNT相比较,用来产生波型和中断的
TIMSK 是用来屏蔽和开启 TC中断的
TIFR 是用来记录TC中断状态的
下面主要介绍 TC1的TCCR,因为它的功能比较全,其它三个 TC的
TCCR与此类似.
1 TC控制寄存器 TCCRNx 用来定义TC的工作模式
7 6 5 4 3 2 1 0
2 TC计数寄存器 TCNTnx 用来计数
注意,AVR是8位单片机,其计数寄存器都是 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 注册的描述中断函数
要想中断服务函数可以正常使用别忘记一个前提 ,打开总中断
外部中断学习
ATmega128有8 个外部中断 INT0—INT7
相关的控制器
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 外部中断控制寄存器 B 其作用和用法和 EICRA相同
3 EIMSK 外部中断屏蔽寄存器
7 6 5 4 3 2 1 0
4 EIFR 外部中断标志寄存器
当要用到外部中断的时候 ,有以下几个步骤,
1 先打开总中断
2 外部中断的引角要配置成输入模式 ,但中断的外部引角配置为 输
出 时, 只要电平发生了合适的变化
,中断也会触发,所以利用这个特点 ,可以用软
件来产生外部中断.
3 能过EICRA或EICRB来定义敏感电平.
4 EICRA和EICRB来打开外部中断位
5中断函数的注册和描述
# program interrupt_handle 函数名 :中断向量号
Void 函数名()
{
}
USART 通用同/异步串行口
特点 1 全双工操作(独立的串行接收和发送寄存器)
2 异步或同步操作
3 主机或从机提供时钟的同步操作(一般不用同步操作)
4 高精度的波特率发生器
5 支持5,6,7,8,9个数据位和1个或2个的停止位
6 硬件支持的奇偶校验操作
INT7 INT6 INT5 INT4 INT3 INT2 INT1 INT0
7 3个独立的中断:发送结束中断,发送数据寄存器空中断,
以及接收结束中断
USART寄存器说明
1 USARTn 数据寄存器,也可以叫 UDRn
USART发送数据缓冲寄存器和 USART接收数据缓冲寄
存器共享一个 IO地址,称为UDR,将数据写入UDR时,
其实是写入发送数据寄存器,读 UDR时,返回的是接收
数据缓冲寄存器.
2 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:奇偶校验错误
奇偶校验使能后,并发生奇偶校验错误,则置位.
2 USARTn控制和状态寄存器 B UCSRnB
7 6 5 4 3 2 1 0
BIT7 RXCIEn 接收结束中断使能
当TXCIEn全局中断标志位SREG置位,UCSBnA寄存器
的RXCn这1时,可能产生 USARTn接收结束中断.
Bit 6 TXCIEn 发送结束中断使能.
BIT5 UDRIEn USART数据寄存器空中断使能.
BIT4 RXENn 接收使能.
置位后,将USARTn接收器,RXDn引脚的通用端口功能
被USARTn功能所取代.禁止接收器将刷新接收缓冲器,
并使Fen,DORn及UPEn标志无效.
BIT3 TXENn 发送使能
置位后将启动发送器 USARTn.
3 USART 控制和状态寄存器 C UCSRnC
7 6 5 4 3 2 1 0
RXCIEn TXCIEn UDRIEn RXENn TXENn UCSZn2 RXB8n TXB8n
Bit 6 UMSELn :USART模式选择
UMSELn 模式
0 异步操作
1 同步操作
Bit 5 :4 UPMn1:0 :奇偶校验模式
这两位设置奇偶校验的模式并使能奇偶校验. 如果使能了奇
偶.那么在发送数据时,发适器都会自动产生并发送奇偶
校验位.对每一个接收到的,接收器,都会产生一奇偶值,
并与UPMn0所设置的值进行比较,如果不匹配,以就将
UCSRnA中的UPEn置位.
UPMn1 UPMn0 奇偶模式
0 0 禁止
0 1 保留
1 0 偶校验
1 1 奇校验
Bit 3 USBSn :停止位选择.
能过这一位可以选择设置停止位的倍数. 但是接收器是忽略这
-- UMSELn UPMn1 UPMn0 USBSn UCSZn1 UCSZn0 UCPOLn
一位的设置的.
USBSn 停止位倍数/bit
0 1
1 2
Bit2:1---UXCZn1:0
UCSZn1:0与寄存器UCSRnB的RCSZn2结合在一起可以设置数
据帧包含的数据位数.
UCSZn2 UCSZn1 UCSZn0 字符长度/bit
0 0 0 5
0 0 1 6
0 1 0 7
0 1 1 8
1 0 0 ――――
1 0 1 ――――
1 1 0 ――――
1 1 1 9
BIT0 ---UCPOLn :时钟极性
这一位仅用于同步工作模式.使用异步模式时,将这一位清0.
UCPOLn 发送数据的改变 接收数据的采样
0 XCKn上升沿 XCKn下降沿
1 XCKn下降沿 XCKn上升沿
5 USART 波特率寄存器(UBRRnL UBRRnH)
用于存储不同外部晶振下的波特率设置
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。