- 打卡等级:以坛为家I
- 打卡总天数:213
- 最近打卡:2025-04-23 20:59:03
已绑定手机
荣誉版主
- 积分
- 1885
|
本帖最后由 Yim_Hom 于 2024-6-5 17:16 编辑
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 作品展示› STC15的五轴机械臂Demo
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 老鸟反刍/吐槽,新手乐园,毕业设计› STC8H 关于频率的小疑问
#define main_fosc 24000000L仅仅用于计算,计算时用main_fosc。时钟频率用软件设置或者用专门修改时钟频率的函数修改。
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 老鸟反刍/吐槽,新手乐园,毕业设计› 有没有stc连接8266
写过stc15连esp01s的,
简单给您个思路:
(1)两路串口,一路串口1用于和上位机通信,一路串口2用于和esp01s通信
(2)不同串口可以共用tim2做串口波特率触发器,当然,15及以上的波特率完全可以到119200,这样只需要一个定时器就OK
(3)串口2发送AT指令给esp01s,比如“AT...\r\n”,可以先写出来不判断esp01s不反馈ready或者OK的指令,只要能和esp01s先正常通信就行
(4)AT指令里有发送TCP的那部分,再学点MQTT,实现数据能上传到指定的云
(5)以上实现MCU和云通信正常,再把写好的AD函数结果加进去,必要的时候需要对结果进行处理再上传。
(6)屏幕显示比数据上传要简单,两种方式都要用到AD转换结果,别有冲突就行。
您只要能实现到(3),花点时间就能实现(4)和(5) |
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 老鸟反刍/吐槽,新手乐园,毕业设计› 大神们,在PWM中断中进行脉冲计数,是否可以?急 ...
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 老鸟反刍/吐槽,新手乐园,毕业设计› proteus+keil联调一个按钮结果失败了
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 老鸟反刍/吐槽,新手乐园,毕业设计› 求助:stc8H8K64能支持6个独立的pwm输出吗
我用stc15的6路15位pwm能实现,那stc8的肯定能。 |
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 老鸟反刍/吐槽,新手乐园,毕业设计› 外部中断使用
没有内部上下拉的话,如果检测外部中断下降沿触发,稳妥的方式可以是外接上拉置高,这样检测到下降沿触发。
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› STC开源频谱分析仪-FFT,PID控制,示波器,四轴飞行器,智能小车› STC8G1K08A-36I-SOP8单片机模拟量采集电位器控制舵机同 ...
建议可以直接使用PWM波形发生器来产生PWM驱动舵机,
然后AD转换读取值和舵机角度比例换算,
省掉一个定时器的同时,还用上了更拉风的功能。 |
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› OLED12864-GUI/U8g2-科学计算器› 江科大STM32的OLED程序移植到STC15W4K58S4和STC8H8K64U ...
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 定时器/计内部时钟,计数器/计外部脉冲,时钟分频输出,软件延时› 定时器T1 初始化#define Timer1_HZ 10000UL//10KHz是什 ...
#define Timer1_HZ 10000UL//10KHz//此处,这么定义,是啥意思?
#define是宏定义,宏定义的用法应该知道吧?
Timer1_HZ是名,对应定时器1初始化函数里的Timer1_HZ
10000UL可以根据你的需要随时修改,如果在一个地方用,那可以不用宏定义,
如果在多个地方用,只修改10000UL,就实现了全部修改。
UL的意思表示unsigned long,不然编译器就没法按照你的意图处理了。
//是注释,也就是10K赫兹,10000UL对应10KHz |
Yim_Hom 发表于 2024-5-21 16:36
#define Timer1_HZ 10000UL//10KHz//此处,这么定义,是啥意思?
#define是宏定义,宏定义的用法应该知道 ...
感谢老师指点,我想定义1ms中断一次,这里的10KHz应该为多少??
Yim_Hom 发表于 2024-5-22 12:05
周期是频率的倒数啊,所以1/1000啊
理解了,是我计算方法有问题,感谢老师。
380091044 发表于 2024-5-22 17:40
理解了,是我计算方法有问题,感谢老师。
不客气,称不上老师。
可以多看看手册,不懂的多百度多问
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› I/O读写及点灯,外部中断 ,所有I/O都支持的普通I/O中断,按键扫描› 验证 STC8H8K64U 外部中断 INT0/INT1 上升沿/下降沿中断 ...
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› I/O读写及点灯,外部中断 ,所有I/O都支持的普通I/O中断,按键扫描› 官方跑马灯程序学习疑问
有简单,有复杂,也可以自己写,用数组 、移位、左右滚动、指针…等等都可以
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› ADC/比较器,DMA支持的12位ADC,轨到轨比较器,DAC› sc15w单片机ADC调不出来10位
如果是STC15的话,试试这样写
/**************************************
功能描述:ADC口初始化
入口参数:无
返回值:无
***************************************/
void ADC_config(void)
{
ADC_CONTR|=0x80; //开AD转换电源
Delay_ms(10); //适当延时等待AD转换供电稳定
P1ASF|=0x01; //选择P1.0作为模拟功能AD使用
ADC_CONTR|=0x00; //选择P1.0作为AD转换通道输入使用
ADC_CONTR|=0x60; //AD转换速度为90个时钟周期转换一次
ADC_CONTR&=0xEF; //清AD转换完成标志
EADC=0; //禁止ADC转换中断
CLK_DIV|=0x20; //ADC转换结果ADC_RES存高2位,ADC_RESL存低8位
ADC_CONTR|=0x08; //启动AD转换,ADC_START=1
}
/**************************************
功能描述:ADC口检测AD转换值函数
入口参数:无
返回值:ADC 10位数据
***************************************/
u16 Get_ADC10bitResult(void)
{
u16 AD_Dat=0;
ADC_CONTR&=0xEF; // 将ADC_FLAG清0
//10位AD结果的高2位放ADC_RES的低2位,低8位在ADC_RESL
AD_Dat = ADC_RES; //将ADC_RES低2位移到应在的第9位和第10位
AD_Dat <<= 8;
AD_Dat|= ADC_RESL; //将ADC_RESL的8位移到应在的低8位
ADC_CONTR|=0x08; //重新启动AD转换,ADC_START=1。
return AD_Dat;
}
前行者 发表于 2024-5-19 18:50
谢谢,我试一下
客气,如果不熟的话,可以先用一种移位方式,能读出来10位AD,说明成功了,然后再用另一种移位方式读成功。如果两种方式都可以了,再去if。。。else。。。选择移位方式。 |
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 综合讨论› STC8h的Delay延时函数 | 已解决
如果只是临时需要延时,直接可以把库函数中的unsigned char里把char改成int,这样肯定比255大,不会出现溢出。
如果使用延时函数,有相对高的要求,可以参考以下三种方案:
第一种,在常用的主频确定的情况下,用STC-ISP里的“软件延时计数器”,分别生成1us和1ms的精确延时,然后改写成对应的Delay_us和Delay_ms函数,如下:
void Delay1ms(void) //@22.1184MHz
{
u8 data i, j;
_nop_();
_nop_();
i = 22;
j = 128;
do
{
while (--j);
} while (--i);
}
void Delay_ms(u16 ms)
{
u16 i;
for(i=0;i<ms;i++)
{
Delay1ms();
}
}
第二种:把一个不经常用的定时器,改写成延时函数,可以实现非常精准的延时。
第三种:二楼那位的回答。
每一种方式都各有优略,但还是推荐第一种,毕竟初学者一般从开始点灯到后期整板成一个小项目,基本不会过多的去改变主频。利用官方isp生成相对精准且可靠的延时满足使用即可。
点评 Yim_Hom
客气
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 老鸟反刍/吐槽,新手乐园,毕业设计› STC8G,外部中断,如何判断上下边沿
定义一个flag;
然后正常配置上升沿下降沿都触发;
在中断中读你的触发flag=。。。,
然后判断你的flag是1还是0。
不就知道是上升还是下降了吗?
[tr][/tr]
[tr][/tr]
手里有8H的开天斧,这样测试了一下:
P32对应INT0,设置为下降沿触发,初始化P32为准双向口且使能上拉电阻,确保初始电平为1,这样在按键没有按下的情况下读取P32的值,为1;当P32按下的时候,读取P32的值变为0;松开后继续变为1。
P33对应INT1,设置为上升下降沿触发,初始化P33为准双向口且失能上拉电阻,并且P33赋值为0,确保初始电平为0,这样P33在没有外接VCC的情况下读取的值为0;当外接VCC后,P33的值变为1;断开VCC后继续变为0。
这样就绝对验证了是上升沿还是下降沿触发,也从根儿上知道了究竟。
|
| |
|
|
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 开源广场及教学视频交流› STC老梁开源示波器尝鲜儿
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 综合讨论› 求助贴:STC15无法与STC-ISP软件连接,无法检测到芯片【 ...
感觉就像是芯片没断电。。。。
最简单的方式测试,拿任何一种可以正常下载的串口下载工具连一个DIP封装的stc15,插拔下载工具时STC-ISP均可以识别到串口,可以初步确定串口工具正常,然后再单独连接STC15的VCC和GND,能正常下载就说明主控OK。剩下的就去排查板子的问题。
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 作品展示› 用STC8G1K08A做了一个蓄电池修复充电模块
stb988 发表于 2024-5-12 09:13
可以,你支持一下吧https://x.jlc.com/platform/detai ... 06a8c29f9233d153bc1
不见得开源了就有商业价值,可以的话用于学习,不可以的话也没关系。
主要是我支持了也用不上,这东西对我没啥意义,嘿嘿。。。
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 综合讨论› 求助!急 键盘扫描串口发送键值不定时异常 ...
班门弄个斧:您说的不稳定是哪个方面?初始化?主循环?按键扫描?状态机还是轮询?还是串口发送?
另外多考虑一个现场地线的问题,我们也经常碰到现场的故障在家里复现不了的情况,首先把程序的问题排除干净,然后考虑干扰,干扰可能是EMC或者其他。
C8051F040都碰到过程序跑飞的情况,分时轮询500ms的程序指示灯没反应,最后判断的是地线问题。
» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 综合讨论› 本来这段代码是这样,全部在demo.c里面。我移另一个文件 ...

这样够直观吗?
Yim_Hom 发表于 2024-5-28 14:49
这样够直观吗?
好像懂了,等会回去电脑上试试
先把那段代码赋值,定义
然后调用tim2这段 |
点评 Yim_Hom
嗯,我只是举个例子,看懂就好。您可以自己把TIM1的初始化单独写一个,然后包含到UART1的初始化里,模块就很清晰,这样用起来自己一看就明白。[color=rgb(153, 153, 153) !important][color=rgb(153, 153, 153) !important]删除 详情 回复 [color=#999999 !important]发表于 2024-5-28 16:12
vb2002 发表于 2024-5-28 14:51
好像懂了,等会回去电脑上试试
先把那段代码赋值,定义
然后调用tim2这段 ...
嗯,我只是举个例子,看懂就好。您可以自己把TIM1的初始化单独写一个,然后包含到UART1的初始化里,模块就很清晰,这样用起来自己一看就明白。
Yim_Hom 发表于 2024-5-28 16:12
嗯,我只是举个例子,看懂就好。您可以自己把TIM1的初始化单独写一个,然后包含到UART1的初始化里,模块 ...
非常感谢您的启发,已经弄好了。您看看对吗?
这下主程序里面看着简洁多了。以后要更改配置,直接再.H那里改就好了


|
点评 Yim_Hom
不用客气。 这不挺好的嘛,干净整洁,再加上注释,就算忘了也分分钟能反应过来。 可以建议您再继续优化一下,模块化到每一步,再配合上官方库函数,哈哈。。。之前没用过STC8,从15换到8了,目前效果还行。 加油。 [[color=rgb(153, 153, 153) !important][color=rgb(153, 153, 153) !important]删除 详情 回复 [color=#999999 !important]发表于 2024-5-28 23:26
[color=#999999 !important]
[color=#999999 !important]
vb2002 发表于 2024-5-28 18:42
非常感谢您的启发,已经弄好了。您看看对吗?
这下主程序里面看着简洁多了。以后要更改配置,直接再.H那 ...
不用客气。
这不挺好的嘛,干净整洁,再加上注释,就算忘了也分分钟能反应过来。
可以建议您再继续优化一下,模块化到每一步,再配合上官方库函数,哈哈。。。之前没用过STC8,从15换到8了,目前效果还行。
加油。

» STC32位8051交流社区,车规 AEC-Q100 Grade1› 技术交流› 老鸟反刍/吐槽,新手乐园,毕业设计› 请教STC15串口1与485问题
[color=rgb(153, 153, 153) !important]别叫老师, 没怎么用过中断发送,我都是习惯阻塞。看这意思是发送完TXDATA数组以后num清零啊 ... | [color=rgb(153, 153, 153) !important]有什么奇怪的,列举出来的还没看明白?开头num直接等于1,所以就一直发送啊。 ... | [color=rgb(153, 153, 153) !important]前面的uchar flag,num=1; 中断里 num = SBUF; //P0显示串口数据 主程序里 if (num==1) ... | [color=rgb(153, 153, 153) !important]uchar flag,num=1; | [color=rgb(153, 153, 153) !important]简单扫了眼您的主程序, 先进行端口初始化,然后串口初始化, 进入wihie循环,判断NUM是否为1, 在中断里只 ... |
|
|