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总线读写时,时钟不是芯片自动产生吗?

页: 12 13 14 15 16 17 18 19 20 21 [22] 23 24 25 26 27 28 29 30 31
查看完整版本: 冲哥32位8051视频教程疑问解答贴