单片机
AngleaQQ
这个作者很懒,什么都没留下…
展开
-
STM32 启动文件
先来看看启动代码中的伪操作和伪指令EQU 用于定义常量,相当于C中的宏定义 如Stack_Size EQU 0x00000400 ——— #define Stack_Size 0x00000400 ALIGN 字节对齐方式 ALIGN = 3 EXPORT 相当于声明了一个全局变量 EXPORT __Vectors原创 2015-06-17 23:35:28 · 405 阅读 · 0 评论 -
STM32中的(bit-band)
今天再看STM32的位带操作,觉得还是有点意思的 STM32是32位的CPU所以操作都是直接操作32位数的如果想要操作bit级别的就需要映射,其实还是通过操作32位的别名区来进行位操作。这样呢, 1MB SRAM 就可以 32M 个对应别名区空间,就是 1 位膨胀到 32 位( 1bit 变为 1 个字);我们对这个别名区空间开始的某一字操作,置 0 或置 1,就等于它映射的 SRAM 或 I/O原创 2015-07-18 01:19:16 · 748 阅读 · 0 评论 -
volatile
今天再看volatile关键字,得到的一些看法 先来看一个有趣的例子 发薪资时,会计每次都把员工叫来登记他们的银行卡号;一次会计为了省事,没有即时登记,用了以前登记的银行卡号;刚好一个员工的银行卡丢了,已挂失该银行卡号;从而造成该员工领不到工资 员工 -- 原始变量地址 银行卡号 -- 原始变量在寄存器的备份首先volatile的意思为“直接存取原始内存地址,比如,volatile int原创 2015-07-14 23:14:36 · 351 阅读 · 0 评论 -
LCD显示
今天在写LCD的显示,用的是51单片机和Proteus仿真,但是Proteus中没有以前写的LCD5110所以只能用库中的HDG12864F-1,后来才发现这个好像是写LCM的,搞了一晚上总算是弄出来了一下贴出代码每一个LCD驱动都要有命令和数据的写入首先是这两个代码//CE 片选信号//LCD_CE_OL 置低,表示选中芯片 //LCD_CE_OH 置高,表示未选中芯片/原创 2015-05-26 01:01:04 · 1174 阅读 · 0 评论 -
LCD5110
#ifndef _LCD_H#define _LCD_H#include <reg51.h>typedef unsigned char uint8_t;typedef unsigned short uint16_t;#define WIDTH 84#define HEIGHT 48sbit LCD_RST = P1^0; //RSTsbit LCD_CE = P1^1;原创 2015-07-08 22:44:49 · 832 阅读 · 0 评论 -
单片机printf函数重定向
#include <reg51.h>#include <stdio.h>typedef char * va_list;//51单片机定义为char,如果是32位单片机就定义为int类型#define _INTSIZEOF(x) ((sizeof(x) + sizeof(char) - 1) & ~(sizeof(char) - 1) )#define va_start(ap,v) (ap =原创 2015-05-23 23:42:00 · 2136 阅读 · 0 评论 -
按键扫描
最近在做按键扫描,一直连按,最后发现是按键扫描程序有问题,做了一下修改并加上了注释uint8_t Key_Scan(uint8_t mode){ static uint8_t key_up = 1; //按键是否松开标志,为0按键按下,为1按键松开 if(mode) key_up = 1; //如果模式1,那么支持连按 if(key_up &&原创 2015-05-24 22:58:35 · 579 阅读 · 0 评论 -
STC不断电下载
STC每次烧录都要重新断开电源再次打开,十分麻烦,于是想要实现不断电下载。我们知道,STC单片机中有两个数据存储区,一个是固化好的ISP程序数据区,另一块是用户数据区。STC是通过ISP来下载。ISP的作用就是将上位机发送来的数据写到用户区,即将上位机发来的程序写到ROM中。stc启动分为两种一种是冷启动就是从断电在上电,另一种就是普通的复位启动。第一种启动是从单片机出场就固化好的ISP启动区来启动原创 2015-06-28 23:43:43 · 1212 阅读 · 1 评论 -
STC DATAFLASH 模拟EEPROM
今天在写STC的EEPROM,一直调不出来结果,但是还是很有收获的,放上代码,慰劳自己一天的努力,主要还是参考STC的开发手册#include <reg51.h>#include<intrins.h>//定义EEPROM的命令#define CMD_READ 0x01 #define CMD_WRITE 0x02#define CMD_ERASE 0x03//定原创 2015-06-27 04:17:35 · 1027 阅读 · 0 评论 -
Keil C51中的启动程序startup.a51最新中文说明!
由于CPU和程序启动代码文件STARTUP.a51的重要性,一些8051派生的CPU产品要求初始化CPU来满足设计中的相应的硬件,因此,有时候用户需要对STARTUP.a51进行修改,所以进行注释一下: ;————————————————— ;startup.A51: 用户上电初始化程序 ;—————————————————- ; ;使用以下EQU命令可定义在CPU复位时需要用0进行初始化转载 2015-06-26 13:13:15 · 3143 阅读 · 0 评论 -
CRC16计算
两个设备传输数据的时候需要校验数据是否准确,此时就需要校验码,校验通常有奇偶校验,和校验和CRC校验,这三种校验用的比较多,但是CRC校验是其中最准确的,因此我看了一下CRC校验的算法,下面是一些整理。首先说一下CRC校验的工作原理循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最原创 2015-06-25 19:59:34 · 783 阅读 · 0 评论 -
STM32 IAP
最近一直在看IAP的东西,总结了一写东西,但是具体的东西还没有尝试。先来说具体的问题 我想要的是可以通过无线来下载程序。思想是,首先在单片机中烧入一段程序,称之为bootloader,这段程序的目的是接收串口数据并且将数据写到flash指定的位置。但是现在我碰到了一些问题,首先是flash,不知道该如何操作,其次是如何从bootloader跳到APP。首先来说一下如何操作内部flashflash只原创 2015-06-17 20:18:22 · 610 阅读 · 0 评论 -
DMA介绍和几个问题
我学习DMA碰到的几个问题不了解什么是DMA 不知道DMA有什么优点 不知道什么时候使用DMA问题一 DMA简单的说就是数据的搬运工,将数据从外设搬到内存,或者将内存的一个位置搬运到另一个位置。只要开启了使能就开始搬运。问题二 既然DMA是数据的搬运工,那么CPU就可以不用管数据的搬运了,只要DMA一个信号说我搬完了,CPU进行数据处理就可以了。这样在数据搬运期间,CPU就可原创 2015-06-17 08:52:15 · 2624 阅读 · 0 评论