xiasing 发表于 2023-11-28 21:29:27

STC8H8k64U 定时中的 IE2 问题

定时器初始化函数如下


void timer_init()//定时器初始化程序,开启5个定时器,一般在主程序的void main()后while(1)前要调用
{
        AUXR=0xD4;//=1101 0100=T0/T1选用1T模式,T2启动,   T2选用1T模式,
                      /*AUXR=T0x12 T1x12 U_M0x6 T2R   T2_C/T T2x12 EXTRAM S1ST2        */
       TMOD=0X20; //定时器1使用了模式2(8位自动重载),定时器0使用模式0(16位自动重载);


        TH0=TimerSetH0;//定时器0装初值 1ms定时
        TL0=TimerSetL0;//
        ET0=1;   //定时器0中断允许   
        TR0=1;   //启动定时器0

        TH1=TimerSetH1; //定时器1装初值 10us定时,用于产生50KHz方波
        TL1=TimerSetL1; //   
        ET1=1;   //定时器1中断允许
        TR1=1;   //启动定时器1

        IE2 =0xE4; //=1110 0100=T4/T3/T2定时中断允许
        /*IE2=ETKSU ET4 ET3 ES4ES3 ET2 ESPI ES2                USB模式下载时,其中ETKSU触摸按键中断允许 必须=1???   */
        /*      0   1   1   0    0   1   0    0   */
        T2H=0xD4;          //晶振22.1184MHz时0.5ms=500us
        T2L=0xCD;           //65536-500*22.1184=65536-11059=54477=0xD4CD
       
        T3H=0xEE;      //22.1184MHz时0.2ms=200us
        T3L=0xB8;       //65536-200*22.1184=65536-4424=61112=0xEEB8
               
        T4H=0xF7;      //22.1184MHz时0.1ms=100us
        T4L=0x5D;       //65536-100*22.1184=65536-2211=63325=0xF75D       
       
        T4T3M=0xAA; //1010 1010 =T4/T3启动,1T模式
        /*T4T3M=T4R T4_C/T T4x12 T4CLKO T3R T3_C/T T3x12 T4CLKO*/
        /*       1   0   1   0   1    0      1   0*/

        IPH =0x0A;//0000 1010// -PLVDH PADCH PSHPT1H PX1H PT0H PX0H
        IP=0x08;//0000 1000// -PLVDPADCPS   PT1PX1PT0PX0
       /*定时器T1为优先最高级,定时器T0为优先次高级,*/
       /*由于定时器T1用于产生方波,应为最高级,否则方波会抖动,周期不够稳定*/

        EA=1;      //开总中断
}

已加载stc_usb_hid_8h.LIB。
问题:其中的IE2 =0x64;时,即ETKSU=0; 发现不能自动下载,每次必须按P32再关电源才能下载。IE2 =0xE4;时,编译成功后 即能自动触发HID模式下载,这为什么?


乘风飞扬 发表于 2023-11-29 09:20:26

带硬件USB模块的芯片,IE2最高位是EUSB(USB中断使能)。
带触摸按键模块的芯片,IE2最高位是ETKSU(触摸中断使能)。

xiasing 发表于 2023-11-30 12:52:01

明白了 谢谢
页: [1]
查看完整版本: STC8H8k64U 定时中的 IE2 问题