-
QWE4562009 发表于 2021-7-7 11:53
假如能联网 也有波特率误差的问题 就是GPS模块发给MCU的波特率 (因为最终LCD的显示是由MCU来显示) 如 ...
模块波特率定死115200?这样的话4M晶振确实有难度。另外,波特率的误差为什么会影响定时?不是用模块发送标准时间给MCU吗(例如每天12:00:00时模块告知MCU,MCU就可以根据这个时间来校时了)?没必要使用模块实时矫正吧,一天以内RTC的精度应该还是在允许范围内的吧
-
MOVX不能用间接寻址做目标地址吧,所以@Ri只能是源地址
-
有硬件PWM就用寄存器操作硬件PWM,没有硬件PWM用IO模拟一个软件PWM也不难,开发板资料里应该都有
-
lajirenzzz 发表于 2015-10-22 14:12
首先感谢您的解答。
#define PA XBYTE[0DCFF] 就是把外部地址映射到自己定义的PA口,也就是在程序里 ...
调用PA=a或者a=PA就行吧,太久没用记不清了
-
1》我的思路是用定时器A先采用增计数模式,然后当摁下启动键后,对自己定义的时间进行增计数,再摁下后,产生中断信号,停止计数,之后恢复到之前停止计数的状态进行重新计数。
我不知道这样的 方法可行吗??
定时器的最大计时时间是有限的,单次中断无法满足到这么长时间的计时,需要通过连续产生固定时常的中断信号来进行长时间计时。
2》 我看到还有个RTC模块,但这个我不知道怎么用
RTC模块需要使用32768Hz的晶振作为时钟,如果板载有资源的话可以尝试对照芯片手册将RTC配置为实时时钟模式,然后读取时钟寄存器
-
kiverin 发表于 2021-6-29 09:19
可以用定时器产生1ms的中断,在服务函数中将计时1ms的标志位置为1,主程序中分别定义时,分,秒的变量,当 ...
关于按键启动和暂停,可以认为是另一个标志位,只有此标志位和定时器中断标志同时满足时temp才会加1
-
可以用定时器产生1ms的中断,在服务函数中将计时1ms的标志位置为1,主程序中分别定义时,分,秒的变量,当判断到这个1ms标志位为真时认为此时经过了1ms,temp+1,同时将标志位清除。当temp == 1000时认为此时经过了1秒,秒变量加1,temp清零。同理当秒的计数==60时分变量加1,秒变量清零。时的变量同理。处理完成后将三个变量显示到1602液晶即可。
-
为啥是发在51板块下的?这个板子在stm下更合适吧
-
xxhhzz 发表于 2021-4-13 10:07
我是一只认为硬件是重要的,没有硬件这个承载体,程序要放哪里
我觉得相辅相成吧,没有硬件软件就是无意义的字符串,没有软件硬件无法实现高级功能。反正学嵌入式软件硬件都得会
-
具体的功能需求可以发出来吗?猜测可能是将时间存储在e2prom中上电初始化的时候读取做校验?
-
楼主买的这个STC10F08XE芯片是1T的单片机,相比于STC89C51这种传统12T单片机在相同的晶振频率下指令运行速度快8-12倍。所以软延时也需要增加对应的时间。
-
有一种很暴力的方法,内置一颗小的充电电池,开壳触发开关直接熔毁芯片
-
51运算力有限,硬件PWM另说,要做软件PWM的话无非是在频率和精度之间做取舍
-
qwqwqw2088 发表于 2021-3-14 17:07
还有其他家,欢迎提供其他家,或者自己熟悉的其他国产MCU厂商,型号芯片,一起讨论讨论
中颖的单片机楼主有了解过吗?他们家也有32位的产品
-
确认个人信息无误,感谢EEWORLD论坛!希望论坛越办越好!
-
如果预算允许可以通过在线服务器进行激活管理
-
以AT89S52为例,楼主想要控制的P2口在SFR寄存器中的指针地址为0A0H,因此只要操作指针指向SFR中的对应地址,然后进行位操作即可控制P2口。
一下程序仅供思路参考,手头没有51单片机,程序未经功能验证。
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
void delay(u16 i){
while(i--);
}
void main()
{
u8 *address;
address = 0xa0;
while(1){
for(j=0;j<=7;j++){
for(i=0;i<5;i++){
*address = 0;
delay(50000);
*address = 0x01 << j;
delay(50000);
}
}
}
}
-
这样的写法并不能给SBIT定义的P2寄存器正确赋值。
-
原来牛屎封装里面长这样,长见识了
-
1. main.c程序第211行,if((k=Key_Read())==13)中,(k=Key_Read())的判定值应该只会是布尔的0和1,所以推断这个判定条件应该永远不会满足。
2. main.c程序第51至55行,改为下面的写法应该会解决乱码问题。之前的取整取余操作有点问题。
dispV[0]=ASCII[t/100]; //小数点前的一位
dispV[1]=ASCII[10]; //小数点
dispV[2]=ASCII[t/10%10]; //小数点后的第一位
dispV[3]=ASCII[t%10]; //小数点后的第二位
dispV[4]=ASCII[12]; //字母V
3.main.c程序第93行,以Read_AD_Data(0x94) = 1000 为例,得到的t为1.2207031,显然小于10,因此95行的判定条件不会满足。