51单片机进阶
来源:互联网 发布:系统及数据备份 编辑:程序博客网 时间:2024/06/05 15:26
转载请注明出处 谢谢!http://blog.csdn.net/metalseed/article/details/8533122
上一篇导论中
讲解了单片机最小系统及keil的使用,有了这些基础知识之后,便可进一步学习。
附上导论:http://blog.csdn.net/metalseed/article/details/8195157
更新内容 : 定时器控制超声波测速 + 串口发送距离 13.04.06
进阶学习计划:
一:最小系统能够运行起来的必要条件。
1.电源 2.晶振3.复位电路
1.输出控制电平高低2.输出检测电平高低。
(在此不详细介绍单片机C语言)
一:最小系统运行条件
1.电源 2.晶振3.复位电路 详细资料参见导论中的最小系统电路图http://blog.csdn.net/metalseed/article/details/8195157
二:普通I/O口的操作
1:输出高低电平 output
操作:用程序给输出寄存器P0/P1/P2/P3赋值,1/0实现高低电平的控制
应用:这种高低可实现一些对外部设备的控制,比如led,lcd····,也可加上电流驱动或继电器或可控硅等器件实现对大型用电器的控制
实例:I/O操作最简单的实例就是流水灯,流水灯程序参见:http://blog.csdn.net/metalseed/article/details/8196727
2:检测电平高低 input
操作:先给寄存器P1/P2/P3赋值0xff,然后用 if 语句来进行判断
应用:可用来读取外部外部信息实现模拟通信,获得传感器数据,按键采集等
实例:矩阵键盘的扫描代码:http://blog.csdn.net/metalseed/article/details/8296590
数码管显示:http://blog.csdn.net/metalseed/article/details/8537554
PS: P0为三态(高电平,低电平,高阻态) P1,P2,P3为准双向IO口(内部有上拉电阻,做输入用时,先写1)
三:单片机特殊功能应用
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外部读控制
1: 中断
中断其实很容易理解,这样来说吧,比如说你在做A事,但是突然间来了你想起来了更重要的B事,所以你马上去做B事了,做完之后再回来继续做A事,这个就是中断!在程序里面也是一样的!中断系统里面有五个中断,外部中断0和1,定时器/计数器中断0/1,串行口中断!举个例子你可能会容易懂点,定时中断:比如你定时1ms,主程序在运行,每当1ms时间到后,就跑到定时中断子程序 里面执行,执行完后再回到主程序。。。中断程序是1ms进去一次
2: 定时器
定时器简介
操作方法:
寄存器说明及定时器工作方式:
代码示例:
#include<reg52.h>void main(){EA = ET0 = 1;/*step 1 : 中断允许*/TMOD = 0x01;/*step 2 : 模式配置*/ TH0 = (65536 - 50000) / 256;/*装初值*/TL0 = (65536 - 50000) % 256;/*装初值*/TR0 = 1;/*step 3 : 启动*/while(1){/*Hello World*/}}/*timer0为函数名,随意写,后面的interrupt X,X是相应中断的编号,5个中断源各有固定编号*//*using x 表示占用ram中的X寄存器(0-3),C语言中IDE自动分配不用写 */void timer0() interrupt 1 using 1{/*重装初值*/TH0=(65536-50000)/256;TL0=(65536-50000)%256;/*operation*/P0 = ~P0;}
2:高级模板
待补~
3: 串口通信
需配置的寄存器 : SCON PCON IE
SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。
在方式0时,SM2必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。
REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。
在方式0和方式1中,该位未用。
RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。
RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。
PCON中只有一位SMOD与串行口工作有关:
SMOD(PCON.7) 波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。波特率的计算
方式0的波特率= fosc/12
方式2的波特率=(2SMOD/64)·fosc
方式1的波特率=(2SMOD/32)·(T1溢出率)
方式3的波特率=(2SMOD/32)·(T1溢出率)
当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR1=1,以启动定时器)。这时溢出率取决于TH1中的计数值。
T1溢出率=fosc /{12×[256-(TH1)]}
操作步骤:
1:确定串口工作方式 (配置SCON 可位寻址)
2:根据1确定的方式,看是否需要手动设置波特率 (TMODE,TH TL)
3:设置波特率后启动(REN, TR)
4:如果使用中断,开中断并写函数(EA = ES = 1, void ser() interrupt 4 )
串口通信模板:
http://blog.csdn.net/metalseed/article/details/8579997
点对点通信:
多机通信:
1、硬件连接
单片机构成的多机系统常采用总线型主从式结构。所谓主从式,即在数个单片机中,有一个是主机,其余的是从机,从机要服从主机的调度、支配。80C51单片机的串行口方式2和方式3适于这种主从式的通信结构。当然采用不同的通信标准时,还需进行相应的电平转换,有时还要对信号进行光电隔离。在实际的多机应用系统中,常采用RS-485串行标准总线进行数据传输。
2、通信协议
3、应用程序
RRDY=1:表示从机准备好接收。
TRDY=1:表示从机准备好发送。
ERR=1: 表示从机接收的命令是非法的。
程序分为主机程序和从机程序。约定一次传递数据为16个字节,以01H地址的从机为例。
寄存器数据手册:
单片机细节:
定义的变量存储在RAM中,对寄存器赋值时,单片机内部通过数据交换实现。
复位时 P0,P1,P2,P3寄存器全为0xff,其他各位0x00;
- 51单片机进阶
- protel99se进阶视频教程(手把手教你画51单片机开发板)
- 51单片机
- 51单片机
- 51单片机
- 51单片机
- 51单片机
- 51单片机
- 51单片机
- 单片机学习笔记--51单片机
- 【单片机】51单片机最小系统
- 51单片机与AVR单片机区别
- 什么是单片机?51单片机学前预备知识
- 单片机学习笔记--51单片机基础
- PIC单片机与51单片机的区别
- STM32单片机和51单片机区别
- 51单片机精彩教程
- 51单片机入门篇
- 网络七层协议
- App.config提示错误“配置系统未能初始化”
- 宏定义
- bug-->oops-->pannic
- android 47个常用代码片段
- 51单片机进阶
- 企业是否真的需要一个视频会议系统
- ORA-00257 archiver error. 错误的处理方法
- ORACLE之 DB Link
- 一步一步学android OpenGL ES2.0编程(1)
- 教你把UIView切成任意形状
- oracle trunc (date,dd )函数
- 结构体内存分配解析
- 随机文章