采集状态,调整车身--控制电机,传感器获取偏差信息,根据控制逻辑实现电机驱动,采集决策
执行
电源电路,稳压电路,保护
时钟电路,给单片机提供时钟,心跳,而且确定了单片机工作的速度
复位电路,上电重启
串行是一串一串发送数据
定时器:很多事情不是来了才做,有一个周期
通道对应着引脚
周期短,频率高--10khz,有惯性的都能控制.pwm引脚外接电容,可以起到形成一条直线的作用
,频率非常高一半高一半低,滤成一条直线,输出2.5v.
Pca,可编程定时器(功能比较杂)--ccp
Dma自动数据存储
- 中断(重要)
Int0-4外部中断
T0-4定时器--定时器中断
Uart1-4---串口中断 就着三种要用
- 引脚,最基本的都是io功能,旁边/是通过复用实现(pwm1_2第一个通道的第二个选择)
1个引脚只能有一个功能,一个通道好像只能选一个.针对性用功能即可.
寄存器:规定好的小开关,举例pwm0如何选择引脚输出,假设两个小开关,产生四种变化.
00 10 01 11//p20-00,p21--01,p22--10,11全部输出,所以一个通道只能有一个输出,各种各样功能都是靠内部小开关实现,小开关通过程序写状态,写的东西叫寄存器,小开关装在寄存器里面
P7寄存器,控制p70-p77七个引脚的输出,写1输出5v,0是一v,人操作小开关作用各种电路实现功能,有些寄存器当成io输出,有些寄存器配置某些功能
程序->寄存器->电路->输出(效果),与或非操作不可位寻址的寄存器
一个寄存器八位
P3m0,p3m1控制p3^0的模式选择(准双向,输出(推挽模式),输入(高阻态模式),开漏模式.
上电默认输入模式.先变成准双向,然后再变成其他模式
寄存器封装成库函数,告诉函数想要哪个引脚变成哪个模式,调用即可,不可位寻址只能用与或非操作
硬件,分析传感器是啥,控制器是啥,执行装置是啥---(先分析电源,跟着电走)开关控制是否供电
二极管只允许电流往一端流(隔离作用).电机启动时候电流比较大.vcc电池电压可能会波动,为了避免波动,接电容(一个大一个小)起到滤波作用,电容看作蓄水池,大电容滤波动中低频,小电容滤高频.2脚输出,接二极管,电感,电容(组成lc电路滤波),经过这些小车上就会有5v的电输出.有了5v后就围绕单片机看(有了电源才能工作)
Ir接光电传感器(p0口功能比较弱)
P17接adc,把模拟信号的电压量转换为数字信号
P2输出pwm1-4,ina和inb控制电机正转反转,全桥驱动电路,给了pwm1正转,0不转,调速
3-5欧电阻--10khz,一百多欧--频率低点,记住永远有一路信号为0
S0接int0(优先级高),执行中断,可以打断当前程序执行另一个程序后返回,确认发车(优先级高)
1a2a1b2b测速电路,玩的都是pwm,速度有了位置和加速度就有了(d触发器,检测正反转时候相位不同,领先正转,落后反转,计数器数来的脉冲,外部中断电压跳变.
悬空时候单片机内置上下拉电阻
串口读超声波数据
Buzz功率放大电路,舵机需要一个0.5ms(-90度)-2.5ms(90度)的脉宽信号,总的周期为20ms(50hz),0.1秒60度
while(1)
{
delay(10);
key_num<<=1;
key_num+=KEY;
if(key_num==0)//存储八十ms内我的按键状态 ,一直是稳定的0,按下去
{
LED=!LED;
while(!KEY);
}
按键轮询(无法实现别的功能,循环的时候程序动不了),如果要实现更多功能
单片机不建议把重要的程序写在大循环里,有另外一套重要的机制--中断机制
外部中断,当出现跳变沿时候,单片机能对其进行捕获并且产生一个中断.
定时器中断,计数器数到某个数时候,触发中断,执行某个程序,周期性的做某个事情可以用
串口中断:通信时候用的
It0是检测双边沿,it1是检测下降沿,检测后中断标志位ie0值1,有ea大门和ex0小门控制是否允许中断,px0控制优先级
按键按下触发,中断设置为下降沿
按下不管程序运行到哪,先跳出来运行中断程序,完成后回到现场
void INT0(void) interrupt 0;
(命名可以自定义) (中断号只有一个)
注意,按一下不是直接触发,而是把中断标志位ie0变1然后触发(允许控制)(触发后ie=0,如果又变成1,会再次触发中断)
定时器/计数器,周期性循环(写到while会一直执行).如果想让东西不受影响的运行,用定时器
定时器针对的是系统内部时钟送来的脉冲(24M太高,一般用分频,计数器针对单片机外部引脚的脉冲(例如判断按键按了多少下)
自动重装载(做比较规律的事情),能一直数(完成后从我们给定的数接着开始),不可自动重装载,数完等程序告诉我们从哪个地方数
TH0和TL0存储数据(16位计数器,装数RL_TH0,RL_TL0),数满后把TF0定时器中断标志位
置1,执行中断(触发完成后TF0硬件清零,回到RL_TH0之前记的数字,重新开始数)
定时器不建议用50us这样的计数,一般是10ms这样
小车进行重要决策一般是放在定时器里面,不重要的放在主循环(主要时间都在主循环)
标签:stc8,定时器,引脚,中断,笔记,---,--,寄存器,单片机 From: https://www.cnblogs.com/zhoncai45/p/17683794.html