核心問題是你開了定時器0中斷,但沒有T0中斷函數導致出錯
無標題.jpg (94.67 KB, 下載次數: 24)
下載附件
2023-8-15 21:31 上傳
- #include <STC8G.H>
- sbit LED=P1^6;
- unsigned char R_data;
- bit F_RX1_OK;
- bit busy;
- //定時器0初始化函數
- void Timer0_Init(void) //65毫秒@11.0592MHz
- {
- AUXR &= 0x7F; //定時器時鐘12T模式
- TMOD &= 0xF0; //設置定時器模式
- TL0 = 0x00; //設置定時初始值
- TH0 = 0x16; //設置定時初始值
- TF0 = 0; //清除TF0標志
- TR0 = 1; //定時器0開始計時
- }
- //串口1初始化函數
- void Uart1_Init(void) //57600bps@11.0592MHz
- {
- SCON = 0x50; //8位數據,可變波特率
- AUXR |= 0x40; //定時器時鐘1T模式
- AUXR &= 0xFE; //串口1選擇定時器1為波特率發生器
- TMOD &= 0x0F; //設置定時器模式
- TL1 = 0xD0; //設置定時初始值
- TH1 = 0xFF; //設置定時初始值
- ET1 = 0; //禁止定時器中斷
- TR1 = 1; //定時器1開始計時}
- }
- void main(void)
- {
- P1M0 = 0x40;
- P1M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P5M0 = 0x40;
- P5M1 = 0x00;
- Timer0_Init();
- Uart1_Init();
- EA = 1;
- ET0= 1;
- ES = 1;
- busy = 0;
- while(1)
- {
- if(F_RX1_OK==1)
- {
- F_RX1_OK = 0;
- while (busy);
- busy = 1;
- SBUF = R_data;
- }
- }
- }
- //T0中斷
- void Timer0Interrupt(void) interrupt 1
- {
- LED=~LED;
- }
- //串口1中斷
- void Uart1_Routine(void) interrupt 4
- {
- if(TI)
- {
- TI = 0;
- busy=0;
- }
- if(RI)
- {
- RI = 0;
- R_data = SBUF;
- F_RX1_OK = 1;
- }
- }
復制代碼
|