单片机知识阶段性总结

有code程序存储器、数据存储器128字节,xdata外部数据存储器。

问题:1Delay(1)消隐是什么原理?减少段选的余晖,但先位选再段选中间不需要P0=0x00;只在末尾Delay即可消隐;段选之后必消隐,先再子函数开头开端选锁存器,P0=0x00,子函数末尾Delay(2)为最佳消隐方式。
    2为什么按键按下数码管不能保持原状态。答:用好定时器扫描按键和数码管。
    例如:如果main函数里的while里if条件不满足(空),则会卡在while循环外的最后一条语句一直执行。
        如果main函数里的while里if条件的其中一个满足一次,其他条件不满足,则会卡在满足一次的if语句里一直执行。
    3共用P0的模块怎么互不干扰?设置一个变量来记录状态。
    例:数码管+蜂鸣器,第一个模块用完P0后记得清0(0x00)或清1(0xff)消隐原理 或给P0中的某一位定义一个数组
    4DS18B20实验中,用Timer0为什么数据会乱?时序被破坏。
    5定时器扫描按键数码管有时会扫描不到。已解决。
    6第九届蓝桥杯AT24C02中4设置好后会读不出来4????读的一直是0??(可能是芯片连续写四次速度太快导致存储数据错误,已解决(用for循环))
    7如何防止P0口读的太快而导致其他用P0口的设备出错??
写程序时的错误:1define 名称 数值后不加分号。
               2数组太大就在名称前加code 例:(code放在这里也可以)unsigned char code Music[]={};code:code是keil C51里面的关键字,一般用于定义常量数组,意思是告诉编译说把这个数组放在ROM存储。
               3数组存在ROM中也有大小,如果超出大小,歌曲将不能停止,从头开始无限循环
               4unsigned char OneWire_ReceiveBit(void)//5+7+52不行,好像跳过了读取环节,记得上下拉也需要时间//5+5+55可以
               5注意对10000怎么取每一位的操作。
               6注意有符号整型转换浮点数,以及浮点数转化无符号整数类型,unsigned int(16位),无符号长整数类型(32位).
               7定时器扫描按键记得static
               8我所写的定时器扫描按键都是一瞬间键数丢失,在主函数记得if判断
               9要判断两个变量是否相等,不如用>=或<=来判断
               10unsigned char 溢出的话,对这个数%256
               11如果数组中的数据不需要更改,可以在最前面加code 放在程序存储器里面 节省数据存储器的空间
               12  I2C通信只是一个大体模板,要根据不同的从机(手册)来调节,以保证从机读到主机发送的数据
               13 暂定pwm调速不需要再初始化Count,10ms速度太快,暂定忽略误差
               14在字符串中'\0'用作字符串的结束标志。比如说,把一个字符串赋值给数组:u8 str1[]={"cxjr.21ic.org"};实际上数组str1在内存中的实际存放情况为:
             c x j r . 2 1 i c . o r g '\0' 这后面的'\0'是由C编译系统自动加上的。
               15 如果不是printf()函数,一般是\r\n一起放在后面。
               16指针变量不能单独++;例:*str++;
               17如果用到DS18B20程序,就要尽可能减少进入定时器的频率和处理的工作(按键检测放在while中扫描),如果需要避免P0口共用,把P0口有关设备放在定时器中,增大该段程序与温度读取冲突的概率(增大进入该段的时间)。
这个开发板扫描太快,一个空函数是0.7us,一个nop为0.1us

P2&=0x1f;
P2|=0x80;
P0=0xfe;  
P2&=0x1f;//这个写法是为了保证串口通信正常

当串口中断与定时器中断一起用时,记得串口中断中不要写太多语句,防止数码管瞬闪,串口中断优先级高。

用串口发送电压,温度数据时,电压检测和温度检测一定在while循环中检测,在中断中检测有时发送数据会出错!!!!!原因:UART与DS18B20一样,中断中不能放过多语句,不然会扰乱时序,快进快出!!!!!

频率计数器和超声波的定时器0/定时器1都用12T模式,TH0=0x00;TL0=0x00;s

float类型强制转换int类型放弃小数点之后的数,但printf会四舍五入,小心差别

PCF8591受按键检测的影响,加上矩阵键盘检测,频率会急速下降,并且矩阵键盘两个按键失灵,一个项目是频率加独立按键可以正常使用

void UART_String(char *str)
{
    while(*str!='\0')//注意\0,*str!='\0'与*str等价,因为'\0'等于0
    {
        UART_SendByte(*str++);
    }
}

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF,0xff(0,1,2,3,4,5,6,7,8,9,-,灭)
需要加上小数点,就在高四位-8即可;

AT24C02 0xA0 (写入Delay5ms) PCF8591 0x90 光敏(0x01) 电位器(0x03) 0x40 DAC 0xcc 0x44 0xcc 0xBE 定时器工作模式为1T
#include "intrins.h"

void Delay_OneWire(unsigned int t)  //STC12C5260S2
{
    unsigned char i;
    while(t--)
    {
        for(i=0;i<12;i++);
    }
}

void IIC_Delay(unsigned char i)
{
    do
    {
        _nop_();
    } while(i--);        
}

dspbuf[i]=rxbuf[i]-0x30;//'12',rxbuf[0]=0x31,rxbuf[1]=0x32;16进制,0为0x30,1为0x31;

将5>>'5'将原unsigned char变量值加上0x30即0011xxxx

通信协议:串行口通信协议,DS1302协议(先发低位),I2C总线通信协议(先发高位),1-Wire单总线通信协议(先发低位)(任何操作都要等数据发送接收完毕)弊端

锁存器的锁存端给1高电平有用。字母或数字上方给横线表示低电平0有效。

全局变量定义之后自动给0,局部变量定义之后不一定给0。

&用于清0 |用于置1 

为unsigned char类型变量赋整数,会将十进制数转化为二进制数,最高255。如果字符型变量被赋值整数被整型变量引用,引用出来的值为整型。

J5是键盘模式选择跳线,当KBD短接时,是矩阵键盘模式;当BTN短接时,是独立按键模式(S4-S7)。

U24是74HC138译码器。U25是I/O和MM模式输出转换芯片。

U7、U8是数码管锁存器。

U6是LED锁存器。

U16是ADC转换芯片PCF8591。

ULN2003是电机驱动芯片,输入1,输出0,非门,提高电压驱动能力

板子上黄色盒子名为继电器(电磁铁),给0,电磁铁启动,吸合开关,点亮L10,给1,电磁铁关闭,断开开关,L10熄灭

位选高电平1亮,低电平0灭。段选高电平1灭,低电平0亮。(共阳极)消隐:先P0=0xff后Delay(1);先位选再段选

矩阵键盘,先列后行,

独立按键和矩阵键盘在主函数里面记得加if(变量){给其他变量赋初值};

数码管是可以让一个数字一直显示的且不需要while循环,但如果多个数字一起显示就是动态数码管,需要while循环来显示。

主要中断函数中static的作用(不可删除)作用:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(T0Count只被初始化一次,不会重复初始化)。

a=_crol_(a=0x01,1)//0x01左移(11111110)一位后赋给a,且8位一直循环。_cror_为右移。

串口通信必须用定时器1(双8位自动重装模式),定时器1只用于设置波特率,并不用于中断,中断有单独的串行口中断服务函数和寄存器,波特率加倍,不然误差较大。蓝桥杯单片机有AUXR寄存器。(比普中高级)

U19芯片为DS1302实时时钟芯片。RTC是实时时钟集成电路。DS1302命令字:最低位0为写,1为读。时序图中单片机上升沿写数据,下降沿读数据。用BCD码来表示数据。

BCD:用4位二进制数来表示一位十进制数。二进制简写为BIN  八进制简写为OCT 十进制简写为DEC 十六进制简写为HEX 
例:00010011表示13,1000 0101表示85,0001 1010不合法
在十六进制中的体现:0x13表示13,0x85表示85,0x1A不合法
BCD码转十进制:DEC=BCD/16*10+BCD%16(2位BCD)
十进制转BCD码:BCD=DEC/10*16+DEC%10 (2位BCD)

extern 全局变量,所有函数都可用。

定时器进行定时有几个缺点:定时器精度不够,没有时钟芯片精度高 它会占用单片机的cpu 单片机定时器的时钟不能掉电继续运行 

U9是锁存器,U10(ULN2003)是步进电机芯片,通过步进电机芯片,左边输入1,在内部取反,然后输出0。蓝桥杯板子上是有源蜂鸣器但也可演奏音乐。

AT24C02是存储器,E2PROM(电可擦除可编程ROM)是存储介质,容量:256字节 通信接口:I2C总线

U4是AT24C02存储器。WP是写保护 SCL、SDA是I2C接口 A0A1A3是I2C地址且接地都为0(1010000+0写/1读) 内容分成32页,每页8Byte,共256Byte,字地址可写0~255:32*8

弱上拉 I2C通信,主机先发送地址(找从机,每个从机都有自己的地址),再发送数据。AT24C02根据页写每页可写8个数据,再往后写回覆盖第一个数据。(不用,知道即可)

定时器扫描按键数码管不如说是 忘记的话看视频 主要目的:防止程序混乱,可以在一个定时器中进行不同时间的中断,Timer0Count1,Timer0Count2;

DS18B20是数字温度传感器,测温范围为:-55摄氏度~+125摄氏度。DS18B20可以寄生供电,使用DQ供电。CRC是一种校验码算法。

DS18B20单总线,先初始化,再主机发送数据,然后主机读取数据(默认顺序,所以虽然发和收的条件很相似,但不影响)

主机先ROM指令进入DS18B20大门,再发送功能指令读写 温度存储是以补码的形式(正好int16位存储,负数以补码形式存储) 11.0592MHz 一个空函数是0.7微秒 上电一瞬间的数据是错误的 要Delay一下;
 
DS18B20用数码管读取是难题,类型转换先死记。先发低八位,再发高八位。高五位是符号位,0表示正,1表示负,后四位是小数位,中间为整数。

电机是直流电机,电源正负极反接,电机可以反转。步进电机可以更精准的控制转的距离。小车转向可以使用舵机。

电机和继电器都是感性负载元件,所以要加续流二极管。现在滑动变阻器被称为电位器。

PWM重要参数:频率=1/TAll 占空比=THigh/TAll 精度=占空比变化步距

PWM调速如果频率比较低,会抖动,频率比较高调速效果比较好。10KHz~20KHz的频率合适。

PCF8591地址为1001000+0写/1读。外接LED最低亮的电压为2.5V(127)。

I2C时钟线要根据从机能够读到的时钟频率进行调整,不是一成不变的。AT24C02的时序对PCF8591并不适用。

中断有两种写法,一种是立即判断,一种是执行完上面的程序之后再中断执行中断。

100us大概能执行250行代码。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式开发是一种将计算机系统嵌入到其他设备中的技术,其中单片机是嵌入式系统中最常用的控制器之一。单片机是指将微控制器所有功能集成到一个芯片上的微型计算机系统,其包括CPU、存储器、输入/输出接口和其他外设。 在嵌入式开发中,单片机通常用于控制和监测设备的各种操作。例如,它可以控制电机的速度和方向、读取传感器数据、控制LED灯和LCD显示器等。因此,对于嵌入式开发人员来说,单片机知识是非常重要的。 以下是关于单片机的一些基本知识: 1. 单片机的种类:单片机有很多种,包括8051、PIC、AVR、ARM等,每种单片机都有其独特的特点和应用场景。 2. 编程语言:单片机编程可以使用汇编语言、C语言等。其中,汇编语言在速度和精度方面有优势,但是代码复杂度高,不易维护;而C语言易于使用和维护,但是速度和精度可能稍逊于汇编语言。 3. 开发工具:单片机的开发工具包括编译器、调试器、仿真器等。其中,编译器用于将编程语言转换为机器语言,调试器用于调试程序中的错误,仿真器用于模拟单片机的运行。 4. 外设接口:单片机通常需要与各种外设进行通信,例如UART、SPI、I2C等接口。这些接口可以实现单片机与其他设备之间的数据传输和通信。 5. 中断处理:单片机中断是一种异步事件,当发生特定的事件时,单片机会暂停当前任务并执行中断服务程序。中断处理可以提高程序的响应速度和效率。 以上是关于单片机的基本知识,对于嵌入式开发人员来说,掌握这些知识可以更好地理解和应用单片机

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值