系列文章索引:Linux下C51入门教程索引
前言
单片机入门,我们从最简单的蜂鸣器开始。蜂鸣器如果一直加电就会长鸣,如果按照一定方式加电会类似于播放音乐。
开发
代码
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
| #include <reg51.h>
sbit sound = P3 ^ 7;
void delay1600(void) { unsigned char n; for (n = 0; n < 100; n++) ; }
void delay800(void) { unsigned char n; for (n = 0; n < 200; n++) ; }
void main(void) { unsigned int i; while (1) { for (i = 0; i < 830; i++) { sound = 0; delay1600(); sound = 1; delay1600(); } for (i = 0; i < 200; i++) { sound = 0; delay800(); sound = 1; delay800(); } } }
|
编译
编译器版本
编译结果
共计三种错误。
第一二行错误表示reg51.h在Linux平台上已经过时了,我们采用8051.h。
所以将
修改为
1
| #include "/usr/share/sdcc/include/mcs51/8051.h"
|
第三行错误表示,Linux下标识符不能这样定义。
我们从sdcc的头文件中查看相关代码,
代码位置是
1
| /usr/share/sdcc/include/mcs51/8051.h
|
我们可以看到
将
修改为
也就是说Linux下与Windows下的开发以及定义有一定区别。
完整的正确代码是:
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
| #include "/usr/share/sdcc/include/mcs51/8051.h"
#define sound P3_7
void delay1600(void) { unsigned char n; for (n = 0; n < 100; n++) ; }
void delay800(void) { unsigned char n; for (n = 0; n < 200; n++) ; }
void main(void) { unsigned int i; while (1) { for (i = 0; i < 830; i++) { sound = 0; delay1600(); sound = 1; delay1600(); } for (i = 0; i < 200; i++) { sound = 0; delay800(); sound = 1; delay800(); } } }
|
编译结果为:
编译的结果文件:
格式转换
将ihx文件转换为hex格式文件
写入设备
使用stcflash工具(需要python-pyserial),原本想用Qt/C++自己写一个,后来发现技术有限,还是熟悉了再说。
Manjaro下直接安装
写入设备
写入错误
可以参考Linux下单片机开发时无法打开串口,只能在root下才能正常打开解决
写入等待
这个时候需要关闭并再次开启开发板。
写入成功
运行结果
按照下图进行接线:
蜂鸣器测试
蜂鸣器测试-B站
至此,Linux下单片机开发有一个良好的开始。
下一篇:Linux下C51入门教程02:LED闪烁
参考文档