pursuing
发表于 2024-1-31 21:51:26
请教冲哥一个问题,我在做《第十二集:计数器的使用》的时候,用的计数器1,程序就是按照给的例子,很奇怪,下载运行后P60那个灯就一直闪。找不出原因来,怀疑硬件有问题。于是,改用计数器0,TMOD有0x40改成0x04,后面改TH0、TL0、ET0、TR0,包括最后中断号由3改1,这个就没有问题,按T0按键就可以控制灯亮或灭。但程序一改为T1,灯就不停地闪,这时还没按按键,怎么可能闪呢?是否硬件故障?
pursuing
发表于 2024-1-31 21:57:38
本帖最后由 pursuing 于 2024-1-31 22:47 编辑
我用的是STC8H的实验箱,之前的实验也都可以正常完成,程序也很简单,就这个计时器T1有问题。我重新焊了焊按键引脚,没用,把TL1=0xff; 改为0xf0,灯闪的频率降低了,说明计数器也起作用了。但没有按键按下,为什么一直在闪呢?
我又运行了官方的《04-利用T0,T1做外部计数器》实验,也是发现左边数码管T0计数正常,但T1对应的数码管一直从0闪到200多,然后就归0,重新开始。
想到会不会是线路上有什么影响,我查原理图,P3.5还是红外遥控接收的OUT,运行官方《29-红外遥控接收程序(NEC码)-数码管显示》实验,没有问题。望高手解答,谢谢!
mtiaopi
发表于 2024-2-1 12:31:49
没有实验箱,请问下能用Proteus 8来仿真吗?
pursuing
发表于 2024-2-1 13:27:37
本帖最后由 pursuing 于 2024-2-5 22:36 编辑
经过排查,P3.5和红外接收管共用一个引脚,进一步排查发现是显示器的红外探测功能影响了计数。
垂柳工作室
发表于 2024-2-13 16:43:51
20集后特别是要查手册就看得吃力,拿到手册后就怎么知道要查特定寄存器,期望冲哥出一期视频讲解一下
垂柳工作室
发表于 2024-2-16 00:02:23
I2总线写函数void write_byte(uchar date) //写入一个字节到I2C总线
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
请教一下temp=temp<<1;这句什么意思?
王昱顺
发表于 2024-2-16 00:49:12
垂柳工作室 发表于 2024-2-16 00:02
I2总线写函数void write_byte(uchar date) //写入一个字节到I2C总线
{
uchar i,temp;
这个是左移符号,作用是将数据向左移动一位,空余补0。
举个例子,假如现在temp等于二进制10001011,进行左移后会变成00010110。
结合例子中的cy位,意思是最高位(左侧)被挤出去的位就是进位。
还是上面的例子,因为被挤出去了一个1,所以算作进位,cy就为1了
垂柳工作室
发表于 2024-2-16 08:46:00
这个是左移符号,作用是将数据向左移动一位,空余补0。
举个例子,假如现在temp等于二进制10001011,进行左移后会变成00010110。
结合例子中的cy位,意思是最高位(左侧)被挤出去的位就是进位。
还是上面的例子,因为被挤出去了一个1,所以算作进位,cy就为1了
谢谢回帖。c语言左移语法我知道,但就不晓得,左移后跟SDA=CY有什么联系,CY位是什么大神,请大咖详解一下,谢谢
垂柳工作室
发表于 2024-2-16 09:06:50
I2总线读写时,时钟不是芯片自动产生吗?
神农鼎
发表于 2024-2-16 09:53:26
垂柳工作室 发表于 2024-2-16 09:06
I2总线读写时,时钟不是芯片自动产生吗?
是