初学单片机,C语言编程时。关于TMOD寄存器位选的疑问。。

Python015

初学单片机,C语言编程时。关于TMOD寄存器位选的疑问。。,第1张

51单片机内部有两个定时器,其工作方式通过TMOD来配置。

TMOD寄存器有8位,而配置一个定时器只需要4位。

所以,TMOD的高4位用于配置定时器1,低4位用于配置定时器0.

这里TMOD=0X10,当然是配置定时器1咯。

定时器使用中断方式时,需要配置两级开关

第一级是总中断开关:EA=1;

第二级是源中断开关,定时器对应为ET1=1

然后是编写对应的中断服务函数。

如果是AT89***或者STC**单片机,如图依图完整的控制代码没时间弄你可以百度,资源多的是,如果只想知道数码位的控制方法可以说一下,根据你图示,只要在三极管的基极加上低电平就可以给相应的数码位加电,简单代码如下:

1.可以分别定义控制端口

sbti WE1=P1^0//这里假定用P1口控制数码位

sbti WE2=P1^1

sbti WE3=P1^2

sbti WE4=P1^3

进行上述定义后,在程序中只要有代码WE1=0则第一位数码就通电了,此后会根据段码数据显示相应的数字。

2.如果I/O口资源充足,也可以用一个完整I/O口来控制,以P1为例,只要将WE1--4引线分别于P1.0--3连接,在程序中只要有代码P1=0xfe,就可以点亮WE1位,同理,代码0xfd0xfb0xf7

可以分别点亮WE2,WE3,WE4位。

由于x^y有可能超出int范围,所以这个最好的方法是每次将取结果的最后三位。

#include <stdio.h>

int main()

{

    int x,y,i,r

    scanf("%d%d",&x,&y)

    x%=1000

    r = x

    for(i=1i<yi++)

    {

        r*=x

        r%=1000

    }

    printf("%d\n",r)

    return 0

}