PIC单片机学习资料 经典版

PIC单片机学习资料 经典版
PIC单片机学习资料 经典版

PIC单片机C语言编程简介

用 C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、

代码的重复利用率高、便于跨平台的代码移植等等,因此 C 语言编程在单片机系统设计中已得到越

来越广泛的运用。针对PIC 单片机的软件开发,同样可以用 C 语言实现。

但在单片机上用 C 语言写程序和在PC 机上写程序绝对不能简单等同。现在的PC 机资

源十分丰富,运算能力强大,因此程序员在写PC 机的应用程序时几乎不用关心编译后的可

执行代码在运行过程中需要占用多少系统资源,也基本不用担心运行效率有多高。写单片机

的 C 程序最关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如

果没有对单片机体系结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实

用的 C 语言程序。这就是为什么前面所有章节中的的示范代码全部用基础的汇编指令实现

的原因,希望籍此能使读者对PIC 单片机的指令体系和硬件资源有深入了解,在这基础之

上再来讨论 C 语言编程,就有水到渠成的感觉。

本书围绕中档系列PIC 单片机来展开讨论,Microchip 公司自己没有针对中低档系列PIC

单片机的 C 语言编译器,但很多专业的第三方公司有众多支持PIC 单片机的 C 语言编译器

提供,常见的有Hitech、CCS、IAR、Bytecraft 等公司。其中笔者最常用的是Hitech 公司的

PICC 编译器,它稳定可靠,编译生成的代码效率高,在用PIC 单片机进行系统设计和开发

的工程师群体中得到广泛认可。其正式完全版软件需要购置,但在其网站上有限时的试用版

供用户评估。另外,Hitech 公司针对广大PIC 的业余爱好者和初学者还提供了完全免费的学

习版PICC-Lite 编译器套件,它的使用方式和完全版相同,只是支持的PIC 单片机型号限制

在PIC16F84、PIC16F877 和PIC16F628 等几款。这几款Flash 型的单片机因其所具备的丰富的片上资源而最适用于单片机学习入门,因此笔者建议感兴趣的读者可从PICC-Lite 入手掌

握PIC 单片机的 C 语言编程。

在此列出几个主要的针对PIC 单片机的 C 编译器相关连接网址,供读者参考:

Hitech-PICC:https://www.360docs.net/doc/3717669477.html,

IAR:https://www.360docs.net/doc/3717669477.html,

CCS:https://www.360docs.net/doc/3717669477.html,/picc.shtml

ByteCraft:https://www.360docs.net/doc/3717669477.html,/mpccaps.html

本章将介绍Hitech-PICC 编译器的一些基本概念,由于篇幅所限将不涉及 C 语言的标准

语法和基础知识介绍,因为在这些方面都有大量的书籍可以参考。重点突出针对PIC 单片

机的特点而所需要特别注意的地方。

11.2

Hitech-PICC编译器

PICC 基本上符合ANSI 标准,除了一点:它不支持函数的递归调用。其主要原因是因

为PIC 单片机特殊的堆栈结构。在前面介绍PIC 单片机架构时已经详细说明了PIC 单片机中的堆栈是硬件实现的,其深度已随芯片而固定,无法实现需要大量堆栈操作的递归算法;另外在PIC 单片机中实现软件堆栈的效率也不是很高,为此,PICC 编译器采用一种叫做“静态覆盖”的技术以实现对 C 语言函数中的局部变量分配固定的地址空间。经这样处理后产生出的机器代码效率很高,按笔者实际使用的体会,当代码量超过4K 字后,C 语言编译出的代码长度和全部用汇编代码实现时的差别已经不是很大(<10%),当然前提是在整个 C 代码编写过程中须时时处处注意所编写语句的效率,而如果没有对PIC 单片机的内核结构、各功能模块及其汇编指令深入了解,要做到这点是很难的。

11.3

MPLAB-IDE内挂接PICC

PICC 编译器可以直接挂接在MPLAB-IDE 集成开发平台下,实现一体化的编译连接和

原代码调试。使用MPLAB-IDE 内的调试工具ICE2000、ICD2 和软件模拟器都可以实现原代码级的程序调试,非常方便。

首先必须在你的计算机中安装PICC编译器,无论是完全版还是学习版都可以和

MPLAB-IDE挂接。安装成功后可以进入IDE,选择菜单项Project Set Language Tool Locations…,打开语言工具挂接设置对话框,如图11-1 所示:

图11-1 MPLAB-IDE 语言工具设置对话框

在对话框中选择“HI-TECH PICC Toolsuite”栏,展开可执行文件组“Executable”后,

列出了将被MPLAB-IDE 后台调用的编译器所用到的所有可执行文件,其中有汇编编译器“PICC Assembler”、C 原程序编译器“PICC Compiler”和连接定位程序“PICC Linker”。同

时在此列表中还显示了对应的可执行程序名,请注意在这里都是“PICC.EXE”。用鼠标分别

点击选中这三项可执行文件,观察对话框下面“Location”一栏中显示的文件路径,用“Browse…”按纽,从计算机中已经安装的PICC 编译器文件夹中选择PICC.EXE 文件。实

际上PICC.EXE 只是一个调度管理程序,它会按照所输入的文件扩展名自动调用对应的编译

器和连接器,用户要注意的是 C 语言原程序扩展名用“.c”,汇编原程序用“.as”即可。

工具挂接完成后,在建立项目时可以选择语言工具为“HI-TECH PICC”,具体步骤可以

参阅第三章 3.1.3 节,此处不再重复。项目建立完成后可以加入 C 或汇编原程序,也可以加

入已有的库文件或已经编译的目标文件。最常见的是只加入 C 原程序。用 C 语言编程的好

处是可以实现模块化编程。程序编写者应尽量把相互独立的控制任务用多个独立的 C 原程序文件实现,如果程序量较大,一般不要把所有的代码写在一个文件内。

图11-2 列出的是笔者建立的一个项目中所有 C 原程序模块,其中主控、数值计算、I2C 总线操作、命令按键处理和液晶显示驱动等不同的功能分别在不同的独立的原程序模块中实现。

图11-2 C 语言多模块编程

11.4PIC单片机的C语言原程序基本框架

基于PICC 编译环境编写PIC 单片机程序的基本方式和标准 C 程序类似,程序一般由以

下几个主要部分组成:

&O1540; 在程序的最前面用#include 预处理指令引用包含头文件,其中必须包含一个编译器提供的“pic.h”文件,实现单片机内特殊寄存器和其它特殊符号的声明;

&O1540; 用“__CONFIG”预处理指令定义芯片的配置位;

&O1540; 声明本模块内被调用的所有函数的类型,PICC 将对所调用的函数进行严格的类型匹配检查;

&O1540; 定义全局变量或符号替换;

&O1540; 实现函数(子程序),特别注意main 函数必须是一个没有返回的死循环。

下面的例11-1 为一个 C 原程序的范例,供大家参考。

#include //包含单片机内部资源预定义

#include “pc68.h” //包含自定义头文件

//定义芯片工作时的配置位

__CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS);

//声明本模块中所调用的函数类型

void SetSFR(void);

void Clock(void);

void KeyScan(void);

void Measure(void);

void LCD_Test(void);

void LCD_Disp(unsigned char);

//定义变量

unsigned char second, minute, hour; bit flag1,flag2;

//函数和子程序

void main(void)

{

SetSFR();

PORTC = 0x00;

TMR1H += TMR1H_CONST;

LED1 = LED_OFF;

LCD_Test();

//程序工作主循环

while(1) {

asm(“clrwdt”);

Clock();

KeyScan();

Measure();

SetSFR();

}

}

//清看门狗

//更新时钟

//扫描键盘

//数据测量

//刷新特殊功能寄存器

11.5

PICC中的变量定义

例11-1 C 语言原程序框架举例11.5.1 PICC 中的基本变量类型

PICC 遵循Little-endian 标准,多字节变量的低字节放在存储空间的低地址,高字节放在高地址。

11.5.2 PICC 中的高级变量

基于表11-1 的基本变量,除了bit 型位变量外,PICC 完全支持数组、结构和联合等复合型高级变量,这和标准的 C 语言所支持的高级变量类型没有什么区别。例如:

数组:unsigned int data[10];

结构:struct commInData {

unsigned char inBuff[8];

unsigned char getPtr, putPtr;

};

联合:union int_Byte {

unsigned char c[2];

unsigned int i;

};

例11-2 C 语言高级变量举例

11.5.3 PICC 对数据寄存器bank 的管理

为了使编译器产生最高效的机器码,PICC 把单片机中数据寄存器的bank 问题交由编程

员自己管理,因此在定义用户变量时你必须自己决定这些变量具体放在哪一个bank 中。如果没有特别指明,所定义的变量将被定位在bank0,例如下面所定义的这些变量:unsigned char buffer[32];

bit flag1,flag2;

float val[8];

除了bank0 内的变量声明时不需特殊处理外,定义在其它bank 内的变量前面必须加上

相应的bank 序号,例如:

bank1 unsigned char buffer[32]; //变量定位在bank1 中

bank2 bit flag1,flag2;

bank3 float val[8];

//变量定位在bank2 中

//变量定位在bank3 中

中档系列PIC 单片机数据寄存器的一个bank 大小为128 字节,刨去前面若干字节的特

殊功能寄存器区域,在 C 语言中某一bank 内定义的变量字节总数不能超过可用RAM 字节数。如果超过bank 容量,在最后连接时会报错,大致信息如下:

Error[000] : Can't find 0x12C words for psect rbss_1 in segment BANK1

连接器告诉你总共有0x12C(300)个字节准备放到bank1 中但bank1 容量不够。显然,只有把一部分原本定位在bank1 中的变量改放到其它bank 中才能解决此问题。

虽然变量所在的bank 定位必须由编程员自己决定,但在编写原程序时进行变量存取操

作前无需再特意编写设定bank 的指令。C 编译器会根据所操作的对象自动生成对应bank 设定的汇编指令。为避免频繁的bank 切换以提高代码效率,尽量把实现同一任务的变量定位

在同一个bank 内;对不同bank 内的变量进行读写操作时也尽量把位于相同bank 内的变量归并在一起进行连续操作。

11.5.4 PICC 中的局部变量

PICC 把所有函数内部定义的auto 型局部变量放在bank0。为节约宝贵的存储空间,它

采用了一种被叫做“静态覆盖”的技术来实现局部变量的地址分配。其大致的原理是在编译

器编译原代码时扫描整个程序中函数调用的嵌套关系和层次,算出每个函数中的局部变量字节数,然后为每个局部变量分配一个固定的地址,且按调用嵌套的层次关系各变量的地址可以相互重叠。利用这一技术后所有的动态局部变量都可以按已知的固定地址地进行直接寻址,用PIC 汇编指令实现的效率最高,但这时不能出现函数递归调用。PICC 在编译时会严格检查递归调用的问题并认为这是一个严重错误而立即终止编译过程。

既然所有的局部变量将占用bank0 的存储空间,因此用户自己定位在bank0 内的变量字节数将受到一定的限制,在实际使用时需注意。

11.5.5 PICC 中的位变量

bit 型位变量只能是全局的或静态的。PICC 将把定位在同一bank 内的8 个位变量合并

成一个字节存放于一个固定地址。因此所有针对位变量的操作将直接使用PIC 单片机的位操作汇编指令高效实现。基于此,位变量不能是局部自动型变量,也无法将其组合成复合型高级变量。

PICC 对整个数据存储空间实行位编址,0x000 单元的第0 位是位地址0x0000,以此后

推,每个字节有8 个位地址。编制位地址的意义纯粹是为了编译器最后产生汇编级位操作指

令而用,对编程人员来说基本可以不管。但若能了解位变量的位地址编址方式就可以在最后

程序调试时方便地查找自己所定义的位变量,如果一个位变量flag1 被编址为0x123,那么

实际的存储空间位于:

字节地址=0x123/8 = 0x24

位偏移=0x123%8 = 3

即flag1 位变量位于地址为0x24 字节的第 3 位。在程序调试时如果要观察flag1 的变化,必须观察地址为0x24 的字节而不是0x123。

PIC 单片机的位操作指令是非常高效的。因此,PICC 在编译原代码时只要有可能,对

普通变量的操作也将以最简单的位操作指令来实现。假设一个字节变量tmp 最后被定位在

地址0x20,那么

tmp |= 0x80

tmp &= 0xf7

=> bsf

0x20,7

0x20,3

if (tmp&0xfe)

=> btfsc 0x20,0

即所有只对变量中某一位操作的 C 语句代码将被直接编译成汇编的位操作指令。虽然编程时可以不用太关心,但如果能了解编译器是如何工作的,那将有助于引导我们写出高效简介的 C 语言原程序。

在有些应用中需要将一组位变量放在同一个字节中以便需要时一次性地进行读写,这一

功能可以通过定义一个位域结构和一个字节变量的联合来实现,例如:

struct {

unsigned b0: 1;

unsigned b1: 1;

unsigned b2: 1;

unsigned b3: 1;

unsigned b4: 1;

unsigned b5: 1;

unsigned : 2; //最高两位保留

} oneBit;

unsigned char allBits;

} myFlag;

例11-3 定义位变量于同一字节

需要存取其中某一位时可以

myFlag.oneBit.b3=1; //b3 位置1

一次性将全部位清零时可以

myFlag.allBits=0; //全部位变量清0

当程序中把非位变量进行强制类型转换成位变量时,要注意编译器只对普通变量的最低

位做判别:如果最低位是0,则转换成位变量0;如果最低位是1,则转换成位变量1。而标准的ANSI-C 做法是判整个变量值是否为0。另外,函数可以返回一个位变量,实际上此返

回的位变量将存放于单片机的进位位中带出返回。

11.5.6 PICC 中的浮点数

PICC 中描述浮点数是以IEEE-754 标准格式实现的。此标准下定义的浮点数为32 位长,

在单片机中要用 4 个字节存储。为了节约单片机的数据空间和程序空间,PICC 专门提供了

一种长度为24 位的截短型浮点数,它损失了浮点数的一点精度,但浮点运算的效率得以提

高。在程序中定义的float 型标准浮点数的长度固定为24 位,双精度double 型浮点数一般

也是24 位长,但可以在程序编译选项中选择double 型浮点数为32 位,以提高计算的精度。

一般控制系统中关心的是单片机的运行效率,因此在精度能够满足的前提下尽量选择

24 位的浮点数运算。

11.5.7 PICC 中变量的绝对定位

首先必须强调,在用 C 语言写程序时变量一般由编译器和连接器最后定位,在写程序

之时无需知道所定义的变量具体被放在哪个地址(除了bank 必须声明)。

真正需要绝对定位的只是单片机中的那些特殊功能寄存器,而这些寄存器的地址定位在PICC 编译环境所提供的头文件中已经实现,无需用户操心。编程员所要了解的也就是PICC 是如何定义这些特殊功能寄存器和其中的相关控制位的名称。好在PICC 的定义标准基本上按照芯片的数据手册中的名称描述进行,这样就秉承了变量命名的一贯性。一个变量绝对定位的例子如下:

unsigned char tmpData @ 0x20; //tmpData 定位在地址0x20

千万注意,PICC 对绝对定位的变量不保留地址空间。换句话说,上面变量tmpData 的

地址是0x20,但最后0x20 处完全有可能又被分配给了其它变量使用,这样就发生了地址冲突。因此针对变量的绝对定位要特别小心。从笔者的应用经验看,在一般的程序设计中用户自定义的变量实在是没有绝对定位的必要。

如果需要,位变量也可以绝对定位。但必须遵循上面介绍的位变量编址的方式。如果一

个普通变量已经被绝对定位,那么此变量中的每个数据位就可以用下面的计算方式实现位变量指派:

unsigned char tmpData @ 0x20; //tmpData 定位在地址0x20

bit tmpBit0 @ tmpData*8+0; //tmpBit0 对应于tmpData 第0 位

bit tmpBit1 @ tmpData*8+1; //tmpBit0 对应于tmpData 第1 位

bit tmpBit2 @ tmpData*8+2; //tmpBit0 对应于tmpData 第2 位

如果tmpData 事先没有被绝对定位,那就不能用上面的位变量定位方式。

11.5.8 PICC 的其它变量修饰关键词

&O1540; extern — 外部变量声明

如果在一个 C 程序文件中要使用一些变量但其原型定义写在另外的文件中,那么在本

文件中必须将这些变量声明成“extern”外部类型。例如程序文件code1.c 中有如下定义:bank1 unsigned char var1, var2;

//定义了bank1 中的两个变量

在另外一个程序文件code2.c 中要对上面定义的变量进行操作,则必须在程序的开头定义:

extern bank1 unsigned char var1, var2; //声明位于bank1 的外部变量

&O1540; volatile — 易变型变量声明

PICC 中还有一个变量修饰词在普通的 C 语言介绍中一般是看不到的,这就是关键词“volatile”。顾名思义,它说明了一个变量的值是会随机变化的,即使程序没有刻意对它进

行任何赋值操作。在单片机中,作为输入的IO 端口其内容将是随意变化的;在中断内被修改的变量相对主程序流程来讲也是随意变化的;很多特殊功能寄存器的值也将随着指令的运行而动态改变。所有这种类型的变量必须将它们明确定义成“volatile”类型,例如:

volatile unsigned char STATUS @ 0x03;

volatile bit commFlag;

“volatile”类型定义在单片机的 C 语言编程中是如此的重要,是因为它可以告诉编译

器的优化处理器这些变量是实实在在存在的,在优化过程中不能无故消除。假定你的程序定义了一个变量并对其作了一次赋值,但随后就再也没有对其进行任何读写操作,如果是非volatile 型变量,优化后的结果是这个变量将有可能被彻底删除以节约存储空间。另外一种情形是在使用某一个变量进行连续的运算操作时,这个变量的值将在第一次操作时被复制到

中间临时变量中,如果它是非volatile 型变量,则紧接其后的其它操作将有可能直接从临时变量中取数以提高运行效率,显然这样做后对于那些随机变化的参数就会出问题。只要将其定义成volatile 类型后,编译后的代码就可以保证每次操作时直接从变量地址处取数。

&O1540; const — 常数型变量声明

如果变量定义前冠以“const”类型修饰,那么所有这些变量就成为常数,程序运行过

程中不能对其修改。除了位变量,其它所有基本类型的变量或高级组合变量都将被存放在程序空间(ROM 区)以节约数据存储空间。显然,被定义在ROM 区的变量是不能再在程序中对其进行赋值修改的,这也是“const”的本来意义。实际上这些数据最终都将以“retlw”

的指令形式存放在程序空间,但PICC 会自动编译生成相关的附加代码从程序空间读取这些常数,编程员无需太多操心。例如:

const unsigned char name[]=”This is a demo”; //定义一个常量字符串

如果定义了“const”类型的位变量,那么这些位变量还是被放置在RAM 中,但程序

不能对其赋值修改。本来,不能修改的位变量没有什么太多的实际意义,相信大家在实际编程时不会大量用到。

&O1540; persistent — 非初始化变量声明

按照标准 C 语言的做法,程序在开始运行前首先要把所有定义的但没有预置初值的变

量全部清零。PICC 会在最后生成的机器码中加入一小段初始化代码来实现这一变量清零操作,且这一操作将在main 函数被调用之前执行。问题是作为一个单片机的控制系统有很多变量是不允许在程序复位后被清零的。为了达到这一目的,PICC 提供了“persistent”修饰

词以声明此类变量无需在复位时自动清零,编程员应该自己决定程序中的那些变量是必须声明成“persisten”类型,而且须自己判断什么时候需要对其进行初始化赋值。例如:persistent unsigned char hour,minute,second; //定义时分秒变量

经常用到的是如果程序经上电复位后开始运行,那么需要将persistent 型的变量初始化,

如果是其它形式的复位,例如看门狗引发的复位,则无需对persistent 型变量作任何修改。PIC 单片机内提供了各种复位的判别标志,用户程序可依具体设计灵活处理不同的复位情形。

11.5.9 PICC 中的指针

PICC 中指针的基本概念和标准C 语法没有太多的差别。但是在PIC 单片机这一特定的

架构上,指针的定义方式还是有几点需要特别注意。

&O1540; 指向RAM 的指针

单片机常用模块电路大全

单片机常用模块电路大全 1. 双路232通信电路:3线连接方式,对应的是母头,工作电压5V,可以使用MAX202或MAX232。 2. 三极管串口通信:本电路是用三极管搭的,电路简单,成本低,但是问题,一般在低波特率下是非常好的。 3. 单路232通信电路:三线方式,与上面的三级管搭的完全等效。 4. USB转232电路:采用的是PL2303HX,价格便宜,稳定性还不错。 5. SP706S复位电路:带看门狗和手动复位,价格便宜(美信的贵很多),R4为调试用,调试完后焊接好R4。 卡模块电路(带锁):本电路与SD卡的封装有关,注意与封装对应。此电路可以通过端口控制SD卡的电源,比较完善,可以用于5V和。但是要注意,有些器件的使用,5V和是不一样的。 液晶模块(ST7920):本电路是常见的12864电路,价格便宜,带中文字库。可以通过PSB端口的电平来设置其工作在串口模式还是并行模式,带背光控制功能。

字符液晶模块(KS0066):最常用的字符液晶模块,只能显示数字和字符,可4位或8位控制,带背光功能。 9.全双工RS485电路(带保护功能):带有保护功能,全双工4线通信模式,适合远距离通信用。 半双工通信模块:可以通过选择端口选择数据的传输方向,带保护功率。此模块只能工作在5V. 11. ARM JTAG仿真接口电路:比较完善,可以应用在常规的ARM芯片下,具有有自动下载功能,可以用JLINK或ULINK. 电源模块:这个电路比较简单,如果用直插可以达到,如果用贴片的可以到达1A。 电源模块:可以到达800mA,价格非常便宜,也有相应的的芯片,可以直接替换。 常用开关电源电路 buck电源电路。 14.最常用的开关电源:

51单片机学习笔记(六)_串口中断通信+定时器2串口中断

51单片机学习笔记(六)_串口中断通信+定时器2串口中 断 51 单片机默认使用定时器1 作为串口通信的波特率发生器、定时器1 中断 通信,串口与定时器1 冲突,在遇到定时器不够用的时候可以用定时器2 #include void DelayMs(unsigned int i);void SerialInit();void SendByte(unsigned char sbyte);void SendString(unsigned char *pstr);void main(void){SerialInit();while(1); //注:必需要无限循环}/*//单片机时钟周期: 11.0592MHz 以时钟1 作为波特率发生器void SerialInit(){TMOD=0x20; // 设置T1 工作方式为方式2TH1=0xfd; //给定时器高位装初值TL1=0xfd; //给定时 器低位装初值TR1=1; //开定时器//以上是设置波特率SM0=0; //设置串口通 讯方式为方式1SM1=1; REN=1; //串口是否接收数据的开关EA=1; //总中断 打开,采用查询法时不用打开中断ES=1; //串口中断开关,采用查询法时不用打开 中断}*///单片机时钟周期:11.0592MHz 以时钟T2 作为波特率发生器void SerialInit(){PCON &= 0x7F; //波特率不倍速SMOD=0SCON = 0x50; //方式1,8 位数据,可变波特率,接收允许T2CON = 0x34; RCAP2H = 0xFF; RCAP2L = 0xDC; TH2 = 0xFF; TL2 = 0xDC;EA=1; //总中断打开,采 用查询法时不用打开中断ES = 1; //串口中断开关,采用查询法时不用 打开中断}//串口中断函数:void SerialPortInte(void) interrupt 4 //采用串口中断法 收发数据{unsigned char rbyte;if(RI){ //RI=1,判定为串口接收到了数据,RI 要清零,RI=0;rbyte=SBUF; if(rbyte==0x0A){ SendString(“换行”);}else if(rbyte==0x0D){SendString(“回车”);}else{SendByte(rbyte);}}}//串口发送一个字节:void SendByte(unsigned char sbyte){ SBUF=sbyte; //发送数据while(!TI); //等待发送完成TI=0; //清零发送标志位}//串口发送一个字符串:void

几种常用的单片机型号

当今单片机厂商琳琅满目,产品性能各异。针对具体情况,我们应选何种型号呢?首先,我们来弄清两个概念:集中指令集(CISC)和精简指令集(RISC)。采用CISC结构的单片机数据线和指令线分时复用,即所谓冯.诺伊曼结构。它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限,价格亦高。采用RISC结构的单片机数据线和指令线分离,即所谓哈佛结构。这使得取指令和取数据可同时进行,且由于一般指令线宽于数据线,使其指令较同类CISC单片机指令包含更多的处理信息,执行效率更高,速度亦更快。同时,这种单片机指令多为单字节,程序存储器的空间利用率大大提高,有利于实现超小型化。属于CISC结构的单片机有Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、台湾Win bond(华邦)W78系列、荷兰Philips的PCF80C51系列等;属于RISC结构的有Microchip公司的PIC系列、Silo 的Z86系列、Atmel的AT90S系列、韩国三星公司的KS57C系列4位单片机、台湾义隆的EM-78系列等。一般来说,控制关系较简单的小家电,可以采用RISC型单片机;控制关系较复杂的场合,如通讯产品、工业控制系统应采用CISC单片机。不过,RISC单片机的迅速完善,使其佼佼者在控制关系复杂的场合也毫不逊色。根据程序存储方式的不同,单片机可分为EPROM、OTP(一次可编程)、QTP(掩膜)三种。我国一开始都采用Rimless型单片机(片内无ROM,需片外配EPROM),对单片机的普及起了很大作用,但这种强调接口的单片机无法广泛应用,甚至走入了误区。如单片机的应用一味强调接口,外接I/O及存储

双机间的串口双向通信2.0

单片机应用课程设计任务书

单片机应用课程设计说明书 学院名称:计算机与信息工程学院 班级名称:网工124 学生姓名:卞可虎 学号:2012211369 题目:双机间的串口双向通信设计指导教师:于红利 起止日期:2014.12.29至2015.1.4

目录 一、绪论 (1) 二、相关知识 (6) 2.1 双机通信介绍 (6) 2.2单片机AT89C51介绍 (6) 2.3 串行通信简介 (8) 2.3.1串行通信的特点 (8) 2.3.2串行通信技术标准 (9) 三、总体设计 (10) 3.1 设计需求 (10) 四、硬件设计 (10) 4.1 系统硬件电路设计 (10) 4.1.1整体电路设计 (10) 4.1.2 控制电路设计 (11) 4.1.3 复位电路 (11) 4.1.4 显示电路 (12) 五、软件设计 (12) 5.1发送端程序流程 (12) 5.2接收端程序流程 (13) 5.3按键程序 (14) 5.4串口通信程序 (15) 5.5数码管显示程序 (16)

六、Proteus软件仿真 (16) 七、结束语 (19) 参考文献 (20) 指导教师评语 (21) 成绩评定 (21) 附录:源程序 (22) 一、绪论 电子技术的飞速发展,单片机也步如一个新的时代,越来越多的功能各异的单片机为我们的设计提供了许多新的方法与思路。单片机之间的通信可以分为两大类:并行通信和串行通信。串行通信传输线少,长距离传输时成本低,且可以利用数据采集方便灵活,成本低廉等优点,在通信中发挥着越来越重要的作用。所以本系统采用串行通信来实现单片机之间可靠的,有效的数据交换。 对于一些类似复杂的后台运算及通信与高实时性前台控制系统、软件资源消耗大的系统、功能强大的低消耗系统、加密系统等等。如果合理使用多种不同类型的单片机组合设计,可以得到极高灵活性与性能价格比,因此,多种异型单片机系统设计渐渐成为一种新的思路,单片机技术作为计算机技术的一个重要分支,由于单片机体积小,系统运行可靠,数据采集方便灵活,成本低廉等优点,在通信中发挥着越来越重要的作用。但在一些相对复杂的单片机应用系统中,仅仅一个单片机资源是不够的,往往需要两个或多个单片机系统协同工作。这就对单片机通

51单片机经典教程

单片机经典教程 目录
第一课 第二课 第三课 第四课 第五课 第六课 第七课 第八课 第九课 第十课 第十一课 第十二课 第十三课 第十四课 第十五课 第十六课 第十七课 第十八课 第十九课 第二十课 第二十一课 第二十二课 第二十三课 第二十四课 单片机的概述 单片机的硬件结构与开发过程 单片机的内部结构 一 半导体存储器 单片机的内部结构 二 工作寄存器 单片机的内部结构 三 时序与时钟 单片机的内部结构 四 并行口 单片机的内部结构 五 数据与地址 单片机的内部结构 六 特殊功能存储器 单片机的工作方式 单片机的寻址 单片机的指令 一 数据传递类指令 单片机的指令 二 数据传递类指令 单片机的指令 三 算术逻辑运算类指令 单片机的指令 四 控制转移类指令 单片机的指令 五 位及位操作指令 单片机的程序设计方法 单片机的定时 计数器 单片机的中断系统 单片机的定时/中断实验 一 单片机的定时/中断实验 二 键盘接口及编程方法 一 独立式按键 键盘接口及编程方法 二 矩阵式按键 单片机显示器接口及编程方法 数码管的静态扫描与编程方法 6 9 11 15 18 20 24 27 29 32 35 38 42 47 51 55 64 68 73 78 81 87 90 94
4

第一课 单片机的概述
因为我们的主要课程是单片机的应用 本来不想讲解单片机的历史与发展 这话说现状更确切 些 但为了兼顾大多数朋友 我还是简单的介绍一下这方面的相关知识 一 单片机的由来 单片机 专业名称—Micro Controller Unit(微控制器件) 它是由大名鼎鼎的 INTEL 公司发明的 最早的系列是 MCS-48 后来有了 MCS-51 我们经常说的 51 系列单片机就是 MCS-51 micro controller system 它是一种 8 位的单片机 8 位是什么意思 我们以后再讲 后来 INTEL 公司把它的核心技术转让给了世界上很多的小公司 不过 再小也有几个亿的销售/ 年哦 所以世界上就有许多公司生产 51 系列兼容单片机 比如飞利浦的 87LPC 系列 华邦的 W78 系列 达拉斯的 DS87 系列 现代的 GSM97 系列等等 目前在我国比较流行的就是美国 ATMEL 公司的 89C51 它是一种带 Flash ROM 的单片机 至于什么是 Flash ROM 我在这儿先不作介绍 等以后大家学到相 关的知识时自然就会明白 我们的讲座就是以该型号的单片机来作实验的 讲到这里 也许有的人会 问 我平时在各种书上看到全是讲解 8031 8051 等型号的单片机 它们又有什么不同呢 其实它们同 属于一个系列 只是 89C51 的单片机更新型一点(事实上,89C51 目前正在用 89S51 代替 我们的实验系 统采用就是 89S52 的 兼容 89C52) 这里随便说一下 目前国内的单片机教材都是以 8051 为蓝本的 尽管其内核也是 51 系列的 但毕竟 8051 的单片机已经属于淘汰产品 在市场上也很少见到了 所以由 此感叹 国内的高等教育是如此的跟不上时代的发展需要 这话可能会引起很多人的不满,所以大家别 说是我讲的哦 二 主要单片机的分类 接着上面的话题 再给大家介绍一下我们经常在各种刊物上看到的 AVR 系列和 PIC 系列单片机是 怎么回事 以便让大家对单片机的发展有一个较全面的认识 在没有学习单片机之前 这是一个令很多 初学者非常困惑的问题 这么多的单片机我该先学哪一种呢 AVR 系列单片机也是 ATMEL 公司生产的一种 8 位单片机 它采用的是一种叫 RISC 精简指令集单 片机 的结构 所以它的技术和 51 系列有所不同 开发设备也和 51 系列是不通用的 它的一条指令的 运行速度可以达到纳秒级 即每秒 1000000000 次 是 8 位单片机中的高端产品 由于它的出色性能 目前应用范围越来越广 大有取代 51 系列的趋势 所以学完了 51 系列的 看来必须学会 AVR 的才行 可叹知识爆炸 人生苦短 说完了 AVR 的 再来说说另一种--PIC 系列单片机 它是美国 MICROCHIP 公 司 唉 又是老美 叫微芯公司的生产的另一种 8 位单片机 它采用的也是 RISC 的指令集 它的指令 系统和开发工具与 51 系列更是不同 但由于它的低价格和出色性能 目前国内使用的人越来越多 国 内也有很多的公司在推广它 不过它的影响力远没有 51 系列的大 所以作为初学者 51 系列当然是首 选 以上几种只是比较多见的系列 其实世界上还有许多的公司生产各种各样的单片机 比如 MOTOROLA 的 MC68H 系列 老牌的单片机 TI 的 MSP430C 系列 极低功耗的单片机 德国的西门子 SIEMENS 等等 它们都有各自的结构体系 并不与 51 系列兼容 为了不搞大家的脑筋 这里就不介绍了 等大 家入了门以后自己去研究它吧 我们还是回来了解一下 51 系列单片机到底是个什么东西 它有那些部 分组成 请接着往下看 三 单片机的结构及组成 单片机到底是一种什么 DD 它究竟能做什么呢 其实它就是一种能进行数学和逻辑运算 根据不 同使用对象完成不同控制任务的面向控制而设计的集成电路 此话好象有点绕口 没关系 大家都应该 知道我们经常使用的电脑吧 在电脑上 我们可以用不同的软件在相同的硬件上实现不同的工作 比如 我们用 WORD 可以打字 用 PROTEL 可以设计图纸等等 单片机其实也是如此 同样的芯片可以根据我们 不同的要求做出截然不同的产品 只不过电脑是面向应用的 而单片机是面向控制的 比如控制一个指
6

单片机常用芯片头文件

//STC 单片机内部ADC转换程序 //可选择查询和中断方式 //H文件 #ifndef __ADC_H__ #define __ADC_H__ #define ADC_POWER 0x80 //ADC 电源控制位 #define ADC_FLAG 0x10 //ADC 完成标志 #define ADC_START 0x08 //ADC 启动控制位 //ADC转换速度选择 #define ADC_SPEEDLL 0x00 //420 clocks #define ADC_SPEEDL 0x20 //280 clocks #define ADC_SPEEDH 0x40 //140 clocks #define ADC_SPEEDHH 0x60 //70 clocks unsigned int AD_Result_Temp; unsigned int GetADCResult (unsigned char chan); //ADC 转换处理,查询方式#endif //C文件 #ifndef __ADC_C__ #define __ADC_C__ #include //#include /*---------------------------- 初始化ADC 寄存器中断方式 ---------------------------- void InitADC() { unsigned unsigned char chan=0; P1ASF = 0xff; //设置P1口全部为ADC通道ADC_RES = 0; //清除高8位缓冲数据 ADC_RESL = 0; //清除低2位缓冲数据 ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | chan; _nop_(); _nop_(); //打开ADC } */ //---------------------------- //ADC 中断处理 //---------------------------- /*void adc_isr() interrupt 5 using 1

第3课 HJ-2G AVR单片机学习笔记 程序编写编译环境

第3课ICC程序编写编译环境 基于HJ-2G AVR学习板 学习AVR单片机必需要安装的第二个软件:程序编写编译环境ICC AVR 1、下面说一说安装方法,在配套资料(网上下载)找到ICC AVR直接点击按装,装好后输入正版注册码,这样就可以正常使用ICCAVR软件编写编译。 2、在桌面上打开ICCAVR软件,出现如下图片:请点开工程,并新建一个工程。 3、下图为新建一个工程,请保存在C盘目录下,输入工程名称(只能是中文),点击保存。

4、新建立一个C文件,在下图空白处输入你的C源码,输完后请保存C文件。 5、加入刚才建好的C文件到工程当中,方法如下图。

6、设置一下编译器,如下图。 7、芯片用ATmega16

8、最后一步了,只要你按上面的一步一步做,最后点一下编译键,就可以正常编译成功,如果不成功,请查一查你的C源码是否正确,还有工程是不是在中文目录下。 9、总结:本课主要学习了程序编写编译环境ICC AVR的安装,设置,还有编译方法,开始学单片机时,新手不会写C源码,可以复制慧净写好的C源码到项目中,练习多次,ICCAVR 软件你就会使用了,以后学习中,每一课都会用到本软件,只要你认真跟着《慧净1天入门AVR单片机学习笔记》学习,多多练习,相信你很快速学会AVR单片机。 慧净AVR单片机免费共享学习笔记目录(配有视频教程,请在慧净空间下载) 第一部1天入门AVR单片机学习笔记 第1课:AVR单片机学习基本流程 第2课:AVR单片机程序烧写方法 第3课:程序编写编译环境 第4课:简单C语言基础知识 第二部10天学会AVR单片机学习笔记 第1课:IO端口操作 第2课:流水灯 第3课:单个数码管显示 第4课:多个数码管同时显示 第5课:独立按键 第6课:定时器 第7课:外部中断

51单片机教程

原作:平凡的单片机

1、何谓单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。 天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。为什么会这样呢?功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。既然如此,单片机的功能肯定不强,干吗要学它呢?话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用PIII?应用的关键是看是否够用,是否有很好的性能价格比。所以8051出来十多年,依然没有被淘汰,还在不断的发展中。 2、MCS51单片机和8051、8031、89C51等的关系我们平常老是讲8051,又有什么8031,现在又有89C51,它们之间究竟是什么关系? MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。INTEL 公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL 公司开发生产的。以后我们将用89C51来完成一系列的实验。 一、单片机的外部结构 拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。1、电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。2、振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图1接上即可。3、复位引脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。4、EA引脚:EA引脚接到正电源端。至此,一个单片机就接好,通上电,单片机就开始工作了。 我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的5个引脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻) 按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1引脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不可以由我们来更改。

常用芯片型号大全

常用芯片型号大全 4N35/4N36/4N37 "光电耦合器" AD7520/AD7521/AD7530/AD7521 "D/A转换器" AD7541 12位D/A转换器 ADC0802/ADC0803/ADC0804 "8位A/D转换器" ADC0808/ADC0809 "8位A/D转换器" ADC0831/ADC0832/ADC0834/ADC0838 "8位A/D转换器" CA3080/CA3080A OTA跨导运算放大器 CA3140/CA3140A "BiMOS运算放大器" DAC0830/DAC0832 "8位D/A转换器" ICL7106,ICL7107 "3位半A/D转换器" ICL7116,ICL7117 "3位半A/D转换器" ICL7650 "载波稳零运算放大器" ICL7660/MAX1044 "CMOS电源电压变换器" ICL8038 "单片函数发生器" ICM7216 "10MHz通用计数器" ICM7226 "带BCD输出10MHz通用计数器" ICM7555/7555 CMOS单/双通用定时器 ISO2-CMOS MT8880C DTMF收发器 LF351 "JFET输入运算放大器" LF353 "JFET输入宽带高速双运算放大器" LM117/LM317A/LM317 "三端可调电源" LM124/LM124/LM324 "低功耗四运算放大器" LM137/LM337 "三端可调负电压调整器" LM139/LM239/LM339 "低功耗四电压比较器"

LM158/LM258/LM358 "低功耗双运算放大器" LM193/LM293/LM393 "低功耗双电压比较器" LM201/LM301 通用运算放大器 LM231/LM331 "精密电压—频率转换器" LM285/LM385 微功耗基准电压二极管 LM308A "精密运算放大器" LM386 "低压音频小功率放大器" LM399 "带温度稳定器精密电压基准电路" LM431 "可调电压基准电路" LM567/LM567C "锁相环音频译码器" LM741 "运算放大器" LM831 "双低噪声音频功率放大器" LM833 "双低噪声音频放大器" LM8365 "双定时LED电子钟电路" MAX038 0.1Hz-20MHz单片函数发生器 MAX232 "5V电源多通道RS232驱动器/接收器" MC1403 "2.5V精密电压基准电路" MC1404 5.0v/6.25v/10v基准电压 MC1413/MC1416 "七路达林顿驱动器" MC145026/MC145027/MC145028 "编码器/译码器" MC145403-5/8 "RS232驱动器/接收器" MC145406 "RS232驱动器/接收器"

单片机读书笔记

单片机的分类 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。 众多的单片机可以从不同角度进行分类。 Ⅰ按生产厂家分 1.INTEL公司的单片机(MCS-48系列单片机:MCS-48单片机是美国INTEL公司于1976年推出,它是现代单片机的雏形,包含了数字处理的全部功能,外接一定的附加外围芯片即构成完整的微型计算机;MCS-51系列:MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品) 2.ATMEL公司的单片机(AT89系列单片机:AT89系列单片机是ATMEL 公司的8位Flash单片机系列。这个系列单片机的最大特点是在片内含有Flash存储器。因此,在应用中有着十分广泛的前途特别是在便携式、省电及特殊信息保存的仪器和系统中显得更为有用;A VR单片机:A VR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片

机。A VR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。) 3.Motorola公司的单片机(MC68300系列单片机:MC68300系列微控制器采用模块化设计,可以根据用户的要求,选择不同的模块,以适应不同的应用场合) 4. MicroChip单片机的单片机(PIC12CXXX系列单片机、PIC16CXXX系列单片机) 5.PHILIPS公司的单片机(通用型单片机:PHILIPS公司的P80C31基于80C51内核采用高密度CMOS技术设计制造,包含中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、3个16位定时/计数器和6个中断源,4层优先级中断嵌套结构,可用于多机通信的串行I/O口,I/O扩展或全双工UART,片内时钟振荡电路;Flash 单片机、低功耗OTP单片机) 6.TI公司的单片机(TI单片机MSP430:德州仪器(TI)超低功率16位RISC混合信号处理器的MSP430产品系列为电池供电测量应用提供了最终解决方案。德州仪器作为混合信号和数字技术的领导者,TI 创新生产的MSP430,使系统设计人员能够在保持独一无二的低功率的同时同步连接至模拟信号、传感器和数字组件。) 7.其他公司的单片机(美国SST公司的SST89系列、美国CYGNAL公司的C8051FXXX系列单片机、东芝TLCS-870系列单片机) Ⅱ按单片机数据总线的位数,可将单片机分为4位、8位、16位、32位

单片机常用芯片引脚图

单片机常用芯片引脚图 一、单片机类 1、MCS-51 芯片介绍:MCS-51系列单片机是美国Intel公司开发的8位单片机,又可以分为多个子系列。 MCS-51系列单片机共有40条引脚,包括32 条I/O接口引脚、4条控制引脚、2条电源引 脚、2条时钟引脚。 引脚说明: P0.0~P0.7:P0口8位口线,第一功能作为 通用I/O接口,第二功能作为存储器扩展时 的地址/数据复用口。 P1.0~P1.7:P1口8位口线,通用I/O接口 无第二功能。 P2.0~P2.7:P2口8位口线,第一功能作为 通用I/O接口,第二功能作为存储器扩展时 传送高8位地址。 P3.0~P3.7:P3口8位口线,第一功能作为 通用I/O接口,第二功能作为为单片机的控 制信号。 ALE/ PROG:地址锁存允许/编程脉冲输入信号线(输出信号) PSEN:片外程序存储器开发信号引脚(输出信号) EA/Vpp:片外程序存储器使用信号引脚/编程电源输入引脚 RST/VPD:复位/备用电源引脚 2、MCS-96 芯片介绍:MCS-96系列单片机是美国Intel公司继MCS-51系列单片机之后推出的16位单 片机系列。它含有比较丰富的软、硬件资源,适 用于要求较高的实时控制场合。它分为48引脚和 68引脚两种,以48引脚居多。 引脚说明: RXD/P2.1 TXD/P2.0:串行数据传出分发送和接受 引脚,同时也作为P2口的两条口线 HS1.0~HS1.3:高速输入器的输入端 HS0.0~HS0.5:高速输出器的输出端(有两个和 HS1共用) Vcc:主电源引脚(+5V) Vss:数字电路地引脚(0V) Vpd:内部RAM备用电源引脚(+5V)RST INT0/P3.2 INT1/P3.3 WR/P3.6 RD/P3.7 V SS

常见单片机芯片简介

3 常见单片机芯片简介 1) STC单片机技术。STC公司的单片机主要是基于8051内核,是新一代增强型单片机,指令代码完全兼容传统8051,速度快8~12倍,带ADC,4路PWM,双串口,有全球唯一ID号,加密性好,抗干扰强; 2)PIC单片机。它是MICROCHIP公司的产品,其突出的特点是体积小、功耗低、精简指令集、抗干扰性好、可靠性高、有较强的模拟接口、代码保密性好,大部分芯片有其兼容的FLASH程序存储器的芯片[2]。 3)EMC单片机。是台湾义隆公司的产品,有很大一部分与PIC 8位单片机兼容,且相兼容产品的资源相对比PIC的多,价格便宜,有很多系列可选,但抗干扰较差。 4)51单片机 (1)ATMEL单片机。ATMEl公司的8位单片机有AT89、AT90两个系列,AT89系列是8位Flash单片机,与8051系列单片机相兼容,静态时钟模式;AT90系列单片机是增强RISC结构、全静态工作方式、内载在线可编程Flash的单片机,也叫A VR单片机;(2)PHLIPIS 51PLC系列单片机。PHILIPS公司的单片机是基于80C51内核的单片机,嵌入了掉电检测、模拟以及片内RC振荡器等功能,这使51LPC在高集成度、低成本、低功耗的应用设计中可以满足多方面的性能要求;(3)TI公司单片机。德州仪器提供了TMS370和MSP430两大系列通用单片机.TMS370系列单片机是8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合;MSP430系列单片机是一种超低功耗、功能集成度较高的16位低功耗单片机,特别适用于要求功耗低的场合 5)HOLTEK单片机。台湾盛扬半导体的单片机,价格便宜,种类较多,但抗干扰较差,适用于消费类产品; 6)松翰单片机(SONIX)。SONIX是台湾松翰公司的单片机,大多为8位机,有一部分与PIC 8位单片机兼容,价格便宜,系统时钟分频可选项较多,有PMW ADC 内振内部杂讯滤波。缺点RAM空间过小,抗干扰较好; 4 八位单片机学习感想 通过对MCS-51、EMC系列、HT系列、PIC系列等八位单片机的学习与应用,对8位微处理器的特点有了较深的认识。

史上最通俗易懂的单片机自学有笔记1

单片机关键知识点一览: 系列一 1:单片机简叙 2:单片机引脚介绍 3:单片机存储器结构 4:第一个单片机小程序 5:单片机延时程序分析 6:单片机并行口结构 7:单片机的特殊功能寄存器 系列二 8:单片机寻址方式与指令系统 9:单片机数据传递类指令 10:单片机数据传送类指令 11:单片机算术运算指令 12:单片机逻辑运算类指令 13:单片机逻辑与或异或指令祥解 14:单片机条件转移指令 系列三 15:单片机位操作指令 16:单片机定时器与计数器 17:单片机定时器/计数器的方式

18:单片机的中断系统 19:单片机定时器、中断试验 20:单片机定时/计数器实验 21:单片机串行口介绍 系列四 22:单片机串行口通信程序设计 23:LED数码管静态显示接口与编 24:动态扫描显示接口电路及程序 25:单片机键盘接口程序设计 26:单片机矩阵式键盘接口技术及 27:关于单片机的一些基本概念 28:实际案例实践——单片机音乐程序设计 1:单片机简叙 什么是单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。 单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。 2:单片机引脚介绍

单片机常用英语词汇资料

单片机常用英语单词 中文名称; 英文名称; ;简记术语 单片机; Single Chip Micocomputer or MicoControler Unit ; SCM or MCU 在线烧录(往芯片写入程序);In System Programming ; ISP 在线仿真;In Circuit Enulator ;ICE 复位;reset ;RST 编程选通使能端;Program Strobe Enable ; PSEN 看门狗;WatchDog 数据指针寄存器;Data Pointer Register; DP 特殊用途寄存器;Special Purpose Register; SPR PSW寄存器; PassWord Register; PSW 奇偶校检位P位; ParityBit 溢出位OV位; Overflow 寄存器组选择位; Register Select; RS(0/1) 进位校检位; 堆栈指针; StackPointer; SP 堆栈;stanck 推入;push 弹出;pop IE中断寄存器;Interrupt Register ; IE 溢出中断;Overflow Interrupt

计(时)数器;Timer 计数器高位;TimerHigh Bit ;TH 计数器低位; TimerLow Bit ;TL 计数器模式控制寄存器; Timer Model Control Register; TMOD 计数器控制寄存器; Timer Model Control Register; TCON 串行端口控制寄存器; Serial Control Regiter ; SCON 串行模式控制寄存器; Serial Model Control Register; SMOD 开始位;Start Bit 结束位;Stop Bit 字节数据高位;MSB 字节数据低位; LSB 传输控制寄存器; Pass Control Register; PCON 停止运行设置位; Power Down Bit; PD位 闲置模式设置位; Idel Model Set Bit; IDL位 辅助寄存器; AUXR 闲置模式下看门狗控制位; Watchdog idle model control bit; WDIDLE 看门狗复位; Watchdog reset 中断服务程序; Interruput Service Routine 宏; macro 寄存器组; Register Bank 中断优先级寄存器; Interrupt Register 波特率; Baud Rate 中断向量; interrupt vector

单片机学习笔记

MC51单片机学习笔记 一准备知识: 1.内部结构:4K Rom 程序存储器(硬件)128节Ram随机存储器(软件) 8位cpu,4个8位并口,1个全双串行口,2个16位定时器/计数器; 寻址范围64k 布尔处理器 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器; RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据; ROM:用以存放程序、一些原始数据和表格; I/O口:四个8位并行I/O口,既可用作输入,也可用作输出; T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式 五个中断源的中断控制系统; 一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信; 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。 2.分类:arm(快)凌阳(处理声音较好) 3.型号说明:STC (公司名) 89(系列)C(CMOS;CAD:自带

AD转换;S:串行下载无需专门的编程器;lv:工作电压为3v)51(1*4=4K) RC 40(晶振最高频率) C(商业级:温度0--85,I工业级温度-40--125)----PDIP (双列直插式)0721(07年第21周)......... 4.电平:TTL:高:+5v--低0v; RS232:计算机串口:+12v--低-12v,故计算机和单片机通信需要电平转换芯片 5.二进制与十六进制之间的转换:每4位转变一次 6.二进制转换逻辑符号:&与,//或,---非,异或 7. P3第二功能各引脚功能定义: P3.0:RXD串行口输入 P3.1:TXD串行口输出 P3.2:INT0外部中断0输入 P3.3:INT1外部中断1输入 P3.4:T0定时器0外部输入 P3.5:T1定时器1外部输入 P3.6:WR外部写控制(计数) P3.7:RD外部读控制 RST :复位管脚,高电平有效,时间大于两个机器周期 VPD:备用电源 注:机器周期和指令周期 (1)振荡周期: 也称时钟周期, 是指为单片机提供时钟脉

51单片机常用芯片引脚图

常用芯片引脚图 一、 单片机类 1、MCS-51 芯片介绍:MCS-51系列单片机是美国Intel 公司开发的8位单片机,又可以分为多个子系列。 MCS-51系列单片机共有40条引脚,包括32 条I/O 接口引脚、4条控制引脚、2条电源引 脚、2条时钟引脚。 引脚说明: P0.0~P0.7:P0口8位口线,第一功能作为通用I/O 接口,第二功能作为存储器扩展时 的地址/数据复用口。 P1.0~P1.7:P1口8位口线,通用I/O 接口无第二功能。 P2.0~P2.7:P2口8位口线,第一功能作为通用I/O 接口,第二功能作为存储器扩展时传送高8位地址。 P3.0~P3.7:P3口8位口线,第一功能作为 通用I/O 接口,第二功能作为为单片机的控 制信号。 ALE/ PROG :地址锁存允许/编程脉冲输入信号线(输出信号) PSEN :片外程序存储器开发信号引脚(输出信号) EA/Vpp :片外程序存储器使用信号引脚/编程电源输入引脚 RST/VPD :复位/备用电源引脚 2、MCS-96 芯片介绍:MCS-96系列单片机是美国Intel 公司继MCS-51系列单片机之后推出的16位单 片机系列。它含有比较丰富的软、硬件 资源,适用于要求较高的实时控制场合。 它分为48引脚和68引脚两种,以48引 脚居多。 引脚说明: RXD/P2.1 TXD/P2.0:串行数据传出分发 送和接受引脚,同时也作为P2口的两条 口线 HS1.0~HS1.3:高速输入器的输入端 HS0.0~HS0.5:高速输出器的输出端(有 两个和HS1共用) Vcc :主电源引脚(+5V ) Vss :数字电路地引脚(0V ) Vpd :部RAM 备用电源引脚(+5V ) V REF :A/D 转换器基准电源引脚(+5V ) AGND :A/D 转换器参考地引脚 12345678910111213141516171819204039383736353433323130292827262524232221P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST RXD/P3.0TXD/P3.1INT0/P3.2INT1/P3.3T0/P3.4T1/P3.5WR/P3.6RD/P3.7XTAL2XTAL1V SS V CC P0.0/AD 0P0.1/AD 1 P0.2/AD 2P0.3/AD 3P0.4/AD 4P0.5/AD 5P0.6/AD 6P0.7/AD 7 EA/V PP ALE/PROG PSEN P2.7/A 15P2.6/A 14P2.5/A 13 P2.4/A 12P2.3/A 11P2.2/A 10P2.1/A 9P2.0/A 8803180518751

MSP430时钟配置及ad模块等学习笔记

MSP430收集资料笔记 问: 个刚从51转到msp430这块的学生,我想知道,分频其实到底可以干什么,具体什么时候才会需要我们去分频? 能举些详细的例子告诉我分频什么时候改用,什么时候不该用吗?不需要代码,例子就好 答: 51也要分频啊,一个系统CPU(中央处理单元)的频率最高的,其他的外设都是低速的,都要通过主时钟分频产生低速的时钟来工作;比如8Mhz的单片机是说CPU的时钟是工作在8mhz,但gpio、串口,定时器等它们的工作频率很低的,这个时钟就需要分频来产生;当你想要改变一个外设的工作频率时就需要重新设置分频系数,比如串口波特率,定时时间,IIC时钟,spi时钟等等; 问: MSP430单片机的定时器,看门狗等东西的时钟来源于于各个时钟 (SMCLK,ACLK,MCLK,DCO等)有什么区别呢?还有这些问什么要分频呢,不分频好像程序也可以写啊! 有这三种时钟我也知道,我只是想知道。我是想知道这些时钟给外设使用的时候到底到底选择哪个,为什么要选择这个? 答: 不知道楼主用的是那个型号!我用的149,就用这个给你说吧!msp430F149 不分频具体的根据系统需要决定,楼主应该是初学吧!有些问题你不必深究,慢慢的在学习和使用中你就明白了,刚开始你知道怎么用就可以了! CTRL_C+CTRL_V,就算是抄别人的,也自己敲一遍,加深理解,加深印象!

话有说回来,学编程本来就是这么个过程,一看二抄三写四调试!我就是这么过来的,网上资源很多,多看看别人是怎么学的,怎么做的! || || 信号源---分频输出---------》时钟----------------》输出信号源----------外围模块|| (DCO)//************不设置即被MCLK默认***********************// || (LFXTI)→MCLK==→信号源分频输出=→信号源供给外围模块,CPU || (LFXT2) 1)MCLK系统主时钟。除了CPU运算使用此时钟以外,外围模块也可以使用。MCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 (2)SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 ||(DCO)//************不设置即被MCLK默认***********************// ||(LFXTI)→信号源分频输出=→SMCLK==→信号源供给外围模块 ||(LFXT2) (3)ACLK辅助时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。但ACLK只能由LFXT1进行1、2、4、8分频作为信号源。 PUC复位后,MCLK和SMCLK的信号源为DCO,DCO的振荡频率默认为800KHZ。ACLK的信号源为LFXT1。 || ||LFXI1=→信号源分频====》ACLK========→外围模块 MCLK,SMCLK ||PUC复位===|=======》 DCO=800KHZ |ACLK | |LFXTI

相关文档
最新文档