单片机定时器应用实验用80C51内部定时器1,按方式1工作,即作为16位定时器使用,每0.05秒钟T1溢出中断一次.P1

4个回答

  • 完全一样的题目呀,真幸运,看我的吧(我的是8052的,没关系的):

    汇编程序:

    S1EQU 30H

    S2EQU 31H

    ORG 0000H

    AJMP MAIN

    ORG 001BH

    AJMP INTT1

    ORG 0100H

    MAIN:ANL TMOD,#0FH

    ORL TMOD,#10H

    MOV TH1,#3CH

    MOV TL1,#0B0H

    SETB EA

    SETB ET1

    SETB TR1

    MOV DPTR,#TABLE

    MOV S1,#00H

    MOV S2,#00H

    LP:MOV A,S2

    MOVC A,@A+DPTR

    MOV P1,A

    AJMP LP

    INTT1: PUSH ACC

    INC S1

    MOV A,S1

    CJNE A,#20,NEXTT1

    MOV S1,#00H

    INC S2

    ANL S2,#07H

    NEXTT1: POP ACC

    RETI

    TABLE: DB 05H,0AH,50H,0A0H,55H,0AAH,0FFH,00H

    C语言程序:

    #include

    unsigned char s1=0,s2=0;

    unsigned char code table[]=

    {

    0x05,0x0A,0x50,0xA0,0x55,0xAA,0xFF,0x00

    };

    void main()

    {

    TMOD=(TMOD&0X0F)|0X10;

    TH1=0X3C;

    TL1=0XB0;

    EA=1;

    ET1=1;

    TR1=1;

    while(1)

    {

    P1=table[s2];

    }

    }

    void t1(void) interrupt 3 using 0

    {

    s1++;

    if(s1==20)

    {

    s1=0;

    s2++;

    s2=s2&0x07;

    }

    }