|
我用的是STC8G1K08-38I-SOP16單片機(jī),串口1與定時(shí)器0的初始化都是參照STC-ISP生成的,但是兩個(gè)中斷優(yōu)先級(jí)都處于最低級(jí)(PS=0;PT0=0),向屏幕發(fā)送數(shù)據(jù)并顯示所發(fā)送的數(shù)據(jù),卻沒(méi)有顯示。即使只是在主程序定時(shí)器0初始化,沒(méi)有定時(shí)器0中斷函數(shù),也會(huì)這樣。當(dāng)設(shè)置PS=1;PT0=0 或者注釋掉主程序的定時(shí)器0初始化,程序就可以正常運(yùn)行了。請(qǐng)大家?guī)兔纯?br />
- //定時(shí)器0初始化函數(shù)
- void Timer0_Init(void) //500微秒@6.000MHz
- {
- AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
- TMOD &= 0xF0; //設(shè)置定時(shí)器模式
- TL0 = 0x90; //設(shè)置定時(shí)初值
- TH0 = 0xE8; //設(shè)置定時(shí)初值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
-
- ET0 = 1;
- PT0 = 0;
- }
- //串口1初始化函數(shù)
- void Uart1_Init(void) //57600bps@6.000MHz
- {
- SCON = 0x50; //8位數(shù)據(jù),可變波特率
- AUXR |= 0x40; //定時(shí)器1時(shí)鐘為Fosc,即1T
- AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器
- TMOD &= 0x0F; //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
- TL1 = 0xE6; //設(shè)定定時(shí)初值
- TH1 = 0xFF; //設(shè)定定時(shí)初值
- ET1 = 0; //禁止定時(shí)器1中斷
- TR1 = 1; //啟動(dòng)定時(shí)器1
-
- ES = 1;
- PS = 0; //串口1 優(yōu)先級(jí) 較低
- }
- //串口1中斷
- void Uart1_Routine(void) interrupt 4
- {
- if(TI==1)
- {
- TI = 0;
- }
-
- if(RI==1)
- {
- RI = 0;
- if(F_RX1_OK==0)
- {
- R_data = SBUF;
- T_data = R_data;
- F_RX1_OK = 1;
- }
- }
- }
- void main(void)
- {
- EA = 1;
- P1M0 |= 0x40;
- P1M1 = 0;
- Timer0_Init();
- Uart1_Init();
- Light = 1;
- while(1)
- {
- if(F_RX1_OK==1)
- {
- SBUF = T_data;
- F_RX1_OK = 0;
- }
- }
- }
復(fù)制代碼
|
|