尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【51单片机】1.12 STC51单片机总结

【51单片机】1.12 STC51单片机总结 目录一、中断原理二、用到的外设三、通信一、中断原理51的中断比较少只有6线有中断触发时中断系统会把pc无论pc执行在那里都会立即执行到中断服务函数底层原理编译器为我们做的清空用户ram区设置栈指针sp中断流程把pc压栈保存pc指向中断向量表都是硬件自动完成的然后保存现场acc b dph等寄存器压栈这些工作寄存器是高频使用的必须保存然后执行中断程序执行完后pop出栈恢复现场最后执行RETI: pc的出栈操作也是硬件的自动完成这样pc就恢复到原先的地址2.定时器51的定时器简单用到的2种模式计算初值机器周期、多少位的定时器、重点是溢出后会产生中断。获取时间 us微妙级别_nop_();一个NOP的时间是一个机器周期的时间用作延时。二、用到的外设1.led导通电流计算限流电阻注意led本身压降流水灯位运算实现2.数码管类似led扫描的方式点亮3.点阵类似led扫描的方式点亮取模字体4.独立按键 定时器中断检测按键状态单片机往往是检测状态而不是检测过程主循环while(1处理按键事件中断用于确定按键状态一个2ms定时器不断读key电平。消抖用一个变量0xff进一次定时器中断2ms0xff左移一位或上key最终判断此变量是否为0xff或0x05.矩阵按键与上面的独立按键很类似主循环依旧处理按键事件while(1)中断也很类似独立按键但要注意一些代码的执行顺序。//6.步进电机用到再看7.蜂鸣器可以当作led用8.液晶时序图、初始化cmd、送屏数据屏幕有自己的ram9.E2PROM读数据时需要先写1.写器件地址2.写器件存放数据的地址。注意单字节、多字节写入的区别以及为什么要按页写多字节写入每次写入后都需要再次通信检测EEPROM是否在“忙”因此耗费了大量的时间。iic读写下面代码按页写只有在跨页的时候才会再次检测EEPROM是否在“忙”10.红外解析电平、了解收发硬件电路原理看下原理图就懂实际会有一个红外一体化接收头NEC协议一条总线us级别有被调制注意解析波形的函数的流程规范封装好一点画一个流程图11.温度传感器ds18b201-Wire协议可挂载多个设备us级别、时序要求严格读写这个器件获取温度12.实时时钟DS1302的通信是SPI的变异种类外设调试基本1.芯片引脚介绍2.寄存器介绍 //这颗ic可以当ram和时钟使用3.通信时序介绍看图就行就是通信没啥复杂的// 13.超声波测距用到再看用时间速度来确定距离13.ADCADC的位数1个n位的ADC表示这个ADC共有2的n次方个刻度三、通信1.uartio模拟、一次发送一字节起始位1、8位数据、停止位处理低位在前。代码见.c文件其实还是采集波形后解析定时器读rx电平io模拟占用单片机大量运行时间用硬件模块不关心过程(采集数据的波形)只需要通信的结果自动接收数据实用的串口例程见代码.c2.iic每次往总线发数据7位从机地址1位读写第九位ack从机地址器件回应即拉低SDA。高位数据在前io模拟时注意I2CDelay()iic速率发送数据时先给sda电平再I2CDelay再拉高SCL读取SDAI2CDelay后在再拉低SCL完成一个位周期是一个位周期只有在 SCL 为低电平时SDA 上的数据才允许改变当 SCL 为高电平时SDA 上的数据必须保持稳定此时的数据被视为有效数据。//发送8位数据for (mask0x80; mask!0; mask1) //从高位到低位依次进行循环8次这里的mask即是循环的退出条件又在下面取出SDA的电平{if ((maskdat) 0) //判断dat最高位是否为0该位的值输出到SDA上I2C_SDA 0;elseI2C_SDA 1;I2CDelay();I2C_SCL 1; //拉高SCL读取SDAI2CDelay();I2C_SCL 0; //再拉低SCL完成一个位周期是一个位周期}读取数据时见代码3.spi这种全双工的稍微注意一下其实spi比iic还简单cs片选信号选择从机4.RS485ttl约等于rs232全双工rs485而是差分多机通讯的半双工5.Modbus应用层协议字节级别的
返回列表