28BYJ的一点收获
来源:互联网 发布:python http get请求 编辑:程序博客网 时间:2024/05/23 11:29
#include <reg52.h>unsigned long beats = 0;void StartMotor(unsigned int angle);void main(){ TMOD = 0x01; TH0 = 0xF8; TL0 = 0xCD; ET0 = 1; TR0 = 1; StartMotor(360*2+180); while(1);}void StartMotor(unsigned long angle){ EA = 0; beats = (angle*4076)/360; EA = 1;}void InterruptTimer0() interrupt 1{ unsigned char tmp; static unsigned char index = 0; unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 }; if(beats!=0) { tmp = P1; tmp = tmp & 0xF0; tmp = tmp | BeatCode[index]; P1 = tmp; index++; beat--; index = index & 0x07; } else { P1 = P1 | 0xFF; }}
51是8位单片机,8位的概念就是按8位一个字节进行的,那么要操作多个字节,就得分多次了。而程序中定义的unsigned long很明显是4个字节,如果要赋值就得分四次进行。如果此时没有EA = 0, 此时中断发生,发生借位,程序肯定要出错了!
如果定义成char或者bit的话当然没问题了!因为它们在CPU的一次操作中完成的。
中断
void InterruptTimer0() inerrupt 1{ static bit div = 0; TH0 = 0xFC; TL0 = 0x67; KeyScan(); div = ~div; if(div == 0) { TurnMotor(); }}
这里有一个小技巧,因为按键扫描是1ms,而电机的扫描则是2ms,但是中断扔定义1ms,同时利用了一个分频的技术,两个1ms才进行一次电机启动
-1 & 0x07
最后的结果为7;
原因为,整数的二进制就是其原码本身,负数的二进制码为其补码,所谓补码的概念为原码除符号位外,所有的位取反并加1
阅读全文
0 0
- 28BYJ的一点收获
- 假期的一点收获
- 2014的一点收获
- 关于采集的一点收获
- switch语句的一点收获
- 关于置换的一点收获
- 实习期间的一点收获
- 步进电机的一点收获
- 学习ajax的一点收获
- 12月的一点收获
- 步进电机28BYJ-48的驱动程序(stm32f103c8t6)
- 一点收获
- 一点收获
- 一点收获
- 28BYJ-48步进电机
- javascript DOM 的一点的收获
- 面向对象的一点小的收获
- 对fork使用的一点收获
- hdu 1728 逃离迷宫 普通的队列 / 优先队列
- HDU
- Linux桌面环境与命令行环境切换快捷键
- 第一篇= =
- Material Design之滑动菜单
- 28BYJ的一点收获
- 20. nginx 服务器的邮件服务
- nginx服务配置
- Hdu 3555
- TensorFlow 神经机器翻译教程-TensorFlow Neural Machine Translation Tutorial
- sublimeText3 java编译并控制台输出
- Python学习笔记之爬虫实践(一)
- 【总结】高精度
- React Native 中组件的生命周期