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模式下载,这为什么?
带硬件USB模块的芯片,IE2最高位是EUSB(USB中断使能)。
带触摸按键模块的芯片,IE2最高位是ETKSU(触摸中断使能)。
明白了 谢谢
页:
[1]