当前位置:文档之家› ATmega16最小系统

ATmega16最小系统

ATmega16最小系统
ATmega16最小系统

目录

第一章概述

第二章单片机最小系统及编译、下载软件的使用

2.1.1 单片机最小系统

2.1.2 编译软件

2.2.1 下载软件Progisp的使用

第三章熟悉ATmega16的片上资源

3.1.1 会看芯片数据手册的重要性

3.1.2 中断

3.1.3定时器/计数器的基本结构及工作原理

3.1.4 PWM

3.2外部中断

3.3 USART

3.4.1 A/D转换模块

3.5 EEPROM

第四章ATmega16实际应用

4.1 外接按键

4.2 驱动数码管

4.3 液晶显示屏12864的使用

4.4 基于DS18B20的温度测量

4.5 基于PWM的直流电机调速

4.6 步进电机的使用

4.7 舵机的使用

4.8 超声波测距及其应用倒车雷达

4.9 基于JZ863的无线串口通信

4.10 单片机与计算机间的通信

第五章

第二章单片机最小系统及编译、下载软件的使用

2.1.1 单片机最小系统

能让单片机工作的有最基本元器件构成的系统称为单片机最小系统。

单片机最小系统通常包括:

电源(+5V)

复位电路:启动后让单片机从初始状态执行程序

振荡电路:单片机是一种时序电路,必须施加脉冲信号才能工作。Mega16内部有RC 震荡电路但相比外部的晶体震荡电路还是不够准确,另外它也可以使用外部晶振工作,两者之间的切换通过熔丝位(以后会讲)来选择在其内部有一个时钟产生电路只要接上两个电容和一个晶振即可正常工作。

。。。。。。

ATmega16 单片机最小系统的硬件电路图如下:

如图所示为ATmega16最小系统电路图,图中标有相同代号的引脚表示连接在一起。图中ISP 和JTAG为ATmega16的两种下载方式各自的引脚接口,ISP用于在线下载程序比较方便快捷,所用下载软件为progisp ;JTAG是在线仿真接口通过仿真器连接单片机进行程序的下载和仿真,所用软件为AVR Studio ;通常我门使用ISP下载就已经足够了,并且方便快捷很稳定好用,下载器也便宜;JTAG在需要仿真的时候用,它可以看见单片机各个引脚的输出值和输入值等,但JTAG实际定使用中不稳定有时候很容易出错电脑不识别下不进去程序等问题,个人偏好使用ISP.

说明:此最小系统电路图中只画出了最简单的应用电路——流水灯,和最基本的能让单

片机正常工作的外围电路及下载程序所必须的ISP和JTAG接口,如果你想焊一个电路板出来自己使用,其他的外围电路可以在日后使用当中自己再往上焊。

2.1.2 编译软件

AVR单片机的编译软件有GCC AVR和ICC AVR等,通常使用较多的是ICC AVR,也比较好用,本书以ICC AVR6.31版本为例介绍编译软件的使用。

编译步骤如下:

1.新建一个工程

启动ICC AVR,界面如图2-1-1所示。然后新建一个项目,选择Project项再选则New菜单项,则打开界面如图2-1-2所示。

图2-1-1 ICCAVR主界面

图2-1-2

注:新安装的软件由于为建立过工程和文件界面与图2-1-1中所示不完全相同

为了自己使用方便在保存工程时最好单独新建一个文件夹。

接下来”文件名(N):”文本框中输入项目名称,保存为.prj格式。本书中此处保存为ATmega16.然后点击如图2-1-1中的File选项再选择New,界面此时会变为如图2-1-3所示

2.新建一个C程序图2-1-3

此时编写一个最简单的和前面最小系统版配套的C程序,如图2-1-4所示,程序如下

/////////////////////////////////////////////////////////////////

// AVR ATmega16 流水灯C程序//

// 环境:ICC AVR 6.31 //

// 日期:2011/09/14 //

////////////////////////////////////////////////////////////////

#include //包含单片机型号头文件

#include //包含"位"操作头文件

void delay(void) //自定义延时函数

{

unsigned char i,j;

for(i=0;i<255;i++)

for(j=0;j<10;j++)

;

}

void cpu_init(void) //单片机初始化函数

{

PORTA = 0x00; //PA口输出值都定义为0

DDRA = 0x00; //PA口输出允许关

PORTB = 0x00; //PB口输出值都定义为0

DDRB = 0x00; //PB口输出允许关

PORTC = 0x00; //PC口输出值都定义为0

DDRC = 0x00; //PC口输出允许关

PORTD = 0x00; //PD口输出值都定义为0

DDRD = 0x00; //PD口输出允许关

}

void main(void)

{

cpu_init(); //初始化单片机

while(1)

{

PORTA=0X00; /*点亮led灯,由最小系统的外部电路决定单片机输出低电平时流水灯点亮*/

DDRA=0XFF; /*允许输出,此时PORTA的赋值才有效,这事AVR比51高级的地方*/

//由于其他端口没有接外围设备先不用定义delay();

DDRA=0X00; //关闭led灯

delay();

}

}

/*****************************************************************************/ /* 另外最好先定义PORTX的值再给DDRX赋值,因为如果先打开DDRX允许,则PORTX*/ /*中原来的的值会输出,再给PORTX赋值的话其实在这段时间内*/ /* 该端口已经有输出值但不是你后来设定的PORTX的数值,如DDRA=0XFF;PORTA=0XFF;*/ /*和PORTA=0XFF;DDRA=0XFF;两条看似一样的语句在有*/ /* 写地方作用结果就会不一样,在有些控制要求严格的地方容易出现错误,即使我们平*/ /*时使用没出现错误我们平时做事也要有一个严谨的态度*/ /*****************************************************************************/

接下来单击图中磁盘符号保存,界面如图2-1-5所示

图2-1-5

输入你要保存的文件名,注意文件名结尾必须是.c格式,本书中命名为2-1-2.c ,接下来点

击保存即可。界面变为如图2-1-6所示

图2-1-6

3.添加C程序到工程

接下来要把文件添加进你刚才创建的工程里去,右键点击如图2-1-6中所示右面Project下ATmega16工程下的File文件夹选择Add File(s)选项,会弹出一个对话框界面变为如图2_1_7所示

图2-1-7

此时打开你开始创建的C程序保存的文件夹,选择你刚才创建的程序点击打开即可,这事程

序成功的添加到工程里的File文件夹里。如下图2-1-8所示

图2-1-8

接下来右键点击File文件夹下的2-1-2.c文件选择options…选项,弹出界面如图2-1-9所示

图2-1-9

选项按图2-1-9中选择即可,另外Compiler选项按图2-2-0选择即可

接下来全点击ok,这时新建工程,为工程添加文件等工作都已完成。

4.编译

如果c程序没有错误点击编译按钮就会生成16进制的HEX文件。界面如图2-2-1所示

图2-2-1

如果有错误则通过提示修改你的程序修改完再次编译直至通过为止。

2.2.1 ISP下载软件Progisp的使用

1.芯片选择

打开下载器页面如下图2-2-2所示在选择芯片的地方选择ATmega16即可。

2.熔丝位的配置

如果你想选择片外的晶振和使能ISP或关闭JTAG等功能则要在下载软件里配置好熔丝位然后写入到单片机里面去,由于我们使用ISP下载程序,所以我们要在熔丝位里面关闭JTAG,否则JTAG所对应的PC口的几个I/O引脚口会失去I/O的作用,即使你给它定义了数值并且也允许它输出了它也不会有任何输出值。接下来我门讲解怎么进行熔丝位的设置:首先,点开图2-2-2中下载软件主界面左半面的向导方式选项,这时界面会如图2-2-3所示,我们可以看见软件默认的是使用内部RC振荡器,我们要使用外部8MHZ的晶体振荡器所以我们把页面向下拉动我们会看见如图2-2-4图中所示的选项“外部晶振(3.0---MHZ)启动时间…”鼠标点其前面的小方框里即可,这时我们选择了使用片外的3MHZ以上的晶振,下面还有“使能JTAG接口(JTAGEN=0)和使能ISP编程(SPIEN=0)”两个选项,我们把前一个使能JTAG接口的那个给它去掉,如图2-2-5所示,但注意ISP那个千万不能去掉因为我们要用ISP下载程序进单片机,至于其他的选项可以不管。

接下来,我们要把刚才设置的熔丝位写进单片机,在图2-2-5配置熔丝位的向导方式下面有“读出默认写入”三个选项,并且主界面右下方有一个“编程熔丝位选项”,在“编程熔丝位选项”前面的方框内打勾,再点击左面三个选项中的“写入”,这时你刚才设置的熔丝位就都生效了。如果没有其他需要,以后就不用再设置熔丝位了,所以“编程熔丝位选项”前面的勾可以去掉了,因为我们没必要每次下载都烧写熔丝位,那样会很费单片机的。

图2-2-2 下载软件主界面

图2-2-3

图2-2-4

图2-2-5

3.下载程序到单片机

点击“调入FLASH”,界面如图2-2-6所示(并不一定和书上所示的完全一样)

找到你开始ICC AVR里面建立的保存C程序的文件夹,点击和你所建立的文件名一样的以HEX结尾的16进制文件,如图2-2-7所示,再单击打开后界面如图2-2-8所示,接下来点击“自动”程序就会被下载到单片机里面去了。如果你的程序是与前面书中给的单片机最小系统相配套的流水灯程序,并且你的板子的硬件电路接法和书中所给的最小系统的硬件电路一样,那么PA口所接的8个流水灯会亮灭、亮灭的闪烁。

图2-2-6

图2-2-7

图2-2-8

第三章熟悉ATmega16的片上资源

3.1.1学会看芯片数据手册的重要性

3.1.2中断

ATmega16常用片上资源有定时器、PWM、外部中断、SPI总线、两线串行接口TWI、EEPROM、USART、模拟比较器、ADC转换、IEEE(JTAG)边界扫描等。我们先来学习定时器。

中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单片机将暂停正在执行的事件去执行中断函数里所对应的程序,执行完中断后再继续执行原来的事件。

ATmega16内部有多个中断源每个中断源都能引起中断。其中断向量如下表3-1-2所示,表中每个中断向量都有一个向量号,这些向量号代表对应的中断源,在C语言程序里这些向量号代表相应的中断源,在编写中断函数时要使用到。同时它们还代表着优先顺序,向量号小的中断源更优先些,即两个或多个中断同时触发时中断号小的先被执行。

AVR不能设置中断优先级,但可以通过软件实现低优先级中断打断高优先级的中断;另外AVR的中断机制是不管是高优先级的中断还是低优先级的中断,在响应中断后,AVR都会自动清零全局中断标志位I位,这样,其它中断就不能响应,在执行完中断子程序后,AVR会自动置位全局中断位I,这样,AVR才可以响应其它的中断;另外AVR也不能像51等单片机直接进行中断嵌套,要想使用AVR的中断嵌套则要通过软件人为实现,根据使用经验有使用ACR的中

断嵌套:在中断服务程序中,人为置位全局中断标志位I位,AVR就可以执行其他中断了;

在进入中断程序时,置位全局中断标志位,适当关闭一些不必要的中断(退出时要重新开启),就可以实现低优先级中断打断高优先级的中断了;

表3-1-2

3.1.3定时/计数器的基本结构及工作原理

在上一章测试最小系统的程序中我们采用的延时方法是循环延时即让单片机空运行几个周期从而达到延时的效果,延时不准确只是粗略的应用,要进行准确的延时则要运用定时器——单片机最重要的组成部分之一。

定时器是一个独立的计数器,计数过程不会被中断程序打断,除非系统复位,定时器也不受其他程序的影响。

定时器其实就是我门在数字电路里面学过的计数器,也叫分频器,它对时钟脉冲进行计数,从而对时间进行计时。

以下为定时器Timer0工作的原理框图:

一、定时器/计数器的寄存器:

我们在使用单片机内部资源的时候都要进行初始化,通常我们会在程序中编写一个专门用来初始化的函数来完成初始化工作。比如我们在使用定时器的时候就要对定时器的时钟源进行设置,还要对计数器的初始值进行设置,当然还要打开全局中断,否则单片机不会响应定时器所产生的中断信号,有些设置要安排在初始化函数里,有些要安排在主函数里。

我们以定时器Timer0为例来学习ATmega16的定时器。Timer1和Timer2的用法和Timer0类似。

我们用定时器Timer0需要设置的寄存器有TCCR0、TCNT0、TIMSK,有时也人为设置TIFR (中断标志寄存器),但通常不用人为设置,单片机硬件会自定对其清零。

TCCR0是T/C控制寄存器,主要对时钟源、分频器和定时器是否开启进行设置,其各位的名称如下:

我们使用定时器Timer0要设置的位为CS02、CS01、CS00,用于选择T/C的时钟源,其具体选择方式如下表3-1-3所示,其他的位我们暂时不用不要对他们进行设置依然保持其初始值0不变。

表3-1-3

其中clk为系统主时钟。为了准确我们采用外部晶振作为主时钟,也可以采用内部RC时钟作为主时钟。如你要对时钟就行64分频则TCCR0的设置为:TCCR0=0x02;(以十六进制形式进行表示)。

TCNT0是设置计数器初始值的寄存器,是一个8位的二进制寄存器,如下所示:TCNT0最小为0,最大为255,用十六进制表示就是0x00~0xff 。定时器每次计数都是从TCNT0中

设定的数开始进行加1计数,每来一个时钟脉宽就加1,直到计到最大数0xff ,这时加1就回到0x00 ,此时会引发定时器中断(在定时器中断允许打开的前提下)。要想定时时间长可以给TCNT0设置较小的初始值,反之就设置较大的。

TIMSK是定时器中断屏蔽寄存器,各位名称如下:

其最低位TOIE0是定时器0溢出中断使能位,即引发中断允许位,当把其赋值为1时,定时器0中断使能打开,如我们使用定时器0时要让它中断使能则TIMSK要设置为0x01。

二、定时器/计数器的定时/计数初始值的计算

假设定时器溢出中断需要的时间为T ,时钟频率为f ,则T =(0xff-TCNT0) X (1/f) ,其中0xff为十进制的255,TCNT0为寄存器设置的初始值,假设TCCR0=0x02;即采用外部时钟并进行64分频,由于我们使用的是8MHZ晶振,所以64分频后f=1/8 MHZ,所以执行一条语句要1/f=8us,假设TCNT0=0X01;则T=(255-1) X 8us=2032us 。

如果采取8分频后,则时钟频率变为1MHZ,即时钟周期为1us,理论上溢出中断的最短时间是1us,最长时间是0.26us。实际执行程序时,由于处理中断也需要时间,所以可实现的定时要略长一点。AVR单片机中断响应时间最少为4个时钟周期,中断返回需要4个时钟周期,这样可实现的定时至少要比理论上的溢出中断延时长8个时钟周期。再加上中断服务程序的语句处理时间,最后导致实际定时要略长于计算结果,这是在精确的短时间定时下必须认真考虑的问题。改进的办法是提高主时钟频率和缩短中断服务程序中的语句执行时间。

三、用定时器控制LED闪烁

1、目标要求

采用本书第二章中给出的ATmega16的最小系统硬件电路。

用定时器控制发光二极管进行明暗交替变化闪烁,定时时间要准确。

2、程序设计

思路:对单片机及定时器进行初始化,在初始化的时候先给PA口赋初值为0,先关闭LED,再启动定时器,定时器/计数器计数满的时候,中断会被触发,继而中断函数被执行,我门可以在中断函数里面设置控制PA口LED的程序。

程序如下:

首先,在这里应该注意一个问题是LED闪烁的间隔时间不能太小,因为LED不是断电后立即熄灭的,而7段式LED数码管正是利用其这一特点进行的扫描显示给人一种数码管都在亮的感觉,其实一排的多个数码管当中每个时刻只有一个在亮。

#include

#include

unsigned char i=0;

void port_init(void) //单片机初始化函数

{

PORTA = 0x00;

DDRA = 0xff; //允许PA口输出

PORTB = 0x00;

DDRB = 0x00;

PORTC = 0x00;

DDRC = 0x00;

PORTD = 0x00;

DDRD = 0x00;

}

///////////////////////////////////////////////////////

// 定时器0初始化函数//

///////////////////////////////////////////////////////

void timer0_init(void)

{

TCCR0 = 0x00; //关闭定时器0

TCNT0 = 0x00; //设定初始值

TCCR0 = 0x05; //为了得到较大的定时时间采取使用外部8MHZ晶振并对其进行1024分频,因为时间太短LED还没来得及熄灭就被点亮人眼不能够分辨出交替闪烁}

//////////////////////////////////////////////////////

// 定时器0中断服务函数//

//////////////////////////////////////////////////////

/*声明和使用中断服务函数,当Timer0请求中断时,执行timer0_ovf_isr()子函数*/

#pragma interrupt_handler timer0_ovf_isr:10 /*定时器0的中断向量号为10,由

表3-1-2可查*/

void timer0_ovf_isr(void)

{

TCNT0 = 0x00; //从新装入初始值

PORTA=i;

i=~i;

}

/////////////////////////////////////////////////////

// 初始化函数//

/////////////////////////////////////////////////////

void init_devices(void)

CLI(); //关闭全局中断

port_init(); //初始化单片机

timer0_init(); //定时器0初始化

TIMSK = 0x01; //定时器0溢出中断使能开

SEI(); //使能全局中断

}

void main(void)

{

init_devices(); //单片机端口和定时器0进行初始化

while(1); //空循环防止程序跑飞

}

本书所付光盘里面还有定时器1和定时器2的参考程序。

3.1.4PWM

脉冲宽度调制(Pulse Width Modulation,PWM),简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,具有经济节约空间、抗噪声强等优点,广泛应用在从测量、通信到功率控制与变换的许多领域中。在电动机控制领域中强调能节能环保的变频技术,比如变频空调、变频洗衣机、和变频冰箱等,其实它们所利用的核心技术就是PWM技术。

PWM技术是利用直流脉冲序列的占空比变化来改变直流电的平均值。直流电压的高低是指脉冲的平均值大小,脉冲是由高电平和低电平构成的,高电平存在时间在整个周期中所占的时间比例称为占空比。高电平时间越长,占空比越大,平均值越大,电压越高。通过控制高电平的时间长短就可改变占空比,调节输出电压的高低,对电动机进行调速等应用。

通常PWM的输出是脉冲序列,在要求严格直流场合必须进行仔细的滤波,滤除其中的交流成分。在电动机调速等应用中则对滤波要求不是那么严格了,可以进行适当简化,主要原因在于电动机的转动速度远比电脉冲频率低,而且机械阻尼会减少电动机的抖动;还有一个更重要的原因是电动机的线圈可以看成是一个很大的电感线圈,可以对脉冲序列进行很好的滤波。

ATmega16 内的PWM模块:

AVR单片机内部集成了PWM模块,这些模块在运行时不占用CPU资源,不影响其他程序的运行。ATmega16具有4通道PWM,分别是4脚(OC0)、19脚(OC1A)、18脚(OC1B)和21脚(OC2)的第二功能。

定时器控制这些PWM模块产生PWM波,4脚(OC0)受定时器0控制、19脚(OC1A)和18脚(OC1B)受定时器1控制、21脚(OC2)受定时器2控制。

定时器0和定时器2为8位计数器,定时器1为16位计数器,定时器0和定时器2的工作模式有:普通模式、CTC(比较匹配时清零定时器)模式、快速PWM模式、相位修正PWM模式;定时器1的工作模式也有普通模式、CTC(比较匹配时清零定时器)模式、快速PWM模式和相位修正PWM模式,此外还有一个相位与频率修正PWM模式。

要控制单片机的定时器工作产生PWM波形并在相应引脚进行输出就要学会控制它里面相应的寄存器了,所以下面我们先来学习一下它的寄存器。

首先是定时器0由寄存器TCCR0及输出比较寄存器- OCR0等控制,对其工作模式的控制设置选择如下所示:

? Bit 7 – FOC0:强制输出比较

FOC0仅在WGM00指明非PWM模式时才有效。但是,为了保证与未来器件的兼容性,在

使用PWM 时,写TCCR0 要对其清零。对其写1 后,波形发生器将立即进行比较操作。

比较匹配输出引脚 OC0 将按照COM01:0 的设置输出相应的电平。要注意FOC0 类似一

个锁存信号,真正对强制输出比较起作用的是COM01:0 的设置。FOC0不会引发任何中断,也不会在利用OCR0作为TOP的CTC模式下对定时器进行清零的操作。

读FOC0 的返回值永远为0。

? Bit 6, 3 – WGM01:0:波形产生模式

这几位控制计数器的计数序列,计数器的最大值TOP,以及产生何种波形。T/C 支持的

模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM 模式,见下表:

? Bit 5:4 – COM01:0:

1)比较输出模式,快速PWM 模式

2)比较输出模式,相位修正PWM 模式

ATMEGA16的USART串口发送与接收数据示例程序

//ATMEGA16的USART串口发送与接收数据示例程序,采取中断的方式 //发送200个FF,接收数据显示在数码管上,接收数据格式如09 //编译环境 ICCAVR //系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms //作者:David //日期:2013.10.20 //*********************************************************************** // 包含文件 //*********************************************************************** #include #include #include #include #include //中断信号头文件 //*********************************************************************** // 定义变量区 //*********************************************************************** #define CH451_RESET 0x0201 //复位 #define CH451_LEFTMOV 0x0300 //设置移动方式-左移#define CH451_LEFTCYC 0x0301 //设置移动方式-左循#define CH451_RIGHTMOV 0x0302 //设置移动方式-右移#define CH451_RIGHTCYC 0x0303 //设置移动方式-右循#define CH451_SYSOFF 0x0400 //关显示、键盘、看门狗 #define CH451_SYSON1 0x0401 //开显示 #define CH451_SYSON2 0x0403 //开显示、键盘 #define CH451_SYSON3 0x0407 //开显示、键盘、看门狗功能#define CH451_DSP 0x0500 //设置默认显示方式 #define CH451_BCD 0x058f //设置BCD译码方式 #define CH451_TWINKLE 0x0600 //设置闪烁控制 #define CH451_DIG0 0x0800 //数码管位0显示 #define CH451_DIG1 0x0900 //数码管位1显示 #define CH451_DIG2 0x0a00 //数码管位2显示 #define CH451_DIG3 0x0b00 //数码管位3显示 #define CH451_DIG4 0x0c00 //数码管位4显示 #define CH451_DIG5 0x0d00 //数码管位5显示 #define CH451_DIG6 0x0e00 //数码管位6显示 #define CH451_DIG7 0x0f00 //数码管位7显示 #define l ed0 0x0000 //数码管位0显示的数据0 #define l ed1 0x0001 //数码管位0显示的数据1 #define l ed2 0x0002 //数码管位0显示的数据2 #define l ed3 0x0003 //数码管位0显示的数据3 #define l ed4 0x0004 //数码管位0显示的数据4 #define l ed5 0x0005 //数码管位0显示的数据5

altium-designer基于MINI-STM32的最小系统

altium-designer基于MINI-STM32的最小系统《电路设计与PCB制板》 设计报告 题目: 基于MINI-STM32的最小系统学院: 专业: 班级: 姓名: 学号: 引言:Altium Designer基于一个软件集成平台,把为电子产品开发提供完整环境所需工具全部整合在一个应用软件中。 Altium Designer 包含所有设计任务所需工具:原理图和PCB设计、基于FPGA的嵌入式系统设计和开发。 目前我们使用到的功能特点主要有以下几点: 1、提供了丰富的原理图组件和PCB封装库并且为设计新 的器件提供了封装,简化了封装设计过程。 2、提供了层次原理图设计方法,支持“自上向下”的设 计思想,使大型电路设计的工作组开发方式称为可能。 3、提供了强大的查错功能,原理图中的ERC(电气规则 检查)工具和PCB 的DRC(设计规则检查)工具能帮助 设计者更快的查出和改正错误。 4、全面兼容Protel系列以前的版本,并提供orcad格式文 件的转换。 一、课程设计目的 1、培养学生掌握、使用实用电子线路、计算机系统设计、制板的能力;

2.提高学生读图、分析线路和正确绘制设计线路、系统的能力; 3.了解原理图设计基础、了解设计环境设置、学 习 Altium Designer 软件的功能及使用方法; 4.掌握绘制原理图的各种工具、利用软件绘制原理图; 5.掌握编辑元器件的方法构造原理图元件库; 6. 熟练掌握手工绘制电路版的方法,并掌握绘制编辑元件封装图的方法,自己构造印制板元件库; 7.了解电路板设计的一般规则、利用软件绘制原理图并自动生成印制板图。 二、设计过程规划 1、根据实物板设计方案; 2、制作原理图组件; 3、绘制原理图; 4、选择或绘制元器件的封装; 5、导入PCB图进行绘制及布线; 6、进入DRC检查; 三、原理图绘制 , 新建工程: 1.在菜单栏选择File ? New ? Project ? PCB Project 2.Projects面板出现。 3.重新命名项目文件。 , 新建原理图纸 1. 单击File ? New? Schematic,或者在Files面板的New单元选 择:Schematic Sheet。

4--单片机最小系统的原理图绘制

教 学环节教学容与过程 师 生 活 动 教学 方法 设计 意图 复习引入 新课教学 第一课时 一、项目描述: 通过单片机最小系统的原理图设计,对Protel DXP 2004 绘制原理图的过程有进一步的了解,掌握总线与总线入口的绘 制方法,网络标号的正确使用,原理图的报表生成、网络表、 元件库的生成。 过程: 1、新建项目:新建一个PCB项目,命名为“单片机 最小系统.PrjPCB”并保存,在项目中新建一个原 理图文件“87cs20.SchDoc”。 2、设置图纸参数:执行【设计】【文档选项】进行设 置。 3、放置元器件 4、绘制导线 教 师 指 导 学 生 上 机 操 作 练 习 项目 教学 法 任务 驱动 教学 法 让学 生学 会单 片机 最小 系统 的原 理图 设计

新课教学二、总线与总线入口的绘制方法 1、绘制总线:执行【放置】【总线】命令,按【TAB】键修改 总线属性。 2、绘制总线入口 3、放置网络标号 网络标号具有电气特性。 教 师 指 导 学 生 练 习 学会 总线 的绘 制方 法

三、放置忽略ERC检查标记 四、生成原理图报表(元件采购清单) 本软件可以提供采购清单,避免出错。 执行【报告】【bills of materials】菜单命令,打开项目元件列表对话框。 五、原理图的网络表 网络表是原理图与印制板电路的桥梁。 生成网络表的方法:执行【设计】【设计项目的网络表】【Protel】命令,系统自动生成网络表文件,后缀名为.NET。 网络表每一个[…]表示一个元件和它的主要参数,每一个学会生成原理图的各种文件如网络表等

总结 作业(…)表示一个网络,其中显示的是元件的引脚编号,同一个(…)中的引脚在电气意义上是相连的,此信息对PCB制版至关重要。 六、项目元件库的 生成 执行【设计】【建立设 计项目库】菜单命令, 生成一个与项目 同名的元件库。

ATMEGA16读写iic(TWI)(24c02) C语言程序

ATMEGA16读写iic(24c02) C语言程序测试通过 #include #include "I2C.h" #include "1602.h" #include "delay.h" /*通过AVR往I IC写数据,并通过串口把数据读出显示出来*/ //=============================================================== void UART_init(void) //UART初始化 { DDRD = 0x02; PORTD = 0x00; UCSRA = 0x02; /*无倍速*/ UCSRB = 0x18; /*允许接收和发送*/ UC SRC = 0x06; /*8位数据,1位停止位,无校验*/ UBRRH = 0x00; UBRRL = 12; /*9600*/ } //=============================================================== void USART_TXD(float data) //发送采用查询方式 { while( !(UCSRA & BIT(UDRE)) ); UDR=data; while( !(UCSRA & BIT(TXC )) ); UCSRA|=BIT(TXC); } void main(void) { unsigned char i; //LCD_init(); uart_init();//TART初始化 SEI(); //全局中断使能

while(1) {/* I2C_Write('n',0x00); I2C_Write('c',0x01); I2C_Write('e',0x02); I2C_Write('p',0x03); I2C_Write('u',0x04); */ i=I2C_Read(0x00); //LCD_write_char(0,0,i); USART_TXD(i); i=I2C_Read(0x01); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x02); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x03); //LCD_write_data(i); USART_TXD(i); i=I2C_Read(0x04); //LCD_write_data(i); USART_TXD(i); } } /*上面上主函数部分*/ #include #include "delay.h" //I2C 状态定义 //MT 主方式传输 MR 主方式接受#define START 0x08 #define RE_START 0x10 #define MT_SLA_ACK 0x18 #define MT_SLA_NOACK 0x20 #define MT_DATA_ACK 0x28 #define MT_DATA_NOACK 0x30 #define MR_SLA_ACK 0x40 #define MR_SLA_NOACK 0x48 #define MR_DATA_ACK 0x50 #define MR_DATA_NOACK 0x58

单片机最小系统原理图

单片机最小系统 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的 系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路. 下面给出一个51单片机的最小系统电路图. 说明

复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C 取10u,R取8.2K.当然也有其他取法的,原则就是要让R C组合可以在RST脚上产生不少于2个机周期的高电平.至于如何具体定量计算,可以参考电路分析相关书籍. 晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作) 单片机:一片AT89S51/52或其他51系列兼容单片机 特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行.这一点是初学者容易忽略的. 复位电路: 一、复位电路的用途 单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。 单片机复位电路如下图:

二、复位电路的工作原理 在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2US就可以实现,那这个过程是如何实现的呢? 在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。 开机的时候为什么为复位 在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充

ATMEGA16的IO端口

第九课A Tmega16(L)的IO端口 本教程节选自周兴华老师《手把手教你学A VR单片机C程序设计》教程,如需转载,请注明出处!读者可通过当当网、淘宝网等网站购买本教程,如需购买配书实验器材,可登陆周兴华单片机培训中心网购部自助购买! ATmega16(L)单片机有32个通用I/O口,分为PA、PB、PC和PD四组,每组都是8位。这些I/O 口都可以通过各自的端口寄存器设置成输入和输出(即作为普通端口使用),有些I/O口还具有第二功能(我们在后面使用到这些第二功能时再介绍)。 ATmega16(L)单片机的I/O口在不考虑第二功能时,其基本输入输出功能都是相同的。如图7-1所示为ATmega16(L)单片机I/O口的结构图。每个端口对应3个寄存器,即方向寄存器DDRX(X=A、B、C、D)、端口寄存器PORTX(X=A、B、C、D)、输入引脚PINX(X=A、B、C、D),各个端口的工作状况都可以通过对DDRX、PORTX和PINX的操作来完成。所有的A VR单片机的I/O端口都具有读、写和修改功能。表7-1列出了A Tmega16(L)的I/O端口的组合控制设置。 ATmega16(L)单片机每一组I/O口的所有管脚都可以单独选择上拉电阻。引脚缓冲器可以吸收20mA 的电流,能够直接驱动LED显示。如果设置了弱上拉电阻,当管脚被拉低时,引脚会输出电流。1.DDRX DDRX为端口方向寄存器。当DDRX的某一位置1时相应引脚作为输出使用。反之,当DDRX的某一位置0时,对应的引脚单片机培训作为输入使用。 例如: DDRB=0xF0;//此语句将PB端口的PB0~PB3位设为输入,而PB4~PB7位设为输出。2.PORTX PORTX为端口数据寄存器。 如果引脚设为输出,则对PORTX进行写操作即改变引脚的输出值。

51单片机最小系统电路介绍

51单片机最小系统电路介绍 单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。 单片机最小系统晶振Y1也可以采用6MHz或者,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。 单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好 口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。其他接口内部有上拉电阻,作为输出口时不需外加上拉电阻。 设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。 " 设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 ms。 标识符号地址寄存器名称 P3 0B0H I/O口3寄存器 PCON 87H 电源控制及波特率选择寄存器 SCON 98H 串行口控制寄存器 SBUF 99H 串行数据缓冲寄存器 TCON 88H 定时控制寄存器 TMOD 89H 定时器方式选择寄存器 TL0 8AH 定时器0低8位 - TH0 8CH 定时器0高8位 TL1 8BH 定时器1低8位 TH1 8DH 定时器1高8位

ATmega128串口通信程序(中断方式)

ATmega128串口通信程序(中断方式) 2011-06-05 20:08:10| 分类:单片机程序编写| 标签:|字号大中小订阅程序采用IAR系统编译,实现使用串口调试助手收发数据的功能 #include #include #include #define INT8U unsigned char #define INT16U unsigned int #define UDRIE0 5 /* UART Buffer Defines */ #define UART0_RX_BUFFER_SIZE 128 #define UART0_TX_BUFFER_SIZE 128 /* Static Variables */ static unsigned char UART0_RxBuf[UART0_RX_BUFFER_SIZE]; static volatile unsigned char UART0_RxHead; static volatile unsigned char UART0_RxTail; static unsigned char UART0_TxBuf[UART0_TX_BUFFER_SIZE]; static volatile unsigned char UART0_TxHead; static volatile unsigned char UART0_TxTail; static unsigned char UART0_Flag=1; void USART_INIT( void ) { UBRR0H = 0x00; UBRR0L = 0x0B;//9600 at 1.8432M UCSR0A = 0x20; UCSR0B = 0xD8;//开接收结束中断,发送结束中断接收使能,发送使能 UCSR0C = 0x06;//异步模式,1位停止位,8位数据位 UDR0 = 0x00;//清空数据寄存器 UART0_RxTail = 0; UART0_RxHead = 0; UART0_TxTail = 0; UART0_TxHead = 0; __disable_interrupt();//关全局中断 } void Tran_Byte( INT8U sdata ) { if(UART0_Flag == 0) { UDR0 = sdata;

(仅供参考)STM32F105RBT6最小系统原理及工程的建立

市面上的许多stm32开发板都是使用ULINK2作为调试仿真工具,鉴于ULINK2所需引脚过多在学习时还可以,但应用于实际电路设计生产会造成许多硬件资源的浪费。鉴于此,本人经实验得出利用ST-LINK作为仿真下载工具的实验最小系统电路。希望给大家作为参考。 一、最小系统原理图 二、建立工程的步骤 1、先在一个文件夹内建6个子文件夹: DOC:放说明文件 Libraries:放库文件(CMSIS、FWlib) Listing:放编译器的中间文件 Output:放编译器的输出文件 Project:放项目工程 User:放自己编写的程序、main、stm32f10x_conf、stm32f10x_it.C、stm32f10x_it.h

2、双击桌面UV4图标启动软件,,---NWE uVision Project--选择保存地方----选择芯片型号------在左边处建立5个GOP(STARTUP放启动文件)、(CMSIS放内核文件)、(FWLIB放库里面的src的.C文件)、(USER 放自己写的程序文件及stm32f10x_conf.h、stm32f10x_it.h、stm32f10x_it.c、main.c)

3、将Output重置到一开始时所建的“Output”文件夹中。 4、将Listing重置到一开始时所建的“Listing”文件夹中。 5、在C、C++处的“Define”输入:STM32F10X_HD,USE_STDPERIPH_DRIVER。对于不同的芯片容量,可对HD进行更改(LD、MD、HD、XL、XC)。然后在“Include Paths”处指定相关的搜库位置。 6、Debug处选好下载器

ATMega16单片机外部中断的使用

ATMega16单片机外部中断的使用[日期:2010-09-24 ] [来源:本站原创作者:佚名] [字体:大中小] (投递新闻) // Crystal: 7.3728Mhz ,功能:学习外部中断0的程序 #include #include #define LED_COM PORTA ^= (1 << PA6) // void port_init(void) { PORTA = 0x40; DDRA = 0x40; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x04; DDRD = 0x00; } #pragma interrupt_handler int0_isr:2 void int0_isr(void)

LED_COM; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x00; GICR = 0x40; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void main() { init_devices(); while(1)

altium designer基于MINI-STM32的最小系统

《电路设计与PCB制板》 设计报告 题目:基于MINI-STM32的最小系统 学院: 专业: 班级: 姓名: 学号:

引言:Altium Designer基于一个软件集成平台,把为电子产品开发提供完整环境所需工具全部整合在一个应用软件中。 Altium Designer 包含所有设计任务所需工具:原理图和PCB设计、基于FPGA的嵌入式系统设计和开发。 目前我们使用到的功能特点主要有以下几点: 1、提供了丰富的原理图组件和PCB封装库并且为设计新 的器件提供了封装,简化了封装设计过程。 2、提供了层次原理图设计方法,支持“自上向下”的设 计思想,使大型电路设计的工作组开发方式称为可能。 3、提供了强大的查错功能,原理图中的ERC(电气规则 检查)工具和PCB 的DRC(设计规则检查)工具能帮助设计者更快的查出和改正错误。 4、全面兼容Protel系列以前的版本,并提供orcad格式文 件的转换。

一、课程设计目的 1、培养学生掌握、使用实用电子线路、计算机系统设计、制板的能力; 2.提高学生读图、分析线路和正确绘制设计线路、系统的能力; 3.了解原理图设计基础、了解设计环境设置、学习 Altium Designer 软件的功能及使用方法; 4.掌握绘制原理图的各种工具、利用软件绘制原理图; 5.掌握编辑元器件的方法构造原理图元件库; 6. 熟练掌握手工绘制电路版的方法,并掌握绘制编辑元件封装图的方法,自己构造印制板元件库; 7.了解电路板设计的一般规则、利用软件绘制原理图并自动生成印制板图。 二、设计过程规划 1、根据实物板设计方案; 2、制作原理图组件; 3、绘制原理图; 4、选择或绘制元器件的封装; 5、导入PCB图进行绘制及布线; 6、进入DRC检查;

单片机最小系统电路图

单片机最小系统电路图

————————————————————————————————作者:————————————————————————————————日期: 2

单片机基础实践 D0D1D2D3D4D5D6D7EA ALE PSEN P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78RST 9P3.0(RXD)10P3.1(TXD)11P3.2(INT0)12P3.3(INT1)13P3.4(T0)14P3.5(T1)15P3.6(WR)16P3.7(RD)17XTAL218XTAL119GND 20 P2.0 21 P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN 29ALE 30EA 31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039Vcc 40U1 STC89C52 P10P11P12P13P14P15P16P17P20 P21P22P23P24P25P26P27P30P31P32P33P34P35P36P37X2X1 RST Vcc 图1 单片机STC89C52电路图

4 3 2 Vcc R11k D LED 4 3 123456789J1 CON9 D0D1D2D3D4D5D6D7 Vcc 5 43+ C8 1 234 B1 R2 Vcc RST 图2 电源指示灯 图3 单片机P0口上拉电阻 图4 复位电路 Y C1 C2 X1 X2 2 1 D 123 4 56K1 1234USB USB VCC 图5 晶振电路 图6 USB 供电电路

ATMEGA16(L)的USART与PC机串行通信

本资料节选自手把手单片机系列教程,受版权保护,任何人不得肆意篡改发布,如需完整资料,请到周兴华培训中心官方网站查看,或者购买相关的手把手书籍 ATMEGA16(L)的USART与PC机串行通信 单片机与外界的信息交换可分为并行通信与串行通信两种。 并行通信是指一个数据的各位同时进行传送的通信方式。优点是传送速度快,但传输线较多,并且只适合距离较短的通信。 串行通信是指一个数据是逐位顺序进行传送的通信方式。其突出优点仅需单线就可进行通信,通信距离较远,缺点是传送的数据速率较低。 串行通信又有两种基本的通信方式:同步通信和异步通信。 10.1ATMEGA16(L)的异步串行收发器 AVR单片机的异步串行收发器(USART)是一个高度灵活的串行通讯设备,图10-1为 USAR 图10-1USART的方框图

USART主要分为三个部分:时钟发生器,发送器和接收器。控制寄存器由三个单元共享。时钟发生器包含同步逻辑,通过它将波特率发生器及为从机同步操作所使用的外部输入时钟同步起来。XCK(发送器时钟)引脚只用于同步传输模式。发送器包括一个写缓冲器,串行移位寄存器,奇偶发生器以及处理不同的帧格式所需的控制逻辑。写缓冲器可以保持连续发送数据而不会在数据帧之间引入延迟。由于接收器具有时钟和数据恢复单元,它是USART模块中最复杂的。恢复单元用于异步数据的接收。除了恢复单元,接收器还包括奇偶校验,控制逻辑,移位寄存器和一个两级接收缓冲器UDR。接收器支持与发送器相同的帧格式,而且可以检测帧错误,数据过速和奇偶校验错误。 10.2U S ART的主要特点 ATMEAG16(L)的USART特点如下: 1.全双工操作(独立的串行接收和发送寄存器) 2.异步或同步操作 3.主机或从机提供时钟的同步操作 4.高精度的波特率发生器 5.支持5、6、7、8或9个数据位和1个或2个停止位 6.硬件支持的奇偶校验操作 7.数据过速检测 8.帧错误检测 9.噪声滤波,包括错误的起始位检测,以及数字低通滤波器 10.三个独立的中断:发送结束中断,发送数据寄存器空中断,以及接收结束中断 11.多处理器通讯模式 12.倍速异步通讯模式 10.3时钟产生 10.3.1USART支持4种模式的时钟 时钟产生逻辑为发送器和接收器产生基础时钟。USART支持4种模式的时钟:正常的异步模式,倍速的异步模式,主机同步模式,以及从机同步模式。USART控制位UMSEL和状态寄存器C(UCSRC)用于选择异步模式和同步模式。倍速模式(只适用于异步模式)受控于UCSRA寄存器的U2X。使用同步模式(UMSEL=1)时,XCK的数据方向寄存器(DDR_XCK)决定时钟源是由内部产生(主机模式)还是由外部生产(从机模式)。仅在同步模式下XCK有效。图10-2为时钟产生逻辑的框图。

STM32最小系统电路

STM32最小系统电路 原创文章,转载请注明出处: 1.电源供电方案 ● VDD = ~:VDD管脚为I/O管脚和内部调压器的供电。 ● VSSA,VDDA = ~:为ADC、复位模块、RC振荡器和PLL的模拟部分提供供电。使用ADC时,VDD不得小于。VDDA和VSSA必须分别连接到VDD和VSS。 ● VBAT = ~:当关闭VDD时,(通过内部电源切换器)为RTC、外部32kHz振荡器和后备寄存器供电。 采用(AMS1117)供电 ]

2.晶振 STM32上电复位后默认使用内部[精度8MHz左右]晶振,如果外部接了8MHz 的晶振,可以切换使用外部的8MHz晶振,并最终PLL倍频到72MHz。 3.JTAG接口 ~ 在官方给出的原理图基本是结合STM32三合一套件赠送的ST-Link II给出的JTAG接口。

ST-Link II SK-STM32F学习评估套件原理图的JTAG连接 很多时候为了省钱,所以很多人采用wiggler + H-JTAG的方案。H-JTAG其实是twentyone大侠开发的调试仿真烧写软件,界面很清新很简洁。 ) H-JTAG界面

H-JTAG软件的下载: H-JTAG官网:大侠的blog: 关于STM32 H-JTAG的使用,请看下一篇博文 Wiggler其实是一个并口下载方案,其实电路图有很多种,不过一些有可能不能使用,所以要注意。你可以在taobao上买人家现成做好的这种Wiggler下载线,最简便的方法是自己动手做一条,其实很简单,用面包板焊一个74HC244就可以了。 ! Wiggler电路图下载: 电路图中”RESET SELECT”和”RST JUMPER”不接,如果接上的话会识别不了芯片。

单片机最小系统电路

单片机最小系统的相关知识 复位电路: 一、复位电路的用途:单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。单片机复位电路如下图: 二、复位电路的工作原理在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2us就可以实现,那这个过程是如何实现的呢?

在单片机系统中,系统上电启动的时候复位 一次,当按键按下的时候系统再次复位,如果释 放后再按下,系统还会复位。所以可以通过按键 的断开和闭合在运行的系统中控制其复位。 开机的时候为什么会复位:在电路图中,电 容的的大小是10uF,电阻的大小是10k。所以根 据公式,可以算出电容充电到电源电压的0.7倍 (单片机的电源是5V,所以充电到0.7倍即为 3.5V),需要的时间是10K*10UF=0.1S。也就是 说在单片机启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V 的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。 按键按下的时候为什么会复位:在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。 晶振电路: 晶振电路:晶振是晶体振荡器的简称在 电气上它可以等效成一个电容和一个电阻并 联再串联一个电容的二端网络电工学上这个 网络有两个谐振点以频率的高低分其中较低 的频率是串联谐振较高的频率是并联谐振由于晶体自身的特性致使这两个频率的距离相当的接近在这个极窄的频率范围内晶振等效为一个电感所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路由于晶振等效为电感的频率范围很窄所以即使其他元件的参数变化很大这个振荡器的频率也不会有很大的变化 晶振有一个重要的参数那就是负载电容值选择与负载电容值相等的并联电容就可以得到晶振标称的谐振频率

基于两线串行TWI技术实现两个ATmega16单片机通信

基于两线串行TWI技术 实现两个ATmega16单片机通信 靳宝强 摘 要:AVR ATmega16单片机提供了实现标准两线串行总线通信的硬件接口TWI,该接口是面向字 节和基于中断的。通过一条数据线(SDA)和一条时钟线(SCL),按照TWI通信协议进行寻址和信息传输。本文将具体介绍一种利用TWI技术实现两个ATmega16单片机通信的方法,该方法编程简单、实现可靠,非常具有推广和使用价值。 关键词:两线串行TWI接口;ATmega16单片机;控制寄存器;状态寄存器 0 引言 AVR ATmega 系列单片机片内集成两线串行接口TWI模块。采用TWI协议,设计者可通过两根双向总线,即一根时钟线SCL和一根数据线SDA,连接128个从设备。实现总线连接时唯一需要增加的外部设备是每条总线上的上拉电阻,见图1。所有与总线相连的设备都需要定义各自的设备地址号。实际上,TWI接口时序与常见的I2C总线是兼容的。因此,只需要控制相关寄存器,就能实现通过TWI传输数据,这在很大程度上减少了工作量,从而使编程简单,开发更容 易。 图1 TWI总线连接 1 TWI 模块概述 1.1 SCL和SDA引脚 这两个引脚功能是和普通I/0复用的,当开始使用TWI接口传输数据时,硬件会覆盖原来对这两个引脚的I/O设置,自己控制输入/输出的方向。由于总线需要上拉电阻,结合AVR I/0端口功能,在TWI 使能时可设置SCL 和SDA 引脚对应的I/O 口内部上拉电阻有效,这样可省去外部两个上拉电阻。同时引脚输入部分还配有毛刺抑制单元,可去除高频干扰。 1.2 波特率发生器 TWI工作在主控器模式下时,由该单元控制产生时钟信号并驱动时钟线SCL。时钟SCL的周期由TWI状态寄存器TWSR中的预分频位和TWI波特率寄存器TWBR来确定。当TWI工作在被控器模式下时,不需要对波特率和预分频进行设定,但要求作为被控器,其CPU的时钟频率必须大于TWI时钟线SCL频率的16倍。SCL 时钟频率依据以下等式产生: 其中:TWBR为TWI波特率寄存器的值;TWPS为TWI状态寄存器TWSR中的预分频位的值。在主机模式下,TWBR的值应大于10,否则会产生不正确的输出。 1.3 总线接口单元 该单元包括:数据和地址移位寄存器TWDR,起始/终止信号(START/STOP)控制和总线仲裁判定的硬件电路。 TWDR寄存器用于存放传送或接收的数据和地址。总线单元还有一个寄存器,含有用于传送或接收的应答信号——ACK/NACK,这个应答ACK/NACK的寄存器不能由程序直接读写。当接收数据时,它可以通过TWI控制寄存器TWCR来置位或清零。在发送数据时,ACK/NACK值由TWI状态寄存器TWSR的设置决定。起始/终止信号(START/STOP)控制电路负责TWI总线上的START,REPEATED START和STOP逻辑时序的发生和检测。 1.4 地址匹配单元 地址匹配单元将检测从总线上收到的地址是否与TWAR寄存器中的7 位地址相匹配,一旦匹配成功,将通知控制单

AVR单片机串口USART与PC通讯实例

“并行”通讯:是指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加, 干扰就会增加,数据也就容易出错。 “串行”通讯:形容一下就是一条车道,而并口就是有8个车道同一时刻能传送8位(一个字节)数据。但是并不是并口快,由于8位通道 之间的互相干扰。传输时速度就受到了限制。而且当传输出错时,要同时重新传8个位的数据。串口没有干扰,传输重 发一位就可以了。所以要比并口快。 串行通讯协议较多,单片机常用的有USART,SPI,TWI,1-Wire 等。 串行通讯有分为同步和异步通讯:通俗讲同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉 你听到了,才一起去吃饭。异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。 同步通讯:收信发信双方在使用同步时钟,在同一时刻传输线上的数据就是要传输的信息。 异步通讯:以字符为传输单位,字符与字符之间是异步的,而字符的位是同步的 USART:异步串行通讯,常用与单片机和单片机,单片机和PC电脑间的数据传输。 波特率:表征通讯速度的参数,单位是位/秒(b/s),即每秒钟传输的二进制位数,如波特率9600,表示每秒钟传输9600个二进制位 数据。收发双方必须采用同样的波特率。波特率不同将无法正常通讯。 全双工通讯:指是的是可以同时发送和接收数据。 半双工通讯:指的是在同一时刻只能发送或只能接收数据。 单片机与PC通讯的电平转换:单片机的电压一般是TTL电平,电压0v-5v,PC机串口采用的是RS-232协议,它的的电压范围 是-15-+15v,电平不同,无法通讯。要实现通讯,必须进行电平和逻辑关系的转换,一般用 MAX232集成芯片进行电平的转换。 ATmega16 串口结构:有一个全双工的串行口,有两条通讯线,TXD:数据发送线,RXD:数据接收线,对应的单片机外部引脚为PD1,PD0 相关寄存器:UDR 串口数据寄存器, UCSRA 串口控制与状态寄存器A UCSRB 串口控制与状态寄存器B UCSRC 串口控制与状态寄存器C UBRRH,UBRRL 波特率寄存 器

51最小系统原理图

51系列单片机最小系统 2009年03月18日星期三上午10:48 51系列单片机最小系统 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路. 下面给出一个51单片机的最小系统电路图. 说明 复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的 时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周

期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般 教科书推荐C 取10u,R取.当然也有其他取法的,原则就是要让RC组合可以在RST 脚上产生不少于2个机周期的高电平.至于如何具体定量计算,可 以参考电路分析相关书籍. 晶振电路:典型的晶振取(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定 时操作) 单片机:一片AT89S51/52或其他51系列兼容单片机 特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行. 这一点是初学者容易忽略的. 因此可以看出,其实要熟悉51单片机的40个引脚功能也很容易: 总共40个脚,电源用2个(Vcc和GND),晶振用2个,复位1个,EA/Vpp用1个,剩下还有34个.29脚PSEN,30脚ALE为外扩数据/程序存储器时才有特定用处, 一般情况下不用考虑,这样,就只剩下32个引脚,对于初学者,这32个引脚就是要经常跟它们打交道的了.它们是: P0端口~共8个 P1端口~共8个 P2端口~共8个 P3端口~共8个

单片机最小系统讲解

晶振:一般选用11.0592M,因为可以准确地得到9600波特率和19200波特率 晶振电路:单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振和瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。 复位电路:给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利

用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,这时如果手按着一直不放,系统将一直复位,不能正常工作,在这里我们需要注意用的电容是电解电容,是有正负的,如果接反了,他就会爆炸,我们可以用并口或者串口把程序下到单片机中,这样我们就可以省去了买烧录器, 3、电源,说了半天还没有说到电源,要不单片机怎么工作呀,图中没有给出,第20管脚是地GND,第40管脚是电源VCC,一般我们在电源vcc处。加一个0.1uf的瓷片电容,滤掉电源中的高频雑波,使系统更安全。注意51单片机使用的是5付直流电源。 89c51内部有一个用于构成振荡器的高增益反向放大器,该放大器的输入输出引脚为XTAL1和XTAL2,它们跨接在晶体振荡器和用于微调的电容,便构成了一个自激励振荡器 电路中的C1、C2的选择在30PF左右,但电容太小会影响振荡的频率、稳定性和快速性。晶振频率为在1.2MHZ~12MHZ之间,频率越高单片机的速度就越快,但对存储器速度要求就高。为了提高稳定性我们采用温度稳定性好的NPO电容,采用的晶振频率为12MHZ。 重点介绍: C1、C2作用:震荡补偿电容,可以放宽起震频率,让时钟电路容易起震。 C3的作用:为极性电容,上电瞬间,电容导通,可以通交流阻直流。给RST连续两个机器周期的高电平,即可完成上电复位,复位

相关主题
文本预览
相关文档 最新文档