C51单片机基础-软件部分
重拾单片机
1.安装下载器驱动
十几年前从淘宝买的下载器,链接早已失效。幸亏有个神器,能够自动下载安装驱动。
链接:https://pan.baidu.com/s/1Sxi8pwQVQSCgaxfiX9Z-tA
提取码:8jxn
2.安装Keil C51
汇编早就忘干净了,还是用Keil来做吧。可以用C语言来进行编程,生成十六进制机器文件。
链接:https://pan.baidu.com/s/1ivr9j6IeVpgSLILkJZd5dA
提取码:8jxn
链接:https://pan.baidu.com/s/1ECs1-_Te_hGUsUhUYDAWoA
提取码:8jxn
3.下载器
将二进制文件下载到单片机内。
在Select Chip处选择好单片机型号,在右侧单击”调入Flash”按钮,选择Keil生成的十六进制文件(.hex)
链接:https://pan.baidu.com/s/1nG3m-WxL0kZBKgsRpZIkcw
提取码:8jxn
4.测试代码
在网上找了一个步进电机的代码,测试了一下,还能正常使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
#include <AT89S53.h> static unsigned int count; //计数 static int step_index; //步进索引数,值为0-7 static bit turn; //步进电机转动方向 static bit stop_flag; //步进电机停止标志 static int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快 static int spcount; //步进电机转速参数计数 void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒 void gorun(); //步进电机控制步进函数 void main(void) { count = 0; step_index = 0; spcount = 0; stop_flag = 0; P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; EA = 1; //允许CPU中断 TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许 TH0 = 0xFE; TL0 = 0x33; //设定时每隔0.5ms中断一次 922 1ms 65536-0.5*(922)= TR0 = 1; //开始计数 turn = 0; // speedlevel = 10; // delay(10000); // speedlevel = 5; // delay(10000); do { speedlevel = 10; delay(10000); stop_flag=1; delay(2000); stop_flag=0; speedlevel = 2; delay(10000); stop_flag=1; delay(2000); stop_flag=0; } while(1); } //定时器0中断处理 void timeint(void) interrupt 1 { TH0=0xFE; TL0=0x33; //设定时每隔0.5ms中断一次 count++; spcount--; if(spcount<=0) { spcount = speedlevel; gorun(); } } void delay(unsigned int endcount) { count=0; do { } while(count<endcount); } void gorun() { if (stop_flag==1) { P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 0; return; } switch(step_index) { case 0: //0 P1_0 = 1; P1_1 = 0; P1_2 = 0; P1_3 = 0; break; case 1: //0、1 P1_0 = 1; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 2: //1 P1_0 = 0; P1_1 = 1; P1_2 = 0; P1_3 = 0; break; case 3: //1、2 P1_0 = 0; P1_1 = 1; P1_2 = 1; P1_3 = 0; break; case 4: //2 P1_0 = 0; P1_1 = 0; P1_2 = 1; P1_3 = 0; break; case 5: //2、3 P1_0 = 0; P1_1 = 0; P1_2 = 1; P1_3 = 1; break; case 6: //3 P1_0 = 0; P1_1 = 0; P1_2 = 0; P1_3 = 1; break; case 7: //3、0 P1_0 = 1; P1_1 = 0; P1_2 = 0; P1_3 = 1; } if (turn==0) { step_index++; if (step_index>7) step_index=0; } else { step_index--; if (step_index<0) step_index=7; } } |
坐等大佬D盘更新,祝大佬全家福寿安康
有公众号之类的吗,之前这个网站打不开了
[…] 关于使用Change…
[…] 关于使用Functi…
谢谢提醒,已删 :)