单片机

基于单片机的GPS开发 (two) UART程序详解

青春壹個敷衍的年華 提交于 2020-01-22 08:36:47
void Uart_Init() { SCON = 0X50; REN = 1; PCON = 0x00; TMOD = 0x20; TH1 = 0xFD; TL1 = 0xFD; TR1 = 1; EA = 1; ES = 1; } 详解SCON = 0X50 : SCON是串行口寄存器,0X50就是 0101 0000,SCON=0X50实际上就是 SM1=1; SM0=0; 这两条语句的集合,也就是说允许接受串行口中断方式1 (即8位异步通讯)。 详解REN = 1: REN是允许接收控制位,由软件置1或清0。REN = 1时,设置为允许接收,相当于串行接收的开关。 详解PCON = 0x00 : PCON是电源控制寄存器,不可位寻址。0x00=0000 0000,设置波特率不加倍。 详解TMOD = 0x20 : 0X20就是 0010 0000,选择的是定时器0,工作方式选择方式2:自动重载8位定时器/计数器。 详解TH1 = 0xFD,TL1 = 0xFD : TH 和TL 是定时器的高位和低位, 即设置9600的波特率。 详解TR1 = 1 , EA = 1 , ES = 1 : 启动定时器1,打开全局中断控制,打开串行口中断。 **********************************************************************

新概念51单片机c语言教程矩阵键盘检测例4.2.1

◇◆丶佛笑我妖孽 提交于 2020-01-20 13:08:54
#include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[]={}; sbit dula=P2^6; sbit wela=P2^7; void delayms(uint xms){ uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void display(uchar num){ dula=1; P0=table[num]; dula=0; } void matrixkeyscan(){ uchar temp,key; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0){ delayms(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0){ temp=P3; switch(temp){ case 0xee: key=0; break; case 0xde: key=1; break; case 0xbe: key=2; break; case 0x7e: key=3; break; } while(temp!=0xf0){ temp=P3; temp=temp&0xf0; } display(key); } } P3=0xfd;

STC89C52单片机实验 DAY1

坚强是说给别人听的谎言 提交于 2020-01-19 16:39:39
点亮第一个LED # include "reg52.h" sbit led = P2 ^ 0 ; void main ( ) { while ( 1 ) { led = 0 ; } } LED闪烁 # include <reg52.h> sbit LED = P2 ^ 0 ; void delay ( int i ) { while ( i -- ) ; } void main ( ) { while ( 1 ) { LED = 0 ; delay ( 5000 ) ; LED = 1 ; delay ( 5000 ) ; } } 流水灯 # include <reg52.h> # include <intrins.h> # define led P2 void delay ( int i ) { while ( i -- ) ; } void main ( ) { int i ; led = 0xfe ; //1111 1110 while ( 1 ) { for ( i = 0 ; i < 7 ; i ++ ) { led = _crol_ ( led , 1 ) ; delay ( 5000 ) ; } for ( i = 0 ; i < 7 ; i ++ ) { led = _cror_ ( led , 1 ) ; delay ( 5000 ) ; } } }

基于单片机的GPS开发 (one) UART串口精讲

删除回忆录丶 提交于 2020-01-19 11:56:49
1、89C51串行口特点 UART是单片机中的串行异步通信接口,全双工串口,能同时发送和接收数据 可编程:其帧格式可以是8位,10位,11位,并能设置各种波特率 2、控制寄存器 对 89C51串行口初始化编程只用两个控制字分别写入特殊功能寄存器SCON和电源控制寄存器PCON中即可。 (1)SCON控制寄存器 SM0、SM1:工作方式控制位 SM2:多机通信控制位,1-允许、0-不允许 REN:串行接收允许位。1-允许、0-不允许 TB8:发送数据第九位 RB8:接收数据第九位 TI:发送中断标志位 RI:接收中断标志位 SM0和SM1 : 串行口工作方式选择位 ,两个选择位对应四种通信方式,如下图所示,其中fosc是振荡频率 SM2: 多机通信控制位,主要用于方式2和方式3。 *若SM2 = 1;则允许多机通信。多机通信协议规定,第9位数据(D8)为1,说明本帧数据为地址帧;若第9位数据为0,则本帧数据为数据帧。当一个89c51(主机)与多个89c51(从机)通信时,所有从机的SM2位都置1,主机首先发送的一帧数据为地址,即某从机号,其中第9位为1,所有的从机接收数据后,将其中第9位数据装入RB8中。各个从机根据接收到的第9位数据(RB8中)的值来决定从机是否再接收主机的信息、若(RB8)= 0,说明是数据帧,则使接收中断标志位RI = 0,信息丢失,若RB8 = 1

AVR单片机SD24XX读写演示程序

℡╲_俬逩灬. 提交于 2020-01-19 05:16:32
//------------------------------------------------------------------------- // SD24XX读写演示程序,此程序仅供参考 // e-mail: FAE@whwave.com.cn // TEL:0755-83114387 // 2014/07/01 //------------------------------------------------------------------------- #include <iom64v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //数据sda的位设置 #define sda_in DDRC &= ~(1 << PC1) //数据设置输入 #define sda_out DDRC |= (1 << PC1) //数据设置输出 #define sda_setb PORTC |= (1 << PC1) //数据拉高 #define sda_clr PORTC &= ~(1 << PC1) //数据拉低 #define sda_r PINC & (1 << PC1) //数据读取 //时钟scl的位设置

单片机欠压保护、欠压复位的用法及作用

烈酒焚心 提交于 2020-01-18 09:57:41
一. 前言 使用编程环境 :KEIL mdk4 单片机 : NRF24LE1 二. 分析 查询各开发芯片的数据手册,一般在电源管理或者复位设置章节中。以下NRF24LE1为例: Power supply supervisor(电源监控): 电源主管在开机时对系统进行初始化,对即将发生的情况提供预警当电源电压过低而不能安全运行时,系统处于复位状态。 电源管理框图如下: Power-on reset(上电复位): 开机复位(POR)发生器在开机时初始化系统。它基于RC网络和比较器,如图所示。为了正常工作,电源电压应按规格,随着上升时间的增加而增加。当电源达到1.9V的最小工作电压后,系统保持重置状态至少1ms。 Brown-out reset(欠压复位): 当电源电压降至BOR阈值以下时,熄灭复位(BOR)发生器使系统处于复位状态。它由一个在系统处于有源和备用模式时启用的高精度比较器和一个在所有其他模式下均可运行的精度较低的低功耗比较器组成。for- mer的阈值电压约为1.7V。迟滞约为70mV (V HYST)。这意味着,如果在电源电压降至1.7V以下时触发复位,那么在nRF24LE1开始工作之前,电源必须再次升至1.77V以上。当VDD接近阈值时,迟滞阻止比较器输出振荡。低功耗比较器的典型阈值电压为1.5V。 Power-fail comparator(掉电比较器): 电源故障

嵌入式到底该怎么学

孤街醉人 提交于 2020-01-18 00:27:43
前言  其实一直有人问我嵌入式怎么学,今天跟大家讲讲我的理解。因为嵌入式是一个泛的概念,可能很多人认为嵌入式就是嵌入式Linux。但是其实并不仅仅只有Linux, 像STM32,51单片机也属于这个范畴之内的,它们有的也可以跑协议栈,跑ucos等系统。所以其实嵌入式是有很多方向的,选择一个方向,做好,做精,都是有前途的。接下来,跟大家探讨一下嵌入式的一些方向,和如何去学习。我以前也是摸索着过来的,没人告诉我如何学习,也没有学习线路,所以走了很多弯路。所以希望这篇文章可以帮助到一些正在学习的人,当然这些内容可能有主观的东西,欢迎大家一起探讨吧。如下仅讨论软件方面 _ 。 以下内容对牛人不适用。 嵌入式方向 - 单片机开发  单片机开发在这个市场上的需求还是很大,因为制造业公司还是很多,单片机更多用在工业控制,机械控制等上面,当然也会涉及物联网。单片机有8位,16位,32位的,一般8位用得比较多的就是51单片机和STM8,32位用得比较多的就是STM32,还有NXP的芯片,比如K60,K22等。一般学完51和STM32之后,找个单片机的工作应该是没什么问题了。单片机的门槛其实并不高,但是做好也不容易就是了,可能因为门槛问题,导致薪资上面并不会特别高(能力牛逼者例外)。 - Linux应用开发  以前很多人问我“ Linux应用到底在做什么? ”。其实应用就是在做功能,在操作系统中

嵌入式系统自动寻迹小车报告

不想你离开。 提交于 2020-01-17 13:10:09
《嵌入式系统实践》报告 项目名称:自动循迹小车 专 业:自动化 班 级:183班 学 号:2420182344 姓 名:朱明 电气工程与自动化学院 - 《嵌入式系统实践(2)》考查题目 类 别:专业任选 学 分:2 适用专业:自动化专业 一、考查方式 1.分组设计制作基于嵌入式系统的智能循迹小车。 二、考查的目的和要求 通过嵌入式系统实践,能更好地理解所学的理论知识,培养学生综合运用所学的基础与专业知识和技能去分析、解决工程实际问题;培养学生掌握嵌入式系统设计的一般规律和方法;培养学生掌握模拟电子电路、数字电子电路和嵌入式系统设计方法,培养学生掌握软件设计与开发的能力。通过该系统设计,使学生熟悉系统设计流程,提高学生的实际设计能力。 三、设计内容 主要内容与要求包括以下部分: ⑴.能够按划定的黑线进行自动行驶。 ⑵. 能够显示行驶速度、时间、距障碍物距离等信息。(选作) ⑶.能够自动进行避障行驶。(选作) 四、设计步骤与方法 ⑴.搭建循迹小车硬件电路。 ⑵. 编写循迹小车的驱动程序。 ⑶.软硬件综合测试。 ⑷. 撰写设计报告。 五、设计说明书与图纸 系统由硬件电路和软件程序两部分组成。硬件电路包括:MCU、时钟电路、复位电路、电源电路、电机驱动电路、红外检测电路、超声波收发电路(选作)、显示电路(选作)。软件程序包括:主程序、路径检测程序、电机驱动程序、中断服务子程序、计算距离程序

51单片机蓝桥杯学习记录1

旧街凉风 提交于 2020-01-16 10:03:04
51单片机蓝桥杯学习记录 学院通知让参加蓝桥杯,可能我们参加的好的话学弟们说不定也有机会参加以后的蓝桥杯了,还是代码备份,就当做以后给学弟们上课的课件了^^ 蓝桥杯单片机有stm32f103的,还有51的,还是选择51吧,103的话不知道给不给库 首先 蓝桥杯的51用的是stc15f2k61s2, 用keil5的话stc的包是一个问题,解决方法如下: 点这里的 添加型号和头文件到keil中 ,找到keil的安装目录就行 其他的就按步骤来吧 由于我买的是二手的板子,没有资料得自己摸着过河,看了眼B站上发的视频打算先写个流水灯的再说 玩儿着才发现蓝桥杯板子P0的最高位接的灯的最后一盏 第一讲先不用定时器直接来个延时 代码如下: /***************************** author: 风行天 time:2020.01.15 *****************************/ #include < stc15f2k60s2 . h > #define uint unsigned int void delay_ms ( uint sec ) //定时sec ms 调试算出来的 { uint a , b ; for ( ; sec > 0 ; sec -- ) { for ( a = 0 ; a < 5 ; a ++ ) { for ( b = 0 ; b <