davidyan
发表于 2025-5-25 09:01:51
<p>第16集,DS18b20</p>
<p>本机实现了一个基本的读取DS18B20的驱动。了解原理,但不想看细节。</p>
<p>记录一个问题的debug过程。我在复现计数器程序时,把P35设置为高祖上拉输入模式,作为计数器的计数信号源,然后发现不停电下载功能失效了。再深入排查后发现usb初始化时把P3.0, P3.1设置为了推挽模式,而我的代码在设置P35模式时,同时也抹除了P3.0, P3.1的设置。</p>
<p>所以要把自定义端口的初始化放在usb初始化之前,或者不要动P3.0,P3.1的设置即可。</p>
davidyan
发表于 2025-5-25 12:47:34
<p>第17,18集,串口通信</p>
<p>全双工,半双工,同步,异步的区别不是很明白,在软件和硬件上的如何设置实现?</p>
<p>通信协议:单字节收发协议,起始位+8位数据+1位校验(可选)+停止位</p>
<p>波特率:通过约定后设置,再硬件层控制。</p>
<p>硬件在收到一个字节数据后会触发中断,通知程序。程序通过寄存器得到数据byte(S2BUF)和校验位(S2RB8),软件/硬件进行数据校验。</p>
<p>程序通过将数据byte(S2CON)和校验位(S2TB8)放到寄存器,硬件进行发送。发送完成后触发中断,之后软件才能继续发送下一个字节。</p>
<p>校验位计算,累加器寄存器ACC,将数据byte放入ACC后,会将累加结果(仅末位)放到寄存器P中。</p>
<p>(动不动就冒出一个寄存器变量名<img alt="shui" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/shui.gif" title="shui" /> 还是全局可见的。需要约定自定义变量不会跟已有的全局变量冲突)</p>
<p>串口接收超时中断:使能控制,使能中断,SCALE选择超时计数时钟,TOIF中断标识,TOTE/H/L超时计时数。仅在接受结束后会开始超时计数,为收完时,即使实际传输中断,硬件仍然可以继续接受(虚)数据。</p>
<p>串口收、发、超时共用一个中断号,软件通过中断请求标识来区分。</p>
<p>问题:接收缓冲区长度不够怎么办。需要一边接,一边用户消耗。但是用户和接收器之间怎么同步进度,感觉好复杂。</p>
云烟成雨
发表于 2025-6-8 23:16:19
为什么我按照你的vscode,编译不了,找不到头文件,可以出一个完整教程吗
[{
"
"message": "检测到 #include 错误。请更新 includePath。已为此翻译单元(C:\\Users\\Mqsy\\Desktop\\Car_AI8051\\User\\main.c)禁用波形曲线。",
davidyan
发表于 7 天前
云烟成雨 发表于 2025-6-8 23:16
为什么我按照你的vscode,编译不了,找不到头文件,可以出一个完整教程吗
[{
"
<ol>
<li>你的头文件放在哪?</li>
<li>你vs的include文件搜索位置是否都设置正确</li>
</ol>
<p>单个项目的vs的include文件搜索位置有多处可以影响,包括全局设置、工作空间设置和项目设置。</p>
<h3>单项目设置</h3>
<p>{项目目录}/.vscode/c_cpp_properties.json中添加include搜索目录</p>
<p><img src="data/attachment/forum/202506/10/094158hihv22w6opr6wh0o.png" alt="b83043de-9ad8-4490-a4b0-c14e725b7abf.png" title="b83043de-9ad8-4490-a4b0-c14e725b7abf.png" /></p>
<p>这个文件是vscode自动生成的,如果没有你要稍微等一会,或者可能是没有安装好cpp插件。</p>
<pre><code>{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"C:/Keil_v5/C251/INC",
"C:/Keil_v5/C251/INC/STC",
"${workspaceFolder}/Driver/inc",
"${workspaceFolder}/User"
],
…………
</code></pre>
<p>上面C:/Keil_v5/C251/INC/STC,C:/Keil_v5/C251/INC是keil头文件和isp安装ai8051u头文件的地方,你可以去看下有没有ai8051u相关的头文件。</p>
<p><img src="data/attachment/forum/202506/10/094404h1z9nyin3nq2cye4.png" alt="f6eadd8a-8751-472c-bdb0-acbb6ed141a6.png" title="f6eadd8a-8751-472c-bdb0-acbb6ed141a6.png" /></p>
<h3>在工作区中设置</h3>
<p>保存工作区后(文件->将工作区另存为),vscode会保存成一个code-workspace文件。</p>
<p>命令面板 -> workspace,打开工作区设置,添加头文件搜索目录:<br />
<img src="data/attachment/forum/202506/10/094822znn1c1trelfc0aiz.png" alt="5386e820-fa9a-40cd-bfd3-ad87536ba364.png" title="5386e820-fa9a-40cd-bfd3-ad87536ba364.png" /></p>
<p>同时在项目配置中增加一句${default}表示使用默认配置(含工作区)。</p>
<p><img src="data/attachment/forum/202506/10/094916nhmj9l81228e01xe.png" alt="116db578-068f-45c5-97c4-987a71bd2005.png" title="116db578-068f-45c5-97c4-987a71bd2005.png" /></p>
<p>对其它include找不到的问题,回答开头的两个问题,可以自行解决。</p>
<p>vscode搜索头文件和keil中搜索头文件,编译链接lib是两套独立的系统,需要单独设置。vscode目前只能提供代码编辑的优化,编译还需要去keil中进行。</p>